免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
ARM的存儲(chǔ)器映射與存儲(chǔ)器重映射
ARM的存儲(chǔ)器映射與存儲(chǔ)器重映射
 

arm處理器本身所產(chǎn)生的地址為虛擬地址,每一個(gè)arm芯片內(nèi)都有存儲(chǔ)器,而這個(gè)芯片內(nèi)的存儲(chǔ)器的地址為物理地址。我們寫程序的目的是為了利用芯片內(nèi)的存儲(chǔ)器,因此我們要知道存儲(chǔ)器的地址,即物理地址,所以虛擬地址和物理地址之間必然存在一定的轉(zhuǎn)換關(guān)系,這就是映射。把虛擬地址按照某種規(guī)則轉(zhuǎn)換成物理地址的方法就為存儲(chǔ)器映射。物理地址表示了被訪問(wèn)的存儲(chǔ)器的位置。存儲(chǔ)器映射有兩種映射規(guī)則--大端映射和小端映射。   

存儲(chǔ)器映射是指把芯片中或芯片外的FLASH,RAM,外設(shè),BOOTBLOCK等進(jìn)行統(tǒng)一編址。即用地址來(lái)表示對(duì)象。這個(gè)地址絕大多數(shù)是由廠家規(guī)定好的,用戶只能用而不能改。用戶只能在掛外部RAMFLASH的情況下可進(jìn)行自定義。

ARM7TDMI的存儲(chǔ)器映射可以有0X00000000~0XFFFFFFFF的空間,即4G的映射空間,但所有器件加起來(lái)肯定是填不滿的。

一般來(lái)說(shuō), 0X00000000依次開始存放FLASH——0X00000000,SRAM——0X40000000,BOOTBLOCK,外部存儲(chǔ)器 0X80000000,VPB(低速外設(shè)地址,如GPIO,UART——0XE0000000,AHB(高速外設(shè):向量中斷控制器,外部存儲(chǔ)器控制器) ——0XFFFFFFFF回頭。他們都是從固定位置開始編址的,而占用空間又不大,如AHB只占2MB,所以從中間有很大部分是空白區(qū)域,用戶若使用這些空白區(qū)域,或者定義野指針,就可能出現(xiàn)取指令中止或者取數(shù)據(jù)中止。

由于系統(tǒng)在上電復(fù)位時(shí)要從0X00000000 開始運(yùn)行,而第一要運(yùn)行的就是廠家固化在片子里的BOOTBLOCK,這是判斷運(yùn)行哪個(gè)存儲(chǔ)器上的程序,檢查用戶代碼是否有效,判斷芯片是否加密,芯片是否IAP(在應(yīng)用編程),芯片是否ISP(在系統(tǒng)編程),所以這個(gè)BOOTBLOCK要首先執(zhí)行。而芯片中的BOOTBLOCK不能放在FLASH的頭部,因?yàn)槟且娣庞脩舻漠惓O蛄勘淼?,以便在運(yùn)行、中斷時(shí)跳到這來(lái)找入口,所以BOOTBLOCK只能放在FLSAH尾部才能好找到,呵呵。而ARM7的各芯片的FLASH大小又不一致,廠家為了BOOTBLOCK在芯片中的位置固定,就在編址的2G靠前編址的位置虛擬劃分一個(gè)區(qū)域作為BOOTBLOCK 區(qū)域,這就是重映射,這樣訪問(wèn)<2G<0X80000000的位置時(shí),就可以訪問(wèn)到在FLASH尾部的BOOTBLOCK區(qū)了。

BOOTBLOCK運(yùn)行完就是要運(yùn)行用戶自己寫的啟動(dòng)代碼了,而啟動(dòng)代碼中最重要的就是異常向量表,這個(gè)表是放在FLASH的頭部首先執(zhí)行的,而異常向量表中要處理多方面的事情,包括復(fù)位、未定義指令、軟中斷、預(yù)取指中止、數(shù)據(jù)中止、IRQ(中斷) ,FIQ (快速中斷),而這個(gè)異常向量表是總表,還包括許多分散的異常向量表,比如在外部存儲(chǔ)器,BOOTBLOCK,SRAM中固化的,不可能都由用戶直接定義,所以還是需要重映射把那些異常向量表的地址映到總表中。

為存儲(chǔ)器分配地址的過(guò)程稱為存儲(chǔ)器映射,那么什么叫存儲(chǔ)器重映射呢?為了增加系統(tǒng)的靈活性,系統(tǒng)中有部分地址可以同時(shí)出現(xiàn)在不同的地址上,這就叫做存儲(chǔ)器重映射。重映射主要包括引導(dǎo)塊“Boot Block”重映射和異常向量表的重映射。

1.引導(dǎo)塊“Boot Block”及其重映射

Boot Block是芯片設(shè)計(jì)廠商在LPC2000系列ARM內(nèi)部固化的一段代碼,用戶無(wú)法對(duì)其進(jìn)行修改或者刪除。這段代碼在復(fù)位時(shí)被首先運(yùn)行,主要用來(lái)判斷運(yùn)行哪個(gè)存儲(chǔ)器上面的程序,檢查用戶代碼是否有效,判斷芯片是否被加密,系統(tǒng)的在應(yīng)用編程(IAP)以及在系統(tǒng)編程功能(ISP)等。

Boot Block存在于內(nèi)部Flash,LPC2200系列大小為8kb,它占用了用戶的Flash空間,但也有其他的LPC系列不占用FLash空間的,而部分沒有內(nèi)部Flash空間的ARM處理器仍然存在Boot Block。

重映射的原因:

Boot Block中有些程序可被用戶調(diào)用,如擦寫片內(nèi)FlashIAP代碼。為了增加用戶代碼的可移植性,所以最好把Boot Block的代碼固定的某個(gè)地址上。但由于各芯片的片內(nèi)Flash大小不盡相同,如果把Boot Block的地址安排在內(nèi)部Flash結(jié)束的位置上,那就無(wú)法固定Boot Block的地址。

為了解決上面的問(wèn)題,于是芯片廠家將Boot Block的地址重映射到片內(nèi)存儲(chǔ)器空間的最高端,即接近2Gb的地方,這樣無(wú)論片內(nèi)存儲(chǔ)器的大小如何,都不會(huì)影響Boot Block的地址。因此當(dāng)Boot Block中包含可被用戶調(diào)用的IAP操作的代碼時(shí),不用修改IAP的操作地址就可以在不同的LPC系列的ARM上運(yùn)行了。

2.異常向量表及其重映射

ARM內(nèi)核在發(fā)生異常后,會(huì)使程序跳轉(zhuǎn)到位于0x0000~0x001C的異常向量表處,再經(jīng)過(guò)向量跳轉(zhuǎn)到異常服務(wù)程序。但ARM單條指令的尋址范圍有限,無(wú)法用一條指令實(shí)現(xiàn)4G范圍的跳轉(zhuǎn),所以應(yīng)在其后面的0x0020~0x003F地址上放置跳轉(zhuǎn)目標(biāo),這樣就可以實(shí)現(xiàn)4G范圍內(nèi)的任意跳轉(zhuǎn),因此一個(gè)異常向量表實(shí)際上占用了16個(gè)字的存儲(chǔ)單元。以下為一張中斷向量表:
                    LDR     PC, ResetAddr
                    LDR     PC, UndefinedAddr
                    LDR     PC, SWI_Addr
                    LDR     PC, PrefetchAddr
                    LDR     PC, DataAbortAddr
                    DCD     0xb9205f80
                    LDR     PC, [PC, #-0xff0]
                    LDR     PC, FIQ_Addr

                ResetAddr        DCD     ResetInit
                   UndefinedAddr    DCD     Undefined
                    SWI_Addr         DCD     SoftwareInterrupt
                    PrefetchAddr     DCD     PrefetchAbort
                    DataAbortAdd     DCD     DataAbort
                    Nouse            DCD     0
                    IRQ_Addr         DCD     0
                    FIQ_Addr         DCD     FIQ_Handler

重映射的原因:

由于ARM處理器的存儲(chǔ)器結(jié)構(gòu)比較復(fù)雜,可能同時(shí)存在片內(nèi)存儲(chǔ)器和片外存儲(chǔ)器等,他們?cè)诖鎯?chǔ)器映射上的起始地址都不一樣,因此ARM內(nèi)核要訪問(wèn)的中斷向量表可能不在0x0000~0x003F地址上,因此采用了存儲(chǔ)器重映射來(lái)實(shí)現(xiàn)將存在與不同地方的中斷向量表都映射到0x0000~0x003F地址上。

注意:Boot Block 也存在中斷向量表,而且復(fù)位后這段代碼首先映射到 0x0000~0x003F地址上,也就是說(shuō)復(fù)位后首先運(yùn)行的是Boot Block程序。各個(gè)存儲(chǔ)區(qū)域的中斷向量表也不盡相同。

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
ARM 之 boot block
LPC2000系列ARM處理器重映射原理的分析與實(shí)現(xiàn)
LPC啟動(dòng)過(guò)程和重映射概念
ARM基礎(chǔ)知識(shí)連載【整理有刪除】
AT91初始化代碼手冊(cè)中文翻譯版
ARM中斷處理過(guò)程
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服