【发布时间】:2016-11-23 09:22:03
【问题描述】:
我正在使用 nrf52 微控制器 (CORTEX 34F) 处理器。我对主循环进行了变量检查,在主循环和定时器中断例程中都进行了修改。
-
主循环检查变量是否为真:
执行条件码
将变量设置为假
- 定时器中断例程每 10 毫秒将变量设置为真
没有volatile 关键字,代码似乎无法正常工作,但是当我将变量设置为volatile 时,它似乎可以工作,但我不相信,因为:
- 首先我认为 cortex M4f 不包含数据缓存内存
- second : 这种情况由编译器处理 (arm keil)
请回答;
如果为真则执行正文代码 2. 列表项
【问题讨论】:
-
@dkolmakov :这或多或少是重复的,但关键可能没有解决 cache memory 的硬件功能和 的软件技术之间的误解>“在寄存器中缓存一个值”.
-
如果编译器很好并且意识到它不能到处乱跑并假设与 ISR/回调共享的变量有关,则不需要它。然而,许多嵌入式系统编译器并不是那么好。
标签: c embedded volatile interrupt-handling