c - 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 中,因此不采用中断处理程序。有谁知道为什么会这样?
解决方案
我通过插入 volatile 解决了这个问题
volatile uint8_t call_irq_handler = 0; // variable that is modified by the irq handler
volatile uint8_t call_irq_handler_previous = 0;
推荐阅读
- java - 将 XML 解析为 TextView:android
- here-api - 如何将 POI 添加到 Here Maps
- java - 如何转换单声道
- > 到另一个单声道
- >?
- angular - Angular routerlink 以模态而不是新页面打开
- c# - 使用默认值初始化结构,返回 null(自定义 Matrix4x4 结构)
- python - 如何将 numpy 数组保存为 .raw 图像?
- php - 将字符串插入 JSON POSTGREE PHP
- c# - 如何在 Unity 中使用 transform.localEularAngles
- c# - 如何在 AspNet Core 3 中将 Azure AD 身份验证与基于 SQL 的角色管理结合使用?
- css - Gulp:在同一文件夹中将 SASS 编译为 CSS