|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測(cè)控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動(dòng)編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
折磨了我兩天的問(wèn)題,關(guān)于arm地址,請(qǐng)大蝦幫忙 |
| 作者:fla888 欄目:ARM技術(shù) |
下面是一段源文件init.s中的與地址重映射相關(guān)的代碼 init.s主要包含復(fù)位異常中斷處理程序, ;下面4條偽操作定義了在需要進(jìn)行rom/ram重映射的情況下,當(dāng) ; 地址重映射之后的ROM起始地址,在系統(tǒng)復(fù)位時(shí)rom起始地 ;址為0x0,接著在ROM的前幾條代碼進(jìn)行地址的重映射,將地 址設(shè)為ROM_START init.s代碼如下: ... ;這里進(jìn)行一些符號(hào)的定義,如ram的最高地址,各種處理器模式等 ROM_STATR EQU 0X04000000 INSTRUCT_2 EQU ROM_STATR+4 ;ROM中的第2條指令 ResetBase EQU 0X0B000000 ;地址重映射控制器的基地址 ClearResetMap EQU ResetBase+0X20; ENTRY IF:DEF:ROM_RAM_REMAP LDR PC,=INSTRUCT_2 ????? MOV R0,#0 ;開(kāi)始進(jìn)行重映射 LDR R1,=ClearResetMap STRB R0,[R1] ENDIF ... ;這里開(kāi)始復(fù)位異常中斷處理程序 (***init.o這個(gè)模塊在連接時(shí)被指定為rom中的first段***) 在以上的代碼中,我標(biāo)了問(wèn)號(hào)的那行有什么意義?? 它只是跳轉(zhuǎn)帶到rom中的第2條指令去執(zhí)行~就是說(shuō)它跳轉(zhuǎn)到MOV R0,#0 去執(zhí)行,這不是多此一舉嗎,直接把MOV R0,#0放到第一條不就開(kāi)始了重映射的處理過(guò)程了嗎?。 一般來(lái)說(shuō)異常中斷向量表是被固化在rom的0地址處的,可是此時(shí)rom的0地址處 明顯不是異常中斷向量表,而是一段實(shí)現(xiàn)重映射的代碼,那么復(fù)位異常在這里豈不是沒(méi)有通過(guò)異常中斷向量表去進(jìn)入嗎? 這兩個(gè)問(wèn)題我兩天了都沒(méi)想通,學(xué)arm不久,到這里實(shí)在看不下去了,搞的這兩天心情都不好了,請(qǐng)大蝦們能仔細(xì)看看我的問(wèn)題,不吝指教,先謝了。 |
| 2樓: | >>參與討論 |
| 作者: aoshi 于 2005/10/13 17:48:00 發(fā)布:
個(gè)人理解 ROM_STATR EQU 0X04000000 INSTRUCT_2 EQU ROM_STATR+4 ;ROM中的第2條指令 IF:DEF:ROM_RAM_REMAP // 編譯的時(shí)候根據(jù)是否定義remap編譯這段 LDR PC,=INSTRUCT_2 ????? 所以我覺(jué)得是為了remap用的,假設(shè)你定義的裝載地址不是0,或者其他什么條件 |
|
| 3樓: | >>參與討論 |
| 作者: fla888 于 2005/10/13 19:42:00 發(fā)布:
INSTRUCT_2 EQU ROM_STATR+4 并不是燒寫(xiě)之后rom中的第2條指令啊 INSTRUCT_2 EQU ROM_STATR+4 并不是燒寫(xiě)之后rom中的第2條指令啊 只讀的代碼段會(huì)放在數(shù)據(jù)的前面~所以第2條指令應(yīng)該是MOV R0,#0吧 可是我不曉得為什么要調(diào)用LDR PC,=INSTRUCT_2,還有,在還沒(méi)進(jìn)行完重映射的時(shí)候去使用0x04000000地址得到的是什么? rom此時(shí)不是被映射到0x0了嗎 |
|
| 4樓: | >>參與討論 |
| 作者: gdhyhgq 于 2005/11/17 23:26:00 發(fā)布:
回復(fù)主題:折磨了我兩天的問(wèn)題,關(guān)于arm地址,請(qǐng)大蝦幫忙 復(fù)位時(shí)有兩個(gè)地址0x00, 0x400000映射到rom的首單元, LDR PC,=INSTRUCT_2 執(zhí)行時(shí),MOV R0,#0已進(jìn)入CPU, PC = 0x08; LDR PC,=INSTRUCT_2 執(zhí)行后,PC = 0x400000 + 4; 原先進(jìn)來(lái)的的MOV R0,#0被丟棄,根據(jù)當(dāng)前PC直,MOV R0,#0又重新進(jìn)來(lái),之后就往下執(zhí)行,0x00被映射到RAM, 現(xiàn)在只剩下0x400000映射到rom。 STRB R0,[R1] ;; 這里必有一段代碼將異常中段表從ROM中copy到RAM的0x00處。此時(shí)0x00已經(jīng)映射到ram。 ENDIF 如果沒(méi)有定義ROM_RAM_REMAP, 則 IF:DEF:ROM_RAM_REMAP 。。。。。。 ENDIF 這段重映射代碼沒(méi)有,則異常中段表就位于ROM的0x00處。此時(shí)0x00是映射到rom的。 |
|
| 5樓: | >>參與討論 |
| 作者: gdhyhgq 于 2005/11/17 23:32:00 發(fā)布:
回復(fù)主題:折磨了我兩天的問(wèn)題,關(guān)于arm地址,請(qǐng)大蝦幫忙 無(wú)論如何,異常中段表都會(huì)在0x00處。 |
|
| 免費(fèi)注冊(cè)為維庫(kù)電子開(kāi)發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號(hào) |