开发工程中使用freertos会遇到多个任务抢资源的情况,添加互斥量来避免出错。
创建互斥量
myMutex01Handle = osMutexNew(&myMutex01_attributes);
任务一
使用和释放互斥量
void ToggleLED0Task(void *argument)
{
/* USER CODE BEGIN 5 */
/* Infinite loop */
for (;;)
{
if (osMutexAcquire(myMutex01Handle, 100) == osOK)
{
for (uint8_t i = 0; i < 20; i++)
{
HAL_GPIO_TogglePin(LED0_GPIO_Port, LED0_Pin);
osDelay(200);
}
osMutexRelease(myMutex01Handle);
}
osDelay(1);
// HAL_GPIO_TogglePin(LED0_GPIO_Port, LED0_Pin);
// osDelay(200);
}
/* USER CODE END 5 */
}
任务二
使用和释放互斥量
oid ToggleLED1Task(void *argument)
{
/* USER CODE BEGIN ToggleLED1Task */
/* Infinite loop */
for (;;)
{
if (osMutexAcquire(myMutex01Handle, 100) == osOK)
{
for (uint8_t i = 0; i < 10; i++)
{
HAL_GPIO_TogglePin(LED0_GPIO_Port, LED0_Pin);
osDelay(1000);
}
osMutexRelease(myMutex01Handle);
}
osDelay(1);
}
/* USER CODE END ToggleLED1Task */
}