动态创建函数原理及应用

2021-10-08 11:44:34 浏览数 (1)

代码语言:javascript复制
$ ./build/freertos-simulator 
 task middle running
 low task running
 task high Pend Sem
 task middle running
 task middle running
 task middle running
 task middle running
 task middle running
 task middle running
 task middle running
 task middle running
 task middle running
 task middle running
 task middle running
 task middle running
 task middle running
 task middle running
 task middle running
 task middle running
 task middle running
 task middle running
 task middle running
 task middle running
 task middle running
 task middle running
 task middle running
 task middle running
 task middle running
 task middle running
 task middle running
 task middle running
 task high running!
 task middle running
 task high Pend Sem
 task high running!
 low task running
 task middle running

可以看出了优先级反转,中优先级任务比高优先级任务先执行。

9.2 计数型信号量

计数型信号量也叫数值型信号量,其实质是长度大于1的队列。

主要用于两个场景:

1、事件计数:在这个场景中,每次事件发生时就在事件处理函数中释放信号量,其他任务获取信号量来处理事件。这种场合计数型信号量初始计数值为0。

2、资源管理:在这个场景中,信号量代表当前可用的资源数量。一个任务想要获取资源的使用权,必须先获得信号量,信号量获取成功信号量就会减1,当信号量为0时就没有信号量了。当一个任务使用完信号量之后要释放信号量。这个场景中,信号量的初始值就是资源的数量。

9.2.1 相关函数

(1)动态创建函数

函数原型:

代码语言:javascript复制
#include “FreeRTOS.h”
#include “semphr.h”
SemaphoreHandle_t xSemaphoreCreateCounting( UBaseType_t uxMaxCount,
                                           UBaseType_t uxInitialCount );

函数描述:创建一个计数型信号量,返回信号量的句柄。信号量的内存空间由系统指定。

函数参数:uxMaxCount:计数信号量的最大计数值,当信号量值等于这个值的时候释放信号量就会失败。

uxInitialCount:计数信号量初始值。

返回值:NULL:计数信号量创建失败;其他值:计数信号量创建成功,返回计数信号量句柄。

(2)静态创建函数

函数原型:

代码语言:javascript复制
#include “FreeRTOS.h”
#include “semphr.h”
SemaphoreHandle_t xSemaphoreCreateCountingStatic( UBaseType_t uxMaxCount,
                                                 UBaseType_t uxInitialCount,
                                                 StaticSemaphore_t pxSempahoreBuffer );

函数描述:创建一个计数型信号量,返回信号量的句柄。信号量的内存空间由用户指定。

函数参数:uxMaxCount:计数信号量的最大计数值,当信号量值等于这个值的时候释放信号量就会失败。

uxInitialCount:计数信号量初始值。

pxSempahoreBuffer:指向StaticSemaphore_t类型的变量,用于保存信号量结构体。

返回值:NULL:计数信号量创建失败;其他值:计数信号量创建成功,返回计数信号量句柄。

0 人点赞