<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)程序開(kāi)發(fā)要點(diǎn)

          基于ARM的嵌入式系統(tǒng)程序開(kāi)發(fā)要點(diǎn)

          作者: 時(shí)間:2016-12-02 來(lái)源:網(wǎng)絡(luò) 收藏


          2.堆棧的分配

          在圖-3 中,橫坐標(biāo)上還有一種情況,就是 16 位的存儲(chǔ)器寬度,但是堆??臻g是 32 位的。這種情況下無(wú)論 ARM 還是 Thumb,其性能表現(xiàn)都比單純的 16 位存儲(chǔ)器系統(tǒng)情況下要好。這是因?yàn)?ARM 和 Thumb 其指令集雖然分 32 位和 16位,但是堆棧全部是采用32 位的。因此在 16 位堆棧和 32 位堆棧的不同環(huán)境下,其性能當(dāng)然都會(huì)相差很多。這種差別還跟具體的應(yīng)用程序密切相關(guān),如果一個(gè)程
          序堆棧的使用頻率相當(dāng)高,則這種性能差異很大;反之則要小一些。

          在基于 ARM 的系統(tǒng)中,堆棧不僅僅被用來(lái)進(jìn)行諸如函數(shù)調(diào)用、中斷響應(yīng)等時(shí)候的現(xiàn)場(chǎng)保護(hù),還是程序局部變量和函數(shù)參數(shù)傳遞(如果大于4個(gè))的存儲(chǔ)空間。所以出于系統(tǒng)整體性能考慮,要給堆棧分配相對(duì)訪問(wèn)速度最快、數(shù)據(jù)寬度最大的存儲(chǔ)器空間。

          一個(gè)嵌入式系統(tǒng)通常存在多種多樣的存儲(chǔ)器類型。設(shè)計(jì)的時(shí)候一定要先清楚每一種存儲(chǔ)器的訪問(wèn)速度,地址分配和數(shù)據(jù)線寬度。然后根據(jù)不同程序和目標(biāo)模塊對(duì)存儲(chǔ)器的不同要求進(jìn)行合理分配,以期達(dá)到最佳配置狀態(tài)。

          3.ROM 還是 RAM 在 0 地址處?

          顯然當(dāng)系統(tǒng)剛啟動(dòng)的時(shí)候,0 地址處肯定是某種類型的 ROM,里面存儲(chǔ)了系統(tǒng)的啟動(dòng)代碼。 但是很多靈活的系統(tǒng)設(shè)計(jì)中, 0 地址處的存儲(chǔ)器類型是可映射的。也就是說(shuō),可以通過(guò)軟件的方法,把別的存儲(chǔ)器(主要是快速的 RAM)分配以0 起始的地址。

          這種做法的最主要目的之一是提高系統(tǒng)對(duì)中斷的反應(yīng)速度。因?yàn)槊恳粋€(gè)中斷發(fā)生的時(shí)候,ARM 都需要從 0 地址處的中斷向量表開(kāi)始其中斷響應(yīng)流程,顯然把中斷向量表放在 RAM 里,比放在 ROM 里有更快的訪問(wèn)速度。因此,如果系統(tǒng)提供了這一類的地址重映射功能,軟件設(shè)計(jì)者一定要加以利用。

          下面是一個(gè)典型的經(jīng)過(guò) 0 地址重映射之后的存儲(chǔ)空間分布圖,注意盡可能把速度要求最高的部分放置在系統(tǒng)里面訪問(wèn)速度最快、帶寬最寬的 RAM 里面。


          圖-4 系統(tǒng)存儲(chǔ)器分布的實(shí)例

          4.存儲(chǔ)器地址重映射(memory remap)

          存儲(chǔ)器地址重映射是當(dāng)前很多先進(jìn)控制器所具有的功能。在上一節(jié)中已經(jīng)提到了 0 地址處存儲(chǔ)器重映射的例子,簡(jiǎn)而言之,地址重映射就是可以通過(guò)軟件配置來(lái)改變一塊存儲(chǔ)器物理地址的一種機(jī)制或方法。

          當(dāng)一段程序?qū)\(yùn)行自己的存儲(chǔ)器進(jìn)行重映射的時(shí)候,需要特別注意保證程序執(zhí)行流程在重映射前后的承接關(guān)系。下面是一種典型的存儲(chǔ)器地址重映射情況:


          圖-5 存儲(chǔ)器重映射舉例 1

          系統(tǒng)上電后的缺省狀態(tài)是 0地址上放有 ROM,這塊 ROM 有兩個(gè)地址:從0起始和從0x10000 起始,里面存儲(chǔ)了初始化代碼。當(dāng)進(jìn)行地址 remap以后,從 0起始的地址被定向到了 RAM 上,ROM 則只保留有唯一的從 0x10000 起始的地址了。

          如果存儲(chǔ)在 ROM 里的 Reset_Handler 一直在0 – 0x4000的地址上運(yùn)行,則當(dāng)執(zhí)行完remap以后,下面的指令將從RAM 里預(yù)取,必然會(huì)導(dǎo)致程序執(zhí)行流程的中斷。根據(jù)系統(tǒng)特點(diǎn),可以用下面的辦法來(lái)解決這個(gè)問(wèn)題:
          (1) 上電后系統(tǒng)從 0 地址開(kāi)始自動(dòng)執(zhí)行,設(shè)計(jì)跳轉(zhuǎn)指令在 remap 發(fā)生前使 PC指針指向0x10000 開(kāi)始的 ROM 地址中去,因?yàn)椴煌刂?br /> 指向的是同一塊ROM,所以程序能夠順利執(zhí)行。
          (2) 這時(shí)候 0 - 0x4000的地址空間空閑, 不被程序引用, 執(zhí)行remap后把 RAM引進(jìn)。因?yàn)槌绦蛞恢痹?0x10000 起始的 ROM 空間里
          運(yùn)行,remap 對(duì)運(yùn)行流程沒(méi)有任何影響。
          (3) 通過(guò)在 ROM 里運(yùn)行的程序,對(duì) RAM 進(jìn)行相應(yīng)的代碼和數(shù)據(jù)拷貝,完成應(yīng)用程序運(yù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); })();