新聞中心

s3c2440之ADS移植keil

作者: 時(shí)間:2016-11-21 來(lái)源:網(wǎng)絡(luò) 收藏
最近把ADS1.2工程轉(zhuǎn)到MDK4.03出現(xiàn)一些error,羅列了可能出現(xiàn)的error,并給予相關(guān)的辦法,讓大家在以后的轉(zhuǎn)換中盡快搞定

1:error:Nosectionmatchesselector–nosectiontobeFIRST/LAST.
把原來(lái)的Init代碼段名修改成RESET:
;AREAInit,CODE,READONLY
AREARESET,CODE,READONLY

2:errorUndefinedsymbolMain(referredfrom2440init.o).
error:scatter-loadfiledeclaresnoheaporstackregionsand__user_initial_stackheapisnotdefined
一般完成上一步修改就不會(huì)出現(xiàn)這個(gè)error;

如果代碼中使用了main則加入部分代碼
EXPORT__user_initial_stackheap
__user_initial_stackheap

LDRR0,=Heap_Mem
LDRR1,=(Stack_Mem+USR_Stack_Size)
LDRR2,=(Heap_Mem+Heap_Size)
LDRR3,=Stack_Mem
BXLR


3:UndefinedsymbolImage$$RW$$Limit(referredfrom*.o)
UndefinedsymbolIm.............

把Image$$RO$$Base,Image$$RO$$Limit,Image$$RW$$Base,Image$$ZI$$Base,Image$$ZI$$Limit
改成:
Image$$ER_ROM1$$RO$$Base,Image$$ER_ROM1$$RO$$Limit,Image$$RW_RAM1$$RW$$Base,Image$$RW_RAM1$$ZI$$Base,Image$$RW_RAM1$$ZI$$Limit

4:errorcontainsinvalidcallfrom~PRES8functiontoREQ8function*
匯編文件的開頭,添加“PRESERVE8”指令。


5:error:L6235E:Morethanonesectionmatchesselector-cannotallbeFIRST/LAST.
建立realview工程時(shí),不要導(dǎo)入realview的S3C2440.s,否則當(dāng)把Init代碼段名改成RESET時(shí),會(huì)存在兩個(gè)RESET段。

本文引用地址:http://m.butianyuan.cn/article/201611/319301.htm

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:
IF :DEF: FOO
; code
ENDIF
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路徑中指定即可



關(guān)鍵詞: s3c2440ADS移植kei

評(píng)論


技術(shù)專區(qū)

關(guān)閉