这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 基础知识 » FreeRTOS计数信号量使用

共1条 1/1 1 跳转至

FreeRTOS计数信号量使用

工程师
2025-05-19 15:39:11     打赏

1、简介

计数信号量相比二值信号量,能够对更多的临界资源进行管理。可以认为二值信号量是计数信号量的一个特例,当计数信号量不为0时,表示可以对临界资源进行访问

2CubeMX配置

配置最大访问临界资源数量为6,初始值为6

image.png

3、测试程序编写

任务1持续获取计数信号量

void StartDefaultTask(void *argument)
{
  /* USER CODE BEGIN StartDefaultTask */
  /* Infinite loop */
  for(;;)
  {
printf("DefaultTask Runing\n");//获取计数信号量
BaseType_t result = osSemaphoreAcquire(CountingSemHandle, pdMS_TO_TICKS(100));
osDelay(pdMS_TO_TICKS(1000));
 
if(result == pdTRUE) printf("Check In OK\r\n");
else printf("Check In Fail\r\n");  }
 
  /* USER CODE END StartDefaultTask */
}

任务2统计当前计数信号量的数值

/* USER CODE END Header_StartTask02 */
void StartTask02(void *argument)
{
  /* USER CODE BEGIN StartTask02 */
  /* Infinite loop */
  for(;;)
  {
UBaseType_t AvailableTables = osSemaphoreGetCount(CountingSemHandle);
printf("Now AvailableTables is : %d\r\n", (uint16_t)AvailableTables);
osDelay(pdMS_TO_TICKS(500));        
if(AvailableTables==1){
osSemaphoreRelease( CountingSemHandle );//给出信号量
}
  }
  /* USER CODE END StartTask02 */
}

4、实验结果

任务1持续获取信号量,并且在所有任务中未进行计数信号量的释放,随着计数信号量数值归零,仅进行单次计数信号量的释放。

image.png





关键词: 计数信号量    

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]