初级会员

- 积分
- 62
- 金钱
- 62
- 注册时间
- 2017-5-3
- 在线时间
- 44 小时
|
2金钱
//main函数
u8 x=0;
int main(void)
{
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
delay_init(168);
uart_init(115200);
LED_Init();
EXTIX_Init();
while(1)
{
printf("%d\r\n",x);
x+=1;
delay_ms(1000);
}
}
//外部中断函数
extern u8 x;
void EXTI4_IRQHandler(void)
{
delay_ms(10);
if(KEY0==0)
{
x=1;
}
EXTI_ClearITPendingBit(EXTI_Line4);
}
贴出了关键代码,在主程序中,对x不停的进行加一操作
在按键按下的时候触发外部中断,中断服务函数里对x重新赋值为1。
实验现象是:比如在主程序中已经加到10了,然后按按键,接着x又重新从1开始计数。
在x=10的时候按按键触发中断,先进行现场保护,然后在中断函数中将x置为1,在恢复现象的时候难道不应该将x恢复成10?保护现场与恢复现场难道不是把中断服务函数 里的改过的变量恢复到执行中断之前?求大神指教
|
最佳答案
查看完整内容[请看2#楼]
进中断,保护现场,是编译器的工作.与程序员无关.他也不会保护用户的变量呀.一般来说保护CPU寄存器.状态寄存器,累加器等.
|