一、前言


事件标志组是独自存在的,线程标志组只是线程的一部分。事件标志组的使用方法与线程标志组的使用方法一样,学会使用线程标志组就等于学会使用事件标志组,反之亦然。当线程退出之后,其线程标志组就会消失。创建线程就等于创建了一个线程标志组,它们是一块的。事件标志组需要单独创建,所以事件标志组需要额外占用内存池的内存。那为什么需要事件标志组?全部用线程标志组不就好了吗?

通过一个事件标志组,一个线程可以同步多个线程。1个事件标志组里有32个事件位,每1个事件位同步1个线程的话,那么1个事件标志组最大能同步32个线程。线程标志组只能用于同步本线程,例如线程A通过线程B的线程标志组,只能同步线程B了,不能用于同步线程C。总的来说,事件标志组的使用比较灵活。

事件标志组与线程标志组都能实现逻辑与,还有逻辑或同步线程。

STM32工程:
链接:https://pan.baidu.com/s/114jsUS5R_NEw8WjD3Lazug
提取码:yxvq

二、实验目的


长按按钮KEY0 或 长按KEY1(逻辑或),线程LED通过事件标志组A同步线程A,printf一些信息。

三、API


3.1、osEventFlagsWait

/* 使用举例1 */
void thread_A_App(void *argument)
{osStatus_t os_Status;while(1){os_Status = osEventFlagsWait(event_Flags1_ID,   /* 事件标志组ID */0x00000003U,       /* 等待事件标志位0与事件标志位1 */osFlagsWaitAny,    /* 逻辑或 */osWaitForever      /* 一直等待 */);printf("thread A is running.\r\n");}}/* 使用举例2 */
void thread_A_App(void *argument)
{osStatus_t os_Status;while(1){os_Status = osEventFlagsWait(event_Flags1_ID,   /* 事件标志组ID */0x00000003U,       /* 等待事件标志位0与事件标志位1 */osFlagsWaitAny,    /* 逻辑或 */2000U              /* 超时时间2S */);printf("thread A is running.\r\n");}}

四、代码


4.1、main.h

4.2、main.c






五、Event Recorder调试


5.1、长按按键KEY0与KEY1

RTX5 | 事件标志组03 - 线程同步(逻辑或)相关推荐

  1. RTX5 | 事件标志组04 - 线程同步(逻辑与)

    文章目录 一.前言 二.实验目的 三.API 3.1.osEventFlagsWait 四.代码 4.1.main.h 4.2.main.c 五.Event Recorder 5.1.分别长按按键KE ...

  2. RTX5 | 线程标志组01 - 线程同步

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

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

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

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

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

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

    文章目录 1 用事件标志组实现多事件的单向同步 1 用事件标志组实现多事件的单向同步 问题需求: 某一任务等待事件中一个或多个事件同时发生. 解决方案: 事件发生时,设置指定事件标志位,任务4等待所有 ...

  6. FreeRTOS 事件标志组 ——提高篇

    假设你已经看过FreeRTOS 事件标志组这篇随笔了. 之前的基础篇,真的就只是简单了解一下,相当于大学实验室的实验,但是,我们实际公司项目中,需要更多地思考,就算我们之前只是学习了基础概念以及基础语 ...

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

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

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

    互斥量.临界区.信号量.事件标志组和消息邮箱          为了好的理解互斥量.临界区.信号量.事件标志组和消息邮箱,下面一些知识对初学者来说很重要: 为了实现各任务之间的合作和无冲突的运行,在有 ...

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

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

最新文章

  1. Linux之文本处理
  2. 【Java 并发编程】线程简介 ( 进程与线程 | 并发概念 | 线程间通信 | Java 并发 3 特性 )
  3. Socket简介及客户端服务器连接实例
  4. 详解模板方法设计模式
  5. vue 毫秒数转年月日_Vue将毫秒数转化为正常日期格式的实例_盂希_前端开发者
  6. 第12章[12.8] Spring Boot+Ext JS 实现图形验证码
  7. [Java]toString的用法
  8. Mac技巧,更改Mac桌面图片
  9. 输入法相关的使用(跳转)
  10. 学习笔记(3):掌握JQuery视频教程-jquery选择器03
  11. 幻灯片转换html动画,html5 css3仿ppt幻灯片播放动画效果
  12. 计算机产生背景和编程语言分类
  13. Unity实现3D模式下的摄像机视角控制
  14. 新版百元纸币下月发行!这些防伪你要知道
  15. 支付宝PM告诉你,互联网产品经理的工作职责有哪些?
  16. 菜哥学知识图谱(通过“基于医疗知识图谱的问答系统”)(三)(代码分析)
  17. strlen函数原理
  18. java程序员生日祝福语_给朋友过生日的祝福语
  19. ESP8266串口透传+WiFi储存+OTA+smartconfig/airkiss
  20. 10种令人吃惊的方式你的日常生活中正在收集数据的大数据野兽

热门文章

  1. Android N 多窗口模式,你需要知道的一切
  2. [转载]golang sync.Pool
  3. 转:iOS应用程序生命周期(前后台切换,应用的各种状态)详解
  4. 关于数据仓库的架构及3大类组件工具选型
  5. 如何用FineReport制作一张报表(一)
  6. 局域网聊天 一个十分热门的话题
  7. 使用临界段实现优化的进程间同步对象-原理和实现
  8. 从外卖员到程序员,自学3年终于转行成功,三面“拿下”拼多多,把经历分享给你们!
  9. 2020 年 7 个软件开发趋势
  10. 你是菜鸡是有原因的 谈谈提问的艺术