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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 嵌入式軟件開發(fā)之: 復(fù)位和初始化

          嵌入式軟件開發(fā)之: 復(fù)位和初始化

          作者: 時(shí)間:2013-09-30 來源:網(wǎng)絡(luò) 收藏

          本文引用地址:http://www.ex-cimer.com/article/257026.htm

          13.5

          任何運(yùn)行在實(shí)際硬件上的嵌入式應(yīng)用程序,都必須在啟動(dòng)時(shí)實(shí)現(xiàn)一些基本的系統(tǒng)。本節(jié)將對(duì)此予以詳細(xì)討論。

          13.5.1 序列

          圖13.14顯示了一個(gè)適用于嵌入式系統(tǒng)的初始化序列。

          圖13.14 嵌入式系統(tǒng)的初始化序列

          系統(tǒng)啟動(dòng)時(shí)立即執(zhí)行處理程序,然后進(jìn)入$Sub$$main()的代碼執(zhí)行。

          處理程序是用匯編語言編寫的代碼塊,它在系統(tǒng)復(fù)位時(shí)執(zhí)行,完成系統(tǒng)初始化操作。對(duì)于具有局部存儲(chǔ)器的內(nèi)核,如Caches、緊密藕荷存儲(chǔ)器(TCM)、存儲(chǔ)管理單元(MMU)和存儲(chǔ)器保護(hù)單元(MPU)等,在初始化過程這一階段完成必要的配置。復(fù)位處理程序在執(zhí)行之后,通常跳轉(zhuǎn)到__main以開始C庫的初始化序列。

          13.5.2

          所有的系統(tǒng)都有一個(gè)(vector table)。不是初始化序列的一部分,但是對(duì)每個(gè)要處理的異常,它必須存在。這些地址通常包含以下形式的跳轉(zhuǎn)指令。

          · Baddress>:該條指令實(shí)現(xiàn)了相對(duì)于pc的跳轉(zhuǎn)

          · LDR pc,[pc,offset]:這條指令將異常處理程序的入口地址從存儲(chǔ)器裝載到pc。該地址是一個(gè)32位的絕對(duì)地址。由于有額外的存儲(chǔ)器訪問,裝載跳轉(zhuǎn)地址會(huì)使分支跳轉(zhuǎn)到特定處理程序,給系統(tǒng)執(zhí)行帶來延時(shí)。不過,可以使用這種方法跳轉(zhuǎn)到存儲(chǔ)空間內(nèi)的任意地址。

          · MOV pc,#immediate:將一個(gè)立即數(shù)復(fù)制到pc。使用該指令可以跨越整個(gè)地址空間,但是受到地址對(duì)齊問題的限制。這個(gè)地址必須由8位立即數(shù)循環(huán)右移偶數(shù)次得到。

          另外,也可以在向量表中使用其他類型的指令。例如,F(xiàn)IQ處理程序可以從地址0x1c處開始執(zhí)行。因?yàn)樗挥谙蛄勘淼淖詈?,這樣FIQ處理程序就可以不用跳轉(zhuǎn),立即從FIQ向量地址處開始執(zhí)行。

          下面的例子顯示了一個(gè)使用LDR指令的向量表裝載過程。

          ;**********************************

          ;* VECTOR TABLE *

          ;**********************************

          AREA vectors, CODE

          ENTRY

          ; 定義標(biāo)準(zhǔn)的ARM向量表

          INT_Vectors

          LDR PC, INT_Reset_Addr

          LDR PC, INT_Undef_Addr

          LDR PC, INT_Software_Addr

          LDR PC, INT_Prefetch_Addr

          LDR PC, INT_Data_Addr

          LDR PC, INT_Reserved_Addr

          LDR PC, INT_IRQ_Addr

          LDR PC, INT_FIQ_Addr

          在向量表的入口處要有ENTRY標(biāo)識(shí)。該標(biāo)識(shí)通知鏈接程序該代碼是一個(gè)可能的入口點(diǎn),因而在鏈接時(shí),不能被清除。

          13.5.3 ROM/RAM重映射

          啟動(dòng)時(shí),0x0處必須要有一條有效指令,因此,復(fù)位時(shí)0x0000地址必須為非易失性存儲(chǔ)器,如ROM或FLASH。

          注意

          有些系統(tǒng)是從0xffff0000處開始執(zhí)行的,對(duì)于這樣的系統(tǒng),地址0xffff0000處必須為非易失性存儲(chǔ)器。

          可以將ROM定位在0x0處。但是,這樣配置有幾個(gè)缺點(diǎn)。首先ROM存取速度通常較RAM要慢,當(dāng)跳轉(zhuǎn)到異常處理程序時(shí),系統(tǒng)性能可能會(huì)大受影響。其次,將向量表放于ROM中,運(yùn)行時(shí)不能修改。

          存儲(chǔ)器地址重映射(Memory Remap)是當(dāng)前很多先進(jìn)控制器所具有的功能。所謂地址重映射就是可以通過軟件配置來改變存儲(chǔ)器物理地址的一種機(jī)制或方法。

          當(dāng)一段程序?qū)\(yùn)行自己得存儲(chǔ)器進(jìn)行重映射時(shí),需要特別注意保證程序執(zhí)行流程在重映射前后的承接關(guān)系。實(shí)現(xiàn)重映射的關(guān)鍵就是要使程序指針在remap以后能繼續(xù)往下得到正確的指令。本書中介紹兩種實(shí)現(xiàn)重映射的機(jī)制,不同的系統(tǒng)可能會(huì)有多種靈活的remap方案,用戶在具體實(shí)現(xiàn)時(shí)要具體分析。

          存儲(chǔ)器相關(guān)文章:存儲(chǔ)器原理



          上一頁 1 2 3 下一頁

          評(píng)論


          相關(guān)推薦

          技術(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); })();