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

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


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。