新聞中心

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

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

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

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

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

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

        圖1 在文件、ROM、運行時段的分配



        圖2 ROM/RAM 啟動時異常向量表比較



        圖3 從RAM啟動時的過程


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


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

        評論


        相關(guān)推薦

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

        關(guān)閉
        主站蜘蛛池模板: 贡嘎县| 来凤县| 龙陵县| 晴隆县| 普洱| 当雄县| 潮州市| 民勤县| 大邑县| 灌南县| 临澧县| 噶尔县| 安顺市| 东丽区| 桐乡市| 桦南县| 资中县| 方城县| 佛山市| 龙泉市| 临城县| 嵊州市| 上杭县| 凉山| 承德市| 隆子县| 新野县| 乡宁县| 平泉县| 绥宁县| 垣曲县| 遂溪县| 城市| 廉江市| 西贡区| 枞阳县| 望城县| 盐边县| 禄丰县| 外汇| 廊坊市|