OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 11012|回复: 7

UCOSIII:在什么情况下我们需要考虑临界区啊

[复制链接]

119

主题

439

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1185
金钱
1185
注册时间
2015-9-18
在线时间
422 小时
发表于 2015-10-28 23:42:10 | 显示全部楼层 |阅读模式
5金钱
小弟对ucos的理解不深,请问大神:我们在哪些情况下需要考虑临界区?什么情况下不能被中断打断?全局变量?还有什么?

最佳答案

查看完整内容[请看2#楼]

临界区的代码是不能被打断的,比如在从一段内存中读写数据,从SD卡数据,写数据等等,只要你认为它不能被打断就可以加临界区保护的。
电子爱好者
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

88

主题

7377

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
14980
金钱
14980
注册时间
2013-11-13
在线时间
1823 小时
发表于 2015-10-28 23:42:11 | 显示全部楼层
临界区的代码是不能被打断的,比如在从一段内存中读写数据,从SD卡数据,写数据等等,只要你认为它不能被打断就可以加临界区保护的。
开往春天的手扶拖拉机
回复

使用道具 举报

119

主题

439

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1185
金钱
1185
注册时间
2015-9-18
在线时间
422 小时
 楼主| 发表于 2015-10-29 14:21:34 | 显示全部楼层
小弟就是不明白什么样的代码是不可打断的,这个有权威的解释或者例子吗,大神
电子爱好者
回复

使用道具 举报

2

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
97
金钱
97
注册时间
2016-12-12
在线时间
19 小时
发表于 2016-12-13 19:39:52 | 显示全部楼层
权威告诉你。二楼说的有道理。
回复

使用道具 举报

32

主题

183

帖子

0

精华

高级会员

Rank: 4

积分
617
金钱
617
注册时间
2013-1-16
在线时间
131 小时
发表于 2017-11-1 16:29:23 | 显示全部楼层
同问,有没有大神
回复

使用道具 举报

119

主题

439

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1185
金钱
1185
注册时间
2015-9-18
在线时间
422 小时
 楼主| 发表于 2017-11-1 17:29:22 | 显示全部楼层
1597685605 发表于 2017-11-1 16:29
同问,有没有大神

这个问题当初困扰我很久,慢慢,我有了一点思路,现在分享下。。。

所谓临界区,归根到底,是任务平面的问题。

1> 先说简单的,裸机编程,则只有2个任务平面(假设只有一个中断,依次类推)。任务平面和中断平面。
* 如果任务平面和中断平面没有共享数据,你“娶”你的,我“娶”我的,皆大欢喜,根本就不需要考虑临界区的问题。
* 如果任务平面和中断平面共享数据,但是中断平面只是读取数据,很简单,就算被中断”插入“,但是中断”硬不起来“,当然没事。也就不用考虑临界区问题。
* 如果任务平面和中断平面共享数据,但是任务平面只是写入数据,同样的道理,不管中断是否”插入“,任务”娶还是不娶“,完全自己决定,丝毫不受外界干扰,也不用考虑临界区问题。
* 其它情况,基本就需要考虑临界区了,具体情况,还需认真分析。

2> OS编程
* 每增加一个优先级,就相当于增加一个任务平面。
* 如果考虑时间轮转调度,就算是相同优先级的2个任务,也属于不同平面。这个也很容易分析,时间一到必须切换,就相当下一个任务优先级更高(尽管实际优先级相同)。
* 所以,不管是裸机还是OS,归根到底是考虑平面上的数据是否会被“打扰”,完全可按照上述思想进行分析。

任何错误或者不足之处,还请指教。
电子爱好者
回复

使用道具 举报

0

主题

6

帖子

0

精华

新手上路

积分
25
金钱
25
注册时间
2017-10-16
在线时间
3 小时
发表于 2017-11-2 21:32:47 | 显示全部楼层
我试着回答一下,还请高手指正
比如,两个任务里都要读取SPI设备,这里就会有冲突。就有必要在读写SPI设备时加临界区。

再如:我习惯串口发送、接收时使用队列。比如发送,中断内要进行出队列操作,中断外要进行入队列操作。也要加临界区防止同时出入队列。

个人浅见
回复

使用道具 举报

14

主题

53

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
304
金钱
304
注册时间
2017-12-15
在线时间
60 小时
发表于 2019-4-27 16:30:50 | 显示全部楼层
zuozhongkai 发表于 2015-10-28 23:42
临界区的代码是不能被打断的,比如在从一段内存中读写数据,从SD卡数据,写数据等等,只要你认为它不能被打 ...

多谢分享
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-10 13:24

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表