s3c2440之ADS移植keil
1:error
把原來的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工程中,我使用另一個工程中正確的分散加載文件到一個新工程中,竟然就出現(xiàn)這樣的提示。
到網(wǎng)上搜索,有很多內(nèi)容是關(guān)于這個問題的,但是卻沒有幾個很好解決問題的。
其實出現(xiàn)這個問題有兩種情況,一種是出現(xiàn)在.s的匯編文件中,另一種是出現(xiàn)在.scf (或者.scat)等的分散加載文件中。
原來很多人在匯編文件(多數(shù)為.s的啟動代碼)中出現(xiàn)這個問題的,基本上是因為使用匯編的格式不對,
關(guān)于這個錯誤,ARM官網(wǎng)有相關(guān)的說明:
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.
意思是在編寫匯編文件時,標號要頂格寫,而其他的代碼都要用空格或者TAB鍵來使代碼進行縮進,這樣,就不會出現(xiàn)編譯的問題了。
如果問題是出現(xiàn)在分散加載文件中,那么很可能你是把分散加載文件一起加入到了KEIL的工程中,類似這樣:
這時候,就可能會出現(xiàn)
error: A1355U: A Label was found which was in no AREA這樣的報錯,不管你用多么正確的SCATTER文件格式,它始終都會報錯。為什么呢?
原來我們通常加到KEIL工程中的.c ,.s, .h等文件是供ARMCC,ARMASM等編譯器處理的,而分散加載文件 .scf ,.scat等文件是供ARMLINKER等連接器處理的,當我們把分散加載文件加入到工程中后,KEIL會調(diào)用ARMASM編譯器將分散加載文件做為匯編文件去處理,因為分散加載文件本來就不是合法的匯編文件,所以在編譯的時候就出現(xiàn)了編譯錯誤的提示。
解決方法:在工程中刪除分散加載文件,在option->linker->scatter file路徑中指定即可
評論