一、代码及进入调试之前相关错误及解决
1.1 未定义错误(identifier "XXXX" is undefined)
出现此类错误主要有以下几方面的原因及解决办法如下:
未包含相关函数的头文件,添加对应头文件即可。
变量的使用在变量定义之前,在C语言中,编译是从上到下进行的,故而无法找到变量定义,从而报错,因此在编程之时需要注意,不要把程序调用的内容放在定义之前。
引入头文件错误、未在keil工程中添加头文件路径,导致在编译的时候找不到对应的头文件。
1.2 无法下载程序,识别不到目标板
出现此类错误主要有以下几方面的原因及解决办法如下:
当下载程序失败可从以下几个方面进行查找,通过此电脑右键 -> 管理 -> 查看是否存在下载器相关的设备,如:AT_LINK,ST_LINK。若没有则需要安装相应调试器版本的驱动。
检查调试器和单片机下载口的接线。
检查单片机供电和开发板本身。
选择正确的下载器类型,如:CMSIS_DAP
1.3 keil报错last line of file ends without a newline
打开错误提示中出现的文件,将光标放置在文章最后,点击回车即可,可以多点几下。避免此类错误可以在编写.c和.h文件时直接在文件末尾添加几个空行。
1.4 变量重复定义
编译时出现变量在2个或多个文件中重复定义有两个原因,一是该变量确实重复定义了,二是头文件重复包含。针对此类原因对代码进行检查即可。PS:在编程时一定注意头文件的包含,养成良好的编程习惯!!!
1.5 keil报错:function "xxx" was referenced but not defined
出现此类问题多是头文件或源文件中“xxx”变量定义为静态变量,只要去掉变量定义时的static即可。
1.6 Error:L6406E:No space in execution regions...
出现此类问题的原因是程序大小或数据大小超出分配内存空间导致的,可重新分配内存空间或优化代码。还有一种可能是未激活keil导致的,注册激活keil即可。
keil破解激活可参考此篇文章:Keil5最新注册机到2032_keil5注册机-CSDN博客
二、调试相关
2.1 退出调试,软件卡死
此问题主要针对5.38之后的版本,在此之前的版本不会出现此类现象。此问题是keil的软件本身的BUG导致。只能待官方解决,但此BUG在我们的使用过程中是可以避免的。那我们该如何避免呢?只要在我们退出调试界面之前,取消所有断点即可,但是在实际使用中发现有时候没有断点也会出现此类现象,那是为什么呢?因为在退出之前进行过单步调试,导致虽然没有设置断点,但是软件认为存在断点导致的,保险起见,每次退出调试之前,点击菜单栏的杀死所有断点选项即可。
2.2 keil里无法进行 go to 的跳转
问题:no browse information available in’工程目录’ check-[target-options][output][browse information] then rebuild the target!
解决:选中工程目录下的target1 -> 点击右键,-> option for target ‘target1’-> 在弹出的对话框中选择output选项卡 -> 勾选Browse information 选项 -> 重新编译工程即可
2.3 keil无法跳转到函数和变量定义
问题:无法跳转到定义,提示错误 “no browse info for symbol in this context“
解决:把工程移到不包含中文的路径下进行编译使用。检查编译器版本和工程版本是否一致,若不一致则在keil中选择一致的编译器版本,重新编译即可。若还不行记得勾选[Use Micro LIB]。
2.4 keil无法下载个别文件
问题:“xxx.s” could not be opened/could not load file“***.axf”
解决:上述问题出现的原因是MDK查找路径太长,我们缩短相关文件路径即可。
2.5 Debug模式,某些语句不能设置断点
解决:上述问题出现的原因是编译优化太高导致的,我们将keil的优化等级改为default或者最低即可,这样每一个运行的地方都可以打断点。
2.6 Cannot access target. Shutting down debug session.
解决方法如下:勾选target选项,工程路径不包含中文即可。
PS:本栏目及微信公众号及视频号(ID:掌芯元器)还在分享STM32、GD32、AT32、HC32、Keil、RT-Thread、CANOpen、Modbus…等更多精彩内容,如果想查看更多内容,可以关注本栏目和微信公众号及视频号。