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);
}
}
网友评论