音影先锋亚洲天堂网|电影世界尽头的爱完整版播放|国产 熟女 91|高清无码免费观看欧美日韩|韩国一区二区三区黄色录像|美女亚洲加勒比在线|亚洲综合网 开心五月|7x成人在线入口|成人网站免费日韩毛片区|国产黄片?一级?二级?三级

登錄 免費(fèi)注冊(cè) 首頁(yè) | 行業(yè)黑名單 | 幫助
維庫(kù)電子市場(chǎng)網(wǎng)
技術(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ù)
折磨了我兩天的問(wèn)題,關(guān)于arm地址,請(qǐng)大蝦幫忙
下面是一段源文件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
個(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
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
回復(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
回復(fù)主題:折磨了我兩天的問(wèn)題,關(guān)于arm地址,請(qǐng)大蝦幫忙
無(wú)論如何,異常中段表都會(huì)在0x00處。

參與討論
昵稱:
討論內(nèi)容:
 
 
相關(guān)帖子
請(qǐng)教什么是pc/104協(xié)議?用arm體系cpu如何實(shí)現(xiàn)?
初學(xué)者系列(1)-嵌入式人才的發(fā)展方向(轉(zhuǎn)發(fā))
arm啟動(dòng)的過(guò)程
需要進(jìn)行視頻開(kāi)發(fā)的朋友注意了
ADS不支持 #pragma pack(...)??
免費(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)