当前位置: 首页 > news >正文

FreeRTOS_事件组_学习笔记

事件组

原文链接
在这里插入图片描述
事件组是一个整数,其中的高8位留给内核,只能用其他位来表示时间
每一位代表一个事件,且每个时间的含义由程序员决定
1为发生,0为未发生
一个/多个任务或ISR都能读写这些位
可以等待某一位,也可以等待多个位

事件组有广播作用,会唤醒所有复合条件的任务;而队列和信号量只会唤醒一个任务。
事件组唤醒任务后,可以让事件不动,也可以清除事件。

事件组函数

创建

成功返回句柄,失败返回NULL

EventGroupHandle_t xEventGroupCreate( void );// 动态创建
EventGroupHandle_t xEventGroupCreateStatic( StaticEventGroup_t * pxEventGroupBuffer );
//静态创建

示例:

g_xEventCar = xEventGroupCreate();

删除

void vEventGroupDelete( EventGroupHandle_t xEventGroup )

设置事件

xEventGroup: 哪个事件组
uxBitsToSet: 设置哪些位?

  • 如果uxBitsToSet的bitX, bitY为1, 那么事件组中的bitX, bitY被设置为1
  • 可以用来设置多个位,比如 0x15 就表示设置bit4, bit2, bit0

返回值EventBits_t: 返回原来的事件值(没什么意义, 因为很可能已经被其他任务修改了)
pxHigherPriorityTaskWoken: 有没有导致更高优先级的任务进入就绪态? pdTRUE-有, pdFALSE-没有
返回值BaseType_t: pdPASS-成功, pdFALSE-失败

/*在任务中使用*/
EventBits_t xEventGroupSetBits( EventGroupHandle_t xEventGroup,const EventBits_t uxBitsToSet );
/*在ISR中使用*/
BaseType_t xEventGroupSetBitsFromISR( EventGroupHandle_t xEventGroup,const EventBits_t uxBitsToSet,BaseType_t * pxHigherPriorityTaskWoken );

示例:

xEventGroupSetBits(g_xEventCar, (1<<0));

(1<<0)是二进制掩码,表示将1左移0位(00000001),指等待第0位

等待事件

xEventGroup	等待哪个事件组?
uxBitsToWaitFor	等待哪些位?哪些位要被测试?
xClearOnExit	函数提出前是否要清除事件? pdTRUE: 清除uxBitsToWaitFor指定的位 pdFALSE: 不清除
xWaitForAllBits	怎么测试?是"AND"还是"OR"? pdTRUE: 等待的位,全部为1; pdFALSE: 等待的位,某一个为1即可
xTicksToWait	如果期待的事件未发生,阻塞多久。 可以设置为0:判断后即刻返回; 可设置为portMAX_DELAY:一定等到成功才返回; 可以设置为期望的Tick Count,一般用*pdMS_TO_TICKS()*把ms转换为Tick Count
返回值	返回的是事件值, 如果期待的事件发生了,返回的是"非阻塞条件成立"时的事件值; 如果是超时退出,返回的是超时时刻的事件值。
EventBits_t xEventGroupWaitBits( EventGroupHandle_t xEventGroup,const EventBits_t uxBitsToWaitFor,const BaseType_t xClearOnExit,const BaseType_t xWaitForAllBits,TickType_t xTicksToWait );

示例:

xEventGroupWaitBits(g_xEventCar, (1<<0)|(1<<1), pdTRUE, pdFALSE, portMAX_DELAY);

(1<<0)|(1<<1)表示关心第0和第1位,且他们有一个为1时触发。

同步点

如果有ABC多个任务需要全部做完才能进行下一步,可以使用xEventGroupSync()

xEventGroup	哪个事件组?
uxBitsToSet	要设置哪些事件?我完成了哪些事件? 比如0x05(二进制为0101)会导致事件组的bit0,bit2被设置为1
uxBitsToWaitFor	等待那个位、哪些位? 比如0x15(二级制10101),表示要等待bit0,bit2,bit4都为1
xTicksToWait	如果期待的事件未发生,阻塞多久。 可以设置为0:判断后即刻返回; 可设置为portMAX_DELAY:一定等到成功才返回; 可以设置为期望的Tick Count,一般用*pdMS_TO_TICKS()*把ms转换为Tick Count
返回值	返回的是事件值, 如果期待的事件发生了,返回的是"非阻塞条件成立"时的事件值; 如果是超时退出,返回的是超时时刻的事件值。
EventBits_t xEventGroupSync(    EventGroupHandle_t xEventGroup,const EventBits_t uxBitsToSet,const EventBits_t uxBitsToWaitFor,TickType_t xTicksToWait );

示例:

xEventGroupSync(g_xEventCar, (1<<0),(1<<1)|(1<<2), portMAX_DELAY); 

会设置第0位,等待第1,2位

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Unidac连接Excel文件
  • Stream流的使用
  • Windows批处理命令和概念
  • php部分特性漏洞学习
  • 【设计模式】JAVA Design Patterns——Bridge(桥接模式)
  • 面试被问到不懂的东西,是直接说不懂还是坚持狡辩一下?
  • test_mqtt/python
  • 帝国CMS如何修改时间格式,变成几分钟,几小时教程
  • 常用 CSS 写法
  • 苹果MacOS系统使用微软远程桌面连接Windows电脑桌面详细步骤
  • Mac配置node环境
  • etcd 和 MongoDB 的混沌(故障注入)测试方法
  • 数据网络理论基础 第三章网络的时延模型
  • [力扣题解] 841. 钥匙和房间
  • 深入探讨 Java 8 集合操作:全面解析 Stream API 的强大功能
  • Bootstrap JS插件Alert源码分析
  • ECS应用管理最佳实践
  • Fundebug计费标准解释:事件数是如何定义的?
  • maven工程打包jar以及java jar命令的classpath使用
  • Python进阶细节
  • spring boot下thymeleaf全局静态变量配置
  • 测试如何在敏捷团队中工作?
  • 前端每日实战 2018 年 7 月份项目汇总(共 29 个项目)
  • RDS-Mysql 物理备份恢复到本地数据库上
  • zabbix3.2监控linux磁盘IO
  • 测评:对于写作的人来说,Markdown是你最好的朋友 ...
  • 关于Android全面屏虚拟导航栏的适配总结
  • 浅谈sql中的in与not in,exists与not exists的区别
  • ​学习一下,什么是预包装食品?​
  • ​一文看懂数据清洗:缺失值、异常值和重复值的处理
  • # AI产品经理的自我修养:既懂用户,更懂技术!
  • (Forward) Music Player: From UI Proposal to Code
  • (Ruby)Ubuntu12.04安装Rails环境
  • (第30天)二叉树阶段总结
  • (附源码)apringboot计算机专业大学生就业指南 毕业设计061355
  • (附源码)springboot学生选课系统 毕业设计 612555
  • (解决办法)ASP.NET导出Excel,打开时提示“您尝试打开文件'XXX.xls'的格式与文件扩展名指定文件不一致
  • (免费分享)基于springboot,vue疗养中心管理系统
  • (七)Appdesigner-初步入门及常用组件的使用方法说明
  • .mkp勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .net core webapi 部署iis_一键部署VS插件:让.NET开发者更幸福
  • .NET Core 中的路径问题
  • .net mvc 获取url中controller和action
  • .NET Standard / dotnet-core / net472 —— .NET 究竟应该如何大小写?
  • .NET 中创建支持集合初始化器的类型
  • :O)修改linux硬件时间
  • @ohos.systemParameterEnhance系统参数接口调用:控制设备硬件(执行shell命令方式)
  • @selector(..)警告提示
  • [04]Web前端进阶—JS伪数组
  • [145] 二叉树的后序遍历 js
  • [AHK V2]鼠标悬停展开窗口,鼠标离开折叠窗口
  • [C#] 我的log4net使用手册
  • [C#]调用本地摄像头录制视频并保存
  • [C++] 容器适配器:深入理解Stack与Queue的底层原理
  • [C++]运行时,如何确保一个对象是只读的