0

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

编辑1:

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

4

1 回答 1

1

如果您确实需要保留可以在多个可以相互中断的中断服务期间修改的全局变量,我建议您按照以下方式进行操作:

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