高中生
最后登录1970-1-1
在线时间 小时
注册时间2018-12-17
|
请先看代码:
[mw_shl_code=c,true]//该函数申请SVC中断
__asm void InSvc( void )
{
cpsie i
cpsie f
svc 0
nop
nop
BX LR //如果不加此指令,将会导致重复进入SVC_Handler中断 LED0不闪烁处于常亮
}
int main(void)
{
delay_init(); //延时函数初始化
LED_Init(); //初始化与LED连接的硬件接口
while(1)
{
LED0=0;
delay_ms(300); //延时300ms
InSvc();
delay_ms(300); //延时300ms
}
}
//该中断处理函数中将LED0翻转
__asm void SVC_Handler(void)
{
LDR R0, = 0x40010C0C
LDR R1,[R0] ;R1 = *R0
EOR R1,R1,#0x0020 ;r1 = r1^0x0020
STR R1,[R0] ;*R0 = R1
BX LR
}
[/mw_shl_code]
如上,火哥的书中是这样写得:
问题是最后两个“nop”之后,没有加上 BX LR 这个语句,难道不会重复进入SVC_Handler中断吗?
那为什么我的代码不加上 BX LR会重复进入呢?
|
|