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位

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

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

相关文章

如何理解合约中的引用类型(3)——Mapping

映射&#xff08;mapping&#xff09; 声明形式&#xff1a;mapping(key type > value type)keytype可以是除枚举外的几乎任何基本类型&#xff0c;包括bytes和string&#xff0c;不包括用户自定义的复杂类型-合约&#xff0c;枚举&#xff0c;结构&#xff0c;映射value t…

简单美观易上手的 Docker Compose 可视化管理器 Dockge

本文首发于只抄博客&#xff0c;欢迎点击原文链接了解更多内容。 前言 Dockge 是 Uptime Kuma 作者的新作品&#xff0c;因此 UI 风格与 Uptime Kuma 基本一致&#xff0c;如果你正在使用 Uptime Kuma 的话&#xff0c;那么 Dockge 的 UI 设计应该也不会让你失望。Dockge 主打…

智慧校园为高校带来哪些价值

在21世纪的教育图景中&#xff0c;"智慧"不再仅仅是一个科技名词&#xff0c;它已成为衡量教育现代化水平的重要标志。智慧校园&#xff0c;这一融合了物联网、大数据、云计算等先进技术的教育新形态&#xff0c;正逐步成为高校转型升级的关键驱动力。本文将从多个维…

note-网络是怎样连接的2 协议栈和网卡

助记提要 协议栈的结构协议栈创建连接的实际过程协议栈发送数据包的2个判断依据TCP确认数据收到的原理断开连接的过程路由表和ARPMAC地址的分配MAC模块的工作通过电信号读取数据的原理网卡和协议栈接收包的过程ICMPUDP协议的适用场景 2章 用电信号传输TCP/IP数据 探索协议栈和…

BUUCTF靶场 [reverse]easyre、reverse1、reverse2

工具&#xff1a; DIE&#xff1a;下载&#xff1a;https://download.csdn.net/download/m0_73981089/89334360 IDA&#xff1a;下载&#xff1a;https://hex-rays.com/ida-free/ 新手小白勇闯逆向区&#xff01;&#xff01;&#xff01; [reverse]easyre 首先查壳&#xf…

如何理解HTML语义化

如何理解HTML语义化 HTML语义化&#xff0c;简单来说&#xff0c;就是使用HTML标签来清晰地表达页面内容的结构和意义&#xff0c;而不仅仅是作为布局的容器。它强调使用具有明确含义的HTML标签来描述页面元素&#xff0c;而不是仅仅依赖CSS来实现页面的外观和布局。 理解HTM…

android 权限相关定义解释

1 PID &#xff1a;程序一运行系统就会自动分配给进程一个独一无二的PID&#xff0c;内部线程可以共享 该pid的分配的内存数据 2 UID&#xff1a;User Identifier,UID在linux中就是用户的ID&#xff0c;表明时哪个用户运行了这个程序&#xff0c;主要用于权限的管理。内部共享各…

【oracle003】图片转为字节、base64编码等形式批量插入oracle数据库并查询

1.熟悉、梳理、总结下Oracle相关知识体系 2.欢迎批评指正&#xff0c;跪谢一键三连&#xff01; 资源下载&#xff1a; oci.dll、oraocci11.dll、oraociei11.dll3个资源文件资源下载&#xff1a; Instant Client Setup.exe资源下载&#xff1a; oci.dll、oraocci11.dll、oraoc…

Vue ref访问这些元素或组件的实例

可以在任意DOM元素上使用ref属性&#xff0c;然后在Vue实例中通过this.$refs访问这个DOM元素 1.访问子组件实例&#xff0c;可以调用方法或者获取值 <template><div><input type"text" ref"myInput" /><button click"focusInp…

ubuntu手动替换源后,更新源时提示“仓库.... jammy Release“ 没有Release文件

问题如图所示&#xff0c;由于问题不好定位&#xff0c;我就从替换源&#xff0c;以及解决错误提示这两个步骤&#xff0c;来解决其中可能存在的问题。 1、替换源 这一步骤&#xff0c;网上的资料可以搜到很多&#xff0c;我跟着做了之后&#xff0c;总会冒出来各种各样的小问…

皮影戏艺术品3D沉浸式展馆提供非同一般的趣味体验

引领艺术展示的未来&#xff0c;深圳华锐视点融合多年的web3d项目制作经验&#xff0c;倾力打造3D虚拟艺术品展馆在线编辑平台&#xff0c;为您提供一个超越时空限制的线上艺术展示平台。 一、极致视觉盛宴 我们拥有领先的美术团队&#xff0c;运用先进的web3D开发技术&#xf…

可能是最适合PS的AI插件,设计师大救星!StartAI初体验!不是恰饭

这款软件虽然有一些功能需要完善&#xff0c;比如&#xff1a; 1&#xff1a;生成图片产品海报&#xff0c;会出现图随意出现&#xff0c;跟设计图起冲突&#xff0c;需要PS才可以正常使用它。 2&#xff1a;即使开会员也需要排队生成。 3: 还有&#xff0c;会员没有更加好用的…

vue3结合element-plus之如何优雅的使用表单组件

背景 在日常开发中,我们会经常使用 element-ui 或者是 antdesign 或者是 element-plus 等组件库实现搜索功能 这里就需要用到相关表单组件 下面就以 element-plus 为例,我们实现一个搜索功能的组件,并且随着屏幕尺寸的变化,其布局也会跟随变化 最终大致效果如下: 这里…

详解VLSM技术

在现代网络设计中&#xff0c;如何高效地分配和管理IP地址是一个关键问题。传统的子网划分方法虽然简单&#xff0c;但在实际应用中常常导致IP地址的浪费。为了应对这一问题&#xff0c;VLSM&#xff08;Variable Length Subnet Mask&#xff0c;可变长子网掩码&#xff09;技术…

C++:set和map的底层封装模拟实现

目录 底层对比&#xff1a; 底层红黑树结构和set、map&#xff1a; 底层模拟&#xff1a; 传值调用&#xff1a; 迭代器&#xff1a; operator &#xff08;&#xff09; find函数 operator&#xff08;&#xff09; 、仿函数 set和map的仿函数 &#xff1a; 图解&a…

地平线-旭日X3派(RDK X3)上手基本操作

0. 环境 - win10笔记本 - RDK X3 1.0&#xff08;地平线旭日X3派&#xff0c;后来改名为代号RDK X3&#xff09; 1. 下载资料 https://developer.horizon.ai/resource 主要下载镜像 http://sunrise.horizon.cc/downloads/os_images/2.1.0/release/ 下载得到了 ubuntu-prei…

vs无法打开或包括文件”QTxxx“

vs创建项目时默认引入core、gui、和widgets等模块&#xff0c;在需要网络通讯或者图表等开发时需要添加相应模块。 点击扩展 -> QT VS Tools -> QT Project Setting->Qt Modules&#xff0c;添加相应模块即可

linux自动部署项目的脚本(从git中拉取并执行)

名字&#xff1a;bootStart.sh ​#!/bin/sh #记事本打开&#xff0c;修改编码格式为utf8&#xff0c;可解决上传centos后中文乱码问题 echo echo 自动化部署脚本启动 echo echo 停止原来运行中的工程 APP_NAME项目名 # 查询系统中正在运行的项目进程&#xff0c;并停止进程 …

Ubuntu系统版本查看办法

Ubuntu系统版本查看办法 1. 使用 lsb_release 命令2. 查看 /etc/issue 文件3. 使用 hostnamectl 命令4. 查看 /etc/os-release 文件5. 查看内核版本6. 使用 neofetch 命令&#xff08;如果已安装&#xff09;总结 在 Ubuntu 操作系统中&#xff0c;查看当前系统版本的详细信息可…

头歌05-排列树实验-旅行商问题

""" 题目&#xff1a;设有n个城市组成的交通图&#xff0c;一个售货员从住地城市q出发&#xff0c;到其它城市各一次去推销货物&#xff0c;最后回到住地城市。 要求&#xff1a;假定两个城市a&#xff0c;b 从a到b的路程花费w_ab是已知的&#xff0c;问应该怎样…