首页 > 解决方案 > 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 则 I 停留在 while 中,因此不采用中断处理程序。有谁知道为什么会这样?

标签: c

解决方案


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

 volatile uint8_t call_irq_handler = 0; // variable that is modified by the irq handler
        volatile uint8_t call_irq_handler_previous = 0;

推荐阅读