当前位置: 首页 > news >正文

FreeRTOS源码阅读笔记4--semphr.h

 信号量是特殊的队列--无法存储消息的队列,相关的接口函数声明在semphr.h中,通过宏定义替换队列函数实现。

4.1创建二值信号量xSemaphoreCreateBinary()

4.1.1函数原型

  • queueQUEUE_TYPE_BINARY_SEMAPHORE:一个宏,表示创建队列的类型是二值信号量
4.1.2函数框架

创建二值信号量实际上是,创建了一个队列,这个队列的长度为1,存储队列消息的空间为0。

4.2创建计数信号量xSemaphoreCreateCounting()

4.2.1函数原型

  • uxMaxCount:计数信号量的最大值,当达到这个值的时候,信号量不能再被释放。
  • uxInitialCount:初始信号量的值。
4.2.2函数框架

  • ①调用xQueueGenericCreate函数创建一个长度为uxMaxCount,消息存储空间为0的队列。
  • ②使uxMessagesWaiting = uxInitialCount,表示当前可用的信号量数量为uxInitialCount。

4.3删除信号量vSemaphoreDelete()

4.3.1函数原型

4.3.2函数框架

调用vQueueDelete()函数删除。

4.4释放信号量xSemaphoreGive()

4.4.1函数原型

  • xSemaphore:信号量的句柄,指向队列控制块;
  • NULL:表示消息体为空;
  • semGIVE_BLOCK_TIME:宏,数值0,表示阻塞时间为零;
  • queueSEND_TO_BACK:一个宏,表示发送到队列尾部。
4.4.2函数框架

从函数原型可以看出,信号量释放是不会阻塞任务的,所以如果队列是满的,就不会去更新阻塞时间、检查阻塞时间是否过了、再检查队列是否还是满的等操作,直接返回err_QUEUE_FULL。

  • ①如果队列没满,uxMessageWaiting加一,表示信号量的数量加一;如果此时有任务在等待接收信号量,唤醒该任务,返回pdPASS。
  • ②如果队列满了,直接返回err_QUEUE_FULL。

4.5释放信号量xSemaphoreGiveFromISR()

4.5.1函数原型

  • xSemaphore:信号量句柄;
  • pxHigherPriorityTaskWoken:在函数里会改变*pxHigherPriorityTaskWoken的值,可根据它的值判断在中断退出后是否要进行任务切换。
4.5.2函数框架

xQueueGiveFromISR()是xQueueGenericSendFromISR()的简单版,区别是不需要处理队列消息,因为信号量没有消息存储空间。

4.6获取信号量xSemaphoreTake()

4.6.1函数原型

4.6.2函数框架

类似xQueueReceive()函数。

4.7获取信号量xSemaphoreTakeFromISR()

4.7.1函数原型

4.7.2函数框架

调用xQueueReceiveFromISR函数。

http://www.lryc.cn/news/241187.html

相关文章:

  • 面试:MyBatis问题
  • vue中页面(路由)跳转及传值的几种方式 router-link + query + params
  • 媒体格式转换软件Permute 3 mac中文版软件特点
  • Docker实用篇
  • 开启数据库审计(db,extended级别或os级别),并将审计文件存放到/home/oracle/audit下
  • 单片机语音芯片开发要解决的问题
  • Cesium 展示——地球以及渲染数据导出(下载)为图片或 pdf
  • 大数据平台红蓝对抗 - 磨利刃,淬精兵! | 京东云技术团队
  • java游戏制作-王者荣耀游戏
  • Linux实验三:shell程序设计: shell基础
  • webpack环境变量的设置
  • 基于51单片机音乐盒设计( proteus仿真+程序+原理图+PCB+报告+讲解视频)
  • 技术分享| anyRTC之RTN网络
  • 基于GPRS的汽车碰撞自动报警系统(论文+源码)
  • qgis添加wms服务
  • 【DQN】基于pytorch的强化学习算法Demo
  • 【C++】泛型编程 ⑭ ( 类模板示例 - 数组类模板 | 容器思想 | 自定义类可拷贝 - 深拷贝与浅拷贝 | 自定义类可打印 - 左移运算符重载 )
  • 砖家测评:腾讯云标准型S5服务器和s6性能差异和租用价格
  • Linux常用命令——blkid命令
  • ES 万条以外分页检索功能实现及注意事项
  • 【MySQL】mysql中不推荐使用uuid或者雪花id作为主键的原因以及差异化对比
  • 【Unity细节】Default clip could not be found in attached animations list.(动画机报错)
  • VsCode连接远程Linux编译环境的便捷处理
  • 【UE】用样条线实现测距功能(下)
  • 矩阵知识补充
  • 机器学习之数据清洗和预处理
  • 【SpringBoot系列】SpringBoot日志配置
  • 庖丁解牛:NIO核心概念与机制详解 06 _ 连网和异步 I/O
  • 域控操作五:统一熄屏睡眠时间
  • 2023APMCM亚太杯数学建模选题建议及初步思路