出现这个问题的原因主要有MDK的安装路径为中文,或电脑的用户名为中文
通过【此电脑】-【属性】-【高级系统设置】-【环境变量】
发现用户变量中出现中文字体
解决方案:找到变量 TEMP 和 TMP,将变量值中的“%USERPROFILE%”使用“C:\user\default”代替,重启电脑,再次打开工程,就可编译成功了!!
原因分析:在安装软件时,这里出现了中文
已经下载好对应型号的CH340驱动,仍然没有显示出串口
解决方法:通过【管理员权限】安装驱动,即可解决!
3、串口配置波特率与实际波特率不一致
现象:,软件配置为115200,同时串口调试助手设置为115200,此时接收信息为乱码
通过不断改波特率,最终38400显示正常
原因:排除硬件的问题,一般是时钟配置问题。那么就从从串口的时钟源入手。
解决方法:定位到stm32f10x.h,其中HSE(外部高速晶振)的值需要根据外部实际晶振的值进行更改,将HSE_VALUE的值改为8000000,即可解决问题
4、移植正点原子例程的FATFS文件操作系统时,遇到的芯片RAM或ROM的空间不足
首先第一种方法:点击魔术棒->点击target,适当增加方框中的RAM,ROM的大小
第二种方法:配置优化等级:点击魔术棒->点击C++ (优化等级越高,程序优化的就越多)
但是以上2种方法治标不治本,最根本的解决方法是找出哪个文件占用ROM/RAM的多少,进而根据有没有用进行删减优化代码
程序编译后,打开.map文件查看
简单的说:map文件是通过编译器编译之后,集程序、数据及IO空间的一种映射文件。
很多技术牛逼的工程师在遇到内存越界,或溢出的情况,首先想到的就是分析map文件。通过map文件可以知道函数大小,入口地址等一些重要信息。
我们在Keil中最常见的就是在编译之后,编译窗口会显示类似如下一段关于程序和数据大小的信息
错误:#268:声明可能不会出现在可执行语句块后“ 即变量应在主函数开头声明,不能出现在可执行语句后面。