与C中的多个中断服务程序共享全局变量

久冈猎人

我正在用C为PIC32 uC编写一个程序,该程序具有一个全局变量(uint32_t类型),可以从多个中断服务程序和主程序读取/修改该全局变量。
我知道那不是安全的,所以我想知道如何使其安全?有没有显示如何使其安全的示例?

编辑1:

中断可以互相中断吗?
ISR是否更新变量?是main是否更新变量?是是写入和读取原子变量,您如何知道?不确定
是否存在RTOS?

劳伦特H.

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

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

多个文件中的C ++全局变量

来自分类Dev

在C中跨多个文件编译全局变量以创建共享库

来自分类Dev

如何从其他C程序访问共享库(.so)中的全局变量?

来自分类Dev

C全局变量用法中的键盘中断句柄

来自分类Dev

在.c文件之间共享全局变量

来自分类Dev

在.c文件之间共享全局变量

来自分类Dev

全局变量?跨多个脚本共享变量?

来自分类Dev

使用中断处理程序时如何避免全局变量?

来自分类Dev

多个文件中的Python全局变量

来自分类Dev

多个文件中的Python全局变量

来自分类Dev

Python中的全局变量可在文件之间共享变量

来自分类Dev

Python中的全局变量可在文件之间共享变量

来自分类Dev

如何在中断中处理全局变量

来自分类Dev

与Matlab中的批处理过程共享全局变量

来自分类Dev

ASPNET中全局变量的缓存或共享类

来自分类Dev

类中的全局变量共享给其他实例

来自分类Dev

与Matlab中的批处理过程共享全局变量

来自分类Dev

无法在C中修改全局变量

来自分类Dev

在C中操纵全局变量

来自分类Dev

在C中读取python的全局变量

来自分类Dev

C库中的全局变量

来自分类Dev

在C ++中为全局变量赋值

来自分类Dev

C ++类中的静态全局变量

来自分类Dev

全局变量在C中丢失数据?

来自分类Dev

无法在C ++中定义全局变量

来自分类Dev

C库中的全局变量

来自分类Dev

多个中断处理程序如何共享地址0x00000018

来自分类Dev

如何在Meteor中的服务器和客户端代码之间共享全局变量

来自分类Dev

全局变量的多个定义