我们需要将不打算注册或优化的变量声明为
volatile
,如果它们仅在外部事件内(嵌入式域中的中断内)修改。
uint8_t var1;
volatile uint8_t var2, var3;
void my_interrupt_handler(){
var1++;
var2++;
var3++;
}
如何告诉编译器在编译时抛出这样的错误:
ERROR: var1 is referenced in an external event section. It must be declared as volatile.
我正在使用 GCC。
一种方法可能是通过专门命名易失性变量,使代码中的易失性访问变得非常明确。例如:
#define VOLATILE_VAR(x) volatile_##x
uint8_t var1;
volatile uint8_t VOLATILE_VAR(var2), VOLATILE_VAR(var3);
void my_interrupt_handler(){
VOLATILE_VAR(var1)++;
VOLATILE_VAR(var2)++;
VOLATILE_VAR(var3)++;
}
编译器现在将引发错误,因为
var1
不是“VOLATILE_VAR
”。