1. 程式人生 > >FreeRTOS 除錯--列印任務執行情況

FreeRTOS 除錯--列印任務執行情況

FreeRTOS 除錯–列印任務執行情況

官方API函式中有兩個函式可以提供任務的一些情況,一個是:
void vTaskList( char * pcWriteBuffer )
第二個是:
void vTaskGetRunTimeStats( char *pcWriteBuffer );
下面就介紹下這兩個函式:

  • 任務列表函式:void vTaskList( char * pcWriteBuffer ),該函式將任務的執行狀態,任務優先順序,剩餘棧,優先順序通過sprintf()函式列印到pcWriteBuffer中,接下來只需要將pcWriteBuffer

    通過串列埠打印出來即可。下面是一個呼叫void vTaskList( char * pcWriteBuffer )的例子。

    static void vLEDTask( void *pvParameters )  
        {  
            uint8_t pcWriteBuffer[500];
            while(1)
            {
                LED_Toggle(GREEN_LED_Toggle);
                printf("LED Toggle\n");
                vTaskList((char *)&pcWriteBuffer);
                printf("任務名      任務狀態 優先順序   剩餘棧 任務序號\r\n"
    )
    ; printf("%s\r\n", pcWriteBuffer); } }

    在工程中建立上述任務,編譯提示不通過,

    使用sourceinsight跟蹤原始碼,發現xTaskList()前有條件編譯:

    所以必須滿足條件編譯條件才能使用該函式,那麼就需要將FreeRTOSConfig.h

    改為:#define configUSE_TRACE_FACILITY 1
    並且在 FreeRTOSConfig.h中新增:
    #define configUSE_STATS_FORMATTING_FUNCTIONS 1

    這樣子配置完,編譯通過,列印效果如下圖:


    其中要注意的是剩餘棧的大小單位是WORD,如IDLE的剩餘棧大小為:118*4=472位元組。

  • 任務執行狀態函式:void vTaskGetRunTimeStats( char *pcWriteBuffer ),該函式可以提供相應任務的計數以及相應的佔用率;要獲准任務準確的執行狀態,需要定義一個初始化一個定時器,用來提供相應的計時,FreeRTOS要求該定時器的頻率至少為滴答定時器的10倍,見下圖:

    所以你可以初始化一個1ms的定時器,在FreeRTOSConfig.h提供一個外部變數,並做以下定義:

    並且記得在該定時器的中斷中要對該外部變數進行自加,這樣子配置完,就可以使用該函數了,效果如下:

    static void vLEDTask( void *pvParameters )  
        {  
            uint8_t pcWriteBuffer[500];
            while(1)
            {
                LED_Toggle(GREEN_LED_Toggle);
                printf("LED Toggle\n");
                vTaskList((char *)&pcWriteBuffer);
                printf("任務名      任務狀態 優先順序   剩餘棧 任務序號\r\n");
                printf("%s\r\n", pcWriteBuffer);    
    
                vTaskGetRunTimeStats((char *)&pcWriteBuffer);
                printf("\r\n任務名       執行計數         使用率\r\n");
                printf("%s\r\n", pcWriteBuffer);        
            }
        }

  • 參考資料

    【安富萊】FreeRTOS作業系統教程釋出,支援F103,F407和F429,配套145個例子,1200頁教程|FreeRTOS