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

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 在嵌入式系統(tǒng)中實(shí)現(xiàn)從RAM快速引導(dǎo)技術(shù)

          在嵌入式系統(tǒng)中實(shí)現(xiàn)從RAM快速引導(dǎo)技術(shù)

          作者:中國(guó)礦業(yè)大學(xué)信電學(xué)院和緯通信研發(fā)中心 孫彥景 馬小平 郭星歌 時(shí)間:2004-07-23 來(lái)源: 收藏
          摘    要: 本文以ARM7TDMI為例,對(duì)嵌入式系統(tǒng)從ROM和RAM引導(dǎo)的特點(diǎn)及技術(shù)實(shí)現(xiàn)進(jìn)行了比較,對(duì)異常和中斷概念給出了詳細(xì)的辨析,介紹了如何實(shí)現(xiàn)嵌入式系統(tǒng)從RAM快速引導(dǎo)技術(shù)。
          關(guān)鍵詞: 引導(dǎo);異常向量;中斷;堆棧;鏡像

          前言
          嵌入式系統(tǒng)是以各種嵌入式微處理器為內(nèi)核,運(yùn)行RTOS的面向應(yīng)用的計(jì)算機(jī)控制系統(tǒng),也是SOC技術(shù)的一個(gè)重要分支。ARM 是一個(gè)IP(知識(shí)產(chǎn)權(quán))公司,以arm體系結(jié)構(gòu)為基礎(chǔ)的各種RISC 微處理器針對(duì)不同應(yīng)用領(lǐng)域提供了不同的指令集(ARM、THUMB、DSP、XSCALE)可以為各種實(shí)時(shí)應(yīng)用提供靈活的選擇。
          在研制開(kāi)發(fā)基于ARM處理器的嵌入式系統(tǒng)過(guò)程中,如何讓系統(tǒng)正??焖俚膯?dòng)是一個(gè)關(guān)鍵環(huán)節(jié),本文主要分析討論嵌入式系統(tǒng)啟動(dòng)的問(wèn)題。相關(guān)代碼以ArmStd2.51IDE環(huán)境為參考。

          幾個(gè)相關(guān)的概念
          Arm/Thumb狀態(tài)
          Arm,Thumb分別是ARM處理器的32/16bits的指令集,對(duì)應(yīng)處理器的兩種執(zhí)行狀態(tài)。
          異常(Exception)
          由內(nèi)/外部源引起的需要處理器干預(yù)的一個(gè)事件,每種異常模式有自己的特殊功能寄存器,堆棧。處理異常需要保護(hù)處理器的當(dāng)前狀態(tài),以便在異常處理后可以恢復(fù)執(zhí)行。當(dāng)異常發(fā)生時(shí),系統(tǒng)強(qiáng)制從固定的地址執(zhí)行程序,                                                如表1 所示。
          無(wú)論在Arm/Thumb狀態(tài)進(jìn)入異常,處理程序都是在Arm狀態(tài)下執(zhí)行,PC->R14和CPSR->SPSR保存PC和處理器狀態(tài),返回時(shí)CPSR->SPSR,R14->PC。
          中斷處理
          ARM提供了兩種中斷源IRQ,F(xiàn)IQ,發(fā)生中斷時(shí),會(huì)進(jìn)入相應(yīng)的IRQ,F(xiàn)IQ異常模式,然后異常處理程序會(huì)識(shí)別不同的中斷,調(diào)用相應(yīng)的中斷服務(wù)程序。所以中斷只是異常的一個(gè)子集。未用中斷通常指向一個(gè)啞函數(shù)。
          在嵌入式系統(tǒng)設(shè)計(jì)中應(yīng)正確的辨析異常和中斷。

          系統(tǒng)啟動(dòng)(start-up)
          嵌入式系統(tǒng)的應(yīng)用程序通常都是固化在ROM中運(yùn)行。通常用匯編語(yǔ)言編寫啟動(dòng)程序完成系統(tǒng)硬件和軟件運(yùn)行環(huán)境的初始化。啟動(dòng)程序與應(yīng)用程序一起固化在ROM中。系統(tǒng)在上電和復(fù)位會(huì)跳到復(fù)位異常向量入口地址處。
          在目標(biāo)文件中,代碼、數(shù)據(jù)放在不同的段中。源文件編譯鏈接生成含.data、.text段的目標(biāo)文件,且鏈接器生成的.data段是以系統(tǒng)RAM為參考地址,故在系統(tǒng)啟動(dòng)時(shí)需要拷貝ROM中的.data段到RAM,以完成對(duì)RAM的初始化??截悘?text結(jié)束位置開(kāi)始,一般以2kbytes對(duì)齊取到下一個(gè)2kbytes,確定data的初始位置。這樣,就定位.data 、.text段在鏈接文件中所確定的鏈接位置。
          CPU對(duì)ROM或Flash ROM訪問(wèn)速度慢,在一定程度上降低了系統(tǒng)的性能。當(dāng)ROM在地址0x0時(shí),ARM內(nèi)核使用ROM 0x0 到0x1c作為異常向量區(qū),那么當(dāng)異常發(fā)生的時(shí)候,CPU訪問(wèn)ROM區(qū)的入口。我們可以在RAM建立異常向量表鏡像,這樣可以提高系統(tǒng)的性能(鏡像建立)。最優(yōu)的方法,就是讓系統(tǒng)RAM配置在0x0,把初始化程序放在RAM中運(yùn)行(RAM啟動(dòng)),建立異常向量表的自己對(duì)應(yīng)關(guān)系。
          為了實(shí)現(xiàn)異常的快速處理:
          1、 在圖2,虛線框中表示的是當(dāng)RAM在0x0時(shí)的情況,這是一種直接對(duì)應(yīng)的關(guān)系。直接在向量入口處放置sys_**_handler處理程序。
          2、 當(dāng)ROM在0x0時(shí)需要建立了一種鏡像的關(guān)系。地址指針表示對(duì)應(yīng)的數(shù)據(jù)存儲(chǔ)單元的物理地址,**_hander表示對(duì)應(yīng)的處理程序在ROM的入口。Handle**是物理的存儲(chǔ)單元地址,里面放置了處理程序的入口指針。異常發(fā)生時(shí)經(jīng)過(guò)**_handler---handler**---sys_**_handler的過(guò)程。Handler**定義在RAM中。

          圖1 在文件、ROM、運(yùn)行時(shí)段的分配



          圖2 ROM/RAM 啟動(dòng)時(shí)異常向量表比較



          圖3 從RAM啟動(dòng)時(shí)的過(guò)程


          啟動(dòng)過(guò)程分析
          設(shè)置異常向量 
          ARM7要求中斷向量表必須設(shè)置在從0地址開(kāi)始,連續(xù)8


          關(guān)鍵詞: 存儲(chǔ)器

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