代码
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);
}
}
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开发手册》