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