求助:中断保护现场与恢复现场

2019-07-20 14:48发布

//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 ",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?保护现场与恢复现场难道不是把中断服务函数 里的改过的变量恢复到执行中断之前?求大神指教


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
操作系统
1楼-- · 2019-07-20 16:53
进中断,保护现场,是编译器的工作.与程序员无关.他也不会保护用户的变量呀.一般来说保护CPU寄存器.状态寄存器,累加器等.
Widow
2楼-- · 2019-07-20 20:54
 精彩回答 2  元偷偷看……
止天
3楼-- · 2019-07-20 22:43
 精彩回答 2  元偷偷看……
操作系统
4楼-- · 2019-07-21 04:38
Widow 发表于 2017-5-3 14:28
可以理解成现场保护保护的是运行环境吗?

系统要保护的是系统公用的资源相关寄存器.如工作寄存器.状态寄存器.

一周热门 更多>