0
我用C写一个程序PIC32的uC与多个中断服务程序的全局变量,有一个全局变量(uint32_t的类型),可以读/从多个中断服务程序,并从主修改。
我知道这是不安全的,所以我想知道如何使它安全?有没有一个例子说明如何使它安全?共享使用C
编辑1:
中断可以互相中断吗?是
ISR是否更新变量?是 主要更新变量吗?是 是写入和读取的变量原子,你怎么知道?不确定
是否存在RTOS?没有
我用C写一个程序PIC32的uC与多个中断服务程序的全局变量,有一个全局变量(uint32_t的类型),可以读/从多个中断服务程序,并从主修改。
我知道这是不安全的,所以我想知道如何使它安全?有没有一个例子说明如何使它安全?共享使用C
编辑1:
中断可以互相中断吗?是
ISR是否更新变量?是 主要更新变量吗?是 是写入和读取的变量原子,你怎么知道?不确定
是否存在RTOS?没有
如果你真的需要保留可以在多个中断的服务,可以互相中断期间进行修改全局变量,我建议你下面的方法做:
我喜欢你的建议,谢谢 –
最安全的方法是:不这样做!顺便说一句,我希望你把var定义为volatile。 – LPs
好吧,这听起来像你在使用独立环境,所以C没有强制许可,但是如果你想编写可移植代码,你可以看看C11标准草案n1570:* 5.1.2.3程序执行5当抽象机器的处理由于接收到一个信号而中断,既没有锁定自由原子对象,也没有指定类型易失性sig_atomic_t的对象的值没有被指定[...]。任何对象的该处理程序修改的值既不是无锁原子对象也不类型的当处理程序退出[...] * – EOF
如果您设置挥发性sig_atomic_t变得不确定,使得中断被禁止时你”重新服务中断,那么你所需要做的就是在你读取或修改main中全局的任何地方禁用中断。 – Ross