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

news2024/11/16 3:32:49

 信号量是特殊的队列--无法存储消息的队列,相关的接口函数声明在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.coloradmin.cn/o/1234546.html

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

相关文章

2024湖南师范大学计算机考研分析

24计算机考研|上岸指南 湖南师范大学 湖南师范大学创建于1938年,位于历史文化名城长沙,是国家“211工程”重点建设大学、国家“双一流”建设高校、教育部普通高等学校本科教学工作水平评估优秀高校。学校拥有6个“十二五”国家重点学科、21个博士学位授…

【Python爬虫】8大模块md文档集合从0到scrapy高手,第7篇:selenium 数据提取详解

本文主要学习一下关于爬虫的相关前置知识和一些理论性的知识,通过本文我们能够知道什么是爬虫,都有那些分类,爬虫能干什么等,同时还会站在爬虫的角度复习一下http协议。 爬虫全套笔记地址: 请移步这里 共 8 章&#x…

股票池(三)

3-股票池 文章目录 3-股票池一. 查询股票池支持的类型二. 查询目前股票池对应的股票信息三 查询股票池内距离今天类型最少/最多的股票数据四. 查询股票的池统计信息 一. 查询股票池支持的类型 接口描述: 接口地址:/StockApi/stockPool/listPoolType 请求方式:GET…

OpenLayers实战,WebGL图层根据Feature要素的变量动态渲染多种颜色的三角形,适用于大量三角形渲染不同颜色

专栏目录: OpenLayers实战进阶专栏目录 前言 本章使用OpenLayers根据Feature要素的变量动态渲染不同颜色的三角形。 通过一个WebGL图层生成四种不同颜色的图形要素,适用于WebGL图层需要根据大量点要素区分颜色显示的需求。 更多的WebGL图层使用运算符动态生成样式的内容将会…

如何搭建测试环境?一文解决你所有疑惑!

什么是测试环境 测试环境,指为了完成软件测试工作所必需的计算机硬件、软件、网络设备、历史数据的总称,简而言之,测试环境硬件软件网络数据准备测试工具。 硬件:指测试必需的服务器、客户端、网络连接等辅助设备。 软件&#…

5年经验之谈 —— 性能测试如何定位分析性能瓶颈?

你好,我是小牛,目前在一家准一线互联网大厂做测试开发工程师。 对于一般公司普通测试工程师来说,可能性能测试做的并不是很复杂,可能只是编写下脚本,做个压测,然后输出报告结果,瓶颈分析和调优…

SQL基础理论篇(八):视图

文章目录 简介创建视图修改视图删除视图总结参考文献 简介 视图,即VIEW,是SQL中的一个重要概念,它其实是一种虚拟表(非实体数据表,本身不存储数据)。 视图类似于编程中的函数,也可以理解成是一个访问数据的接口。 从…

STM32通用定时器产生PWM信号

STM32通用定时器产生PWM信号 PWM信号stm32定时器PWM生成模式PWM配置基本步骤PWM周期计算CubeMX配置代码展现 本期内容我将展示使用STM32通用定时器产生PWM信号,这里以定时器3通道3为例 PWM信号 如果还不懂的话,可以看看 : “蓝桥杯单片机学习…

使用sonar对webgoat进行静态扫描

安装sonar并配置 docker安装sonarqube,sonarQube静态代码扫描 - Joson6350 - 博客园 (cnblogs.com) 对webgoat进行sonar扫描 扫描结果 bugs Change this condition so that it does not always evaluate to "false" 意思是这里的else if语句不会执行…

基于STC12C5A60S2系列1T 8051单片机的液晶显示器LCD1602显示两行常规字符应用

基于基于STC12C5A60S2系列1T 8051单片机的液晶显示器LCD1602显示两行常规字符应用 STC12C5A60S2系列1T 8051单片机管脚图STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式及配置STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式介绍液晶显示器LCD1602简单介绍通过液晶显…

【算法之路】高精度算法(实现加减乘除)

目录 一、高精度概念 二、高精度算法的实现 1、高精度加法(大整数相加) 2、高精度减法(大整数减法) 3、高精度乘法(大整数*小整数) 4、高精度除法(大整数/小整数) 一、高精度概…

硬件寿命警告!Windows11在特定情况下对【固态硬盘】执行与【机械硬盘】相同的磁盘碎片整理。

首图,无图无真相 据我所知 此bug已持续约3个月。 此bug目前仍可以在Windows Feature Experience Pack 1000.25997.1000.0版本复现(截至2023/11/21,最新的Windows预览金丝雀通道) 如何复现 1 手动运行系统维护,点…

<C++> 模板-下

目录 前言 一、非类型模板参数 二、类模板的特化 1. 概念 2. 函数模板特化 3. 类模板特化 4. 全特化 5. 偏特化 5.1 特化部分参数 5.2 对某些类型的进一步限制 三、模板的分离编译 1. 概念 2. 分离编译 3. 解决方法 1. 显式实例化 2. 在一个文件内写声明和定义 四、模板总结 …

UE5、CesiumForUnreal实现加载GeoJson绘制盒体(Box)功能(StaticMesh方式)

文章目录 1.实现目标2.实现过程2.1 实现原理2.2 具体代码2.3 应用测试2.3.1 材质2.3.2 蓝图测试3.参考资料1.实现目标 与之前基于StaticMesh创建Polygon和Wall类似,本文通过读取本地GeoJson数据,在UE中以staticMeshComponent的形式绘制出盒体Box,支持Editor和Runtime模式,在…

HR人才测评,提高员工和岗位的适配度

作为中小企业领导,除了操心企业的经营管理,还得经常为内部运行做考虑。某个岗位总是缺少匹配的员工,而公司的员工如何进行岗位优化,这都是人资管理中经常遇到的难题,归根结底,是对人才评价的难题。 人才&a…

【PHY6222】simpleBLEPeripheral剖析

源码剖析 main.c main函数中所有使用extern引用外部的函数均无源码,具体细节不可知。 可以看到源码函数有以下几个: hal_rfphy_init: 相关参数: hal_init: jump_table.c 因为rom的code是不开源的,rom代…

ubuntu 安装 gparted

前提环境: 阿里云的源。 sudo apt update sudo apt upgrade sudo apt install gparted 搜索:

新能源充电桩工业4G路由器应用,推动绿色出行,响应环保理念

在智慧城市环保事业发展领域,新能源技术应用成熟,物联网技术越来越广泛,充电桩物联网成为了智慧城市建设的热门应用。充电桩作为新能源汽车的重要配套设施,对于节能减排和推动环保理念可持续发展具有重要意义。而工业4G路由器作为…

OpenLayers入门,OpenLayers6的WebGLPointsLayer图层样式运算符详解

专栏目录: OpenLayers入门教程汇总目录 前言 本章讲解使用OpenLayers6的WebGL图层显示大量点情况下,列举出所有WebGLPointsLayer图层所支持的所有样式运算符大全。 二、基于的OpenLayers版本 "ol": "^6.15.1"使用npm安装依赖npm install ol@6.15.1使…

Transformer——encoder

本文参考了b站的Eve的科学频道中的深入浅出解释Transformer原理和DASOU讲AI中的Transformer从零详解。 入浅出解释Transformer原理 Transformer从零详解 前言: 在自然语言识别中,之前讲过lstm,但是lstm有明显的缺陷,就是当文本过…