硬汉嵌入式论坛

 找回密码
 立即注册
查看: 3108|回复: 2
收起左侧

[μCOS-III] 事件标志组的OSFlagPend

[复制链接]

8

主题

20

回帖

44

积分

新手上路

积分
44
发表于 2016-7-13 11:22:50 | 显示全部楼层 |阅读模式
如果是想实现非阻塞模式的话,可以把
(OS_OPT       )OS_OPT_PEND_FLAG_SET_ALL + OS_OPT_PEND_NON_BLOCKING + OS_OPT_PEND_FLAG_CONSUME,   
//等待 flags指定位任何一个被置 1;不符合要求不等待;符合要求就把触发位取反;
当不符合要求的时候,err == OS_ERR_PEND_WOULD_BLOCK
当符合要求的时候,err == OS_ERR_NONE,
这时候可以用if语句来判断。
这样理解没有错吧?

另外,也可以OS_FLAGS get_flags=OSFlagPend ()
然后用  switch(get_flags)来判断,是一个发生了事件标志。
如果有两个事件都发生了,则可以判将两个事件相或来判断
case 0x01
case 0x02
case 0x03
这三个互不影响

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107604
QQ
发表于 2016-7-14 09:42:18 | 显示全部楼层
OS_OPT_PEND_FLAG_SET_ALL是等待所有的位被置位。

加上 OS_OPT_PEND_NON_BLOCKING 后,不管置位没有置位,读取后就退出了额,其实你可以看下源码的实现。
回复

使用道具 举报

8

主题

20

回帖

44

积分

新手上路

积分
44
 楼主| 发表于 2016-7-14 10:50:59 | 显示全部楼层
终于理解了。
#define  事件1                   0x01   
#define  事件2                   0x02   
#define  事件1和事件2       0x03
原来这个OS_FLAGS 是个unsigned  int 型
OSFlagPend 的返回值,无事件发生时,返回0.
有事件发生时:
只发生事件1,返回1
只发生事件2,返回2
两个都发生,返回3
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-6-7 22:10 , Processed in 0.233917 second(s), 26 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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