在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 地址重映射在ARM系統(tǒng)中的實(shí)現(xiàn)

            地址重映射在ARM系統(tǒng)中的實(shí)現(xiàn)

            作者: 時(shí)間:2013-04-12 來(lái)源:網(wǎng)絡(luò) 收藏

            2.2 系統(tǒng)啟動(dòng)過(guò)程及Remap實(shí)現(xiàn)

            系統(tǒng)的應(yīng)該在系統(tǒng)的啟動(dòng)中完成,以下是的Remap啟動(dòng)過(guò)程。

            ①系統(tǒng)特殊寄存器的設(shè)置。主要是配置如上所述的用于實(shí)現(xiàn)地址空間和芯片內(nèi)外存儲(chǔ)介質(zhì)映射的寄存器,在本系統(tǒng)中配置如下:

            SYSCFG=0x87ffff90

            EXTDBWTH=0x3001

            ROMCON0=0x01000060

            ROMCON1=0x13044060

            DRAMCON0=0x11004060

            ②初始化系統(tǒng)堆棧。在ARM7的體系結(jié)構(gòu)中共有七種工作模式,不同的模式有不販堆棧指針,互不干擾。各模式對(duì)應(yīng)于不販,至于哪些模式的堆棧需要初始化取決于用戶使用了哪些中斷,以及系統(tǒng)需要處理些異常類型。一般來(lái)說(shuō),管理者(SVC)堆棧必須設(shè)置,如果使用了IRQ中斷,則IRQ堆棧也必須設(shè)置。有一點(diǎn)需要注意的是,為保證Remap后程序運(yùn)行正常,所有堆棧應(yīng)設(shè)置在RAM的高端地址中。

            ③初始化I/O口、UART、定時(shí)器、中斷控制器以及系統(tǒng)中所用到的其它資源。在初始化異常向量表或修改異常向量表中的入口地址前,要關(guān)掉所有中斷。


            ④異常向量表的初始化。將民常中煌怛處理程序的入口地址寫(xiě)入RAM中相應(yīng)的異常向量。必須保證的是,異常向量表絕對(duì)不會(huì)被從ROM搬移到RAM中的代碼和數(shù)據(jù)所覆蓋,為此,異常向量表一般被定義在RAM中的高端地址中。

            ⑤程序代碼及數(shù)據(jù)的搬移。Remap后,RAM被映射到0x0000的地址空間,ROM則被移到高端地址上。為保證Remap后程序能夠瞠運(yùn)行,ROM中的代碼和數(shù)據(jù)必須地址不變地被移到RAM中。這是Remap成功的關(guān)鍵。兩種途徑可以實(shí)現(xiàn)搬移。

            一種是不管實(shí)際的代碼空間有多大,直接將ROM地址空間整個(gè)搬移到RAM中。當(dāng)然,這種方法并不適合在真正的啟動(dòng)代碼中使用,但在做初步的Remap測(cè)試時(shí),可以用來(lái)檢驗(yàn)堆棧及的設(shè)置是否合理。

            另一種方法較復(fù)雜,它使用了SDT鏈接器ARMLink產(chǎn)生的定位信息,僅把RO風(fēng)吹草動(dòng)的有效代碼和數(shù)據(jù)段到RAM中。ARMLink將編譯后的程序鏈接成ELF文件。映像文件內(nèi)部共有三種輸出段:RO段、RW段和ZI段。這三種輸出段分別包含了只讀代碼及包含在代碼段中的少量數(shù)據(jù)、可讀寫(xiě)的數(shù)據(jù)、初始化為0的數(shù)據(jù),ARMLink同時(shí)還產(chǎn)生了這三種輸出段的起始和終止定位信息:Image$$RO$$Base、Image$$RO$$Limit、Image$$RW$$Base、Image$$Limit、Image$$Linit和Image$$ZI$$Limit??梢栽诔绦蛑惺褂眠@些定位信息。將ROM中的代碼和數(shù)據(jù)搬移到RAM中,其實(shí)現(xiàn)代碼如下:

            數(shù)據(jù)定義:

            BaseOfROM DCD Image$$RO$$Base

            TopOfROM DCD Image$$RO$$Limit

            BaseOfBSS DCD Image$$RW$$Base

            BaseOfZero DCD Image$$ZI$$Base

            EndOfBSS DCD Image$$ZI$$Limit

            源程序:

            ;將ROM中的程序搬移到RAM中,重映射后的地址不變

            adr r0,ResetEntry ;ROM中程序起始地址

            mov r3,#(RamBaseAddr16) ;RamBaseAddr=0x100

            Idr r1,BaseOfROM

            Idr r2,TopOfROM

            Add r1,r1,r3

            Add r2,r2,r3

            0

            Idmia r0!,{r4-r11}

            Stmia r1!,{r4-r11}

            Cmp r1,r2

            Bcc%B0

            ;將RW段中預(yù)初始化的變量搬移到RAM中

            sub r1,r1,r2

            sub r0,r0,r1 ;將r0指向RO段的結(jié)束,即RW段的開(kāi)始

            ldr r1,BaseOfBSS

            Idr r2,BaseOfZero

            Add r1,r1,3

            Add r2,r2,r3

            1 ;基于局部標(biāo)號(hào)的相對(duì)跳轉(zhuǎn),PC+偏移地址,產(chǎn)生與位置無(wú)關(guān)的代碼

            cmp r1,r2

            ldrcc r4,[r0],#4

            strcc r4,[r1],#4

            bcc %B1



            評(píng)論


            相關(guān)推薦

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

            關(guān)閉