ARM汇编宏定义

HandlerFIQ HANDLER HandleFIQ ,HANDLER是一个宏名,它的作用就是将HandleFIQ处的四个字节的内容放到PC中,从而实现程序的转移。在HandleFIQ处放的是中断服务程序的入口地址。

解释:

启动代码有如下的宏定义:

MACRO        

$HandlerLabel HANDLER $HandleLabel    ;宏定义,请仔细理解

$HandlerLabel

                                                          ;由于ADS仅支持FD(满递减)型堆栈

    sub      sp,sp,#4                             ;将堆栈退一个字用于保存下面用到的R0

    stmfd   sp!,{r0}                               ;将R0压入堆栈

    ldr       r0,=$HandleLabel               ;将HandleLabel的地址赋给R0

    ldr       r0,[r0]                                 ;将HandleLabel的地址指向的内容

                                                          ;(实际的执行地址)赋给R0

    str        r0,[sp,#4]                           ;将对应的中断函数首地址入栈保护

    ldmfd   sp!,{r0,pc}                              

                                      ;将中断函数的首地址出栈,放入PC中,系统将跳转到对应中断处理函数  

    MEND

 

HANDLER 是宏名。$HandlerLabel 是宏展开后要被别的字符替换掉的标号,不过不叫参数。

例如:HandlerFIQ    HANDLER HandleFIQ
       展开后为:
       HandlerFIQ
       sub        sp,sp,#4       
       stmfd   sp!,{r0}        
       ldr        r0,=HandleFIQ
       ldr        r0,[r0]        
       str        r0,[sp,#4]
       ldmfd   sp!,{r0,pc} 

启动代码中有很多的类似下面的语句:

HandlerFIQ HANDLER HandleFIQ
       HandlerIRQ HANDLER HandleIRQ
       HandlerUndef HANDLER HandleUndef
       HandlerSWI HANDLER HandleSWI
       HandlerDabort HANDLER HandleDabort
       HandlerPabort HANDLER HandlePabort

等等

这些语句在编译时都将会被替换。

该宏定义的代码用于将对应中断服务程序ISR的入口地址装载到PC中,可称之为“加载程序”。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值