1.調度鎖函數只是禁止了任務調度,并沒有關閉任何中斷
2.調度鎖開啟函數 vTaskSuspendAll 和調度鎖關閉函數 xTaskResumeAll 一定要成對使用
3.切不可在調度鎖開啟函數 vTaskSuspendAll 和調度鎖關閉函數 xTaskResumeAll 之間調用任何會引起任務切換的 API,比如 vTaskDelayUntil、vTaskDelay、xQueueSend 等
/*
*********************************************************************************************************
*? 函 數 名: vTaskLED
*? 功能說明: LED 閃爍
*? 形 參: pvParameters 是在創建該任務時傳遞的形參
*? 返 回 值: 無
* 優 先 級: 2
*********************************************************************************************************
*/
static void vTaskLED(void *pvParameters)
{
while(1)
{
vTaskSuspendAll(); /* 開啟調度鎖 */
printf("任務 vTaskLED 正在運行\r\n");
//xTaskResumeAll ();
if(!xTaskResumeAll()) /* 關閉調度鎖,如果需要任務切換,此函數返回 pdTRUE,否則返回 pdFALSE */
{
taskYIELD ();
}
bsp_LedToggle(2);
vTaskDelay(200);
}
}