STM32之FreeRTOS(三):计数型信号量用法
介绍一下计数型信号量的常规使用方法
互斥信号量只能用于任务中不能用于中断服务函数中,原因如下:
1、互斥信号量具有优先级继承所以只能用在任务不能用在中断中
2、中断服务函数不能因为等待信号量而设置阻塞时间进入阻塞态
一般使用步骤是:
1、创建计数型信号量
2、在一个任务内释放信号量
3、在另一个任务内阻塞等待信号量
第1步:创建信号量
//计数型信号量句柄
SemaphoreHandle_t CountSemaphore;//计数型信号量
//创建计数型信号量,最大值255,初始值0
CountSemaphore=xSemaphoreCreateCounting(255,0);
第2步:释放信号量
BaseType_t err=xSemaphoreGive(CountSemaphore);//释放计数型信号量
//uxSemaphoreGetCount只是获得计数量的值,所以不会使计数型信号量减1
u8 semavalue=uxSemaphoreGetCount(CountSemaphore);//获取计数型信号量值
第3步:获取信号量
xSemaphoreTake(CountSemaphore,portMAX_DELAY); //等待数值信号量
u8 semavalue=uxSemaphoreGetCount(CountSemaphore); //获取数值信号量值
总结:
以上是计数型信号量的常规使用方法。