freeRTOS事件标志组(1-16)

2024-05-03 02:12
文章标签 16 事件 freertos 标志

本文主要是介绍freeRTOS事件标志组(1-16),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

def:事件标志组简介

事件标志位:用一个为来表示事件是否发生

事件标志组是事件标志位的集合可以简单的理解事件标志组,就是一个整数

事件标志组的特点:

  • 1:它的每一个位表示一个事件(高8位不算)

  • 2:每一个事件的含义,由用户自己决定,如:bit0表示按键是否按下,bit表示是否接收到消息......(这些位的值为1:表示事件发生了,值为0:表示事件未发生)

  • 3:任意任务或中断都可以读写这些位

  • 4:可以等待某一位成立,或者诸多位同事成立

事件标志组简介

一个事件组就包含了一个EventBits_t 数据类型的变量,变量类型EventBits_t的定义如下所示。

事件标志组简介(了解)

虽然使用了32位无符号的数据类型变量来存储事件标志,但其中的高8位用作存储事件标志组的控制信息,低24位用作存储事件标志,所以说一个事件组最多可以存储24个事件标志!

事件标志组与队列,信号量的区别?

事件标志组API函数简介

创建标志组

使用动态的方式创建事件标志组

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

EventGroupHandle_t xEventGroupCreate ( void ) ;

返回值描述
NULL事件标志组创建失败
其他值事件标志组创建成功,返回句柄

创建示例:

清除事件标志位API函数

EventBits_t xEventGroupClearBits( EventGroupHandle_t xEventGroup,const EventBits_t  uxBitsToClear);

形参描述
xEventGroup待操作的事件标志组句柄
uxBitsToSet待清零的事件标志位
返回值描述
整数清零事件标志位之前事件组中事件标志位的值

设置事件标志位API函数

EventBits_t xEventGroupSetBits( EventGroupHandle_t xEventGroup, const EventBits_t

uxBitsToSet)

形参描述
xEventGroup待操作的事件标志组句柄
uxBitsToSet待设置的事件标志位
返回值描述
整数事件组中的事件标志位值

可以设置事件组的某个位、某些位,使用的函数有2个:

  • 在任务中使用 xEventGroupSetBits()

  • 在ISR中使用 xEventGroupSetBitsFromISR()

有一个或多个任务在等待事件,如果这些事件符合这些任务的期望,那么任务还会被唤醒。函数原型如下:

注:

值得注意的是,ISR中的函数,比如队列函数 xQueueSendToBackFromISR、信号量函数xSemaphoreGiveFromISR,它们会唤醒某个任务,最多只会唤醒1个任务。

但是设置事件组时,有可能导致多个任务被唤醒,这会带来很大的不确定性。

所以xEventGroupSetBitsFromISR函数不是直接去设置事件组,而是给一个FreeRTOS后台任务(daemon task)发送队列数据,由这个任务来设置事件组。

如果后台任务的优先级比当前被中断的任务优先级高, xEventGroupSetBitsFromISR会设置 *pxHigherPriorityTaskWoken为pdTRUE。

如果daemon task成功地把队列数据发送给了后台任务,那么 xEventGroupSetBitsFromISR的返回值就是pdPASS。

等待事件标志位的API函数

形参描述
xEventGroup等待事件标志组句柄
uxBitsToWaitFor等待事件标志位,可以用逻辑或等待多个事件标志位
xClearOnExit

成功等待事件标志位后,清除事件组中对应的事件标志位,

pdTRUE:  清除uxBitsToWaitFor指定位

pdFALSE: 不清除

xWaitForAllBits

等待uxBitsToWaitFor中的所有事件标志位(逻辑与)

pdTRUE:等待的位,全部为1

pdFALSE:等待的位,某个为1

xTicksToWait等待的阻塞时间
返回值描述
等待事件标志位值等待事件标志位成功,返回等待到的事件标志位
其他值等待事件标志位失败,返回事件组中的事件标志位

特点:可以等待某一位也可以等待多位,等到期望事件后,还可以清除某些位

同步函数

例子:

Task 1 : 做饭

Task 2 : 做菜

Task1做好自己的事情之后, 需要等到菜也做好后,大家再一起吃饭

事件标志组API函数实验

-----------------------------后续编写代码验证--------------------------------------

这篇关于freeRTOS事件标志组(1-16)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/955619

相关文章

Python中的异步:async 和 await以及操作中的事件循环、回调和异常

《Python中的异步:async和await以及操作中的事件循环、回调和异常》在现代编程中,异步操作在处理I/O密集型任务时,可以显著提高程序的性能和响应速度,Python提供了asyn... 目录引言什么是异步操作?python 中的异步编程基础async 和 await 关键字asyncio 模块理论

禁止平板,iPad长按弹出默认菜单事件

通过监控按下抬起时间差来禁止弹出事件,把以下代码写在要禁止的页面的页面加载事件里面即可     var date;document.addEventListener('touchstart', event => {date = new Date().getTime();});document.addEventListener('touchend', event => {if (new

FreeRTOS-基本介绍和移植STM32

FreeRTOS-基本介绍和STM32移植 一、裸机开发和操作系统开发介绍二、任务调度和任务状态介绍2.1 任务调度2.1.1 抢占式调度2.1.2 时间片调度 2.2 任务状态 三、FreeRTOS源码和移植STM323.1 FreeRTOS源码3.2 FreeRTOS移植STM323.2.1 代码移植3.2.2 时钟中断配置 一、裸机开发和操作系统开发介绍 裸机:前后台系

【JavaScript】LeetCode:16-20

文章目录 16 无重复字符的最长字串17 找到字符串中所有字母异位词18 和为K的子数组19 滑动窗口最大值20 最小覆盖字串 16 无重复字符的最长字串 滑动窗口 + 哈希表这里用哈希集合Set()实现。左指针i,右指针j,从头遍历数组,若j指针指向的元素不在set中,则加入该元素,否则更新结果res,删除集合中i指针指向的元素,进入下一轮循环。 /*** @param

FreeRTOS内部机制学习03(事件组内部机制)

文章目录 事件组使用的场景事件组的核心以及Set事件API做的事情事件组的特殊之处事件组为什么不关闭中断xEventGroupSetBitsFromISR内部是怎么做的? 事件组使用的场景 学校组织秋游,组长在等待: 张三:我到了 李四:我到了 王五:我到了 组长说:好,大家都到齐了,出发! 秋游回来第二天就要提交一篇心得报告,组长在焦急等待:张三、李四、王五谁先写好就交谁的

【经验交流】修复系统事件查看器启动不能时出现的4201错误

方法1,取得『%SystemRoot%\LogFiles』文件夹和『%SystemRoot%\System32\wbem』文件夹的权限(包括这两个文件夹的所有子文件夹的权限),简单点说,就是使你当前的帐户拥有这两个文件夹以及它们的子文件夹的绝对控制权限。这是最简单的方法,不少老外说,这样一弄,倒是解决了问题。不过对我的系统,没用; 方法2,以不带网络的安全模式启动,运行命令行,输入“ne

BT天堂网站挂马事件后续:“大灰狼”远控木马分析及幕后真凶调查

9月初安全团队披露bt天堂网站挂马事件,该网站被利用IE神洞CVE-2014-6332挂马,如果用户没有打补丁或开启安全软件防护,电脑会自动下载执行大灰狼远控木马程序。 鉴于bt天堂电影下载网站访问量巨大,此次挂马事件受害者甚众,安全团队专门针对该木马进行严密监控,并对其幕后真凶进行了深入调查。 一、“大灰狼”的伪装 以下是10月30日一天内大灰狼远控的木马样本截图,可以看到该木马变种数量不

FreeRTOS学习笔记(六)队列

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、队列的基本内容1.1 队列的引入1.2 FreeRTOS 队列的功能与作用1.3 队列的结构体1.4 队列的使用流程 二、相关API详解2.1 xQueueCreate2.2 xQueueSend2.3 xQueueReceive2.4 xQueueSendFromISR2.5 xQueueRecei

FreeRTOS学习笔记(二)任务基础篇

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、 任务的基本内容1.1 任务的基本特点1.2 任务的状态1.3 任务控制块——任务的“身份证” 二、 任务的实现2.1 定义任务函数2.2 创建任务2.3 启动任务调度器2.4 任务的运行与切换2.4.1 利用延时函数2.4.2 利用中断 2.5 任务的通信与同步2.6 任务的删除2.7 任务的通知2

FreeRTOS学习笔记(四)Freertos的中断管理及临界保护

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、Cortex-M 中断管理1.1 中断优先级分组1.2 相关寄存器1.3 相关宏定义1.4 FreeRTOS 开关中断 二、临界段及其保护2.1 taskENTER_CRITICAL( ) 和 taskEXIT_CRITICAL( )2.2 taskENTER_CRITICAL_FROM_ISR( )