久冈猎人
我正在用C为PIC32 uC编写一个程序,该程序具有一个全局变量(uint32_t类型),可以从多个中断服务程序和主程序读取/修改该全局变量。
我知道那不是安全的,所以我想知道如何使其安全?有没有显示如何使其安全的示例?
编辑1:
中断可以互相中断吗?是
ISR是否更新变量?是main是否更新变量?是是写入和读取原子变量,您如何知道?不确定
是否存在RTOS?不
劳伦特H.
如果您确实需要保留可在相互中断的多个中断的服务期间进行修改的全局变量,则建议您按照以下方式进行操作:
- 通过在之前禁用所有中断,然后在之后重新启用所有中断,使对这些变量的所有操作序列(读和/或写)都是“原子的”。在PIC32上,您可以通过写入全局中断标志GIE来实现。
- 将这些变量声明为volatile,以避免编译器进行任何意外的优化。
- 使用特定的前缀重命名这些变量以清楚地标识它们,如Shared_XXXX,但这取决于您使用的命名约定。
- 将所有操作序列放在具有特定前缀的函数中的这些变量上,以清楚地标识它们,如Atomic_XXXX()。要实现要点1:要么这些功能必须全部通过禁用所有中断开始,然后以重新启用所有中断结束,或者您也可以系统地将原子函数作为回调参数传递给将禁用所有中断的函数,调用回调函数并重新启用所有中断打断。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
编辑于
我来说两句