FreeRTOS操作系统学习——事件组

news2024/11/15 23:22:58

事件组介绍

一个事件组就是一组的事件位,事件组中的事件位通过位编号来访问。事件位用来表明某个事件是否发生,事件位通常用作事件标志。
在这里插入图片描述
事件组用一个整数来表示,其中的高8位留给内核使用,只能用其他的位来表示事件。那么这个整数是多少位的?
在这里插入图片描述

事件组使用

创建

使用事件组之前,要先创建,得到一个句柄;使用事件组时,要使用句柄来表明使用哪个事件组。
有两种创建方法:动态分配内存、静态分配内存。

/* 创建一个事件组,返回它的句柄。
* 此函数内部会分配事件组结构体
* 返回值: 返回句柄,非 NULL 表示成功
*/
EventGroupHandle_t xEventGroupCreate( void );
/* 创建一个事件组,返回它的句柄。
* 此函数无需动态分配内存,所以需要先有一个 StaticEventGroup_t 结构体,并传入它的
指针
* 返回值: 返回句柄,非 NULL 表示成功
*/
EventGroupHandle_t xEventGroupCreateStatic( StaticEventGroup_t * pxEventGroupBuffer);
删除

对于动态创建的事件组,不再需要它们时,可以删除它们以回收内存。

/*
* xEventGroup: 事件组句柄,你要删除哪个事件组
*/
void vEventGroupDelete( EventGroupHandle_t xEventGroup )
设置事件

可以设置事件组的某个位、某些位,使用的函数有2个。有一个或多个任务在等待事件,如果这些事件符合这些任务的期望,那么任务还会被唤醒。

* 设置事件组中的位
* xEventGroup: 哪个事件组
* uxBitsToSet: 设置哪些位?
* 如果 uxBitsToSet 的 bitX, bitY 为 1, 那么事件组中的 bitX, bitY 被设置为1
* 可以用来设置多个位,比如 0x15 就表示设置 bit4, bit2, bit0
* 返回值: 返回原来的事件值(没什么意义, 因为很可能已经被其他任务修改了)
EventBits_t xEventGroupSetBits
( 
EventGroupHandle_t xEventGroup,
const EventBits_t uxBitsToSet 
);
* 设置事件组中的位
* xEventGroup: 哪个事件组
* uxBitsToSet: 设置哪些位?
* 如果 uxBitsToSet 的 bitX, bitY 为 1, 那么事件组中的 bitX, bitY 被设置为1
* 可以用来设置多个位,比如 0x15 就表示设置 bit4, bit2, bit0
* pxHigherPriorityTaskWoken: 有没有导致更高优先级的任务进入就绪态? pdTRUE-, pdFALSE-没有
* 返回值: pdPASS-成功, pdFALSE-失败
BaseType_t xEventGroupSetBitsFromISR
(
EventGroupHandle_t xEventGroup,
const EventBits_t uxBitsToSet,
BaseType_t * pxHigherPriorityTaskWoken 
);

在这里插入图片描述

等待事件

使用 xEventGroupWaitBits 来等待事件,可以等待某一位、某些位中的任意一个,也可以等待多位;等到期望的事件后,还可以清除某些位。

EventBits_t xEventGroupWaitBits
( 
	EventGroupHandle_t xEventGroup,
	const EventBits_t uxBitsToWaitFor,
	const BaseType_t xClearOnExit,
	const BaseType_t xWaitForAllBits,
	TickType_t xTicksToWait
);

在这里插入图片描述

多任务同步

有一个事情需要多个任务协同,比如:任务A炒菜,任务B买酒,任务C:摆台。A、 B、C做好自己的事后,还要等别人做完;大家一起做完,才可开饭。
使用 xEventGroupSync()函数可以同步多个任务:

EventBits_t xEventGroupSync
( 
	EventGroupHandle_t xEventGroup,
	const EventBits_t uxBitsToSet,
	const EventBits_t uxBitsToWaitFor,
	TickType_t xTicksToWait 
);

参数说明:

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1510605.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Liinux——(网络)socket编程

预备知识 源IP地址和目的IP地址 在IP数据包头部中, 有两个IP地址, 分别叫做源IP地址, 和目的IP地址 认识端口号 端口号(port)是传输层协议的内容. 端口号是一个2字节16位的整数;端口号用来标识一个进程, 告诉操作系统, 当前的这个数据要交给哪个进程来处理;IP地址 端口号能…

碾压GPT-4!Claude3到底有多强?

2024年3月4日,官方宣布推出 Claude 3 模型系列,它在广泛的认知任务中树立了新的行业基准。该系列包括三个按能力递增排序的最先进模型:Claude 3 Haiku、Claude 3 Sonnet 和 Claude 3 Opus。每个后续模型都提供越来越强大的性能,允…

【C++】—— 建造者模式

目录 (一)概念详解 (二)代码详解 (三)建造者优缺点详解 (一)概念详解 建造者模式是⼀种创建型设计模式,使⽤多个简单的对象⼀步⼀步构建成⼀个复杂的对象&#xff0c…

静图转换gif动图怎么操作?用这个网站一键生成

静态图片是指一张固定的、不具有动画效果的图像。它是由像素点组成的,每个像素点都有自己的颜色值,形成了整个图像。静态图片通常以常见的图像格式保存,并且在打开时显示相同的内容,没有任何动态变化。动态图片是指一系列图像帧按…

MySQL8.0安装教程+使用Navicat远程连接

MySQL8.0安装教程使用Navicat远程连接 版本:MySQL8.0.28 环境:Windows11 1.MySQL下载 进入官网https://www.mysql.com/进行下载: 2.安装MySQL 下载好后,点击运行程序开始安装,安装步骤如下: 以下步骤验…

linux GitLab 私有仓库的搭建

下载地址 gitLab 安装包下载地址:https://about.gitlab.com/install/ 环境准备: 环境:CentOS7.6 安装包:gitlab-ce-8.9.5-ce.0.el7.x86_64.rpm 硬件配置: 4G 安装步骤: 安装: [rootserver3 ~]…

java变量是什么?怎么定义的?有哪些注意事项?

1、变量的概念 先看下面这个案例,我们要输出10,是不是可以这么输出: public class Demo {public static void main(String[] args) {System.out.println(10);System.out.println(10);System.out.println(10);System.out.println(10);System…

物联网导论

物联网起源 物联网:是一个基于互联网、传统电信网等信息承载体,让所有能够被独立寻址的普通物理对象实现互联互通的网络。它具有普通对象设备化、自治终端互联化和普适服务智能化三个重要特征。 按照规定的协议,将具有感知、通信、计算等功…

【前端】HTML常用标签

因为想当个全栈,所以巩固了一下HTML与CSS和JS基础,这一篇博客是HTML部分 文章目录 HTML 基础标签 1HTML 基础框架HTML 基础标签语义标签文本格式化标签div 与 span 标签图像标签超链接特殊字符 基础标签 2 | 表格表格的使用表格标签表格属性表格的头部与…

堡垒机jumpserver的安装部署和使用

jumpserver的介绍: 官方文档:jumpserver官方中文文档 JumpServer 是广受欢迎的开源堡垒机,是符合 4A 规范的专业运维安全审计系统。JumpServer 帮助企业以更安全的方式管控和登录所有类型的资产,实现事前授权、事中监察、事后审计…

千寻星地一体农机导航燃爆2024内蒙农机展

千寻星地一体农机导航燃爆2024内蒙农机展 2024年3月9日-11日,2024内蒙古农牧业机械展览会在内蒙古呼和浩特敕勒川国际会展中心展出。展会上,千寻位置以“北斗时空智能,助力数智农业”为主题,展示了北斗导航农机自动驾驶系统、星地…

ELEVENLABS AI在线AI语音合成工具,28种语言

一、Elevenlabs简介 ElevenLabs 可以使用合成语音、克隆语音或全新的「人工」语音将文本转化为语音,并且这些语音可以模仿不同性别、年龄和种族的声音。 ElevenLabs基于目前强大的生成式语音模型,提供文本生成语音、语音合成、语音克隆和语音识别分类功…

深入了解与全面解析华为认证(HCIA/HCIP/HCIE)

一、网络行业技术认证 网络行业对于技术评定一般分为两种,一种是企业认证,一种是国家认证 企业认证属于技术认证,在国内的互联网企业都会承认,用于评定一个人的技术等级或者企业招投标的资质。 网络行业认证最好的有三种&#x…

c++之旅——第六弹

大家好啊,这里是c之旅第五弹,跟随我的步伐来开始这一篇的学习吧! 如果有知识性错误,欢迎各位指正!!一起加油!! 创作不易,希望大家多多支持哦! 一,静态成员&…

网页脚本 bilibili006:视频下载脚本修改+油猴脚本发布

视频下载脚本修改 原始脚本的下载的视频名称总是错的&#xff0c;调用的代码为 document.querySelector(.tag-txt).textContent &#xff0c;发现这是标签的名称 查找视频名称所在的类名称 <h1 title"任天堂告yuzu模拟器&#xff0c;龙神模拟器会被殃及池鱼吗"…

工业数学模型——冶金烧结配矿(一)

1、工业场景 从很多种铁矿石中选出适合烧结配料的部分铁矿石及其比例&#xff0c;并使其成本最低。 2、数学模型 设Pi代表了第i种原料的成本&#xff0c;xi代表了第i种原料在总配料中的比例&#xff0c;其中i取值为1,2,…,n。计算1吨配料成本&#xff1a; 第种原料的成本是Y…

分布式系统超详解析

目录 常见概念 基本概念 应用/系统 模块/组件 分布式 集群 主/从 中间件 评价指标 可用性 响应时长 吞吐量/并发量 架构演进 单机架构 应用数据分离架构 引入更多的应用服务器结点 读写分离架构 引入缓存--冷热分离的结构 垂直分库 业务拆分--微服务 为了更…

【惠友小课堂】膝关节可以只换一半?单髁置换术,哪里坏了修哪里,重塑新“膝”望

髁 这个字念啥&#xff1f; 被指到的人来回答 不念“踝&#xff08;hui&#xff09;”也不念“果” 正确念法为“kē”&#xff08;科额~髁&#xff09; 膝关节是人体承重较大的关节&#xff0c;并且使用频率较高&#xff0c;因此膝关节很容易磨损、损伤等。年龄的增长、意外受…

魔法之线:探索string类的神秘世界

&#x1f389;个人名片&#xff1a; &#x1f43c;作者简介&#xff1a;一名乐于分享在学习道路上收获的大二在校生 &#x1f648;个人主页&#x1f389;&#xff1a;GOTXX &#x1f43c;个人WeChat&#xff1a;ILXOXVJE &#x1f43c;本文由GOTXX原创&#xff0c;首发CSDN&…

小马智行与卢森堡签署自动驾驶合作谅解备忘录

近日&#xff0c;自动驾驶企业小马智行宣布与卢森堡大公国政府签署谅解备忘录&#xff0c;促进自动驾驶汽车及技术在卢森堡的发展。该文件由小马智行联合创始人、CEO彭军与卢森堡经济部长Lex Delles共同签署&#xff0c;这也标志着小马智行与卢森堡政府就推动该地区的自动驾驶研…