While循环等待中断处理程序

我正在写一个C程序来给微控制器编程。实际上,当发生中断处理程序时,我将执行以下代码:

uint8\u t call\u irq\u handler=0;//由irq处理程序修改的变量
uint8\u t call\u irq\u handler\u previous=0;
静态uuu属性uuu((中断))无效uuu irq_处理程序()
{
call_irq_handler_previous=call_irq_handler;
call_irq_handler=call_irq_handler+1;
}

相反,在main中,为了等待中断处理程序被执行,我设置了以下while循环:

while(调用irq处理程序==调用irq处理程序\u上一个)
{
count_cmd_write++;
#如果调试
printf(“…我没有得到cmd_write…\n”的中断处理程序);
#否则
持续
#恩迪夫
}

如果我将DEBUG设置为1,则没有问题,代码将被执行,过了一段时间,我将退出while循环。但是,如果DEBUG为0,则我将保留在while中,因此不会使用中断处理程序。
有人知道为什么会这样吗

我通过插入volatile解决了这个问题

volatile uint8\u t call\u irq\u handler=0;//由irq处理程序修改的变量
volatile uint8\u t call\u irq\u handler\u previous=0;

发表评论