ARM處理器系統(tǒng)初始化編程注意事項(xiàng)
1)如果需要將程序從flash搬移到DRAM中運(yùn)行
在現(xiàn)代嵌入式系統(tǒng)中,由于DRAM的速度比f(wàn)lash的速度快很多,所以除了極少數(shù)對(duì)性能要求不高但對(duì)成本要求很高的系統(tǒng)把程序放在flash中并一直在flash中運(yùn)行外,大部分嵌入式系統(tǒng)都是將程序從flash芯片搬到DRAM芯片中運(yùn)行,這樣就會(huì)存在一個(gè)問(wèn)題,因?yàn)槲覀兙幾g鏈接程序都是將程序鏈接到程序最后運(yùn)行的場(chǎng)所DRAM中的地址上,但是系統(tǒng)啟動(dòng)時(shí)只能從flash中讀取指令,所以從系統(tǒng)啟動(dòng)讀取的第一條指令到進(jìn)入到DRAM運(yùn)行前的程序代碼是與地址無(wú)關(guān)的,如果要跳轉(zhuǎn)到某個(gè)標(biāo)號(hào)處運(yùn)行,必須是基于pc的,不能是絕對(duì)跳轉(zhuǎn)指令,因?yàn)榇藭r(shí)程序存放的位置與其所鏈接到的位置不同,如果使用跳轉(zhuǎn)指令,程序?qū)⑴茱w。
2)如果要求程序在MMU使能狀態(tài)下運(yùn)行,即系統(tǒng)工作在虛擬地址模式
MMU使得系統(tǒng)能夠更好地管理內(nèi)存,因?yàn)镸MU可以將同一段物理內(nèi)存映射到多段虛擬地址空間上,而且可以將物理上不連續(xù)的內(nèi)存映射到連續(xù)的虛擬內(nèi)存空間(減少內(nèi)存碎片),另外MMU還可以控制虛擬內(nèi)存區(qū)段的緩沖特性和訪問(wèn)權(quán)限,所以MMU可以提高內(nèi)存的使用效率,使程序仿佛能夠使用比實(shí)際物理內(nèi)存容量多得多的內(nèi)存空間,提高系統(tǒng)性能,同時(shí)也增加了系統(tǒng)的安全性,所以在帶有MMU功能的處理器系統(tǒng)中,一般都應(yīng)該使能MMU,充分利用其功能。這樣一來(lái)也會(huì)導(dǎo)致一個(gè)和上面相同的問(wèn)題,因?yàn)樵谑褂肕MU的系統(tǒng)中,各種物理存儲(chǔ)空間的實(shí)際物理地址與對(duì)應(yīng)的虛擬地址設(shè)置得各不相同,包括flash和DRAM的物理地址與虛擬地址。系統(tǒng)啟動(dòng)時(shí)MMU被禁止,系統(tǒng)運(yùn)行在實(shí)模式即物理地址模式,但程序卻被編譯鏈接到了虛擬地址上,這樣在使能MMU之前,存放在flash或DRAM中的程序的實(shí)際地址(物理地址)與其鏈接到的地址是不相同的,所以從系統(tǒng)啟動(dòng)到MMU使能之間的程序代碼也應(yīng)該是與地址無(wú)關(guān)的,如果要跳轉(zhuǎn)到某個(gè)標(biāo)號(hào)處運(yùn)行,必須是基于pc的,不能是絕對(duì)跳轉(zhuǎn)指令,否則程序也將跑飛。
評(píng)論