5-事件组&任务通知
获取某个事件
获取若干事件中的某个事件
获取若干事件中的全部事件
!!!!不可获得若干事件中的几个事件
创建事件组,设置事件,等待事件
static EventGroupHandle_t xEventGroupCalc;
/* 创建事件组 */
xEventGroupCalc = xEventGroupCreate();
xEventGroupSetBits(xEventGroupCalc, (1<<0)); xEventGroupWaitBits(xEventGroupCalc, (1<<0)|(1<<1), pdTRUE, pdTRUE, portMAX_DELAY);
//哪个组,等待哪些事件,返回前是否清除事件,是否要等待前面设置的所有事件【否的话当一个来的时候就处理】,不满足的话等多久
同步点: ABC三个任务需要全部都完成才算完成,才能走下一步
a<<4 指把a的各二进位向左移动4位

#define TABLE (1<<0)
#define BUYING (1<<1)
#define COOKING (1<<2)
#define ALL (TABLE | BUYING | COOKING)
/* 表示我做好了, 还要等别人都做好 */
xEventGroupSync(xEventGroup, COOKING, ALL, portMAX_DELAY);
(哪个时间组,我做的什么事件,需要等哪些事件,等多久)
static void vCookingTask( void *pvParameters )
{
const TickType_t xTicksToWait = pdMS_TO_TICKS( 100UL );
int i = 0; /* 无限循环 */
for( ;; )
{
/* 做自己的事 */
printf("%s is cooking %d time....\r\n", (char *)pvParameters, i); /* 表示我做好了, 还要等别人都做好 */
xEventGroupSync(xEventGroup, COOKING, ALL, portMAX_DELAY); /* 别人也做好了, 开饭 */
printf("%s is eating %d time....\r\n", (char *)pvParameters, i++);
vTaskDelay(xTicksToWait);
}
}
事件组起通知作用,数据的保存还需要你另外想办法,比如使用队列
任务通知
使用任务通知时,就是“通知任务”,目标明确。发送者.接收者是多对1的关系。


左侧的两个任务发通知(都不等待【因为不像队列那样有等待的链表】)给右边的任务(等待),右边任务的TCB控制块里面有别的任务通知的值,也有自己的状态,
当接收到通知的值时,改变状态值,返回
没有收到通知时,可以等待

简易使用
xTaskNotifyGive(xHandleTask2);
//让Task2 TCB控制块 里面的value++ val = ulTaskNotifyTake(pdTRUE, portMAX_DELAY);
//获取TCB里面的value值,pdTRUE返回时使value=0,pdFALSE使value--(都不影响返回的value)
//使value=0 只能take1次,然后’阻塞‘,相反使用-- 能take N次
12-1未完待续

3的取值有


有多次通知时,是否覆盖之前的通知(不覆盖的话,发送数据不成功) 具体见后文的【任务通知-轻量型队列】
4在函数入口处清除几个位
5在函数出口处清除几个位,设置为0则不清除
6 *pul=value在出口被清除前的value,就是别人发消息附带的值
实操: 对于信号量发送次数与接收次数对应, 那对于任务通知的话,是如何对应的呢


任务通知-轻量型队列

问题:那两个参数如何使用呢
任务通知-轻量级事件组
之前的事件组是改变了某些位,当满足条件时,目标任务才能被唤醒
而任务通知则时,只要任务通知的时候设置了某些位,不管满不满足条件,都会唤醒目标任务

不同的任务通知,可以设置相同的任务TCB里面的VALUE

12-4OVER
5-事件组&任务通知的更多相关文章
- OneAlert 入门(四)——事件分派和通知必达
OneAlert 是国内首个 SaaS 模式的云告警平台,集成国内外主流监控/支撑系统,实现一个平台上集中处理所有 IT 事件,提升 IT 可靠性.有了 OneAlert,你可以更快更合理地为事件划分 ...
- C#代码:用事件模式实现通知
事件提供了一种标准的机制来通知监听者..NET的事件模式使用了事件语法来实现观察者模式.任意数量的客户对象都可以将自己的处理函数注册到事件上,然后处理这些事件.这些客户对象不需要再编译期就给出.时间也 ...
- IntelliJ IDEA(四) :Settings【Appearance and Behavior】
前言 IDEA是一个智能开发工具,每个开发者的使用习惯不同,如何个性化自己的IDEA?我们可以通过Settings功能来设置.Settings文件是IDEA的配置文件,通过他可以设置主题,项目,插件, ...
- IntelliJ IDEA(四) :Settings(上)
前言 IDEA是一个智能开发工具,每个开发者的使用习惯不同,如何个性化自己的IDEA?我们可以通过Settings功能来设置.Settings文件是IDEA的配置文件,通过他可以设置主题,项目,插件, ...
- FreeRTOS笔记
任务的创建和删除(静态方法) 任务创建后要开启调度器. FreeRTOSConfig.h 1. 改宏 使能静态创建函数. 会出现,有两个函数未定义. Cortex-M中断管理(上) NVIC:嵌套向量 ...
- FreeRTOS任务基础概念
RTOS系统的核心就是任务管理: 任务的特性 在RTOS中每个任务都有自己的运行环境,不依赖于系统中其他的任务或者调度器,任何一个时间点只能有一个任务运行,具体运行哪个任务是由任务调度器来决定的,而任 ...
- 不可被忽视的操作系统( FreeRTOS )【1】
把大多数人每个星期的双休过过成了奢侈的节假日放假,把每天23点后定义为自己的自由时间,应该如何去思考这个问题 ? 双休的两天里,不!是放假的两天里,终于有较长的时间好好的学习一下一直断断续续的Free ...
- 【FreeRTOS学习03】小白都能懂的Task Management 任务管理基本概念介绍
在FreeRTOS中,线程的术语又可以被称之为任务,或许这样更加合适,本文将介绍任务的创建/删除,任务参数的使用,以及任务优先级: 1 软实时和硬实时 硬实时系统的任务运行正确性与响应时限是紧密相关的 ...
- FreeRTOS-00-基础知识+任务创建删除
1 说明 本文仅作为学习FreeRTOS的记录文档,作为初学者肯定很多理解不对甚至错误的地方,望网友指正. 1.1 简介 FreeRTOS是一个RTOS(实时操作系统)系统,支持抢占式.合作式和时间片 ...
- FreeRTOS学习笔记——FreeRTOS 任务基础知识
RTOS 系统的核心就是任务管理,FreeRTOS 也不例外,而且大多数学习RTOS 系统的工程师或者学生主要就是为了使用RTOS 的多任务处理功能,初步上手RTOS 系统首先必须掌握的也是任务的创建 ...
随机推荐
- 教你用JavaScript实现调皮的字母
案例介绍 欢迎来到我的小院,我是霍大侠,恭喜你今天又要进步一点点了!我们来用JavaScript编程实战案例,制作提高打字速度的小游戏-调皮的字母.点击与屏幕上字母相对应的按键,若按键与出现的字母一致 ...
- IIS的基本安装和配置
实验介绍:IIS的作用 IIS是web服务器中常见的一种.当客户端想访问某个域名时,向web服务器发出请求.web服务器返回网页的代码做出回应.客户端解析代码生成网页. 一:安装IIS 1.打开一台w ...
- ASP.NET Core分布式项目实战(Consent视图制作)--学习笔记
任务19:Consent视图制作 按照上一节 Consent 的思路 在 mvcCookieAuthSample 项目的 Controllers 文件夹下新建一个 ConsentController ...
- Excel-批量填充数字
1.一般情况下,都是使用鼠标左右键拖动来实现数据的填充的 2.但是填充1200列,下拉拖动就非常麻烦,可以首先定位到A200. 在屏幕左侧中央处找到剪切板下方的"A1"字样,鼠标单 ...
- 解析Sermant热插拔能力:服务运行时动态挂载JavaAgent和插件
本文分享自华为云社区<服务运行时动态挂载JavaAgent和插件--Sermant热插拔能力解析>,作者:华为云高级软件工程师 栾文飞 一.概述 Sermant是基于Java字节码增强技术 ...
- Java线上代码热修复的一些积累
工具:Arthas 参考文章: https://blog.csdn.net/Admire_an/article/details/99768393 https://www.cnkirito.moe/ar ...
- MAYSQL 2 DAY
目录 MySQL day02 1.关于查询结果集的去重? 2.连接查询 2.2.连接查询的分类? 2.4.怎么避免笛卡尔积现象?当然是加条件进行过滤. 2.5.内连接之等值连接:最大特点是:条件是等量 ...
- JS leetcode 寻找旋转排序数组中的最小值 题解分析,你不得不了解的二分法
壹 ❀ 引 堕落了一天,那么接着来刷leetcode,今天做的一题不算复杂,题目来自leetcode153. 寻找旋转排序数组中的最小值,题目描述如下: 假设按照升序排序的数组在预先未知的某个点上进行 ...
- JS leetcode 反转字符串中的单词 III 题解分析
壹 ❀ 引 又到了快乐的leetcode算法时间,今天的题目特别特别简单,来自leetcode557. 反转字符串中的单词 III,题目描述如下: 给定一个字符串,你需要反转字符串中每个单词的字符顺序 ...
- git基本操作(二)
分支(git branch) git branch 命令用于列出,创建或删除分支. git branch -a git branch git branch -v # 查看每一个分支上的最后一次comm ...