μC/OS-II事件标志组的入门级使用方法
来源:互联网 发布:日本皇室 知乎 编辑:程序博客网 时间:2024/06/06 09:20
试想如下情况,有A、B、C三个事件,当A、B都满足某一条件(或执行某一动作)后C才能得到运行(持续运行或运行一次后继续等待A、B条件再次满足后再运行)。
如果需要实现这样的功能,就可以用事件标志组来实现了!
具体看实例:
//定义一个事件标志
OS_FLAG_GRP *Sem_Flg = 0;
//LED0任务
void led0_task(void *pdata)
{
INT8U err = 0;
pdata = pdata;
//创建一个事件标志
Sem_Flg = OSFlagCreate(0, &err);
while (1)
{
delay_ms(5000u);
//发送信号量集
OSFlagPost(
Sem_Flg,
(OS_FLAGS)1, //给第0位发信号
OS_FLAG_SET, //信号量置1
&err
);
}
}
//LED1任务
void led1_task(void *pdata)
{
INT8U err = 0u;
while (1)
{
delay_ms(1000u);
//发送信号量集
OSFlagPost(
Sem_Flg,
(OS_FLAGS)2, //给第1位发信号
OS_FLAG_SET, //信号量置1
&err
);
}
}
//UART任务
void uart_task(void *pdata)
{
INT8U err = 0;
pdata = pdata;
while (1)
{
//请求信号量集
OSFlagPend(
Sem_Flg,
(OS_FLAGS)0x03, //请求第0位和第1位信号
OS_FLAG_WAIT_SET_ALL //第0位和1位均置1时为有效,否则任务挂在这里
| OS_FLAG_CONSUME, //清除指定事件标志位
0, //无限等待,直到收到信号为止
&err
);
printf("run uart_task\r\n"); //每5秒钟打印一次
}
}
其中OS_FLAG_WAIT_SET_ALL如果改成OS_FLAG_WAIT_SET_ANY的话,
则表示第0位或第1位置1时为有效,否则任务挂在这里。
如果不加OS_FLAG_CONSUME的话,则表示一旦条件成立,打印会一直进行下去,
而不需要等待条件再次成立才能打印!
- μC/OS-II事件标志组的入门级使用方法
- 详解μC/OS-II软件定时器入门使用方法
- UC/OS II 事件标志组管理(一)
- UC/OS II 事件标志组管理(二)
- uC/OS-II实验程序之一(事件标志)
- ucos ii的事件标志组原理分析
- uC/OS事件标志组(event flag)
- uC/OS事件标志组(event flag
- uC/OS-III之事件标志组
- μC/OS-II
- 操作系统μC/OS-II的特点
- uCos-ii中对于信号量、互斥信号量、事件标志组的理解
- UCOS-II:对于信号量,互斥信号量,事件标志组的个人理解
- UCOS-II:对于信号量,互斥信号量,事件标志组的个人理解
- UCOS-II:对于信号量,互斥信号量,事件标志组的个人理解-转
- μC/OS-II练习题
- μC/OS-II认识
- μC/OS II 移植
- Android adb shell 获得点击屏幕的位置坐标
- 循环-01. 求整数段和(15)
- 对C++中的类的静态数据成员和静态函数成员的认识
- 字符串的简单实用
- Openfire(一)基础介绍
- μC/OS-II事件标志组的入门级使用方法
- QT常用代码之加载动态库和弹出对话框
- 微信抢票——迭代周期一结束后感想
- 7 天打造前端性能监控系统
- HangOver(杭电1056)
- 使用并查集UnionFind和优先队列PriorityQueue实现Kruskal算法
- 【UNIX】进程间通信
- sed命令详解
- [蓝桥杯][java]埃及分数解法