<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > ARM處理器系統(tǒng)初始化編程注意事項(xiàng)

          ARM處理器系統(tǒng)初始化編程注意事項(xiàng)

          作者: 時(shí)間:2016-11-09 來(lái)源:網(wǎng)絡(luò) 收藏
          在上述系統(tǒng)初始化過(guò)程中有以下兩點(diǎn)需要注意,如果處理不好就可能出現(xiàn)程序跑飛的情況。
          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)論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();