FreeRTOS学习1--任务挂起与恢复

xiaoxiao2021-02-28  91

代码

//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开发手册》

转载请注明原文地址: https://www.6miu.com/read-52422.html

最新回复(0)