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、实验结果