void Task1Func(void const * argument)
{
for(;;)
{
// LED_BLUE不会按指定延时闪烁。
vTaskSuspendAll();
{
bsp_LedToggle(LED_BLUE);
vTaskDelay(2000);
vTaskDelay(1);
}
xTaskResumeAll();
vTaskDelay(1);
}
}
void Task2Func(void const * argument)
{
for(;;)
{
// LED_RED不会按指定延时闪烁。
taskENTER_CRITICAL();
{
bsp_LedToggle(LED_RED);
vTaskDelay(2000);
vTaskDelay(1);
}
taskEXIT_CRITICAL();
vTaskDelay(1);
}
}
void Task3Func(void const * argument)
{
for(;;)
{
bsp_LedToggle(LED_DEBUG);
osDelay(500);
}
}
1. 调度器挂起时,禁止调用可能切换上下文的 API 函数(例如 vTaskDelayUntil()、xQueueSend() 等等)
2. 临界区必须保持非常短,否则将影响中断响应时间。
3. 不得从临界区调用 FreeRTOS API 函数。