FreeRTOS创建的任务都有一个任务控制块。
任务控制块本质上是一个结构体变量,用于记录任务的相关的消息。
结构体变量中有一个专门用于任务通知的32位变量ulNotifiedValue。

ulNotifiedValue可取代计数信号,二值信号,事件标志组
特点: 节省内存,提高效率,只有一个任务等待

  • ulNotifiedValue数值进行加一或减一就是计数信号量
  • ulNotifiedValue数值取值0或1就是二值信号量
  • ulNotifiedValue数值按位设置bit0-bit31就是事件标志组

任务信号量

ulNotifiedValue 计数信号表示可用的资源大小,多用于任务同步

任务计数信号API 功能
BaseType_t xTaskNotifyGive( TaskHandle_t xTaskToNotify ) 释放信号量,信号量+1
uint32_t ulTaskNotifyTake( BaseType_t xClearCountOnExit,TickType_t xTicksToWait ) 获取信号量,信号量-1或清零,参数1为pdFALSE表示计数信号,参数1为pdTRUE表示二值信号
void vTaskNotifyGiveFromISR(TaskHandle_t xTaskToNotify,BaseType_t *pxHigherPriorityTaskWoken ) 释放信号量,信号量+1(中断)
**释放信号量**
xTaskNotifyGive(xHandleTaskMsgPro);
**获取计数信号量**
ulNotifiedValue = ulTaskNotifyTake(pdFALSE,xBlockTime);
**获取二值信号量**
ulNotifiedValue = ulTaskNotifyTake(pdTRUE,xBlockTime);

任务事件标志组

ulNotifiedValue的bit0-bit31用于事件标志

任务事件标志API 功能
BaseType_t xTaskNotify( TaskHandle_t xTaskToNotify,uint32_t ulValue, eNotifyAction eAction ) 设置事件标志位,eAction表示任务通知类型,事件标志模式为eSetBits
BaseType_t xTaskNotifyWait(。。。) 获取事件标志位
aseType_t xTaskNotifyFromISR(。。。) 设置事件标志位(中断)

参数 eNotifyAction: 任务通知模式eNoAction 无任务通知,控制块中的ulNotifiedValue值无效eSetBits  事件标志组模式eIncrement 信号量模式eSetValueWithOverwrite 消息邮箱模式eSetValueWithoutOverwrite 消息邮箱不允许覆盖模式BaseType_t xTaskNotify( TaskHandle_t xTaskToNotify, uint32_t ulValue,eNotifyAction eAction );

任务消息邮箱

消息邮箱本质上就是长度为1的消息队列。
任务消息邮箱是将任务控制块中的ulNotifiedValue值当作单个消息。

任务消息邮箱API 功能
BaseType_t xTaskNotify( TaskHandle_t xTaskToNotify,uint32_t ulValue, eNotifyAction eAction ) 发送消息,eAction表示任务通知类型,消息邮箱模式为eSetValueWithOverwrite
BaseType_t xTaskNotifyWait(0x00000000,0xFFFFFFFF,&ulValue,xMaxBlockTime) 接收消息
aseType_t xTaskNotifyFromISR(。。。) 设置事件标志位(中断)
xResult = xTaskNotifyWait(0x00000000, 0xFFFFFFFF, &ulValue,MaxDelay);

FreeRTOS基于任务通知的信号量 事件标志组 消息邮箱相关推荐

  1. FreeRTOS记录(七、FreeRTOS信号量、事件标志组、邮箱和消息队列、任务通知的关系)

    我们在前面单独介绍过FreeRTOS的任务通知和消息队列, 但是在FreeRTOS中任务间的通讯还有信号量,邮箱,事件组标志等可以使用 这篇文章就这些成员与消息队列和任务通知的关系进行说明分析 ..增 ...

  2. FreeRTOS操作系统——任务通知模拟消息邮箱及事件标志组(十八)

    FreeRTOS操作系统学习 文章目录 FreeRTOS操作系统学习 一.消息邮箱API函数 二.消息邮箱实验 三.事件标志组实验 总结 一.消息邮箱API函数 任务通知也可用来向任务发送数据,但是相 ...

  3. 【FreeRTOS】小白进阶之如何使用FreeRTOS事件标志组

    事件标志组使用浅析. 1.头文件声明 #include "FreeRTOS.h" #include "task.h" #include "event_ ...

  4. FreeRTOS 任务计数信号量,任务二值信号量,任务事件标志组,任务消息邮箱

    以下基础内容转载自安富莱电子: http://forum.armfly.com/forum.php 本章节为大家讲解 FreeRTOS 计数信号量的另一种实现方式----基于任务通知(Task Not ...

  5. FreeRTOS源码分析与应用开发07:事件标志组

    目录 1. 概述 2. 事件标志组类型 3. 创建事件标志组 4. 删除事件标志组 5. 设置事件标志位 5.1 任务级设置 5.2 中断级设置 6. 清除事件标志位 6.1 任务级清除 6.2 中断 ...

  6. 事件标志组的等待与通知

    文章目录 1 事件标志组的等待与通知 1.1 设计需求 1.2 设计实现 1 事件标志组的等待与通知 1.1 设计需求 当事件标志位发生时: 没有任务等待,设置相应的事件标志. 有任务等待时,唤醒等待 ...

  7. FreeRTOS 事件标志组 ——提高篇

    假设你已经看过FreeRTOS 事件标志组这篇随笔了. 之前的基础篇,真的就只是简单了解一下,相当于大学实验室的实验,但是,我们实际公司项目中,需要更多地思考,就算我们之前只是学习了基础概念以及基础语 ...

  8. FreeRTOS 事件标志组

      FreeRTOS任务可以使用信号量来完成同步,但是使用信号量来同步的话任务只能与单个的事件或任务进行同步.有时候某个任务可能会需要与多个事件或任务进行同步,此时信号量就无能为力了. FreeRTO ...

  9. 互斥量、临界区、信号量、事件标志组和消息邮箱

    为了好的理解互斥量.临界区.信号量.事件标志组和消息邮箱,下面一些知识对初学者来说很重要: 为了实现各任务之间的合作和无冲突的运行,在有关联的任务之间必须建立一些制约关系.这些制约关系主要有两种:直接 ...

最新文章

  1. SQLMap安装步骤
  2. 经典排序算法 - 鸽巢排序Pigeonhole sort
  3. 独立开放者入行之前应该知道的8件事
  4. 20-ESP8266 SDK开发基础入门篇--C# TCP客户端编写 , 加入数据通信
  5. 天津大学计算机科学学院夏令营,天津大学计算机科学与技术学院(专业学位)计算机技术保研夏令营...
  6. linux自定义和使用 shell 环境(一)
  7. linux多用户运行同一程序_linux系统中CentOS有哪些优势,让它长盛不衰?
  8. 使用 Storyboard Segue 实作 UIViewController 的切换 (实例)
  9. mysql 5.6特性_MySQL 5.6新特性概览
  10. Android 解决调用系统相册打不开图片 DecodeServices报解码错误
  11. 金税盘、税控盘、税务UKey快速批量抄税清卡的一种方法分享
  12. python课本图片_python爬虫当当网python书籍图片
  13. ofstream错误:error: variable ‘std::ofstream ofs’ has initializer but incomplete type
  14. 解密一个话费慢充的灰产项目
  15. 邮件群发技巧,edm邮件5个技巧
  16. 阿里云的免费云虚拟主机
  17. CMA软件产品测试报告在哪申请,软件测试费用又是多少?
  18. MATLAB App Designer生成独立GUI(可执行exe)并添加依赖项
  19. 阿里云javaweb开发环境搭建(一)(jdk+Tomcat)
  20. 1237. 回旋镖的数量

热门文章

  1. 【中国地质大学】初试复试资料分享(附考研群)
  2. nodejs+vue 微信小程序的外卖点餐平台
  3. 关于fi dd ler 手机抓包 网卡地址地址_抓包神器:tcpdump!我还真没用过
  4. 知道这10个软件,策划再复杂的活动都不怕
  5. 在directx中如何设置垂直同步
  6. 云南茶叶品类详细介绍,不少于500字数
  7. 【Deep Learning 】深度模型中的优化问题(四)之如何逃离(跳出)鞍点(Saddle Points)
  8. 数据结构与算法编程作业 图
  9. 高通骁龙8cx gen2相当于什么水平 骁龙8cx gen2参数
  10. MapKit 以及大头针的简单使用