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

本文深入解析了ARM启动文件中宏定义的使用方法,通过具体实例详细介绍了如何利用宏来简化代码,并解释了宏在定义中断入口地址向量中的作用。同时,文章还阐述了.align伪指令在代码对齐上的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先看<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字节对齐。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值