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(); 了嗎,任務中調用延時只是把任務掛起,等待延時時間到,再把任務恢復。掛起了當前任務,內核將分配時間給其他任務執行


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM