文章目录

  • 1 用事件标志组实现多事件的单向同步

1 用事件标志组实现多事件的单向同步

问题需求:

  • 某一任务等待事件中一个或多个事件同时发生。

解决方案:

  • 事件发生时,设置指定事件标志位,任务4等待所有这些标志位全部置位才运行。

示例代码:

/*** @brief tOS应用示例* @details* @author 01课堂 李述铜 http://01ketang.cc* @date 2017-06-01* @version 1.0* @copyright 版权所有,禁止用于商业用途*/
#include "tinyOS.h"
#include "app.h"
#include "hal.h"static tTask task1;                     // 任务1结构
static tTask task2;                     // 任务2结构
static tTask task3;                     // 任务3结构
static tTask task4;                     // 任务4结构static tTaskStack task1Env[TASK1_ENV_SIZE];     // 任务1的堆栈空间
static tTaskStack task2Env[TASK2_ENV_SIZE];     // 任务2的堆栈空间
static tTaskStack task3Env[TASK3_ENV_SIZE];     // 任务3的堆栈空间
static tTaskStack task4Env[TASK4_ENV_SIZE];     // 任务4的堆栈空间int task1Flag;           // 用于指示任务运行状态的标志变量
int task2Flag;           // 用于指示任务运行状态的标志变量
int task3Flag;           // 用于指示任务运行状态的标志变量
int task4Flag;           // 用于指示任务运行状态的标志变量tFlagGroup syncFlagGroup;/*** 任务的运行代码* @param param 任务初始运行参数*/
void task1Entry (void *param) {for (;;) {task1Flag = 1;tTaskDelay(1);task1Flag = 0;tTaskDelay(1);tFlagGroupNotify(&syncFlagGroup, 1, 0x1);}
}/*** 任务的运行代码* @param param 任务初始运行参数*/
void task2Entry (void *param) {for (;;) {task2Flag = 1;tTaskDelay(1);task2Flag = 0;tTaskDelay(1);tFlagGroupNotify(&syncFlagGroup, 1, 0x2);}
}/*** 任务的运行代码* @param param 任务初始运行参数*/
void task3Entry (void *param) {for (;;) {task3Flag = 1;tTaskDelay(1);task3Flag = 0;tTaskDelay(1);tFlagGroupNotify(&syncFlagGroup, 1, 0x4);}
}/*** 任务的运行代码* @param param 任务初始运行参数*/
void task4Entry (void *param) {for (;;) {uint32_t resultFlag = 0;tFlagGroupWait(&syncFlagGroup, TFLAGGROUP_SET_ALL | TFLAGGROUP_CONSUME, (0x1 | 0x2 | 0x4), &resultFlag, 0);xprintf("Event wait OK!\n");}
}/*** App的初始化*/
void tInitApp (void) {halInit();tFlagGroupInit(&syncFlagGroup, 0);tTaskInit(&task1, task1Entry, (void *) 0x0, TASK1_PRIO, task1Env, sizeof(task1Env));tTaskInit(&task2, task2Entry, (void *) 0x0, TASK2_PRIO, task2Env, sizeof(task2Env));tTaskInit(&task3, task3Entry, (void *) 0x0, TASK3_PRIO, task3Env, sizeof(task3Env));tTaskInit(&task4, task4Entry, (void *) 0x0, TASK4_PRIO, task4Env, sizeof(task4Env));
}

典型案例:


参考资料:

  1. 手把手教你学用嵌入式操作系统

用事件标志组实现多事件的单向同步相关推荐

  1. RTX5 | 事件标志组02 - 置位事件标志组,并获取事件标志组的值

    文章目录 一.前言 二.实验目的 三.API 3.1.osEventFlagsSet 3.2.osEventFlagsGet 四.代码 4.1.main.h 4.2.main.c 五.Event Re ...

  2. RTX5 | 事件标志组01 - 创建事件标志组

    文章目录 一.前言 二.实验目的 三.API 3.1.osEventFlagsAttr_t 3.2.osEventFlagsNew 四.代码 4.1.main.h 4.2.main.c 五.Event ...

  3. 事件标志组的等待与通知

    文章目录 1 事件标志组的等待与通知 1.1 设计需求 1.2 设计实现 1 事件标志组的等待与通知 1.1 设计需求 当事件标志位发生时: 没有任务等待,设置相应的事件标志. 有任务等待时,唤醒等待 ...

  4. 事件标志组的原理与创建

    文章目录 1 事件标志组的原理与创建 1.1 问题概述 1.2 设计原理 1.3 设计实现 1 事件标志组的原理与创建 1.1 问题概述 如何在中断ISR与任务之间传递多个事件标志? 可以通过事件标志 ...

  5. FreeRTOS源码分析与应用开发07:事件标志组

    目录 1. 概述 2. 事件标志组类型 3. 创建事件标志组 4. 删除事件标志组 5. 设置事件标志位 5.1 任务级设置 5.2 中断级设置 6. 清除事件标志位 6.1 任务级清除 6.2 中断 ...

  6. RTOS原理与实现09:事件标志组实现

    目录 1. 事件标志组的原理与创建 1.1 问题概述 1.2 设计原理 1.3 设计实现 1.3.1 定义事件标志组类型 1.3.2 添加tFlagGroupInit函数 2. 事件标志组的等待与通知 ...

  7. 互斥量、临界区、信号量、事件标志组和消息邮箱

    为了好的理解互斥量.临界区.信号量.事件标志组和消息邮箱,下面一些知识对初学者来说很重要: 为了实现各任务之间的合作和无冲突的运行,在有关联的任务之间必须建立一些制约关系.这些制约关系主要有两种:直接 ...

  8. 【IoT】STM32 系统级开发之 ucosIII 或 freeRTOS 事件标志组详解

    1.轻型操作系统同步的方案详解 1)信号量 假设有两个任务 Task1 和 Task2,第一个任务进行按键的扫描,第二个任务进行LED灯的点亮 需求: 扫描到按键按下后点亮 LED 灯,也就是说第二个 ...

  9. UCOS操作系统——事件标志组(十四)

    UCOS操作系统 文章目录 UCOS操作系统 前言 一.事件标志组 二.相关函数 1.创建事件标志组 2. 等待事件标志组 3.向事件标志组发布标志 三.事件标志组实验 前言 前面我们提到过可以使用信 ...

最新文章

  1. 自行制作IT资产管理软件思路
  2. 对数据库进行黑盒测试操作?
  3. Exchange DAG备份恢复(六)---通过Windows Server Backup对单个邮箱进行恢复
  4. 10个帮助你快速调试和排错的小技巧
  5. QT的QDBusPendingCallWatcher类的使用
  6. 【WXS】简要介绍说明
  7. Javascript面向对象二
  8. k8s核心技术-集群安全机制(RBAC实现鉴权)---K8S_Google工作笔记0040
  9. XML的四种解析器原理及性能比较
  10. 【转】使用chrome插件Page Monitor监控网页内容变化
  11. 在Adobe Premiere Pro for Mac上使用合并剪辑同步音频和视频
  12. Java内存泄漏检测工具 JRockit Memory Leak Detector
  13. java 添加文本框_java 添加了文本框的窗口
  14. 用瑞利散射解释天空的颜色
  15. centos 配置证书_如何在CentOS 8上设置和配置证书颁发机构(CA)
  16. 多御安全浏览器安卓版迎来重大更新:新增分享二维码功能
  17. 【测试】18.系统测试及类型
  18. 最简单的 Git 入门教程
  19. Android程序员面试必备的知识点,androidauto地图
  20. TCP快速连接(tfo,TCP fastopen)

热门文章

  1. criterion java_Java Criterion類代碼示例
  2. 【Paper】2019_Consensus Control of Multiple AUVs Recovery System Under Switching Topologies and Time D
  3. LaTex 并集交集等
  4. 响应接收窗口大小( ra-ResponseWindowSize)
  5. 看来Kubernetes将一统天下?Docker也无法幸免
  6. hihoCoder #1195 : 高斯消元·一
  7. WGS 1984 Web Mercator 对于在线地图服务的意义
  8. 【译文】AppBarLayout的越界滚动行为
  9. GMT 时间日期格式
  10. Oracle cursor_sharing 参数 详解