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