在C中与多个中断服务例程共享全局变量



我正在用C为PIC32 uC编写一个程序,该程序具有全局变量(uint32_t类型),可以从多个中断服务例程和main中读取/修改
我知道那不安全,所以我想知道如何确保它的安全?有没有一个例子可以说明如何确保它的安全?

编辑1:

中断能互相中断吗?是
ISR是否更新变量?对main是否更新变量?对对变量的写和读是原子的吗?你怎么知道的?不确定
是否存在RTOS?无

如果您真的需要保留全局变量,这些变量可以在为几个可以相互中断的中断提供服务的过程中进行修改,我建议您采取以下方法:

  1. 通过在之前禁用所有中断,然后在之后重新启用所有中断,使这些变量上的所有操作序列(读和/或写)成为"原子"。在PIC32上,您可以通过编写全局中断标志GIE来实现这一点
  2. 将这些变量声明为volatile,以避免编译器进行任何意外的优化
  3. 使用特定前缀重命名这些变量以清楚地识别它们,如Shared_XXXX,但这取决于您使用的命名约定
  4. 将这些变量上的所有操作序列放在用特定前缀命名的函数中,以清楚地识别它们,如Atomic_XXXX()。要实现第1点:要么这些函数都必须从禁用所有中断开始,到重新启用所有中断结束,要么你可以系统地将原子函数作为回调参数传递给一个将禁用所有中断的函数,调用回调函数并重新启用所有断开

最新更新