对uC/OSII 事件标志管理的理解

uC/OSII 中的事件标志管理与事件管理和信号量管理有些不同之处,首先一个事件标志组包含多个事件节点,用*OSFlagWaitList指向头一个事件节点,首先要把事件标志的任务全部完成后才能进行下一步也就是节点任务,比如:下载电视剧的时候,你想要把十集电视剧全部下完才能观看,观看是一个节点任务,它在下载十集电视剧完成之后才进行,十集电视剧每一集的完成都会置位事件标志组标志,等到事件标志组标志与它的节点事件标志相同时就就绪这个节点。

下面将详细解释事件标志组管理是如何工作的,要关注事件标志组标志OSFlagFlags和事件节点标志OSFlagNodeFlags这两个标志

1. 最高优先级任务A先调用 OSFlagPeng() 这个函数,把当前任务A阻塞挂到事件标志组中成为一个节点,并且把参数flags赋值给OSFlagNodeFlags,节点任务A相当于观看电视剧这个任务

2. 第一个任务阻塞之后会点用另外一个任务B,如果它也是请求事件标志组的话(调用 OSFlagPeng() 函数)就继续阻塞,如果是提交事件标志组的话(调用 OSFlagPost() 函数),就执行第3步;

3. 先将OSFlagFlags置1(或0),然后同遍历所有的事件标志节点,OSFlagFlags与每一个事件标志节点的标志OSFlagNodeFlags比较,如果相等,就就绪这个事件节点(基本上有几个OSFlagPend()函数就有多少事件节点),如果不相等就执行完本任务B,任务B相当于下载一集电视剧

4. 接下来就是继续执行任务C,任务C也是相当于下载一集电视剧, 如此往复,当下载第十集电视剧任务中会执行第五步;

5. 在下载第十集任务中会先把标志节点任务A就绪,然后在当前任务(不是任务A,而是下载第十集一集电视剧任务)的最后会调用任务用函数OS_Sched() ,这样由于任务A就绪,在下一次调用中会调用任务A,这样就相当于把十集电视剧下载完然后观看这整个过程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值