新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > s3c2440之ADS移植keil

        s3c2440之ADS移植keil

        作者: 時間:2016-11-21 來源:網絡 收藏
        最近把ADS1.2工程轉到MDK4.03出現一些error,羅列了可能出現的error,并給予相關的辦法,讓大家在以后的轉換中盡快搞定

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

        2:errorUndefinedsymbolMain(referredfrom2440init.o).
        error:scatter-loadfiledeclaresnoheaporstackregionsand__user_initial_stackheapisnotdefined
        一般完成上一步修改就不會出現這個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工程時,不要導入realview的S3C2440.s,否則當把Init代碼段名改成RESET時,會存在兩個RESET段。

        本文引用地址:http://www.104case.com/article/201611/319301.htm

        6.error: A1355U: A Label was found which was in no AREA

        在KEIL工程中,我使用另一個工程中正確的分散加載文件到一個新工程中,竟然就出現這樣的提示。

        到網上搜索,有很多內容是關于這個問題的,但是卻沒有幾個很好解決問題的。

        其實出現這個問題有兩種情況,一種是出現在.s的匯編文件中,另一種是出現在.scf (或者.scat)等的分散加載文件中。

        原來很多人在匯編文件(多數為.s的啟動代碼)中出現這個問題的,基本上是因為使用匯編的格式不對,

        關于這個錯誤,ARM官網有相關的說明:

        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.

        意思是在編寫匯編文件時,標號要頂格寫,而其他的代碼都要用空格或者TAB鍵來使代碼進行縮進,這樣,就不會出現編譯的問題了。

        如果問題是出現在分散加載文件中,那么很可能你是把分散加載文件一起加入到了KEIL的工程中,類似這樣:

        這時候,就可能會出現

        error: A1355U: A Label was found which was in no AREA這樣的報錯,不管你用多么正確的SCATTER文件格式,它始終都會報錯。為什么呢?

        原來我們通常加到KEIL工程中的.c ,.s, .h等文件是供ARMCC,ARMASM等編譯器處理的,而分散加載文件 .scf ,.scat等文件是供ARMLINKER等連接器處理的,當我們把分散加載文件加入到工程中后,KEIL會調用ARMASM編譯器將分散加載文件做為匯編文件去處理,因為分散加載文件本來就不是合法的匯編文件,所以在編譯的時候就出現了編譯錯誤的提示。

        解決方法:在工程中刪除分散加載文件,在option->linker->scatter file路徑中指定即可



        關鍵詞: s3c2440ADS移植kei

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 卢氏县| 高碑店市| 莎车县| 通州市| 彩票| 昆山市| 区。| 屏南县| 桓仁| 竹山县| 镇原县| 商都县| 普宁市| 阆中市| 庆安县| 苗栗县| 新密市| 文登市| 宜宾县| 凤凰县| 龙山县| 长寿区| 紫金县| 偃师市| 高阳县| 阿克| 丹棱县| 集安市| 铜川市| 微山县| 平遥县| 宜宾市| 油尖旺区| 呈贡县| 呼伦贝尔市| 运城市| 安陆市| 得荣县| 普定县| 台中县| 杭锦旗|