在嵌入式系統中實(shí)現從RAM快速引導技術(shù)
關(guān)鍵詞: 引導;異常向量;中斷;堆棧;鏡像
前言
嵌入式系統是以各種嵌入式微處理器為內核,運行RTOS的面向應用的計算機控制系統,也是SOC技術(shù)的一個(gè)重要分支。ARM 是一個(gè)IP(知識產(chǎn)權)公司,以arm體系結構為基礎的各種RISC 微處理器針對不同應用領(lǐng)域提供了不同的指令集(ARM、THUMB、DSP、XSCALE)可以為各種實(shí)時(shí)應用提供靈活的選擇。
在研制開(kāi)發(fā)基于A(yíng)RM處理器的嵌入式系統過(guò)程中,如何讓系統正??焖俚膯?dòng)是一個(gè)關(guān)鍵環(huán)節,本文主要分析討論嵌入式系統啟動(dòng)的問(wèn)題。相關(guān)代碼以ArmStd2.51IDE環(huán)境為參考。
幾個(gè)相關(guān)的概念
Arm/Thumb狀態(tài)
Arm,Thumb分別是ARM處理器的32/16bits的指令集,對應處理器的兩種執行狀態(tài)。
異常(Exception)
由內/外部源引起的需要處理器干預的一個(gè)事件,每種異常模式有自己的特殊功能寄存器,堆棧。處理異常需要保護處理器的當前狀態(tài),以便在異常處理后可以恢復執行。當異常發(fā)生時(shí),系統強制從固定的地址執行程序, 如表1 所示。
無(wú)論在A(yíng)rm/Thumb狀態(tài)進(jìn)入異常,處理程序都是在A(yíng)rm狀態(tài)下執行,PC->R14和CPSR->SPSR保存PC和處理器狀態(tài),返回時(shí)CPSR->SPSR,R14->PC。
中斷處理
ARM提供了兩種中斷源IRQ,FIQ,發(fā)生中斷時(shí),會(huì )進(jìn)入相應的IRQ,FIQ異常模式,然后異常處理程序會(huì )識別不同的中斷,調用相應的中斷服務(wù)程序。所以中斷只是異常的一個(gè)子集。未用中斷通常指向一個(gè)啞函數。
在嵌入式系統設計中應正確的辨析異常和中斷。
系統啟動(dòng)(start-up)
嵌入式系統的應用程序通常都是固化在ROM中運行。通常用匯編語(yǔ)言編寫(xiě)啟動(dòng)程序完成系統硬件和軟件運行環(huán)境的初始化。啟動(dòng)程序與應用程序一起固化在ROM中。系統在上電和復位會(huì )跳到復位異常向量入口地址處。
在目標文件中,代碼、數據放在不同的段中。源文件編譯鏈接生成含.data、.text段的目標文件,且鏈接器生成的.data段是以系統RAM為參考地址,故在系統啟動(dòng)時(shí)需要拷貝ROM中的.data段到RAM,以完成對RAM的初始化??截悘?text結束位置開(kāi)始,一般以2kbytes對齊取到下一個(gè)2kbytes,確定data的初始位置。這樣,就定位.data 、.text段在鏈接文件中所確定的鏈接位置。
CPU對ROM或Flash ROM訪(fǎng)問(wèn)速度慢,在一定程度上降低了系統的性能。當ROM在地址0x0時(shí),ARM內核使用ROM 0x0 到0x1c作為異常向量區,那么當異常發(fā)生的時(shí)候,CPU訪(fǎng)問(wèn)ROM區的入口。我們可以在RAM建立異常向量表鏡像,這樣可以提高系統的性能(鏡像建立)。最優(yōu)的方法,就是讓系統RAM配置在0x0,把初始化程序放在RAM中運行(RAM啟動(dòng)),建立異常向量表的自己對應關(guān)系。
為了實(shí)現異常的快速處理:
1、 在圖2,虛線(xiàn)框中表示的是當RAM在0x0時(shí)的情況,這是一種直接對應的關(guān)系。直接在向量入口處放置sys_**_handler處理程序。
2、 當ROM在0x0時(shí)需要建立了一種鏡像的關(guān)系。地址指針表示對應的數據存儲單元的物理地址,**_hander表示對應的處理程序在ROM的入口。Handle**是物理的存儲單元地址,里面放置了處理程序的入口指針。異常發(fā)生時(shí)經(jīng)過(guò)**_handler---handler**---sys_**_handler的過(guò)程。Handler**定義在RAM中。

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

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

圖3 從RAM啟動(dòng)時(shí)的過(guò)程
啟動(dòng)過(guò)程分析
設置異常向量
ARM7要求中斷向量表必須設置在從0地址開(kāi)始,連續8
評論