跟着韦东山老师FreeRTOS教学资料的学习记录
FreeRTOS全部项目代码链接(更新中)
https://gitee.com/chenshao777/free-rtos_-study
计数信号量
创建计数信号量
QueueHandle_t xSemaphoreCreateCounting( const UBaseType_t uxMaxCount,
const UBaseType_t uxInitialCount )
uxMaxCount: 最大计数信号量
uxInitialCount : 起始计数信号量
总共的计数次数 = uxMaxCount - uxInitialCount
使用示例:
QueueHandle_t vSemaphoreCount; //初始化计数信号量句柄
//......
//......
int main()
{
//......
//......
/* 初始化计数信号量 : 要将 configUSE_COUNTING_SEMAPHORES 宏置1 */
vSemaphoreCount = xSemaphoreCreateCounting(3, 0); // 一共计数3次
}
获取和释放计数信号量(和二值信号量操作一样)
/* 获取信号量结果变量 */
BaseType_t result;
//......
//......
/* 获取计数信号量 */
result = xSemaphoreTake(vSemaphoreCount, portMAX_DELAY);
if(result == pdPASS)
{
printf("读取到二值信号量\r\n");
}
/* 释放计数信号量 */
result = xSemaphoreGive(vSemaphoreCount);
if(result == pdPASS)
printf("释放计数信号量:%d\r\n",i);
else
printf("释放失败\r\n");
计数信号量 & 二值信号量区别
计数信号量可以当做二值信号量使用,只需要让最大计数信号量 = 初始计数信号量 + 1