freerots(七)计数型信号量

一、计数型信号量

什么是计数型信号量?

计数型信号量相当于队列长度大于 1 的队列,因此计数型信号量能够容纳多个资源,这在计数型
信号量被创建的时候确定的。

计数型信号量相关 API 函数

计数型信号量的释放和获取与二值信号量完全相同 !

二、实操

实验需求
创建一个计数型信号量,按下 KEY1 则释放信号量,按下 KEY2 获取信号量。

三、cubeMX配置

四、代码实现

/* USER CODE BEGIN Header_takeSem_fun */
/**
* @brief Function implementing the takeSem_task thread.
* @param argument: Not used
* @retval None
*/
/* USER CODE END Header_takeSem_fun */
void takeSem_fun(void *argument)
{
  /* USER CODE BEGIN takeSem_fun */
  /* Infinite loop */
  for(;;)
  {
    //按键一按下
		if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_0)==RESET)
		{
			//消抖
			osDelay(20);
			//检测松手
			while(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_0)==RESET);
			//松手消抖
			osDelay(20);
			
			printf("KEY1 press down\r\n");
			
			//获取信号量
			if(xSemaphoreTake(myCountingSem01Handle,portMAX_DELAY)==pdPASS){
				printf("take semaphore succuse\r\n");
			}
			else{
				printf("take semaphore error\r\n");
			}
			
		}
  }
  /* USER CODE END takeSem_fun */
}

五、运行效果

  • 11
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值