1、简介
二值信号量与我们常见的标记变量很类似,但RTOS的信号量相比标记变量管理更为规范一些,以下说明FreeRTOS二值信号量的创建与使用。
2、CubeMX配置

创建BinarySem的信号量,Depleted表示信号量默认不释放
3、二值信号量测试代码
任务1用于获取信号量
/* USER CODE END Header_StartDefaultTask */
void StartDefaultTask(void *argument)
{
/* USER CODE BEGIN StartDefaultTask */
osStatus_t xReturn = osOK ;
/* Infinite loop */
for(;;)
{
xReturn = osSemaphoreAcquire(BinarySemHandle,
osWaitForever);//持续获取二值信号量
if(osOK == xReturn){
printf("二值信号量获取成功!\n");
}
}
/* USER CODE END StartDefaultTask */
}任务2用于释放信号量
/* USER CODE END Header_StartTask02 */
void StartTask02(void *argument)
{
/* USER CODE BEGIN StartTask02 */
osStatus_t xReturn = osOK ;
/* Infinite loop */
for(;;)
{
osDelay(1500);
xReturn = osSemaphoreRelease( BinarySemHandle );//释放二值信号量
if( xReturn == osOK )
printf("二值信号量释放成功!\n");
else
printf("二值信号量释放失败!\n");
}
/* USER CODE END StartTask02 */
}4、实验结果

我要赚赏金
