XMC啟動檔案中的“Entry“”理解
先看<startup_XMC4800.S>檔案中的最前面的一段巨集:
.macro Entry Handler
.long \Handler
.endm
這個巨集使用的應該是Linux彙編程式巨集定義的格式,如下:
.macro 巨集名 引數名列表 @偽指令.macro定義一個巨集
巨集體
.endm @.endm表示巨集結束
如果巨集使用引數,那麼在巨集體中使用該引數時新增字首“\”。巨集定義時的引數還可以使用預設值。
可以使用.exitm偽指令來退出巨集。
【例5】巨集定義
.macro SHIFTLEFT a, b
那麼前面的巨集是在定義一個叫做Entry
接著看啟動檔案中怎麼使用Entry巨集,啟動檔案有這樣的程式碼:
.syntax unified
.section .reset, "a", %progbits
.align 2
.globl __Vectors
.type __Vectors, %object
__Vectors:
.long __initial_sp /* Top of Stack */
.long Reset_Handler /* Reset Handler */
Entry NMI_Handler /* NMI Handler */
Entry HardFault_Handler /* Hard Fault Handler */
Entry MemManage_Handler /* MPU Fault Handler */
Entry BusFault_Handler /* Bus Fault Handler */
Entry UsageFault_Handler /* Usage Fault Handler */
“Entry NMI_Handler"這一句用巨集替換後就翻譯成.long NMI_Handler,也就是定義一個4位元組的符號NMI_Handler作為不可遮蔽中斷的入口地址向量。而在以後的程式如果定義NMI_Handler()中斷函式,該函式的起始地址(控制代碼)將放到.reset段__Vectors表中的第8位元組開始的4個位元組中。
另外說面.align 2這一偽指令使用的是arm-linux是按照2^n的方案對齊的,也就是說.align 2表示的是以下程式碼4位元組對齊。