日本a√视频在线,久久青青亚洲国产,亚洲一区欧美二区,免费g片在线观看网站

        <style id="k3y6c"><u id="k3y6c"></u></style>
        <s id="k3y6c"></s>
        <mark id="k3y6c"></mark>
          
          

          <mark id="k3y6c"></mark>

          新聞中心

          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ò) 收藏

          ;接著把ZI段搬移到RAM中,并其將初始化為0

          mov r0,#0

          Idr r2,EndOfBSS

          Add r2,r2,r3

          2

          cmp r1,2

          strcc r0,[r1],#4

          bcc%B2

          ⑥地址的重新映射。中的Remap過(guò)程其實(shí)很簡(jiǎn)單,只需重新設(shè)置ROMCON0~ROMCON5和DRAMCON0~DRAMCON3。在本系統(tǒng)中只需重新設(shè)置ROMCON0和DRAMCON0。

          源代碼:

          ;/*內(nèi)存控制寄存器重新設(shè)置-存儲(chǔ)空間重新映射地址空間*/

          EXPORT RemapMemory

          RemapMemory

          mov r12,r14

          adr r0,RemapMem

          ldmia r0,{r1-r11}

          ldr r0,=ROMCON0 ;ROMCON0為Bank寄存器的起始地址

          stmia r0,{r1-r11}

          bl ExceptionTalbeInit ;中斷向量表重新初始化

          mov pc,r12

          RemapMem

          DCD 11040060 ;/*ROMCON0 0x1000000~0x1100000*/

          DCD 10000398 ;/*DRACON0 0x0~0x1000000*/

          ⑦進(jìn)入C代碼空間,開(kāi)始主程序的運(yùn)行。此時(shí)代碼應(yīng)該運(yùn)行于RAM中。


          上面的步驟可以根據(jù)實(shí)際需要進(jìn)行適當(dāng)?shù)奶砑踊騽h節(jié)。值得注意的是:匯編生成的代碼應(yīng)該是與位置無(wú)關(guān)的代碼,即代碼在運(yùn)行期間可以被映射到不同的地址空間,其中的跳轉(zhuǎn)指令都是基于PC寄存器的相對(duì)跳轉(zhuǎn)指令?;赑C的標(biāo)號(hào)是位于目標(biāo)指令前或者程序中數(shù)據(jù)定義偽操作前的標(biāo)號(hào),這種符號(hào)在匯編時(shí)將被處理成PC值加上或減去一個(gè)數(shù)字常量。

          3 的處理

          在Remap的啟動(dòng)代碼中,需要特別注意的是的處理。在中,的入口地址是固定的,按表1次序排列。

          表1

          異常類(lèi)型工作模式正常地址
          復(fù)位管理0x00000000
          未定義指令未定義0x00000004
          軟件中斷(SWI)管理0x00000008
          預(yù)取中止中止0x0000000
          數(shù)據(jù)中止中止0x00000010
          預(yù)留-0x00000014
          IRQ(中斷)IRQ0x00000018
          FIQ(快速中斷)FIQ0x0000001

          地址重新映射之后,入口地址被映射到RAM中,中斷處理代碼也被搬移到RAM地址空是。此時(shí),中斷響應(yīng)和中斷處理的速度都將大大加快,這將有利于提高整個(gè)系統(tǒng)的實(shí)時(shí)性。異常中斷向量表的設(shè)計(jì)結(jié)構(gòu)如圖3所示。

          下面是各部分的源代碼(以IRQ異常中斷為例)。

          異常向量表的定義:(系統(tǒng)初始化時(shí),將異常處理代碼入口地址寫(xiě)入異常中的向量表)

          _RAM_END_ADDR EQU 0x01000000 ;重映射后RAM的終止地址

          MAP (_RAM_END_ADDR-0x100)

          SYS_RST_VECTOR # 4

          UDF_INS_VECTOR # 4

          SWI_SVC_VECTOR # 4

          INS_ABT_VECTOR # 4

          DAT_ABT_VECTOR # 4

          RESERVED_VECTOR # 4

          IRQ_SVC_VECTOR # 4

          FIQ_SVC_VECTOR # 4

          異常初始化代碼:

          b IRQ_SVC_HANDLER ;0x18

          IRQ_SVC_HANDLER

          SUB sp,sp,#4 ;滿遞減堆棧

          STMFD sp!,{r0}

          LDR r0,=IRQ_SVC_VECTOR ;讀取中斷向量,

          ;IRQ_SVC_VECTOR=SystemrqHandle

          LDR r0,[r0]

          STR r0,[sp,#4]

          LDMFD sp!,{r0,pc};跳轉(zhuǎn)到異常中斷處理代碼入口

          異常處理入口代碼:

          SystemIrqHandler

          IMPORT ISR_IrqHandler

          STMFD sp!,{r0-r12,lr}

          BL ISR_IrqHandler ;跳轉(zhuǎn)到C代碼中異常中斷處理程序ISR_IrqHandler

          LDMFD sp!,{r0-r12,lr}

          SUBS pc,lr,#4

          在如上的結(jié)構(gòu)中,不管系統(tǒng)是否進(jìn)行了地址的重映射,異常中斷向量都可以在運(yùn)行時(shí)動(dòng)態(tài)改變,大大提高了中斷處理中的靈活性。中斷向量可以在運(yùn)行時(shí)指向不同的異常處理代碼入口。

          結(jié)語(yǔ)

          面對(duì)實(shí)時(shí)性要求越來(lái)越高的各種應(yīng)用,不管應(yīng)用中有沒(méi)有嵌入式操作系統(tǒng),Remap都已經(jīng)成為啟動(dòng)代碼中必不可少的一部分。Remap的實(shí)現(xiàn)對(duì)于操作系統(tǒng)的移植也有重要的意義。Remap決定了系統(tǒng)啟動(dòng)的效率,并對(duì)整個(gè)系統(tǒng)的實(shí)時(shí)性和穩(wěn)定性產(chǎn)生很大影響。因而,對(duì)Remap過(guò)程的理解和設(shè)計(jì),對(duì)于那些嵌入式系統(tǒng)的開(kāi)發(fā)人員來(lái)說(shuō)是非常重要的,它從一開(kāi)始就決定了整個(gè)開(kāi)發(fā)過(guò)程的最終成敗。


          上一頁(yè) 1 2 3 下一頁(yè)

          評(píng)論


          相關(guān)推薦

          技術(shù)專(zhuān)區(qū)

          關(guān)閉