ICC錯(cuò)誤集錦,看懂ICC AVR的報(bào)錯(cuò)
新手用ICC編程的時(shí)候,經(jīng)常會(huì)出現(xiàn)一些錯(cuò)誤,現(xiàn)在將常見的錯(cuò)誤報(bào)告整理如下。這里的一些錯(cuò)誤是我為了展示而故意制造的,歡迎你提供你遇到的錯(cuò)誤。排名不分先后:
本文引用地址:http://www.ex-cimer.com/article/201610/311530.htm一、正常編譯通過
CODE:
C:iccbinimakew -f main.mak
iccavr -c -IC:iccinclude -e -DATMEGA -DATMega16 -l -g -Mavr_enhanced D:桌面實(shí)驗(yàn)教程LED應(yīng)用霓虹燈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:iccbinimakew -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:iccbinimakew.exe: Error code 1
Done: there are error(s). Exit code: 1
[Copy to clipboard]
解決辦法:將你的程序加入工程中,可以右鍵程序區(qū)>>ADD to project
三、程序沒有后綴名,或者后綴名不正確。
CODE:
C:iccbinimakew -f main.mak
C:iccbinimakew.exe: 'main' is up to date
Done.
[Copy to clipboard]
這是一個(gè)很難理解的錯(cuò)誤,它是由工程中的程序文件沒有后綴名造成的。
解決辦法:將原有文件移出工程,將文件的后綴名改為.C,然后再加入工程中。
四、沒有main函數(shù)
CODE:
C:iccbinimakew -f main.mak
iccavr -c -IC:iccinclude -e -DATMEGA -DATMega16 -l -g -Mavr_enhanced D:桌面實(shí)驗(yàn)教程LED應(yīng)用霓虹燈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:iccbinimakew.exe: Error code 1
Done: there are error(s). Exit code: 1
[Copy to clipboard]
解決辦法,編寫程序主函數(shù)MAIN。
五、沒有選擇目標(biāo)芯片出現(xiàn)如下錯(cuò)誤:
CODE:
C:iccbinimakew -f main.mak
iccavr -c -IC:iccinclude -e -l -g -Wa-W D:桌面實(shí)驗(yàn)教程LED應(yīng)用霓虹燈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:iccbinimakew.exe: Error code 1
Done: there are error(s). Exit code: 1
[Copy to clipboard]
解決辦法:project>>Options>>target>>device configuration 選擇合適的芯片。
六、缺少分號
CODE:
C:iccbinimakew -f main.mak
iccavr -c -IC:iccinclude -e -DATMEGA -DATMega16 -l -g -Mavr_enhanced D:桌面實(shí)驗(yàn)教程LED應(yīng)用霓虹燈main.c
!E D:桌面實(shí)驗(yàn)教程LED應(yīng)用霓虹燈main.c(52): unrecognized statement
!E D:桌面實(shí)驗(yàn)教程LED應(yīng)用霓虹燈main.c(53): syntax error; found `}' expecting `;'
!E D:桌面實(shí)驗(yàn)教程LED應(yīng)用霓虹燈main.c(53): syntax error; found `end of input' expecting `}'
C:iccbinimakew.exe: Error code 1
C:iccbinimakew.exe: 'main.o' removed.
Done: there are error(s). Exit code: 1
[Copy to clipboard]
上面的報(bào)告說明了第52行缺少一個(gè)分號,預(yù)期分號的地方出現(xiàn)了“}”。
解決方法,在52行末尾添加分號。
類似的有:缺少}的報(bào)錯(cuò)
CODE:
C:iccbinimakew -f main.mak
iccavr -c -IC:iccinclude -e -DATMEGA -DATMega16 -l -g -Mavr_enhanced D:桌面實(shí)驗(yàn)教程LED應(yīng)用霓虹燈main.c
!E D:桌面實(shí)驗(yàn)教程LED應(yīng)用霓虹燈main.c(55): illegal statement termination
!E D:桌面實(shí)驗(yàn)教程LED應(yīng)用霓虹燈main.c(55): skipping `void'
!W D:桌面實(shí)驗(yàn)教程LED應(yīng)用霓虹燈main.c(55):[warning] calling function without prototype may cause errors
!E D:桌面實(shí)驗(yàn)教程LED應(yīng)用霓虹燈main.c(56): syntax error; found `{' expecting `;'
!E D:桌面實(shí)驗(yàn)教程LED應(yīng)用霓虹燈main.c(57): syntax error; found `end of input' expecting `}'
C:iccbinimakew.exe: Error code 1
C:iccbinimakew.exe: 'main.o' removed.
Done: there are error(s). Exit code: 1
[Copy to clipboard]
七:變量沒有定義
CODE:
C:iccbinimakew -f main.mak
iccavr -c -IC:iccinclude -e -DATMEGA -DATMega16 -l -g -Mavr_enhanced D:桌面實(shí)驗(yàn)教程LED應(yīng)用霓虹燈main.c
!E D:桌面實(shí)驗(yàn)教程LED應(yīng)用霓虹燈main.c(48): undeclared identifier `i'
C:iccbinimakew.exe: Error code 1
C:iccbinimakew.exe: 'main.o' removed.
Done: there are error(s). Exit code: 1
[Copy to clipboard]
解決辦法:在程序開始前添加變量定義,比如unsigned char i;注意,定義變量要在函數(shù)的最前面進(jìn)行,及在進(jìn)行計(jì)算操作之前定義所有變量。
歡迎你發(fā)布你遇到的錯(cuò)誤和解決方法,或者你遇到的錯(cuò)誤還沒解決的。
八、在編譯時(shí)總是不能生成COF文件,不能進(jìn)行調(diào)試
解決辦法:在ICCAVR編譯環(huán)境中,進(jìn)入Project -> Option -> Compiler中在Output format區(qū)選COFF/HEX格式
九、請指點(diǎn)一下:
我的程序出現(xiàn)下列錯(cuò)誤提示,是不是我什么地方設(shè)置錯(cuò)了呀。
CODE:
D:iccbinimakew -f tex.mak
-lstudio -lfpavr
want size 346
lo 3910 hi 4096 size 187
!E (37): area 'text' not large enough
D:iccbinimakew.exe: Error code 1
Done: there are error(s). Exit code: 1
一點(diǎn)錯(cuò)誤那行的時(shí)候就出來一個(gè)提示框,但沒有移到某一行上去。。。。
ans1:還沒有確切的解釋,可能原因:應(yīng)該是定義的數(shù)組過大,減小數(shù)組的數(shù)量應(yīng)該可以了
ans2:這是超過編譯空間了,你可以到壓縮下代碼,project>options>compiler,選擇Enable code compression或者只有優(yōu)化代碼了
十:無意中又發(fā)現(xiàn)一個(gè):
too many arguments to `delay_1ms'
問題原因,函數(shù)的參數(shù)太多,比如上面一個(gè)定義的是delay_1ms(void),我確用了delay_1ms(1);改為delay_1ms();就好了。
十一、!ERROR can't open file 'libiccavrlibsliccatmega-m.a'
剛才問了一下人,新建一個(gè)工程,然后把所有的C文件都導(dǎo)入里面,就沒有的問題了,剩下一些語法錯(cuò)誤。
十二、ICC7 的代碼大小限制的問題,DEMO版超過4K不能編譯。
D:PROGRA~1iccv7avrbinimakew -f mytest.mak
D:PROGRA~1iccv7avrbinimakew.exe: Couldn't open mytest GetLastError() = 5
Done: there are error(s). Exit code: 1
(斑竹,我后來發(fā)現(xiàn)這好像是因?yàn)镮CC編譯生成的某些文件有錯(cuò)誤,把ICC生成的文件都刪掉,重新建立一個(gè)project,重新選擇Target,重新編譯就好了)
十三、
CODE:
iccavr -o main -LD:avricclib -g -ucrtatmega.o -bfunc_lit:0x8c.0x10000 -dram_end:0x10ff -bdata:0x100.0x10ff -dhwstk_size:16 -beeprom:1.2048 -fihx_coff -S2 @main.lk D:PROTEU~1.7PROTEU~1.7JOHUmcuallCH375HFB.A -lcatmega
Device 45% full.
warning: COFF no struct tag '_CMD_PARAM' found for symbol index 1362
Done.
一個(gè)警告,搞不太清楚,以前starnewtech說過,好像是ram不夠用了。
十四、重復(fù)定義 ,請?jiān)诎念^文件里面用這種格式。
#ifndef __config_H__
#define __config_H__ 1
//你的定義放這里。
#endif
評論