ARM體系結(jié)構(gòu)中,系統(tǒng)上電或復(fù)位后,處理器將從地址0x0處取第一條指令,因此,上電的時(shí)候,地址0x0處必須是非易失性的ROM或FLASH。但是,為了加快中斷響應(yīng)速度,方便更改中斷向量表,有時(shí)需要把中斷向量表復(fù)制到RAM中去,然后把RAM重新映射到地址0x0處,這就用到了地址重映射機(jī)制。因?yàn)榈刂分赜成涫窃诔绦驁?zhí)行過程中進(jìn)行的,必須考慮程序執(zhí)行流程的連續(xù)性。
引導(dǎo)加載程序:
一個(gè)嵌入式系統(tǒng)的軟件通常可以分為3個(gè)部分:引導(dǎo)加載程序, 嵌入式操作系統(tǒng), 用戶應(yīng)用程序. 引導(dǎo)加載程序是系統(tǒng)加電后運(yùn)行的第一段軟件代碼. 簡(jiǎn)單地說, 就是在操作系統(tǒng)內(nèi)核運(yùn)行之前運(yùn)行的一段小程序(在嵌入式系統(tǒng)中通常叫做Bootloader). 通過這段小程序, 可以初始化硬件設(shè)備、建立內(nèi)存空間的映射圖, 從而將系統(tǒng)的軟硬件環(huán)境配置到一個(gè)合適的狀態(tài),以便為最終調(diào)用操作系統(tǒng)內(nèi)核設(shè)置適當(dāng)?shù)沫h(huán)境. 而在嵌入式系統(tǒng)中, 通常并沒有像PC機(jī)中BIOS那樣的固件程序(有的嵌入式CPU也會(huì)內(nèi)嵌一段短小的啟動(dòng)程序), 因此整個(gè)系統(tǒng)的加載啟動(dòng)任務(wù)就完全由Bootloader來完成. 由于每個(gè)用戶對(duì)嵌入式CPU的應(yīng)用千差萬別, 每個(gè)用戶對(duì)系統(tǒng)的啟動(dòng)有不同的要求, 所以Bootloader程序一般都由用戶根據(jù)自己的實(shí)際要求編寫.
ARM處理器的地址重映射機(jī)制可分為三種情況:1、處理器內(nèi)部有專門的寄存器完成重映射(Remap),只需將Remap寄存器相應(yīng)位置“1”,由硬件邏輯來完成地址的重新映射。2、沒有專門的Remap控制寄存器,需要重新改寫用于控制存儲(chǔ)器起始地址的塊(Bank)寄存器,來實(shí)現(xiàn)Remap。3、沒有Remap寄存器,而Bank寄存器的起始地址固定,這就需要MMU實(shí)現(xiàn)地址重映射。另外,有一些ARM處理器沒有地址重映射機(jī)制。
(第一種情況)由于處理器地址重映射機(jī)制不同,其具體實(shí)現(xiàn)方式也是不同的。AT91M55800A采用一個(gè)專用寄存器EBI_RCR(重映射控制寄存器),通過向EBI_RCR的RCB寄存器的第0位寫“1”實(shí)現(xiàn)地址重映射。系統(tǒng)復(fù)位瞬間,系統(tǒng)將FLASH地址映射在0x0的位置,而將內(nèi)部SRAM映射在0x00300000的位置。啟動(dòng)代碼需將FLASH中的中斷向量拷貝到內(nèi)部SRAM中,然后,執(zhí)行重映射命令,把內(nèi)部SRAM的地址重新映射到0x0的位置,而將FLASH的地址映射到其他位置,如0x01000000(由NCS0片選,配置EBI—CSR0寄存器)的位置。這樣便可以在內(nèi)部SRAM中0x0開始的位置修改中斷向量。同時(shí),為了保證程序執(zhí)行流程的連續(xù)性,必須調(diào)整PC指針,即調(diào)整到程序真正被連接的地方(0x01000000)去。這時(shí),程序仍在FLASH中運(yùn)行。如下所示:
(第二種情況)三星S3C4510B最大可尋址空間為64MB,它把64MB的地址空間分為10個(gè)塊,每個(gè)塊的起始地址和大小都可以通過寄存器來設(shè)置。上電時(shí)默認(rèn)FLASH映射到地址空間為0x0000,0000~0x0200,0000的位置,這樣,程序從FLASH中的啟動(dòng)代碼開始執(zhí)行。在啟動(dòng)代碼中,把SDRAM映射到地址空間的其他位置,如0x0040,0000~(0x0140,0000-1)。接著將FLASH中從0x0開始的程序一一對(duì)應(yīng)地復(fù)制到SDRAM中從0x0040,0000開始的地址空間,然后,把SDRAM映射到從0x0開始的地址空間,F(xiàn)LASH映射到其他位置,如從0x0100,0000開始的地址空間,至此,完成了地址重映射。而它的PC指針不需要調(diào)整,這時(shí)的PC指針已經(jīng)指向SDRAM中了。
開始啟動(dòng)時(shí), 存有啟動(dòng)代碼的FlashROM被映射到0x0000000地址, 系統(tǒng)從此開始運(yùn)行. 但在實(shí)際應(yīng)用中, 為提高系統(tǒng)的實(shí)時(shí)性, 加快代碼的執(zhí)行速度, 系統(tǒng)啟動(dòng)后程序往往要被搬移到存取速度要比FlashROM快得多的SDRAM中, 以此大幅提高系統(tǒng)的實(shí)時(shí)性能.又由于S3C4510B芯片中的異常中斷入口地址被固定在0x0000000開始的8個(gè)字(每個(gè)字包括4個(gè)字節(jié))中, 因而系統(tǒng)只能將存儲(chǔ)器進(jìn)行地址重映射( Remap),把SDRAM映射到0x000000地址處, 把FlashROM的地址映射到系統(tǒng)高端地址.S3C4510B硬件系統(tǒng)有4MB的FlashROM, 使用16位數(shù)據(jù)總線; 16MB的SDRAM, 使用32位數(shù)據(jù)總線. 如圖2所示, Remap前系統(tǒng)地址0x0000000~0x03FFFFF 分配給 Flash ROM, 0x0400000 ~0x13FFFFF分配給SDRAM; Remap后0x0000000~0x0FFFFFF分配給SDRAM, 0x1000000~ 0x13FFFFF分配給FlashROM。
Remap后, SDRAM被映射到0x0000000~0x0FFFFFF的地址空間, 而FlashROM則被映射到高于0x0FFFFFF的地址上. 為保證Remap后程序能夠正常運(yùn)行, 整個(gè)過程必須確保FlashROM中的代碼和數(shù)據(jù)地址不變地被移到SDRAM中.程序編譯時(shí)鏈接器ARMLink將自動(dòng)生成RO段、RW段和ZI段3種段, 同時(shí)還將產(chǎn)生這3種段的起始和終止定位信息: Image
RORO
Base、Image
RORO
Limit、Image
RW$$Base、Image$RW$Limit、Image$ZI$Base和ImageRW$$Base、Image$RW$Limit、Image$ZI$Base和Image
ZI
?Limi.t使用這些定位信息,將FlashROM中的代碼和數(shù)據(jù)搬移到SDRAM中,源程序如下:StartFlashDCD|Image?Limi.t使用這些定位信息,將FlashROM中的代碼和數(shù)據(jù)搬移到SDRAM中,源程序如下:StartFlashDCD|Image
RO$ $Base|
End_FlashDCD |Image
RO$$Limit|StartBSSDCD|ImageRO$$Limit|StartBSSDCD|Image
RW
Base|EndBSSDCD|ImageBase|EndBSSDCD|Image
RW
Limit|StartZeroDCD|ImageLimit|StartZeroDCD|Image
ZI
Base|EndZeroDCD|ImageBase|EndZeroDCD|Image
ZI$$Limit|; / /復(fù)制FlashROM中的代碼到SDRAM中/ /;
LDRr0, = Start_Flash
LDRr1, = End_Flash
LDRr2, = Start_BSS
LDRr3, = End_BSS
SUBr1, r1, r0
SUBr3, r3, r2
ADDr1, r1, r3
LDRr2, = 0x400000; / /Remap前SDRAM起始地址
COPLDRr3, [ r0], #4
STRr3, [ r2], #4
SUBSr1, r1, #4
BNECOP
LDRr0, = End_Flash
LDRr1, = Start_BSS
LDRr3, = Start_Zero
CMP r0, r1
BEQLOOP1
; / /復(fù)制RW段到SDRAM/ /
LOOPCMP r1, r3
LDRCCr2, [ r0], #4
STRCCr2, [ r1], #4
BCCLOOP
; / /復(fù)制ZI段并清0/ /
LOOP1LDRr1, =End_Zero
MOVr2, #0
LOOP2CMP r3, r1 ;
STRCCr2, [ r3], #4
BCCLOOP2
在實(shí)際應(yīng)用系統(tǒng)中, 由于FlashROM存儲(chǔ)器相對(duì)而言比較小速度慢且價(jià)格高, 為了節(jié)約成本提高運(yùn)行速度, 通常將會(huì)把應(yīng)用程序和在存儲(chǔ)器中的數(shù)據(jù)先壓縮然后再寫入FlashROM中同時(shí)將解壓縮程序也寫進(jìn)去. 當(dāng)系統(tǒng)上電啟動(dòng)后, 在搬移程序和數(shù)據(jù)時(shí)解壓程序先將被壓縮過的程序和數(shù)據(jù)解壓后再搬到SDRAM的適當(dāng)位置中. 由于壓縮解壓程序比較復(fù)雜不在這里討論。
(第三種情況)三星S3C44B0X的地址空間分成8個(gè)塊,Bank0~Bank6的起始地址固定,大小可變。Bank7雖起始地址可變,但只是為了保證與Bank6地址連續(xù),因?yàn)锽ank6、Bank7主要用于DRAM。S3C44B0X沒有提供地址重映射機(jī)制。三星S3C2410X把1GB的地址空間分為8個(gè)塊(Bank0~ Bank7),它們的起始地址固定,大小可變。S3C2410X沒有進(jìn)行地址重映射的控制寄存器,只有內(nèi)存管理單元(MMU)。MMU把物理地址空間映射到虛擬地址空間,通過這種方式可以實(shí)現(xiàn)地址重映射。
(第四種情況)Intel公司StrongRAM SA-1110和XscalePXA255微處理器存儲(chǔ)區(qū)域分成若干塊,每個(gè)塊的起始地址固定。它們都沒有地址重映射機(jī)制,但可采用存儲(chǔ)器管理單元來完成地址映像的重映射。
上一篇:關(guān)于S3C2440存儲(chǔ)器地址分配和啟動(dòng)流程分析
下一篇:SC2440虛擬地址到物理地址的轉(zhuǎn)換
推薦閱讀
史海拾趣
設(shè)計(jì)資源 培訓(xùn) 開發(fā)板 精華推薦
- 美光出貨全球首款基于 1γ(1-gamma)制程節(jié)點(diǎn)的 LPDDR5X 內(nèi)存,賦能移動(dòng) AI 應(yīng)用
- BOE(京東方)攜手AOC重磅推出首款愛瞳圓偏光電競(jìng)顯示器 樹立行業(yè)健康護(hù)眼新標(biāo)桿
- esp32 devkit v1下載marlin2.1,程序無法運(yùn)行的解決方案
- 【TVM系列八】microTVM在ESP32上調(diào)優(yōu)算子
- 驅(qū)動(dòng)算力的心臟革命:AI服務(wù)器電源三大技術(shù)躍遷與測(cè)試破局
- 恩智浦推出自主安全訪問解決方案,重新定義門禁
- Zephyr 環(huán)境搭建 - ESP32 篇
- ESP32讀取甲醛傳感器數(shù)據(jù)
- ESP32接入巴法云,開源安卓app、微信小程序控制
- ESP32單片機(jī)基礎(chǔ)知識(shí)
- TE Connectivity的智能建筑解決方案——傳感和連接,智能樓宇設(shè)計(jì)的關(guān)鍵
- 10秒鐘調(diào)查!TI 產(chǎn)品封裝你來左右!!!
- 雙旦搶樓送祝福活動(dòng)
- vishay消費(fèi)知識(shí)大闖關(guān)正式開始
- 學(xué)《TIVA C Launchpad入門課程》 曬成績(jī) 贏大禮!
- EEWorld 芯積分兌換年度回饋來襲~多種賺積分捷徑曝光+禮品兌換劇透
- 體積小、功耗低、安全性高,專用加密芯片ATSHA204 精彩專題,答題有好禮!
- 下載有好禮!羅姆帶您學(xué)習(xí)電源設(shè)計(jì)應(yīng)用小技巧(電源管理篇)
- 榮耀手機(jī)“嚇人技術(shù)”亮相 余承東:今年出貨量沖擊2億
- 中俄將投資10億美元成立聯(lián)合科創(chuàng)基金,用于關(guān)鍵領(lǐng)域新技術(shù)
- 董明珠不屈不撓的手機(jī)夢(mèng) 第三代格力手機(jī)被曝設(shè)計(jì)中
- 5G牌照來了!新入局的廣電與三大運(yùn)營(yíng)商有什么不同?
- GPU Turbo顛覆游戲體驗(yàn) 榮耀Play震撼來襲售價(jià)1999元起
- 北汽新能源聯(lián)手羅姆半導(dǎo)體,推動(dòng)SiC產(chǎn)品技術(shù)研發(fā)
- 隱藏在等離子體視線中的隱蔽紅外圖像編碼,可用于偽裝和防偽
- 電池技術(shù)革命,三星搶先申請(qǐng)石墨烯電池技術(shù)專利
- 沒有幾家車企在電子領(lǐng)域耕耘如此之深,世界上也不多見!
- 從年度發(fā)動(dòng)機(jī)評(píng)選 揭示通用未來發(fā)展趨勢(shì)
- need you help!仿真器高手請(qǐng)進(jìn)!
- 申請(qǐng)?jiān)囉脁ilinx FPGA開發(fā)板
- dsp基礎(chǔ)實(shí)驗(yàn):發(fā)光二級(jí)管的顯示 led.c
- 自已做的ULink一鏈就通了,非常開心與大家共享一下
- 各位高人,如何在電路上測(cè)流過D4的有效值電流與反向漏電流
- 2440WINCE下做用中斷做了個(gè)按鍵驅(qū)動(dòng),卻不知道在哪里加延時(shí)去抖.
- 哈哈,論壇的默認(rèn)表情變得更好玩了~~~
- 【RVB2601開發(fā)板試用】揚(yáng)聲器實(shí)驗(yàn)
- 曬曬還熱乎的獎(jiǎng)品:東芝新甲殼蟲1TB移動(dòng)硬盤
- 如果獲取Pin碼的剩余的輸入次數(shù)?