单片机软件编译问题汇总

本文介绍了在使用keil、IAR和STVD等工具进行单片机开发时遇到的各种编译错误和警告,包括参数错误、重复定义、未使用的变量等问题,以及软件使用上的问题,如找不到定义、无法跳转等,并提供了相应的解决方法。
摘要由CSDN通过智能技术生成

目录


前言

介绍一下单片机开发过程常见编译报错及解决方法,以及软件使用问题


一、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文件:

chex -fi -o $(OutputPath)$(TargetSName).hex $(OutputPath)$(TargetSName).sm8

在这里插入图片描述

  • 6
    点赞
  • 63
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

别问,问就是全会

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值