XMC启动文件中的“Entry“”理解

先看<startup_XMC4800.S>文件中的最前面的一段宏:

.macro Entry Handler
    .long \Handler
.endm

这个宏使用的应该是Linux汇编程序宏定义的格式,如下:
.macro 宏名 参数名列表 @伪指令.macro定义一个宏
  宏体
.endm @.endm表示宏结束
如果宏使用参数,那么在宏体中使用该参数时添加前缀“\”。宏定义时的参数还可以使用默认值。
可以使用.exitm伪指令来退出宏。
【例5】宏定义
.macro SHIFTLEFT a, b

那么前面的宏是在定义一个叫做Entry(入口)的宏,这个宏代用参数Handler

接着看启动文件中怎么使用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字节对齐。

猜你喜欢

转载自blog.csdn.net/weixin_42214303/article/details/85619400