打印
[综合信息]

华大单片机Keil MDK编译中常遇的错误和警告汇总(上篇)

[复制链接]
502|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
白虎姐|  楼主 | 2020-12-10 09:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在MDK的开发中编译的时候会遇到各种问题,本文把开发中遇到的问题及相应的解决办法做个汇总,希望对大家有帮助。

说明:此颜色显示的内容为编译器提示的错误或警告;
          此颜色显示的内容为用户程序中的内容具体的实际情况中会有不同。
更多信息咨询请联系angel.qi:13827489351(微信与手机号码同步)
1. error: #18: expected a ")"
如果是出现在c文件中, 多半是因为少了一个")",或者错误行有编译器不识别的字符;
如果出现在头文件中,错误行又是一个函数声明,多半是因为在函数声明中有编译器不认识的字符。

2.error: #20: identifier "TIM2_IRQChannel" is undefined
固件库里的库文件没有添加进工程里面,所以出现未定义的情况。TIM2_IRQChannel指定时器2的中断通道没有定义,其实在固件库对这些参数都有定义,宏定义代替了一串寄存器地址数据。需要将.C文件添加到工程文件中。
3.warning:  #1-D: last line of file ends without a newline这个是由于在main函数的“}”后,没有加回车。只要在main函数的“}”后加回车键,此警告信息即可消除。
4.error:#65:expected a ";"头文件里的结构体定义里的最后一行没有加";" 如 NB menu{..};
5.Error: L6200E: Symbol temp multiply defined (by wenshidu.o and main.o).变量赋值两次,看看是不是那个外部变量又给赋值了,main.c申明,其他.c文件对应的.h文件中用extern引用
6.warning:  #223-D: function "_NOP_" declared implicitly在使用的文件中添加extern void _NOP_();既可。
7.warning:  #1295-D: Deprecated declarationCC_XCal - give arg types没有用形参 定时时用void CC_XCal(void);即可。
8.Error: L6218E: Undefined symbol ..................... (referred from xxxxx.o).Target not created使用的函数没有被定义。一般只要添加相应的头文件即可。
9.error: #101:“.........” has already been declared in the current scope.......内容已经声明过,解决办法将#endif调整到最后!
10.error: #247: function "DelayUs" has already been defined有一个同名的 DelayUs类已经被定义过了
11.error:  #109: expression must have (pointer-to-) function type意思是表达式必须具有(指针指向)函数类型,这种情况大多是不同类型的数据定义或函数名定义重名了。
12.warning:  #61-D    warning:  #68-D:在KeilARM的LPCARM,存在(1<<31)编译警告问题main.c(174): warning:  #61-D: integer operation result is out of rangemain.c(174): warning:  #68-D: integer conversion resulted in a change of sign由于编译器默认signed int即32位有符号整数类型,而1<<31实际为0x80000000,这样就有可能改写了符号位(最高位)依此类推,(2<<30),(3<<29)...等都会出现编译警告问题.解决办法为: ((unsigned int)1<<31),((unsigned int)2<<30),...
13.warning:  #1295-D: Deprecated declaration ShowSendTime - give arg types解决方法:将void ShowSendTime()改为void ShowSendTime(void)
14.warning:  #550-D: variable "d" was set but never used描述:变量'd'定义但从未使用,或者是,虽然这个变量你使用了,但编译器认为变量d所在的语句没有意义,编译器把它优化了.解决:仔细衡量所定义的变量d是否有用,若是认定变量d所在语句有意义,那么尝试用volatile关键字修饰变量d,若是真的没有用,那么删除掉以释放可能的内存.
15.error:  #159: declaration is incompatible with previous "wr_lcd" (declared at line40)void a(void) //函数a的实体{       b(); //调用函数b}void b(void) //函数b的实体{       ...}这样如果点编译,就会产生error:  #159的错误,因为当函数a调用函数b时,发现在这之前都没有函数b的任何声明.解决方法:在函数a调用函数b之前,对函数b进行声明,如:void b(void); //对函数b进行声明void a(void) //函数a的实体{      b(); //调用函数b}void b(void) //函数b的实体{     ...}
16.error:  #70: incomplete type is not allowed描述:不允许不完整的类型。原因是数据的引入方法错误。    正确的引入结构体方法是;    1.在a.h中声明这个结构体,(结构体实体要在.h文件中)    2.在a.c中定义这个结构体类型的变量。(也可以在a.h中定义结构体变量)    3.在b.c中ertern引入这个结构体变量    当ertern一个数组时如果不定义数组大小也会出现error: #70: incomplete type is not allowed这个错误。。    正确引入数组:    ertern char a[10];
17.warning: #111-D: statement is unreachable描述:声明不可能到达.多出现在这种场合:int main(void){    ...   while(1) //无限循环,这在不使用操作系统的程序中最常见   {      ...   }   return 0; //这句声明在正常情况下不可能执行到,编译器发出警告}解决:不理会.

使用特权

评论回复
沙发
一刀一级| | 2020-12-10 10:00 | 只看该作者
厉害了

使用特权

评论回复
板凳
xuanhuanzi| | 2020-12-20 23:45 | 只看该作者
总结不错啊。

使用特权

评论回复
地板
两只袜子| | 2020-12-21 08:57 | 只看该作者
受益匪浅了

使用特权

评论回复
5
jcky001| | 2020-12-21 09:03 | 只看该作者
总结的非常不错

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

40

主题

41

帖子

0

粉丝