Java教程

FreeRTOS中vTaskDelay的理解

本文主要是介绍FreeRTOS中vTaskDelay的理解,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

看源码

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的理解的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!