While循环等待中断处理程序



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

uint8_t call_irq_handler = 0; // variable that is modified by the irq handler
uint8_t call_irq_handler_previous = 0;
static __attribute__((interrupt)) void __irq_handler()
{
call_irq_handler_previous = call_irq_handler;
call_irq_handler = call_irq_handler + 1;
}

在main中,为了等待中断处理程序执行,我输入了下面的while循环:

while (call_irq_handler == call_irq_handler_previous)
{
count_cmd_write++;
#if DEBUG
printf("...i didn't get interrupt handler for cmd_write...n");
#else
continue;
#endif
}

如果我设置DEBUG 1,我没有问题,代码被执行,并在一段时间后退出while循环。然而,如果DEBUG 0,那么我仍然在while中,因此中断处理程序没有被占用。有人知道为什么会这样吗?

我通过插入volatile

来解决这个问题
volatile uint8_t call_irq_handler = 0; // variable that is modified by the irq handler
volatile uint8_t call_irq_handler_previous = 0;

最新更新