uC/OS事件标志组(event flag

来源:互联网 发布:php 二进制转base64 编辑:程序博客网 时间:2024/06/05 02:49

uC/OS事件标志组(event flag)

作者:jk.li (jk.li@foxmail.com)

  引入事件标志组的目的是为了,在一个任务和多个任务之间进行同步,例如有一做饭任务,需要打水任务和买米任务的支持,只有打水任务和买米任务都完成后,做饭任务在开始执行。

  等待类型一共有4中分别是:
  OS_FLAG_WAIT_SET_ALL
  OS_FLAG_WAIT_SET_ANY
  OS_FLAG_WAIT_CLR_ALL
  OS_FLAG_WAIT_CLR_ANY
  WAIT_SET_ALL:意味着所有的条件都要被置位才能继续执行,好比你要做饭,必须有水和米缺一不可。
  WAIT_SET_ANY:任何一个条件被置位都能继续执行,去饭馆吃饭,点了2个菜,那个菜上来了就可以开动了。
  WAIT_CLR_ALL:所有的条件都被清除了才能继续执行,好比想结束游戏,必须清除所有的敌人。
  WAIT_CLR_ANY:任何一个条件被被清除了都能继续执行,在游戏过程中,清除任何一个人质,游戏也结束了。 
  其实只要有两种等待类型就够用了

  一个使用event flag的例子:

#define 水           0x01
#define 米           0x02
#define 青菜         0x04
#define 肉           0x08

static void Task_做饭(void *pdata)
{
    While (1) {
        OSFlagPend( eflag, 水 | 米, OS_FLAG_WAIT_SET_ALL, 0, &err); //等待水、米全部到齐后开始做饭
    }
}

static void Task_做菜(void *pdata)
{
    While (1) {
        OSFlagPend( eflag, 青菜 | 肉, OS_FLAG_WAIT_SET_ANY, 0, &err); //青菜或者肉有一样到位了就可以开始做菜啦
    }
}

static void Task_打水(void *pdata)
{
    While (1) {
        OSFlagPost(eflag, 水, OS_FLAG_SET, &err);
    }
}

static void Task_买米(void *pdata)
{
    While (1) {
        OSFlagPost(eflag, 米, OS_FLAG_SET, &err);
    }
}

static void Task_买菜(void *pdata)
{
    While (1) {
        OSFlagPost(eflag, 青菜, OS_FLAG_SET, &err);
    }
}

static void Task_买肉(void *pdata)
{
    While (1) {
        OSFlagPost(eflag, 肉, OS_FLAG_SET, &err);
    }
}

  某一时刻事件标志组状态图

有了前面的基础理解OSFlagPend就非常的简单,他做了如下工作:
1、按规则比较参数中的flag与事件标志组的flag,这里的规则就是前面提到的,全部满足还是任意一个满足
2、如果满足条件,则获得该事件标志组返回
3、如果不满足,则将该等待插入事件标志组等待列表

OSFlagPost则做了如下工作:
1、设置事件标志组的flag
2、轮询等待列表,看那个满足要求,如果满足的所有的条件,则移除该节点,并将该任务放入就绪队列,这样下次调度的时候,该任务就有机会运行了

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 儿子一年级语文成绩太差怎么办 小孩读一年级差几个月怎么办 小孩一年级下学期数学差怎么办 小学五年成绩差怎么办 生完孩子记忆力不好怎么办 生了孩子之后记忆力不好怎么办 孩子记忆力差学习不好怎么办 党课结业证丢了怎么办 对三年级不听话的学生应该怎么办 素质报告单丢了怎么办 社保小红本丢了怎么办 小红本丢了怎么办 孩子小红本丢了怎么办 小学素质报告册丢了怎么办 小学生素质报告册丢了怎么办 高中素质报告册丢了怎么办 小升初素质报告单丢了怎么办? 三供一业移交后社区管理职能怎么办 初中政治总考不好怎么办 孩子上初一学习越来越差怎么办 胸经过整容后变得胸闷怎么办? 网瘾高中不学习怎么办 犯罪人逃到美国怎么办 10岁儿童偏胖怎么办 土地面积与实际面积不符怎么办 军转进省直单位双选失败怎么办 房改房楼龄到了70年怎么办 商品房房改房到70年后怎么办 公务员未享受房改政策怎么办 两套房改房违规怎么办 法院保全的物品在我家怎么办 西瓜视频答题结束了钱没提现怎么办 诚信答题密码忘了怎么办 我未成年杀了人怎么办 错过了网课考试怎么办? 2018广东省普法考试0分怎么办 小孩错过了小升初的考试怎么办 错过了自主招生考试怎么办? 科目一考试错过了时间怎么办 中学生网瘾怎么办济南远大认真 u盘安装不了系统怎么办