FreeRTOS总结


前言

有些资料中也将计数型信号量叫做数值信号量,二值信号量相当于长度为 1 的队列,那么
计数型信号量就是长度大于 1 的队列。同二值信号量一样,用户不需要关心队列中存储了什么
数据,只需要关心队列是否为空即可。
计数型信号量通常用于事件计数资源管理
提示:以下是本篇文章正文内容,下面案例可供参考

一、创建计数型信号量

在这里插入图片描述
1、函数 xSemaphoreCreateCounting()
此函数用于创建一个计数型信号量,所需要的内存通过动态内存管理方法分配。

SemaphoreHandle_t xSemaphoreCreateCounting(UBaseType_t uxMaxCount, 
UBaseType_t uxInitialCount )

参数:
uxMaxCount: 计数信号量最大计数值,当信号量值等于此值的时候释放信号量就会失败。
uxInitialCount: 计数信号量初始值。
返回值:
NULL: 计数型信号量创建失败。
其他值: 计数型信号量创建成功,返回计数型信号量句柄。
2、释放计数型信号量(与二值信号量一样)

xSemaphoreGive() 任务级信号量释放函数
xQueueGiveFromISR()。中断级信号量释放函数

3、获取计数型信号量*(与二值信号量一样)

xSemaphoreTake() 任务级获取信号量函数
xSemaphoreTakeFromISR() 中断级获取信号量函数

二、计数型信号量实验

核心代码

在这里插入图片描述
在这里插入图片描述

总结

计数型信号量同二值信号量相类似,二值信号量返回值类似0和1 ,计数型返回值是具体的获取值(即函数=句柄)。

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐