是否有一种避免全局变量的嵌入式系统在 ISR 和程序的其余部分之间实现通信的好方法?
似乎一般模式是有一个全局变量,它在 ISR 和程序的其余部分之间共享并用作标志,但这种全局变量的使用对我来说违背了原则。我已经包含了一个使用 avr-libc 样式 ISR 的简单示例:
volatile uint8_t flag;
int main() {
...
if (flag == 1) {
...
}
...
}
ISR(...) {
...
flag = 1;
...
}
我无法绕过本质上是范围界定问题。ISR 和程序的其余部分都可以访问的任何变量都必须本质上是全局的,确定吗?尽管如此,我经常看到人们说“全局变量是实现 ISR 与程序其余部分之间通信的一种方式”(强调我的),这似乎暗示还有其他方法;如果还有其他方法,它们是什么?