ICC错误集锦 看懂ICC AVR的报错

2019-03-24 21:08发布

新手用ICC编程的时候,经常会出现一些错误,现在将常见的错误报告整理如下。这里的一些错误是我为了展示而故意制造的,欢迎你提供你遇到的错误。排名不分先后:

一、正常编译通过
CODE:
C:iccinimakew -f main.mak
  iccavr -c -IC:iccinclude -e -DATMEGA -DATMega16 -l -g -Mavr_enhanced D:桌面实验教程LED应用霓虹灯main.c
  iccavr -o main -LC:icclib -g -ucrtatmega.o -bfunc_lit:0x54.0x4000 -dram_end:0x45f -bdata:0x60.0x45f -dhwstk_size:16 -beeprom:1.512 -fihx_coff -S2 @main.lk   -lcatmega
Device 1% full.
Done.

[Copy to clipboard]
这是我们最想看到的了,万事大吉。

二、工程中未加入.C文件
CODE:

C:iccinimakew -f main.mak
  iccavr -o main -LC:icclib -g -ucrtatmega.o -bfunc_lit:0x54.0x4000 -dram_end:0x45f -bdata:0x60.0x45f -dhwstk_size:16 -beeprom:1.512 -fihx_coff -S2 @main.lk   -lcatmega
unknown file type @main.lk, passed to linker
!ERROR unknown file type '@main.lk'
C:iccinimakew.exe: Error code 1
Done: there are error(s). Exit code: 1

[Copy to clipboard]

解决办法:将你的程序加入工程中,可以右键程序区>>ADD to project

三、程序没有后缀名,或者后缀名不正确。
CODE:

C:iccinimakew -f main.mak
C:iccinimakew.exe: 'main' is up to date
Done.

[Copy to clipboard]

这是一个很难理解的错误,它是由工程中的程序文件没有后缀名造成的。
解决办法:将原有文件移出工程,将文件的后缀名改为.C,然后再加入工程中。

四、没有main函数
CODE:
C:iccinimakew -f main.mak
  iccavr -c -IC:iccinclude -e -DATMEGA -DATMega16 -l -g -Mavr_enhanced D:桌面实验教程LED应用霓虹灯main.c
  iccavr -o main -LC:icclib -g -ucrtatmega.o -bfunc_lit:0x54.0x4000 -dram_end:0x45f -bdata:0x60.0x45f -dhwstk_size:16 -beeprom:1.512 -fihx_coff -S2 @main.lk   -lcatmega
!ERROR file 'crtatmega.o': undefined symbol '_main'
C:iccinimakew.exe: Error code 1
Done: there are error(s). Exit code: 1

[Copy to clipboard]

解决办法,编写程序主函数MAIN。

五、没有选择目标芯片出现如下错误:
CODE:
C:iccinimakew -f main.mak
  iccavr -c -IC:iccinclude -e -l -g -Wa-W D:桌面实验教程LED应用霓虹灯main.c
  iccavr -o main -LC:icclib -g -Wl-W -bfunc_lit:0.0x2000 -dram_end:0x25f -bdata:0x60.0x25f -dhwstk_size:16 -beeprom:1.512 -fihx_coff -S2 @main.lk
!E C:icclibcrtAVR.o(41): Code address 0 already contains a value
!E C:icclibcrtAVR.o(41): Code address 0x1 already contains a value
C:iccinimakew.exe: Error code 1
Done: there are error(s). Exit code: 1
[Copy to clipboard]


解决办法:project>>Options>>target>>device configuration 选择合适的芯片。

六、缺少分号
CODE:

C:iccinimakew -f main.mak
  iccavr -c -IC:iccinclude -e -DATMEGA -DATMega16 -l -g -Mavr_enhanced D:桌面实验教程LED应用霓虹灯main.c
!E D:桌面实验教程LED应用霓虹灯main.c(52): unrecognized statement
!E D:桌面实验教程LED应用霓虹灯main.c(53): syntax error; found `}' expecting `;'
!E D:桌面实验教程LED应用霓虹灯main.c(53): syntax error; found `end of input' expecting `}'
C:iccinimakew.exe: Error code 1
C:iccinimakew.exe: 'main.o' removed.
Done: there are error(s). Exit code: 1

[Copy to clipboard]

上面的报告说明了第52行缺少一个分号,预期分号的地方出现了“}”。
解决方法,在52行末尾添加分号。
类似的有:缺少}的报错 CODE:

C:iccinimakew -f main.mak
  iccavr -c -IC:iccinclude -e -DATMEGA -DATMega16 -l -g -Mavr_enhanced D:桌面实验教程LED应用霓虹灯main.c
!E D:桌面实验教程LED应用霓虹灯main.c(55): illegal statement termination
!E D:桌面实验教程LED应用霓虹灯main.c(55): skipping `void'
!W D:桌面实验教程LED应用霓虹灯main.c(55):[warning] calling function without prototype may cause errors
!E D:桌面实验教程LED应用霓虹灯main.c(56): syntax error; found `{' expecting `;'
!E D:桌面实验教程LED应用霓虹灯main.c(57): syntax error; found `end of input' expecting `}'
C:iccinimakew.exe: Error code 1
C:iccinimakew.exe: 'main.o' removed.
Done: there are error(s). Exit code: 1
[Copy to clipboard]


七:变量没有定义
CODE:

C:iccinimakew -f main.mak
  iccavr -c -IC:iccinclude -e -DATMEGA -DATMega16 -l -g -Mavr_enhanced D:桌面实验教程LED应用霓虹灯main.c
!E D:桌面实验教程LED应用霓虹灯main.c(48): undeclared identifier `i'
C:iccinimakew.exe: Error code 1
C:iccinimakew.exe: 'main.o' removed.
Done: there are error(s). Exit code: 1

[Copy to clipboard]

解决办法:在程序开始前添加变量定义,比如unsigned char i;注意,定义变量要在函数的最前面进行,及在进行计算操作之前定义所有变量。

欢迎你发布你遇到的错误和解决方法,或者你遇到的错误还没解决的。 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
8条回答
songbo
2019-03-25 05:09
value required
需要逻辑值0或非0值

Macro argument syntax error
宏参数语法错误

Macro expansion too long
宏的扩展以后太长

Mismatched number of parameters in definition
定义中参数个数不匹配

Misplaced break
此处不应出现break语句

Misplaced continue
此处不应出现continue语句

Misplaced decimal point
此处不应出现小数点

Misplaced elif directive
不应编译预处理elif

Misplaced else
此处不应出现else

Misplaced else directive
此处不应出现编译预处理else

Misplaced endif directive
此处不应出现编译预处理endif

Must be addressable
必须是可以编址的

Must take address of memory location
必须存储定位的地址

No declaration for function ``xxx``
没有函数xxx的说明

No stack
缺少堆栈

No type information
没有类型信息

Non-portable pointer assignment
不可移动的指针(地址常数)赋值

Non-portable pointer comparison
不可移动的指针(地址常数)比较

Non-portable pointer conversion
不可移动的指针(地址常数)转换

Not a valid expression format type
不合法的表达式格式

Not an allowed type
不允许使用的类型

Numeric constant too large
数值常太大

Out of memory
内存不够用

Parameter ``xxx`` is never used
能数xxx没有用到

Pointer required on left side of ->
符号->的左边必须是指针

Possible use of ``xxx`` before definition
在定义之前就使用了xxx(警告)

Possibly incorrect assignment
赋值可能不正确

Redeclaration of ``xxx``
重复定义了xxx

Redefinition of ``xxx`` is not identical
xxx的两次定义不一致

Register allocation failure
寄存器定址失败

Repeat count needs an lvalue
重复计数需要逻辑值

Size of structure or array not known
结构体或数给大小不确定

Statement missing ;
语句后缺少";"

一周热门 更多>