即日起在codingBlog上分享您的技术经验即可获得积分,积分可兑换现金哦。

FreeRTOS学习与进阶1–任务挂起与恢复

编程语言 wangfei 13℃ 0评论
本文目录
[隐藏]

1.代码

//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);

    }
}

2.现象

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

3.结论

任务恢复时不是从新执行,而是从下一个非阻塞的地方执行。


在中断处理函数中恢复任务时要判断恢复任务的优先级,详细参考《正点原子FreeRTOS开发手册》

转载请注明:CodingBlog » FreeRTOS学习与进阶1–任务挂起与恢复

喜欢 (0)or分享 (0)
发表我的评论
取消评论

*

表情