s3c2440之ADS移植keil
1:error
把原來(lái)的Init
2:error
__user_initial_stackheap
3:
把Image$$RO$$Base,
改成:
Image$$ER_ROM1$$RO$$Base,Image$$ER_ROM1$$RO$$Limit,
4:error
5:error:
6.error: A1355U: A Label was found which was in no AREA
在KEIL工程中,我使用另一個(gè)工程中正確的分散加載文件到一個(gè)新工程中,竟然就出現(xiàn)這樣的提示。
到網(wǎng)上搜索,有很多內(nèi)容是關(guān)于這個(gè)問(wèn)題的,但是卻沒(méi)有幾個(gè)很好解決問(wèn)題的。
其實(shí)出現(xiàn)這個(gè)問(wèn)題有兩種情況,一種是出現(xiàn)在.s的匯編文件中,另一種是出現(xiàn)在.scf (或者.scat)等的分散加載文件中。
原來(lái)很多人在匯編文件(多數(shù)為.s的啟動(dòng)代碼)中出現(xiàn)這個(gè)問(wèn)題的,基本上是因?yàn)槭褂脜R編的格式不對(duì),
關(guān)于這個(gè)錯(cuò)誤,ARM官網(wǎng)有相關(guān)的說(shuō)明:
A1355U: A Label was found which was in no AREA
Example:
This can occur where no white-space precedes an assembler directive.
Assembler directives must be indented with white-space, for example:
use:
not:
IF :DEF: FOO
; code
ENDIF
Symbols in the left hand column 1 are assumed to be labels, hence the error message.
意思是在編寫匯編文件時(shí),標(biāo)號(hào)要頂格寫,而其他的代碼都要用空格或者TAB鍵來(lái)使代碼進(jìn)行縮進(jìn),這樣,就不會(huì)出現(xiàn)編譯的問(wèn)題了。
如果問(wèn)題是出現(xiàn)在分散加載文件中,那么很可能你是把分散加載文件一起加入到了KEIL的工程中,類似這樣:
這時(shí)候,就可能會(huì)出現(xiàn)
error: A1355U: A Label was found which was in no AREA這樣的報(bào)錯(cuò),不管你用多么正確的SCATTER文件格式,它始終都會(huì)報(bào)錯(cuò)。為什么呢?
原來(lái)我們通常加到KEIL工程中的.c ,.s, .h等文件是供ARMCC,ARMASM等編譯器處理的,而分散加載文件 .scf ,.scat等文件是供ARMLINKER等連接器處理的,當(dāng)我們把分散加載文件加入到工程中后,KEIL會(huì)調(diào)用ARMASM編譯器將分散加載文件做為匯編文件去處理,因?yàn)榉稚⒓虞d文件本來(lái)就不是合法的匯編文件,所以在編譯的時(shí)候就出現(xiàn)了編譯錯(cuò)誤的提示。
解決方法:在工程中刪除分散加載文件,在option->linker->scatter file路徑中指定即可
評(píng)論