FreeRTOS-计数型信号量
实验目的
创建一个计数型信号量,按下 KEY1 则释放信号量,按下 KEY2 获取信号量。
实验代码
void StartTtaskGive(void const * argument)
{
/* USER CODE BEGIN StartTtaskGive */
/* Infinite loop */
for(;;)
{
if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0) == GPIO_PIN_RESET)
{
osDelay(20);
if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0) == GPIO_PIN_RESET)
{
if(xSemaphoreGive(myCountingSemHandle) == pdTRUE)
printf("计数型信号量放入成功\r\n");
else
printf("计数型信号量放入失败\r\n");
}
while(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0) == GPIO_PIN_RESET);
}
osDelay(10);
}
/* USER CODE END StartTtaskGive */
}
/* USER CODE BEGIN Header_StartTaskTake */
/**
* @brief Function implementing the taskTake thread.
* @param argument: Not used
* @retval None
*/
/* USER CODE END Header_StartTaskTake */
void StartTaskTake(void const * argument)
{
/* USER CODE BEGIN StartTaskTake */
/* Infinite loop */
for(;;)
{
if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_1) == GPIO_PIN_RESET)
{
osDelay(20);
if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_1) == GPIO_PIN_RESET)
{
if(xSemaphoreTake(myCountingSemHandle,0) == pdTRUE)
printf("计数型信号量获取成功\r\n");
else
printf("计数型信号量获取失败\r\n");
}
while(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_1) == GPIO_PIN_RESET);
}
osDelay(10);
}
/* USER CODE END StartTaskTake */
}
实验结果
因为设置的长度是3,所以只能存放3位计数型信号量