前言
介绍一下单片机开发过程常见编译报错及解决方法,以及软件使用问题
一、keil相关
1.1 keil报错
1.1.1 错误现象:Error[Pe140]: too many arguments in function call
解决方法:取消括号里的声明,因为与之前定义的函数不一样
1.1.2 错误现象:程序设置波特率和串口调试助手波特率设置不同才能通信
解决方法:把stm32f4xx.h中的HSE_VALUE 设根据外部实际晶振的标称值进行更改。如:
#if !defined (HSE_VALUE)
#define HSE_VALUE ((uint32_t)8400000)
#endif
1.1.3 错误现象:Error[Li005]: no definition for….
解决方法:缺少XXX定义的头文件,除了自己定义的头文件还有库文件
1.1.4 错误现象:Error[Li006]: duplicate definitions for ……(重复定义)
解决方法:去掉重复定义的部分,去掉之前删除的对应c和h文件
1.1.5 错误现象:Error[Pe065]: expected a “;”
解决方法:符号错误,比如中英文混写
1.1.6 错误现象:Error[Pe165]: too few arguments in function call
解决方法:该错误是由于调用的参数少了导致的,即使某些参数在代码中情况下无效,但也要加上去
1.1.7 错误现象:error: #165: too few arguments in function call
解决方法:原因是调用时缺少输入参数,检查原函数后添加
1.1.8 错误现象:Error: L6218E: Undefined symbol …
解决方法:提示无定义,实际上是.c源文件没有添加进项目列表
1.1.9 错误现象:error: #147-D: declaration is incompatible
解决方法:原因是同一个变量被定义成不同的数据格式,检查删除
1.1.10 错误现象:error: #268: declaration may not appear after executable statement in block
解决方法:原因是变量声明不允许出现在语句之后,将局部变量放在函数开头声明
1.2 keil报警
1.2.1 错误现象:main.c(63): warning: #1-D: last line of file ends without a newline
解决方法:在最后加一行
1.2.2 错误现象:Warning[Pe161]: unrecognized #pragma
解决方法:注释掉
1.2.3 错误现象:Warning[Pe223]: function “XXX” declared implicitly
解决方法:添加头文件,原因缺少XXX定义的头文件
1.2.4 错误现象:warning #1295-D Deprecated declaration xxxxxxx - give arg types
解决方法:其实这个警告是因为函数没有参数的话,需要定义和声明的时候添加void
1.2.5 错误现象:*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
解决方法:意思定义了一个函数,但是在main等函数中并没调用。不用管
1.2.6 错误现象:warning: #550-D: variable “temp” was set but never used
报错原因:变量’d’定义但从未使用
解决方法:删除或者加volatile关键字修饰变量
1.2.7 错误现象:warning: #177-D: variable “i” was declared but never referenced
原因:有个变量i声明了但没有使用
解决方法:删除或者加__attribute__((unused))来表示这个变量可能会没有使用到
1.2.8 错误现象:warning: #1295-D: Deprecated declaration SiicRbyte - give arg types
警告原因:函数声明没有参数
解决方法:需要定义和声明的时候添加void
1.2.9 错误现象:warning: #186-D: pointless comparison of unsigned integer with zero
原因:无符号整数与零的无意义比较
解决方法:去掉多余部分
1.3 keil使用问题
1.3.1 FCARM - Output Name not specified, please check 'Options for Target - Utilities
原因:添加文件时,C文件变成Image文件
解决方法:
方式一:在Options里改回去
方法二:在Manage里添加文件选择Add Files
1.3.2 keil中go to definition跳转browser窗口
原因:变量或函数被重复定义,导致隐式调用
解决方法:
方式一:将browser窗口上拉,一个个变量寻找
方式二:取消或者减少用volatile和typedef声明的变量,并将头文件直接添加进来
1.3.3 STLINK烧写提示:Not a genuine ST Device! Abort connection
解决办法:进入Target–Debug–Settings–Pack,取消Enable
二、IAR相关
2.2 IAR报警
2.2.1 错误现象:Warning[Pe550]: variable “mbox” was set but never used
解决方法:原因是定义了无效的变量,在变量前加上volatile或者__IO,或者右击Option——C/C++Compiler——Optimizations——Level选择Medium(中等优化)
2.3 IAR使用问题
2.3.1 无法go to definition
解决方法:
①首先取消中文路径
②重新编译,下面会出现一个绿色或者红色的进度条,编译完成会消失,消失之前无法使用
③在代码界面右击->Options->Project,取消勾选Generate browse informations确定后编译,然后再进来勾选Generate browse informations确定在编译
三、STVD使用问题
3.1 STVD无法go to
解决方法:去掉中文路径
3.2 编译时出现“Error creating process for executable cxstm8”
解决方法:
1)先安装软件: cxstm8_32k软件来安装。第一步:先点击截图里面的第一个文件cxstm8_32k.exe安装,安装过程中,会有很多的提示,直接NEXT。点击第二个文件CXSTM8_32k_patch.exe,找到刚才cxstm8_32k.exe的安装路径。点击启动应用按钮,即完成安装。
安装链接
2)再来启动STVD软件,点击project项目中的settings-General如下截图所示:
3.3 can’t openfile crtsi0.sm8
用STVD+COSMIC编译工程时出现以下错误(加载的别人的工程时):
#error clnk Debug\demo.lkf:60 can’t openfile libis0.sm8
解决方法:
打开STVD软件,选择Tools-> Options -> Directories -> Show Directories for选择:Libraryfiles 将D:\program files(x86)\COSMIC\CXSTM8_32K\Lib添加进去,如安装在其它目录,添加相应的目录即可。
3.4 STVD无法find in file
解决方法:
①在Option-Directories添加路径
②在Find in file里勾选Look inproject folders
3.5 STVD没有生成文件
解决方法:Settings–Post-Build里Commands里添加(上一行末尾回车可以进入下一行):
①生成.s19文件:
chex -o $(OutputPath)$(TargetSName).s19 $(OutputPath)$(TargetSName).sm8
②生成.hex文件:文章来源:https://www.toymoban.com/news/detail-755197.html
chex -fi -o $(OutputPath)$(TargetSName).hex $(OutputPath)$(TargetSName).sm8
文章来源地址https://www.toymoban.com/news/detail-755197.html
到了这里,关于单片机软件编译问题汇总的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!