ARM學習筆記 四 ARM體系的儲存系統

2021-08-25 09:35:41 字數 3620 閱讀 5594

arm體系結構中的儲存系統

arm 儲存系統的體系結構適應不同的嵌入式應用系統的需要差別很大。最簡單的儲存系統使用平辦事的位址對映機制,就像一些簡單的彈片機系統中一樣,位址空間的分 配方式是固定的,系統各部分都使用實體地址。而一些複雜系統可能包括下面的一種或幾種技術,從而提供更為強大的儲存系統。 **

系統中可能包含多種型別的儲存器,如flash,rom,ram,eeprom等,不同型別的儲存器的速度和寬度等各不相同。 **

通過使用cache及write buffer技術縮小處理器和儲存系統速度差別,從而提高系統的整體效能。 **

記憶體管理部件通過記憶體對映技術實現虛擬空間到物理空間的對映。在系統加電時,將rom/flash影射為位址0,這樣可以進行一些初始化處理;當這些初始化完成後將ram位址影射為0,並把系統程式載入到ram中執行,這樣很好地解決了嵌入式系統的需要。 **

引入儲存保護機制,增強系統的安全性。 **

引入一些機制保證i/o操作應設成記憶體操作後,各種i/o操作能夠得到正確的結果。 **

與儲存系統相關的程式設計指南**

1.位址空間

arm 體系使用單一的和平板位址空間。該位址空間大小為2^32個8位位元組,這些位元組的單元位址是乙個無符號的32位數值,其取值範圍為0~2^32- 1。arm位址空間也可以看作是2^30個32位的字單元。這些字單元的位址可以被4整除,也就是說該位址低兩位為0b00。位址為a的字資料報括位址為 a、a+1、a+3、a+3 4個位元組單元的內容。

各儲存單元的位址作為32為無符號數,可以進行常規的整數運算。這些運算的結果進行2^32取模。

程式正常執行時,每執行一條arm指令,當前指令計數器加4個位元組;每執行一條thumb指令,當前指令計數器加2個位元組。但是,當位址上發生溢位時,執行結果將是不可預知的。

2.儲存器格式

**位址為a的字單元包括位元組單元a,a+1,a+2,a+3。

**位址為a的班子單元包括位元組單元a,a+1。

**位址為a+2的半字單元包括位元組單元a+2,a=3.

**位址為a的字單元包括半位元組單元a,a+2。

在arm體系結構中,每個字單元包含4位元組單元或者2個半字單元,1個半字單元包含2位元組單元。但是在字單元中,4位元組哪乙個是高位位元組,哪乙個是低位位元組則有兩種不同的格式,通常稱為大端格式或者小端格式,也就是big-endian格式和little-endian格式。大/小端的選擇對於不同的晶元來說有一些不同的選擇方式,一般都可以通過外部的引腳或內部的暫存器來選擇。具體要參見處理器的資料手冊。

在大端模式下的儲存格式如下所示。

31 24 23 16 15 8 7 0

字單元a

半字單元a

半字單元a+

2 位元組單元

a位元組單元a+

1位元組單元a+

2位元組單元a+

3 而在小端模式下的儲存格式如下所示。

31 24 23 16 15 8 7 0

字單元a

半字單元a+

2 半字單元a

位元組單元a+

3位元組單元a+

2位元組單元a+

1位元組單元a

在arm 系統中沒有提供指令來選擇儲存器格式。如果系統中包含標準的arm控制協處理器cp15,則cp15的暫存器c1的位[7]決定系統中儲存器的格式。當係 統復位時,暫存器c1的[7]值為零,這時系統中儲存器格式為little-endian格式。如果系統中採用的是big-endian格式,則復位異常 中斷處理程式中必須設定c1暫存器的[7]位。

非對齊的儲存訪問操作:在arm體系結構中通常希望字單元的位址是字對齊的(位址的低兩位是0b00),半字單元的位址是半字對齊的(位址的最低位為0b0),但在儲存單元中位址沒有遵守上述的對齊規則,稱為非對齊的儲存訪問操作,在arm體系結構的偽指令集中有專門的align指令來指定對齊格式。

在arm體系結構中允許指令預取,在cpu執行當前**的同時,可以從儲存器中預取其後若干條指令,具體預取多少條指令則由不同的arm處理器核心的實現來決定。

非對齊的指令預取操作

如果系統中指定當發生非對齊的指令預取操作時,忽略位址中相應的位,則由儲存系統實現這種忽略。

非對齊的資料訪問操作

對於load/store操作,系統定義了下面3中可能的結果:

***執行結果不可預知

***忽略字單元位址低兩位的值,即訪問位址為字單元;忽略半字單元最低位的值,即訪問位址為半字單元。

***由儲存系統忽略字單元位址中低兩位的值,半字單元位址最低位的值。

指令預取和自修改**

當使用者讀取pc計數器的值時,返回的是當前指令下面的第二條指令的位址。對於arm指令來說,返回當前指令位址值加8個位元組;對於thumb指令來說,返回值為當前指令位址值加4個位元組。

自修改**指的是**在執行過程中修改自身。應盡量避免使用。

儲存器對映的i/o空間

在arm中,i/o操作通常被影射為儲存器操作。通常需要將儲存器對映的i/o空間設定成非緩衝的。

3.arm體系結構中的mmu

另外乙個重要的概念就是mmu(memory manager unit)。arm儲存系統的體系結構適應不同的嵌入式系統應用,它的差別很大。最簡單的儲存系統使用平板式的位址對映機制,位址空間的分配是固定的,系統中各部分都使用實體地址,這樣的處理器不帶mmu。而一些複雜的系統可能包含一種或多種下面提到的技術,從而提供功能更為強大的儲存系統。

(1)系統中可能包含多種型別的儲存器件,一般都有flash、sram、sdram等介面。

(2)使用指令/資料cache及write buffer技術縮小處理器和儲存系統速度差別,從而提高系統的整體效能。

(3)系統中包含有mmu單元。

mmu使用記憶體對映技術實現虛擬空間到物理空間的對映,這種對映機制對於嵌入式系統尤其重要。通常程式放在rom/flash中,這樣系統掉電後程式能夠儲存。但是rom/flash比sdram速度慢很多,而且在嵌入式系統中,中斷向量表存放在ram中,不過利用記憶體對映就可以解決這種問題。在系統加電時將rom/flash位址對映到

0x00000000,在0x00000000位址處存放啟動**,來完成系統裝置的初始化,之後再把核心程式載入到sdram,然後把位址對映到sdram的位址,跳轉到sdram位址執行就可以了。

針對具有mmu的arm處理器可以移植linux for arm作業系統,針對沒有mmu的處理器,一般都是移植uclinux for arm。比如說samsung公司的s3c4510、s3c2510都是不帶mmu的處理器,只能移植uclinux,而針對s3c2410、pxa27x、omap591x等帶有mmu單元的arm處理器通常都可以移植linux作業系統。帶有mmu的處理器內部都有用於儲存管理的系統控制協處理器cp15,在移植嵌入式作業系統的boot loader時,必須要對儲存管理單元進行初始化設定。 4

.快速上下文切換技術

fcse(fast context switch extension)技術通過修改系統中不同程序的虛擬位址,避免在程序間切換時造成的虛擬位址到實體地址的重對映,從而提高系統的效能。通常fcse位於cpu和mmu之間,其責任就是將不同程序使用的相同虛擬位址對映為不同的虛擬空間,使得在上下文切換時無須重建tlb等。

arm學習筆記四 arm偽指令

arm偽指令 符號定義偽指令 定義arm匯程式設計序中的變數 對變數賦值以及定義暫存器的別名 定義全域性變數 gbla 全域性數字變數,初始化值為0 gbla 全域性變數名 示例 如下 gbla test1 定義全域性數字變數test1 test1 seta 0x123 將該變數賦值為0x123 g...

ARM學習之ARM體系結構

本文主要針對arm cortex a9處理器的研究。arm採用的是32位的risc架構 資料型別 byte 位元組 8bit halfword 半字 16bit v4以上版本 word 字 32bit arm核心只提供fiq和irq兩種中斷向量。arm支援大端模式和小端模式兩種儲存方式。工作模式 u...

ARM體系結構與程式設計學習(四)

4.3 arm組合語言格式 變數或者常量 instruction,指令不能從一行的行頭開始,前面必須有空格或者符號 directive 偽操作 pseudo instruction,偽指令 comment為注釋,以 開頭 在arm組合語言中,各個指令 偽指令 偽操作的助記符必須全部用大寫字母或者全部...