18 FreeRTOS信号量及二值信号量

1  信号量简介

 

信号量常用于控制对共享资源的访问和任务同步

 共享资源访问

与任务同步

与任务同步:

用于任务与任务或中断与任务之间同步

 

FreeRTOS中信号量:

二值信号量

计数型信号量

互斥信号量

递归互斥信号量

 

二值信号量简介

用于互斥访问或同步

互斥信号量有优先级继承机制

信号量没有优先级继承

 

二值信号用于同步

互斥信号量用于互斥访问

 

 

二值信号量无效

xSemaphoreTake()        //获取信号量

二值信号量无效,任务进入阻塞态

 

中断释放信号量

xSemaphoreGiveFromISR()          //释放信号量

信号量变有效

 

任务获取信号量成功

信号量有效,任务获取信号量成功,任务从阻塞态解除,开始执行处理过程、

 

任务再次进入阻塞态

等再次调用

XSemaphoreTake()        //获取信号量

二值信号量变无效,任务进入到阻塞态,直到中断再次调用

xSemaphoreGiveFromISR()            //释放信号量

 

创建二值信号量

 头文件:

#include “semphr.h”

 函数:

void vSemaphoreCreateBinary(SemaphoreHandle_t xSemaphore)        //动态创建二值信号量,老版API函数

 参数:

xSemaphore:保存创建成功的二值信号量句柄

返回值:

NULL:二值信号量创建失败

其他值:二值信号量创建成功

 

SemaphoreHandle_t xSemaphoreCreateBinary(void)        //动态创建二值信号量,新版

 参数:无

返回值:

NULL:二值信号量创建失败

其他值:创建成功的二值信号量的句柄

 

SemaphoreHandle_t xSemaphoreCreateBinaryStatic(StaticSemaphore_t * pxSemaphoreBuffer)           
//静态创建二值信号量

 参数:

pxSemaphoreBuffer:   指向StaticSemaphore_t 类型的变量,来保存信号量结构体。

返回值:

NULL:二值信号量创建失败

其他值:创建成功的二值信号量句柄

 

释放信号量

分为:

任务级

中断级别

释放信号量:

二值信号量

计数型信号量

互斥信号量

 

BaseType_t xSemaphoreGive(xSemaphore)            //任务级信号量释放函数

参数:

xSemaphore:  释放的信号量句柄

返回值:

pdPASS:   释放信号量成功

errQUEUE_FULL:   释放信号量失败

 

中断释放信号量用于:

二值信号量

计数型信号量

BaseType_t xSemaphoreGiveFromISR(SemaphoreHandle_t xSemaphore, BaseType_t * PxHigherPrityTaskWoken)   
     //中断级信号量释放函数

 参数:

xSemaphore: 

释放的信号量句柄

pxHigherPriorityTaskWoken:

标记退出函数以后是否进行任务切换

返回值:

pdPASS:

释放信号量成功

errQUEUE_FULL:

释放信号量失败

获取信号量

获取

二值信号量

计数型信号量

互斥信号量

 

BaseType_t xSemaphoreeTake(SemaphoreHandle_t xSemaphore, TickType_t XBlockTime)        //任务级获取信号量函数

 参数:

xSemaphore:    获取信号量句柄

xBlockTime:   阻塞时间

返回值:

pdTRUE:   获取信号量成功

pdFALSE:   超时,获取信号量失败

 

BaswType_t xSemaphoreTakeFromISR(SemaphoreHandle_t xSemaphore, BaseType_t * pxHigherPriorityTaskWoken)     
   //中断级获取信号量函数

参数:

xSemaphore:  获取信号量句柄

pxHigherPriorityTaskWoken:    

返回值:

pdPASS:获取信号量成功

 

xSemaphoreCreateBinaryStatic()        //静态创建二值信号量

 

 

 

 

 

 

 

 

 

 

 

 

 

全部评论

相关推荐

10-11 17:45
门头沟学院 Java
走吗:别怕 我以前也是这么认为 虽然一面就挂 但是颇有收获!
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务