$HandlerLabel HANDLER $HandleLabel

本文深入探讨了ARM处理器在处理中断时的宏定义及工作流程,解释了$HandlerLabel$和$HandleLabel$的不同作用,通过具体示例如$HandlerSWI$,详细解析了中断处理过程中的关键步骤,包括堆栈操作、寄存器保存与恢复等核心概念。

 MACRO

$HandlerLabel HANDLER $HandleLabel

$HandlerLabel

       sub sp,sp,#4 ;decrement sp(to store jump address)

       stmfd      sp!,{r0} ;PUSH the work register to stack(lr does not push because it return to original address)

       ldr     r0,=$HandleLabel;load the address of HandleXXX to r0

       ldr     r0,[r0]      ;load the contents(service routine start address) of HandleXXX

       str     r0,[sp,#4]      ;store the contents(ISR) of HandleXXX to stack

       ldmfd   sp!,{r0,pc}     ;POP the work register and pc(jump to ISR)

       MEND

$HandlerLabel 和 $HandleLabel是两个参数,第一个参数和第二个参数是不一样的,中间少了个r,而第一个参数在本宏中是一个标号,而第二个函数是一个入口地址。


拿HandlerSWI HANDLER HandleSWI说明:把它用宏给替换下来以后是: 
$HandlerSWI 
       sub sp,sp,#4 ;                      decrement sp(to store jump address)  
       stmfd sp!,{r0} ;                    PUSH the work register to stack(lr does not push because it

                                                    return to original address) 
       ldr r0,=$HandleSWI ;          load the address of HandleXXX to r0 
       ldr r0,[r0] ;                             load the contents(service routine start address) of HandleXXX 
       str r0,[sp,#4] ;                       store the contents(ISR) of HandleXXX to stack 
       ldmfd sp!,{r0,pc} ;                POP the work register and pc(jump to ISR)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值