首页 > 其他 > 详细

FreeRTOS中vTaskDelay的理解

时间:2021-06-12 00:40:05      阅读:29      评论:0      收藏:0      [点我收藏+]

看源码

void vTaskDelay( const TickType_t xTicksToDelay ) //任务睡眠函数
    {
    BaseType_t xAlreadyYielded = pdFALSE;
        if( xTicksToDelay > ( TickType_t ) 0U )
        {
            configASSERT( uxSchedulerSuspended == 0 );
            vTaskSuspendAll();
            {
                traceTASK_DELAY();        
                prvAddCurrentTaskToDelayedList( xTicksToDelay, pdFALSE );
            }
            xAlreadyYielded = xTaskResumeAll();
        }
        else
        {
            mtCOVERAGE_TEST_MARKER();
        }
        if( xAlreadyYielded == pdFALSE )
        {
            portYIELD_WITHIN_API();
        }
        else
        {
            mtCOVERAGE_TEST_MARKER();
        }
    }

看到源码中的挂机函数vTaskSuspendAll();  和恢复函数xTaskResumeAll(); 了吗,任务中调用延时只是把任务挂起,等待延时时间到,再把任务恢复。挂起了当前任务,内核将分配时间给其他任务执行

FreeRTOS中vTaskDelay的理解

原文:https://www.cnblogs.com/OKRFID/p/14876079.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!