ARM基礎知識(強烈推薦)參考模板_第1頁
ARM基礎知識(強烈推薦)參考模板_第2頁
ARM基礎知識(強烈推薦)參考模板_第3頁
ARM基礎知識(強烈推薦)參考模板_第4頁
ARM基礎知識(強烈推薦)參考模板_第5頁
已閱讀5頁,還剩12頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、ARM基礎知識(強烈推薦).txt有誰會對著自己的褲襠傻笑。不敢跟他說話卻一遍一遍打開他的資料又關上。用了心旳感情,真旳能讓人懂得很多事。如果有一天,我的簽名不再頻繁更新,那便證明我過的很好。ARM基礎知識(強烈推薦)ARM基礎知識一ARM處理器共有37個寄存器。其中包括: *31個通用寄存器,包括程序計數器(PC)在內。這些寄存器都是32位寄存器。 *6個狀態寄存器。這些寄存器都是32位寄存器。 ARM處理器共有7種不同的處理器模式,每一種模式中都有一組相應的寄存器組。在任何時刻,可見的寄存器包括15個通用寄存器(R0-R14),一個或兩個狀態寄存器及程序計數器(PC)。在所有的寄存器中,有

2、些是各模式公用一個物理寄存器,有一些寄存器各模式擁有自己獨立的物理寄存器。 * 通用寄存器 *8 通用寄存器分為以下三類:備份寄存器、未備份寄存器、程序計數器PC 未備份寄存器 未備份寄存器包括R0-R7。對于每一個未備份寄存器來說,所有處理器模式下都是使用同一個物理寄存器。未備份寄存器沒有被系統用于特別的用途,任何可采用通用寄存器的場合都可以使用未備份寄存器。 備份寄存器 對于R8-R12備份寄存器來說,每個寄存器對應兩個不同的物理寄存器。系統為將備份寄存器用于任何的特殊用途,但是當中斷處理非常簡單,僅僅使用R8-R14寄存器時,FIQ處理程序可以不必執行保存和恢復中斷現場的指令,從而可以使

3、中斷處理非常迅速。 對于R13,R14備份寄存器來說,每個寄存器對應六個不同的物理寄存器,其中的一個是系統模式和用戶模式共用的;另外的五個對應于其他的五種處理器模式。采用下面的記號來區分各個物理寄存器: R13_<MODE> 其中MODE可以是下面幾種模式之一:usr,svc,abt,und,irq,fiq 程序計數器PC 1 / 17可以作為一般的通用寄存器使用,但有一些指令在使用R15時有一些限制。由于ARM采用了流水線處理器機制,當正確讀取了PC的值時,該值為當前指令地址值加上8個字節。也就是說,對于ARM指令集來說,PC指向當前指令的下兩條指令的地址。由于ARM指令是字對齊

4、的,PC值的第0位和第一位總為 0。 需要注意的是,當使用str/stm保存R15時,保存的可能是當前指令地址值加8個字節,也可能保存的是當前指令地址值加12個字節。到底哪種方式取決于芯片的具體設計。對于用戶來說,盡量避免使用STR/STM指令來保存R15的值。 當成功的向R15寫入一個數值時,程序將跳轉到該地址執行。由于ARM指令是字對齊的,寫入R15的值應滿足bits1:0為0b00,具體要求arm個版本有所不同: *對于arm3以及更低的版本,寫入R15的地址值bits1:0被忽略,即寫入r15的地址值將與0xFFFF FFFC做與操作。 *對于ARM4以及更高的版本,程序必須保證寫入R

5、15的地址值bits1:0為0b00,否則將產生不可預知的后果。 對于Thumb指令集來說,指令是班子對齊的,處理器將忽略bit0。ARM基礎知識二* 程序狀態寄存器 * CPSR(當前程序狀態寄存器)在任何處理器模式下被訪問。它包含了條件標志位、中斷禁止位、當前處理器模式標志以及其他的一些控制和狀態位。每一種處理器 模式下都有一個專用的物理狀態寄存器,稱為SPSR(備份程序狀態寄存器) 。當特定的異常中斷發生時,這個寄存器用于存放當前程序狀態寄存器的內容。在異常中斷退出時,可以用SPSR來恢復CPSR。由于用戶模式和系統模式不是異常 中斷模式,所以他沒有SPSR。當用戶在用戶模式或系統模式訪

6、問SPSR,將產生不可預知的后果。 CPSR格式如下所示。SPSR和CPSR格式相同。 31 30 29 28 27 26 7 6 5 4 3 2 1 0 N Z C V Q DNM(RAZ) I F T M4 M3 M2 M1 M0 *條件標志位* N本位設置成當前指令運算結果的bit31的值。當兩個表示的有符號整數運算時,n=1表示運算結果為負數,n=0表示結果為正書或零。 zz=1表示運算的結果為零;z=0表示運算的結果不為零。對于CMP指令,Z=1表示進行比較的兩個數大小相等。 C下面分四種情況討論C的設置方法: 在加法指令中(包括比較指令CMP),當結果產生了進位,則C=1,表示無符

7、號運算發生上溢出;其他情況C=0。 在減法指令中(包括減法指令CMP),當運算中發生錯位,則C=0,表示無符號運算數發生下溢出;其他情況下C=1。 對于包含移位操作的非加堿運算指令,C中包含最后一次溢出的的位的數值 對于其他非加減運算指令,C位的值通常不受影響 V對于加減運算指令,當操作數和運算結果為二進制的補碼表示的帶符號數時,V=1表示符號為溢出;通常其他指令不影響V位。 *Q標識位* 在ARM V5的E系列處理器中,CPSR的bit27稱為q標識位,主要用于指示增強的dsp指令是否發生了溢出。同樣的spsr的bit27位也稱為q標識位,用于在異常中 斷發生時保存和恢復CPSR中的Q標識位

8、。 在ARM V5以前的版本及ARM V5的非E系列的處理器中,Q標識位沒有被定義。 *CPSR中的控制位* CPSR的低八位I、F、T、M4:0統稱為控制位。當異常中斷發生時這些位發生變化。在特權級的處理器模式下,軟件可以修改這些控制位。 *中斷禁止位:當I=1時禁止IRQ中斷,當F=1時禁止FIQ中斷 *T控制位:T控制位用于控制指令執行的狀態,即說明本指令是ARM指令還是Thumb指令。對于ARM V4以更高版本的T系列ARM處理器,T控制位含義如下: T=0表示執行ARM指令 T=1表示執行Thumb指令 對于ARM V5以及更高版本的非T系列處理器,T控制位的含義如下 T=0表示執行

9、ARM指令 T=1表示強制下一條執行的指令產生未定指令中斷 *M控制位* M控制位控制處理器模式,具體含義如下: M4:0 處理器模式 可訪問的寄存器 ob10000 user pc,r14r0,CPSR 0b10001 FIQ PC,R14_FIQ-R8_FIQ,R7R0,CPSR,SPSR_FIQ 0b10010 IRQ PC,R14_IRQ-R13_IRQ,R12R0,CPSR,SPSR_IRQ 0B10011 SUPERVISOR PC,R14_SVC-R13_SVC,R12R0,CPSR,SPSR_SVC 0b10111 ABORT PC,R14_ABT-R13_ABT,R12R0,

10、CPSR,SPSR_ABT 0b11011 UNDEFINEED PC,R14_UND-R8_UND,R12R0,CPSR,SPSR_UND 0b11111 SYSTEM PC,R14-R0,CPSR(ARM V4以及更高版本) *CPSR中的其他位* 這些位用于將來擴展。應用軟件不要操作這些位。ARM基礎知識三在ARM體系中通常有以下3種方式控制程序的執行流程: *在正常執行過程中,每執行一條ARM指令,程序計數器(PC)的值加4個字節;每執行一條Thumb指令,程序計數器寄存器(PC)加2個字節。整個過程是按順序執行 。 *跳轉指令,程序可以跳轉到特定的地址標號處執行,或者跳轉到特定的子程

11、序處執行。其中,B指令用于執行跳轉操作;BL指令在執行跳轉操作同時,保存子程 序的返回地址;BX指令在執行跳轉操作同時,根據目標地址為可以將程序切換到Thumb狀態;BLX指令執行3個操作,跳轉到目標地址處執行,保存子程序的返回 地址,根據目標地址為可以將程序切換到Thumb狀態。 *當異常中斷發生時,系統執行完當前指令后,將跳轉到相應的異常中斷處理程序處執行。當異常中斷處理程序執行完成后,程序返回到發生中斷指令的下條指 令處執行。在進入異常中斷處理程序時,要保存被中斷程序的執行現場,從異常中斷處理程序退出時,要恢復被中斷程序的執行現場。ARM基礎知識四ARM中異常中斷的種類 *復位(RESE

12、T)* 當處理器復位引腳有效時,系統產生復位異常中斷,程序跳轉到復位異常中斷處理程序處執行。復位異常中斷通常用在下面幾種情況下:系統加電時;系統復位時;跳轉到復位中斷向量處執行成為軟復位。 *未定義的指令* 當ARM處理器或者是系統中的協處理器認為當前指令未定義時,產生未定義的指令異常中斷,可以通過改異常中斷機制仿真浮點向量運算。 *軟件中斷* 這是一個由用戶定義的中斷指令。可用于用戶模式下的程序調用特權操作指令。在實時操作系統中可以通過該機制西線系統功能調用。 *指令與取終止(PrefechAbort)* 如果處理器預取的指令的地址不存在,或者該地址不允許當前指令訪問,當被預取的指令執行時,

13、處理器產生指令預取終止異常中斷。 *數據訪問終止(DATAABORT) 如果數據訪問指令的目標地址不存在,或者該地址不允許當前指令訪問,處理器產生數據訪問終止異常中斷 *外部中斷請求(IRQ)* 當處理器的外部中斷請求引腳有效,而且CPSR的寄存器的I控制位被清除時,處理器產生外部中斷請求異常中斷。系統中個外設通過該異常中斷請求處理服務。 *快速中斷請求(FIQ)* 當處理器的外部快速中斷請求引腳有效,而且CPSR的F控制位被清除時,處理器產生外部中斷請求異常中斷 異常中斷向量表及異常中斷優先級 中斷向量表指定了個異常中斷及其處理程序的對應關系。他通常存放在存儲地址的低端。在ARM體系中,異常

14、中斷向量表的大小為32字節,其中每個異常中斷占據4個字節大小,保留了4個字節空間。 每個異常中斷對應的中斷向量表中的4個字節的空間中存放了一個跳轉指令或者一個向PC寄存器中賦值的數據訪問指令。通過這兩種指令,程序將跳轉到相應的異常中斷處理程序處執行。當幾個異常中斷同時發生時,就必須按照一定的次序來處理這些異常中斷。 各個異常中斷的中斷向量地址以及中斷的處理優先級 中斷向量地址 異常中斷類型 異常中斷模式 優先級(6最低) 0x00 復位 特權模式 1 0x04 未定義的指令 未定義指令終止模式 6 0x08 軟件中斷 特權模式 6 0x0C 指令預取終止 終止模式 5 0x10 數據訪問終止

15、終止模式 2 0x14 保留 未使用 未使用 0x18 外部中斷請求 IRQ模式 4 0x1C 快速中斷請求 FIQ模式 3ARM基礎知識五在應用程序中安裝異常中斷處理程序 1.使用跳轉指令:可以在異常中斷對應異常向量表中特定位置放置一條跳轉指令,直接跳轉到該異常中斷的處理程序。這種方法有一個缺點,即只能在32M空間范圍內跳轉。 2.使用數據讀取指令LDR:使用數據讀取指令LDR向程序計數器PC中直接賦值。這種方法分為兩步:先將異常中斷處理程序的絕對地址存放在存放在距離向量表4KB范圍內的一個存儲單元中;再使用數據讀取指令LDR將該單元的內容讀取到程序計數器PC中。 *在系統復位時安裝異常中斷

16、處理程序* 1.地址0x00處為ROM的情況 使用數據讀取指令LDR示例如下所示: Vector_Init_Block LDR PC, Reset_Addr LDR PC, Undefined_Addr LDR PC, SW_Addr LDR PC, Prefeth_Addr LDR PC, Abort_Addr NOP LDR PC, IRQ_Addr LDR PC, FIQ_Addr Reset_Addr DCD Start_Boot Undefined_Addr DCD Undefined_Handle SW_Addr DCD SWI_Handle Prefeth_Addr DCD Pr

17、efeth_Handle Abort_Addr DCD Abort_Handle DCD 0 IRQ_Addr DCD IRQ_Handle FIQ_Addr DCD FIQ_Handle 使用跳轉指令的示例如下所示: Vector_Init_Block BL Reset_Handle BL DCD Undefined_Handle BL SWI_Handle BL Prefeth_Handle BL Abort_Handle NOP BL IRQ_Handle BL FIQ_Handle 2.地址0x00處為RAM的情況 地址0x00處為RAM時,中斷向量表必須使用數據讀取指令直接指向PC中

18、賦值的形式。而且,必須使用下面的代碼巴中斷向量表從ROM中復制到RAM中地址0x00開始處的存儲空間中: MOV r8,#0 ADR r9,Vector_Init_Block ;復制中斷向量表(8字) LDMIA r9!,(r0-r7) STMIA r8!,(r0-r7) ;復制保存各中斷處理函數地址的表(8字words) LDMIA r9!,(r0-r7) STMIA r8!,(r0-r7)ARM基礎知識六* ARM存儲系統概述 * ARM存儲系統的體系結構適應不同的嵌入式應用系統的需要差別很大。最簡單的存儲系統使用平辦事的地址映射機制,就像一些簡單的彈片機系統中一樣,地址空間的分配方式是固

19、定的,系統各部分都使用物理地址。而一些復雜系統可能包括下面的一種或幾種技術,從而提供更為強大的存儲系統。 *系統中可能包含多種類型的存儲器,如FLASH,ROM,RAM,EEPROM等,不同類型的存儲器的速度和寬度等各不相同。 *通過使用CACHE及WRITE BUFFER技術縮小處理器和存儲系統速度差別,從而提高系統的整體性能。 *內存管理部件通過內存映射技術實現虛擬空間到物理空間的映射。在系統加電時,將ROM/FLASH影射為地址0,這樣可以進行一些初始化處理;當這些初始化完成后將RAM地址影射為0,并把系統程序加載到RAM中運行,這樣很好地解決了嵌入式系統的需要。 *引入存儲保護機制,增

20、強系統的安全性。 *引入一些機制保證I/O操作應設成內存操作后,各種I/O操作能夠得到正確的結果。 *與存儲系統相關的程序設計指南* 本節從外部來看ARM存儲系統,及ARM存儲系統提供的對外接口。本節介紹用戶通過這些接口來訪問ARM存儲系統時需要遵守的規則。 1.地址空間 ARM體系使用單一的和平板地址空間。該地址空間大小為232個8位字節,這些字節的單元地址是一個無符號的32位數值,其取值范圍為0232-1。ARM地址空間也可以看作是230個32位的字單元。這些字單元的地址可以被4整除,也就是說該地址低兩位為0b00。地址為A的字數據包括地址為A、A+1、A+3、A+3 4個字節單元的內容。

21、 各存儲單元的地址作為32為無符號數,可以進行常規的整數運算。這些運算的結果進行232取模。 程序正常執行時,每執行一條ARM指令,當前指令計數器加4個字節;每執行一條Thumb指令,當前指令計數器加2個字節。但是,當地址上發生溢出時,執行結果將是不可預知的。 2.存儲器格式 在ARM中,如果地址A是字對齊的,有下面幾種: *地址為A的字單元包括字節單元A,A+1,A+2,A+3。 *地址為A的班子單元包括字節單元A,A+1。 *地址為A+2的半字單元包括字節單元A+2,A=3. *地址為A的字單元包括半字節單元A,A+2。 在big-endian格式中,對于地址為a的字單元其中字節單元由高位

22、到低位字節順序為A,A+1,A=2,A+3;這種存儲器格式如下所示: 31 24 23 16 15 8 7 0 - 字單元A | - 半字單元A | 半字單元A+2 | - 字節單元A | 字節單元A+1 | 字節單元A+2 | 字節單元A+3| - 在little-endian格式中,對于地址為A的字單元由高位到低位字節順序為A+3,A+2,A+1,A,這種存儲格式如下所示 31 24 23 16 15 8 7 0 - 字單元A | - 半字單元A+2 | 半字單元A | - 字節單元A+3 |字節單元A+2 | 字節單元A+1 | 字節單元A | - 在ARM系統中沒有提供指令來選擇存儲器

23、格式。如果系統中包含標準的ARM控制協處理器CP15,則CP15的寄存器C1的位7決定系統中存儲器的格式。當系統復位時,寄存器C1的7值為零,這時系統中存儲器格式為little-endian格式。如果系統中采用的是big-endian格式,則復位異常中斷處理程序中必須設置c1寄存器的7位。 3.非對齊的存儲訪問操作 非對齊:位于arm狀態期間,低二位不為0b00;位于Thumb狀態期間,最低位不為0b0。 3.1非對齊的指令預取操作 如果系統中指定當發生非對齊的指令預取操作時,忽略地址中相應的位,則由存儲系統實現這種忽略。 3.2非對齊的數據訪問操作 對于LOAD/STORE操作,系統定義了下

24、面3中可能的結果: *執行結果不可預知 *忽略字單元地址低兩位的值,即訪問地址為字單元;忽略半字單元最低位的值,即訪問地址為半字單元。 *由存儲系統忽略字單元地址中低兩位的值,半字單元地址最低位的值。 4.指令預取和自修改代碼 當用戶讀取PC計數器的值時,返回的是當前指令下面的第二條指令的地址。對于ARM指令來說,返回當前指令地址值加8個字節;對于Thumb指令來說,返回值為當前指令地址值加4個字節。 自修改代碼指的是代碼在執行過程中修改自身。應盡量避免使用。 5.存儲器映射的I/O空間 在ARM中,I/O操作通常被影射為存儲器操作。通常需要將存儲器映射的I/O空間設置成非緩沖的。ARM基礎知

25、識七* ARM編譯器支持的數據類型 * 數據類型 長度(位) 對齊特性 Char 8 1(字節對齊) short 16 2(百字對齊) Int 32 4(字對齊) Long 32 4(字對齊) Longlong 64 4(字對齊) Float 32 4(字對齊) Double 64 4(字對齊) Long double 64 4(字對齊) All pointers 32 4(字對齊) Bool(C+ only) 32 4(字對齊) 1.整數類型 在ARM體系中,整數類型是以2的補碼形式存儲的。對于long long類型來說,在little endian內存模式下,其低32位保存在低地址的字單元

26、中,高32為保存在高地址的字單元中;在big endian模式下,其低32位保存在高地址的字單元中,高32為保存在低地址的字單元中。對于整型數據的操作遵守下面的規則: *所有帶符號的整型書的運算是按照二進制的補碼進行的。 *帶符號的整型數的運算不進行符號的擴展。 *帶符號的整型數的右移操作是算數移位。 *制定的移位位數的數是8位的無符號數。 *進行移位操作的數被作為32位數。 *超過31位的邏輯左移的結果為0。 *對于無符號數和有符號的正數來說,超過32位的右移操作結果為0;對于有符號的負數來說,超過32位的右移操作結果為-1。 *整數除法運算的余數和除數有相同的符號。 *當把一個整數截斷成位

27、數更短的整數類型的數時,并不能保證所得到的結果的最高位的符號位的正確性。 *整型數據之間的類型轉換不會產生異常中斷。 *整型數據的溢出不會產生異常中斷。 *整型數據除以0將會產生異常中斷。 2.浮點數 在ARM體系中,浮點數是按照IEEE標準存儲的。 *float類型的數是按照IEEE的單精度數表示的。 *double和long double 是用IEEE的雙精度數表示的。 對于浮點數的操作遵守下面的規則: *遵守正常的IEEE754規則。 *當默認情況下禁止浮點數運算異常中斷。 *當發生卷繞時,用最接近的數據來表示。 3.指針類型的數據 下面的規則適用于處數據成員指針以外的其他指針: *NU

28、LL被定義為0。 *相鄰的兩個存儲單元地址相差一。 *在指向函數的指針和指向數據的指針進行數據轉換時,編譯器將會產生警告信息。 *類型size_t被定義為unsigned int. *類型ptrdiff_t被定義為signed int。 *兩個指針類型的數據相減時,結果可以按照下面的公式得到。 (int)a-(int)b)/(int)sizeof(type pointed to) 這時,只要指針所指的對象不是pack的,其對齊特性能夠滿足整除的要求。ARM基礎知識八* ARM編譯器中預定義的宏 * ARM編譯器預定義了一些宏,這些預定義宏對應一定的數值,有些預定義宏沒有對應數值,見下表: _a

29、rm _ 使用編譯器armcc,tcc,armcpp,tcpp時 _ARMCC_VERSION Ver 代表編譯器版本號,其格式為: PVtbbb,其中: P為產品編號(1代表ADS) V為副版本號(1代表1.1) T為補丁版本號(0代表1.1) bbb為build號(比如650) _APCS_INTERWORK _ 使用編譯選項-apcs/interwork時 _APCS_ROPI _ 使用編譯選項apcs/ropi時 _RWPI _ 使用編譯選項-apcs/rwpi時 _APCS_SWST _ 使用編譯選項-apcs/swst時 _BIG_ENDIAN _ 編譯器針對目標系統使用big-e

30、ndian內存模式時 _cplusplus _ 編譯器工作與C+模式時 _CC_ARM _ 返回編譯器的名稱 _DATE_ date 編譯源文件的日期 _embedded_cplusplus 編譯器工作于EC+模式時 _FEATURE_SINGED_CHAE 使用編譯設置選項-zc時設置該預定義宏 _FILE_ name 包含全路徑的當前被編譯的源文件名稱 _func_ name 當前被編譯的函數名稱 _LINE_ num 當前被編譯的代碼行號名稱 _MOUDLE_ mod 預定義宏_FILE_的文件名稱部分 _OPTIMISE_SPACE _ 使用編譯選項-OSPACE時 _OPTIMISE

31、_TIME _ 使用編譯選項-Otime時 _pretty_func name unmangled的當前函數名稱 _sizeof_int 4 sizeof(int),在預處理表達式中可以使用 _sizeof_long 4 sizeof(long),在預處理表達式中可以使用 _sizeof_ptr 4 sizeof(void*)在預處理表達式中可以使用 _SOFTFP _ 編譯時使用浮點數 _ _ 在各種編譯器模式下 _STDC_VERSION _ 標準的版本信息 _STRICT_ANSI_ _ 使用編譯選項-STRICT時 _TARGET_ARCH_xx _ xx代表ARM體系編號 _TARG

32、ET_CPU_xx _ xx代表CPU編號 _TARGET_FEATURE_ 當ARM體系支持指令PLD,LDRD,STRD,MCRR,MRRC時 DOUBLEWORD _ 設置該定義宏 _TARGET_FEATURE_ 當系統中包含DSP乘法處理器時,設置該 DSPMUL _ 預定義宏 _TARGET_FEATURE_ 如果目標ARM體系支持半字訪問以及有符號的字節數據 HALFWORD _ ,設置該預定義宏 _TARGET_FEATURE_ 如果目標ARM體系支持長乘法指令MULL和 MULTIPLY _ MUAL,設置該預定義宏 _TARGET_FEATURE_ 如果目標ARM體系支持T

33、HUMB指令 THUMB _ _TARGET_FPU_xx _ 表示FPU選項,可能取值如下所示: _TARGET_FPU_VFP _TARGET_FPU_FPA _TARGET_FPU_SOFTVFP _TARGET_FPU_SOFTVFP_VFP _TARGET_FPU_SOFTFPA _TARGET_FPU_NONE _thumb _ 編譯器為tcc或tcpp時,設置該預定義宏 _TIME 源文件編譯時間ARM基礎知識九* ARM映像文件 * 1.ELF格式文件的結構 1.1映像文件組成部分 *一個映像文件有一個或多個域組成 *每個域包含一個或多個輸出段 *每個輸出段包含一個或多個輸入段

34、 *各輸入段中包含了目標文件中的代碼和數據 輸入段中包含了四類內容:代碼、已經初始化的數據、未經初始化的存儲區域、內容初始化成0的存儲區域。每個輸入段有相應的屬性,可以為只讀的(RO)、可讀寫的(RW)以及初始化成0的(ZI)。ARM連接器根據個輸入段的屬性將這些輸入段分組,再組成不同的輸出段及域。 一個輸出段中包含了一系列的具有相同的RO、RW和ZI屬性的輸入段。輸出段的屬性與其中包含的輸入段的屬性相同。在一個輸出段的內部,各輸入段是按照一定的規則排序的,這將在1.3節油詳細地介紹。 一個域中包含1-3個輸出段,其中個輸出段的屬性各不相同。各輸出段的排列順序是由其屬性決定的。其中RO屬性的輸

35、出段排在最前面,其次是RW屬性的輸出段,最后是ZI屬性的輸出段。一個域通常映射到一個物理存儲器上,如ROM或RAM。 1.2ARM映像文件各組成部分的地址影射 ARM映像文件各組成部分在存儲系統中的地址有兩種:一種是映像文件位于存儲器中時(也就是該映像文件運行之前)的地址,稱之為加載地址;一種是映像文件運行時的地址,稱之為運行時地址。之所以有這兩種地址,是因為映像文件在運行時,其中的有些域是可以移動的新的存儲區域。比如,已經初始化的RW屬性的數據所在的段運行之前可能保存系統的ROM中,在運行時,他被移動至RAM中。 通常,一個映像文件包含若干個域,各域又包含若干的輸出段。ARM連接器需要知道如

36、下的信息,已決定如何生成相應的映像文件。 *分組信息 決定如何將個輸入段組織成相應的輸出段和域。 *定位信息 決定個域在存儲空間地址中的起始地址。 根據映像文件中地址映射的復雜程度,有兩種方法來告訴arm連接器這些相關信息。對于映像文件中地址映射關系比較簡單的情況,可以使用命令行選項;對于映像文件中地址映射關系比較復雜的情況,可以使用一個配置文件。 2.arm映像文件的入口點 2.1arm映像文件的入口點有兩種類型:一種是映像文件運行時的入口點,稱為初始入口點(initial entry point),另一種是普通入口點(entry point). 初始入口點是映像文件運行時的入口點,每個映像

37、文件只有一個唯一的初始入口點,它保存在ELF頭文件中。如果映像文件是被操作系統加載的,操作系統是通過跳轉到該初始入口點處來加載該映像文件。 普通的入口點是在匯編中用ENTRY偽操作定義。他通常用于標志該段代碼是通過異常中斷處理程序進入的。這樣連接器刪除無用的段時不會將該段代碼刪除。一個映像文件中可以定義多個普通入口點。 應該注意的是,初始入口點可以使普通入口點,但也可以不是普通入口點。 2.2定義初始入口點 初始入口點必須滿足下面兩個條件: *初始入口點必須位于映像文件的運行時域內。 *飽含初始入口點的運行時域不能被覆蓋,他的加載地址和運行地址必須是相同的。 可以使用連接選項-entry ad

38、dress來指定映像文件的初始入口點。這時,address指定了映像文件的初始入口點的地址值。 對于地址0x0處為rom的嵌入式應用系統,可以使用-entry 0x0來指定映像文件的初始入口點。這樣當系統復位后,自動跳轉到該入口開始執行。 如果映像文件是被一個加載器加載的,該映像文件該映像文件必須包含一個初始化入口點。這種映像文件通常還包含了其他普通入口點,這些普通入口點一般為異常中斷處理程序的入口地址。 當用戶沒有指定-entry address時,連接器根據下面的規則決定映像文件的初始入口點。 *如果輸入的目標文件中只有一個普通入口點,該普通入口點被連接器當成映像文件的初始入口點。 *如果

39、輸入的目標文件中沒有一個普通入口點,或者其中的普通入口點多于一個,則連接器生成的映像文件中不包含初始入口點,并產生警告信息。 2.3普通入口點的用法 普通入口點是在匯編中用ENTRY 偽操作定義。在嵌入式應用中,各異常中斷的處理程序入口使用普通入口點標示。這樣連接器在刪除無用段時不會將該段代碼刪除。 一個映像文件中可以定義多個普通入口點。沒有指定連接選項-entry addres時,如果輸入的目標文件中只有一個普通入口點,該入口點被連接器當成映像文件的初始入口點。3輸入段的排序規則 連接器根據輸入段的屬性來組織這些輸入段,具有相同屬性的輸入段被放到域中一段連續的空間中,組成一個輸出段。在一個輸出段中,各輸入段的起始地址與 輸出段的起始地址和該輸出段中個輸入段的排列順序有關。 通常情況下,一個輸出段中個輸入段的排列順序由下面幾個因素決定的。用戶可以通過連

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論