FreeRTOS 调试--打印任务执行情况

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jnu_fangzebin/article/details/51801903

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

猜你喜欢

转载自blog.csdn.net/jnu_fangzebin/article/details/51801903