使用C中的多个中断服务例程共享全局变量

时间:2016-03-29 14:08:40

标签: c embedded global-variables pic32

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

编辑1:

中断可以互相中断吗?是
ISR是否更新变量?是 主要更新变量吗?是 写入和读取变量是原子的,你怎么知道?不确定
有RTOS吗?否

1 个答案:

答案 0 :(得分:1)

如果你真的需要保留可以在几个可以互相干扰的中断服务期间修改的全局变量,我建议你按照以下方式进行:

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