代码
//LED0
void led0_task(void *pvParameters)
{
int num = 0;
while(1)
{
LED0=~LED0;
num++;
if(num%10 == 0)
{
vTaskResume(LED1Task_Handler);/*»Ö¸´*/
led_debug("vTaskResume LED1Task_Handler");
}
else if(num%5 == 0)
{
vTaskSuspend(LED1Task_Handler);/*¹ÒÆð */
led_debug("vTaskSuspend LED1Task_Handler");
}
vTaskDelay(700);
}
}
//LED1
void led1_task(void *pvParameters)
{
while(1)
{
LED1=0;
led_debug("*********");
vTaskDelay(10000);
LED1=1;
led_debug("…………………………");
vTaskDelay(10000);
}
}
现象
File: ..\HARDWARE\led_task\led_task.c, Line: 00034: *********
File: ..\HARDWARE\led_task\led_task.c, Line: 00022: vTaskSuspend LED1Task_Handler
File: ..\HARDWARE\led_task\led_task.c, Line: 00037: …………………………
File: ..\HARDWARE\led_task\led_task.c, Line: 00017: vTaskResume LED1Task_Handler
File: ..\HARDWARE\led_task\led_task.c, Line: 00022: vTaskSuspend LED1Task_Handler
File: ..\HARDWARE\led_task\led_task.c, Line: 00034: *********
File: ..\HARDWARE\led_task\led_task.c, Line: 00017: vTaskResume LED1Task_Handler
File: ..\HARDWARE\led_task\led_task.c, Line: 00022: vTaskSuspend LED1Task_Handler
File: ..\HARDWARE\led_task\led_task.c, Line: 00037: …………………………
File: ..\HARDWARE\led_task\led_task.c, Line: 00017: vTaskResume LED1Task_Handler
结论
任务恢复时不是从新执行,而是从下一个非阻塞的地方执行。
在中断处理函数中恢复任务时要判断恢复任务的优先级,详细参考《正点原子FreeRTOS开发手册》