如何告诉编译器抛出错误,因为变量未声明为“易失性”,但在中断处理程序中使用?

问题描述 投票:0回答:1

我们需要将不打算注册或优化的变量声明为

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。

c gcc compiler-warnings static-analysis volatile
1个回答
0
投票

一种方法可能是通过专门命名易失性变量,使代码中的易失性访问变得非常明确。例如:

#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
”。

© www.soinside.com 2019 - 2024. All rights reserved.