ARM晶元的啟動程式的分析

2021-06-20 18:57:00 字數 1035 閱讀 3562

1、綜述

目前大多基於arm晶元的系統都是乙個比較複雜的片上系統,多數硬體模組都是可配置的,可以通過軟體來設定其需要的工作狀態。因此在執行使用者的應用程式之前,需要由專門的一段**來完成對系統的初始化。這一段**就稱為啟動程式。

由於這類**直接面對處理器核心和硬體控制器進行程式設計,一般都是用組合語言。在arm系統上電復位後,需要設定中斷向量表、初始化各模式堆疊、設定系統時鐘頻率等,需要用arm的組合語言編寫啟動**,由啟動**完成系統初始化以及跳轉到使用者c程式。在arm設計開發中,啟動**的編寫是乙個極重要的過程。然而啟動**隨具體的目標系統和開發系統有所區別,但通常包含以下部分:

·向量表定義

·位址重對映及中斷向量表的轉移

·堆疊初始化

·設定系統時鐘頻率

·中斷暫存器的初始化

·進入c應用程式

下面就結合philips的lpc2119的啟動**來分析與說明arm7處理器的啟動**的編寫。

1.1向量表定義

arm晶元上電或復位後,系統進入管理模式、arm狀態、pc(r15暫存器)指向0x00000000位址處。中斷向量表為每乙個中斷設定1個字的儲存空間,存放一條跳轉指令,通過這條指令使pc指標指向相應的中斷服務程式入口,繼而執行相應的中斷處理程式。lpc2119的中斷向量表和其它基於arm核的晶元中斷向量表較類似,只要注意lpc2119要使向量表所有資料32位累加和為零(0x00000000-0x0000001c的8個字的機器碼累加), 才能使使用者的程式離線執行。lpc2119的中斷向量表如圖1所示。

乙個優秀的啟動**將給應用程式的開發提供乙個良好的開發平台。本文中較詳細的討論了啟動**的編寫及難點。其中在堆疊初始化過程中要特別的注意兩點:

①要盡量給堆疊分配快速和高頻寬的儲存器。

②盡量避免過早將處理器切換到使用者模式,一般在系統初始化的最後階段才切換到使用者模式(使用者模式沒有許可權通過修改cpsr來進行模式切換)。

嵌入式系統的迅猛發展,使啟動**的編寫成為嵌入式系統開發人員應該具備的能力。本文有助於正在從事嵌入式arm開發的讀者理解啟動**的內涵與編寫出適合自己的啟動**。

ARM啟動過程分析

啟動 所謂的啟動 就是在啟動的時候執行的一段 主要任務是初始化處理器模式,設定堆疊,初始化變數等等。由於以上的操作均與處理器架構和系統配置密切相關,所有一般由彙編來編寫。啟動 一般分為兩部分,一是與arm7核心相關的部分,包括處理器各異常向量的配置,各處理器模式的堆疊設定,如果有必要,複製向量到ra...

IDA分析HELLO ARM 程式的ARM 反彙編

表明這個main函式是被程式匯出的 export main main為函式的名稱ida pro 能自動識別源程式中所有的函式以及名稱 main ida識別出的棧變數 var c 0xc var 8 8 堆疊定址指令 把暫存器的值壓入堆疊 stmfd sp1,sp暫存器的值加上4 賦給r11暫存器 a...

ARM的內部啟動與外部啟動

arm有內部啟動和外部啟動之分,究竟何為內部何為外部有必要做個說明,這也是熟悉arm運作的基礎。下文以我目前所使用的atmel公司at91sam9260系列arm9單板機為例。arm啟動時會產生復位異常,程式計數器指向異常向量位址0x0000 0000,即啟動時首先執行的是位於位址0x0000 00...