OpenEdv-开源电子网

标题: ucos 多任务使用全局变量 什么情况下需要 关中断或者关调度呢。 [打印本页]

作者: 1044617234    时间: 2016-7-5 08:52
标题: ucos 多任务使用全局变量 什么情况下需要 关中断或者关调度呢。
在STM32上用ucos ,有的时候不方便用邮箱 和队列 只能用全局变量,那么问题来了,因为操作全局变量的时候有时是多条汇编指令,如果现在中断来了,进行任务调度的话就破坏了该全局变量,结果不可预料,
之前只要操作全局变量我就把任务调度关掉,操作完之后就打开 ,我现在不太清楚STM32程序编译好之后对全局变量的哪些操作时单条指令就可以完成的? 这样就不用关调度了。谢谢大家

作者: 正点原子    时间: 2016-7-5 08:52
一般的赋值语句都是一个指令搞定。如果是遇到函数什么的,不放心,可以加开关中断来处理。
作者: 1542380129    时间: 2016-7-6 12:25
全局变量是共享资源,还是关中断或者调度器上锁。应该不会破坏指令的完整性的
作者: emWin    时间: 2016-7-6 17:25
加抢占式内核后,任务切换及中断均会异步中断代码运行,多进程访问会引起同时访问的问题,因而引入信号量及互斥,以优化多数情况不出现并发阻塞,单进程资源不受此限。
作者: 1044617234    时间: 2016-7-7 22:31
正点原子 发表于 2016-7-5 08:52
一般的赋值语句都是一个指令搞定。如果是遇到函数什么的,不放心,可以加开关中断来处理。

谢谢原子哥
作者: 1044617234    时间: 2016-7-7 22:33
1542380129 发表于 2016-7-6 12:25
全局变量是共享资源,还是关中断或者调度器上锁。应该不会破坏指令的完整性的

谢谢谢谢谢谢
作者: 1044617234    时间: 2016-7-7 22:33
emWin 发表于 2016-7-6 17:25
加抢占式内核后,任务切换及中断均会异步中断代码运行,多进程访问会引起同时访问的问题,因而引入信号量及 ...

谢谢谢谢谢谢
作者: Aidon_Zhang    时间: 2016-7-13 11:09
也就是说,涉及到全局变量赋值的时候,都是可以通过加开关中断来防止对全局变量的破坏。




欢迎光临 OpenEdv-开源电子网 (http://www.openedv.com/) Powered by Discuz! X3.4