广告

原创 OSFlagPost和OSFlagPend之间区别

2010-7-6 10:37 1934 0 分类: MCU/ 嵌入式

OSFlagPend是等待系统事件的发生。 
OSFlagPost是发事件消息给等待等待的事件。
 
这个是两个函数的基本区别.
但是我想知道的是:任务A调用OSFlagPend,发现所需要的事件标志都已经满足,如果此时consume为TRUE,则任务A把自己所等待的事件标志清零或置位,然后继续执行。说明任务A所要等待的任务都已经发生了,可以继续执行,并在继续执行前有把自己所等待的事件标志位清零或置位(让这些状态位恢复初始条件)的选择权,可以让等待事件组中(OS_FLAG_GRP)这些事件标志无效。 
   如果任务A调用OSFlagPend后,发现自己所需要的事件标志不满足,则A继续等待下去。.....这时,另一任务B开始执行(假设B执行的过程中可以发出某个事件标志,而这个事件标志正是任务A所等待的),执行了一段时间后调用OSFlagPost,OSFlagPost检察事件标志等待列表,发现任务A正在等待这个标志,则让A进入就绪状态。但是,此时就没有把自己所等待的事件标志位清零或置位(让这些状态位恢复初始条件)的选择权,即当A再次执行后,等待事件组(OS_FLAG_GRP)中这些事件标志仍然有效。 
   也就是说,任务A分别经过上述两个函数的调用都可能再次进入执行时,但等待事件组(OS_FLAG_GRP)中这些事件标志却可能具有不同的值。 

对这种区别能不能解释一下,为什么都是进入就绪态,为什么OSFlagPost有清空事件标志的选择权,而OSFlagPend却没有.


 


我想你有这个问题是因为你还没有把UCOS的标志文件的代码完全看明白吧。首先纠正你问题的错误,是OSFlagPend有清空或者是置位事件标志的选择权,而OSFlagPost没有,不要搞错了!
考虑两种情况:
你所说的这个选择权有两个。如下:
1、OSFlagPend在调用OSFlagPost之前调用,那么在OSFlagPost调用之前它是没有这个选择权的,但是不代表它没有这个选择权,因为它这个选择权在调用OSFlagPost之后获得。
2、OSFlagPend在调用OSFlagPost之后调用,那么它有这个选择权,原因是OSFlagPost已经调用完了,让它有这个权力。
那么总结一点就是,使得OSFlagPend有这个选择权都是由OSFlagPost授权。
那么你所以说的OSFlagPost没有这个选择权是错误的,因为它本身是授权的,那你说它有没有这个选择权呢?
明白了吗?

广告

文章评论 0条评论)

登录后参与讨论
相关推荐阅读
aas7502987 2012-04-07 11:48
51/STC最小系统板资料(更新中)
图片欣赏    淘宝网址:http://item.taobao.com/auction/item_detail.htm?item_num_id=9073446988  二   程...
aas7502987 2011-10-13 22:59
YL-3 资料
YL-3数码管模块资料:YL-3 串行数码管资料.zip...
aas7502987 2011-09-24 09:10
USB转TTL小板驱动
xp系统驱动:XP系统支持STC下载的PL-2303HX新版驱动.rar WIN7系统驱动:WIN7系统支持STC下载的PL2303HX驱动.rar...
aas7502987 2011-05-24 22:48
STM32F103RBT6最小系统原理图 PCB
STM32F103RBT6最小系统板原理图 PCB 附件:做好的成品板:淘宝链接网址:http://item.taobao.com/item.htm?id=8864376956...
aas7502987 2011-05-08 12:53
YL-16 STM32F103最小系统板资料(更新中)
二 数据手册:  USB协议中文版:attachment download  中文数据手册:attachment downloadSTM32选型手册:attachment downloadSTM32勘...
aas7502987 2011-03-20 13:27
DS18B20温度测量模块
DS18B20 数码管温度显示程序:...
我要评论
0
0
广告