1. 程式人生 > 實用技巧 >嵌入式開發筆記(三)ARM基礎知識

嵌入式開發筆記(三)ARM基礎知識

1.ARM的程式設計模式

1.1當ARM 採用的是32位架構.

ARM 約定:

Byte : 8 bits

Halfword(半字):16 bits (2 byte)

Word : 32 bits (4 byte)聯想: 資料位寬4 byte,地址對映資料線32條

注意:Word在VC下是16bit,原因早期微軟16位時就定義為16bit,後來32位時候未改換成DWord.

1.2大部分ARM core 提供:

(2)ARM 指令集(32-bit)

(1)Thumb 指令集(16-bit )

(3)Thumb2指令集(16 & 32bit)

小計:早期時候Thumb指令集,每條指令16bit。缺點:有時需要兩個指令完成,效率,時間。之後ARM指令集每條指令32bit,缺點:浪費資源。隨後Thumb2(armV7)[16&32]。

1.3 Jazelle cores 支援 Java bytecode(支援JAVA加速)

2.ARM處理器工作模式

2.1 ARM 有7個基本工作模式:

(1)User : 非特權模式,大部分任務執行在這種模式

(2)FIQ : 當一個高優先順序(fast) 中斷產生時將會進入這種模式

(3)IRQ : 當一個低優先順序(normal) 中斷產生時將會進入這種模式

(4)Supervisor :當復位或軟中斷指令執行時將會進入這種模式

(5)Abort : 當存取異常時將會進入這種模式

(6)Undef : 當執行未定義指令時會進入這種模式

(7)System : 使用和User模式相同暫存器集的特權模式

2.2注意:

(1)除User(使用者模式)是Normal(普通模式)外,其他6種都是Privilege(特 權模式)。

(2)Privilege中除Sys模式外,其餘5種為異常模式。

(3)各種模式的切換,可以是程式設計師通過程式碼主動切換(通過寫CPSR暫存器); 也可以是CPU在某些情況下自動切換。

(4)各種模式下許可權和可以訪問的暫存器不同。

2.3 CPU為什麼設計這些模式?

(1)1CPU是硬體,OS是軟體,軟體的設計要依賴硬體的特性,硬體的設計要考 慮軟體需要,便於實現軟體特性。

(2)作業系統有安全級別要求,因此CPU設計多種模式是為了方便作業系統的多 種角色安全等級需要。

3.ARM的37個暫存器詳解

3.1特點

1.ARM總共有37個暫存器,但是每種模式下最多隻能看到18個暫存器,其他暫存器雖然名字相同但是在當前模式不可見。

例如:對r13這個名字來說,在ARM中共有6個名叫r13(又叫sp)的暫存器,但是在每種特定處理器模式下,只有一個r13是當前可見的,其他的r13必須切換到他的對應模式下才能看到。這種設計叫影子暫存器(banked register)

注意: System模式使用user模式暫存器集

Sp:棧指標暫存器。

lr:儲存指標

Cpsr:程式狀態暫存器

Spsr:儲存cpsr狀態暫存器

3.1.2總結

(1)ARM共有37個暫存器,都是32位長度

(2)37個暫存器中30個為“通用”型,1個固定用作PC,一個固定用作CPSR, 5個固定用作5種異常模式下的SPSR。

3.2 CPSR程式狀態暫存器

(1)Mode位:

處理器模式位(7種)

(2)T Bit

僅ARM xT架構支援

T = 0: 處理器處於 ARM 狀態

T = 1: 處理器處於 Thumb 狀態

(3)中斷禁止位:

I = 1: 禁止 IRQ.

F = 1: 禁止 FIQ.

(4)J 位

僅ARM 5TE/J架構支援

J = 1: 處理器處於Jazelle狀態

(5)Q 位:

僅ARM 5TE/J架構支援

指示飽和狀態

(6)條件位:

N = Negative result from ALU

(當運算為負的自動為1)

Z = Zero result from ALU

(當運算為0的自動為1)

C = ALU operation Carried out

(當運算進位自動為1)

V = ALU operation oVerflowed

(當運算溢位自動為1)

3.2.2注意

(1)CPSR中各個bit位表明了CPU的某些狀態資訊,這些資訊非常重要, 和後面學到的彙編指令息息相關(譬如BLE指令中的E就和CPSR中 的Z標誌位有關)

(2)CPSR中的I、F位和開中斷、關中斷有關

(3)CPSR中的mode位(bit4~bit0共5位)決定了CPU的工作模式, 在uboot 程式碼中會使用匯編進行設定。

轉載於:https://my.oschina.net/vvbest/blog/811196