FreeRTOS任务信息

学习目标:

通过串口打印任务信息,包括:名称、运行时间、系统占用率、优先级、剩余栈区


使用工具:

C语言;STM32单片机;CubeMX、FreeRTOS、Keil、串口助手


实现过程及方法:

        可通过Cubemx设置相应宏,实现weak函数

        在 "FreeRTOSConfig.h" 中自定义宏,实现宏定义

vTaskGetRunTimeStats函数

函数原型:void vTaskGetRunTimeStats( char *pcWriteBuffer )

形参:传入数组,用来存储相关信息,没有边界检查,所以必须足够大,可容纳整个列表

作用:获取任务名称、任务运行时间、系统占用率

Notes:

        运行时基:

        任务运行计数时基(50us~100us) 设置比 系统时基(1ms) 快10、20倍。

        两个宏置一:

        configGENERATE_RUN_TIME_STATS and configUSE_STATS_FORMATTING_FUNCTIONS must both be set to 1 in FreeRTOSConfig.h

        除此之外还需实现两个宏:

        一:portCONFIGURE_TIMER_FOR_RUN_TIME_STATS()初始化用来生成时基的外设;

        二:portCONFIGURE_TIMER_FOR_RUN_TIME_STATS() 或 portALT_GET_RUN_TIME_COUNTER_VALUE() 用来返回当前基准时间值。

                使用Cubemx置位宏定义,会提供两个weak函数:void configureTimerForRunTimeStats(void) 与 unsigned long getRunTimeCounterValue(void)

                也可自行置起宏定义,实现两个宏,只不过用Cubemx置起宏生成后使用weak函数方便一些

效果:        任务名称        运行时间        系统占用率

                

                所打印运行时间为周期数;如果想数据对齐或者转换时间为分钟,不建议使用本函数,因为需要将数据在单个数组中提取出来进行操作。建议使用vTaskGetInfo函数,可获得单个任务相关信息,存储在结构体中。

存在问题:

        任务运行时间计算值与实测不符

        printf打印中文存在乱码(有可能是编码格式问题)

vTaskList函数

函数原型:void vTaskList( char * pcWriteBuffer )

形参:指向事先准备好,用于存储任务信息的空间。必须足够大,没有边界检查。

作用:获取任务名称、状态、优先级、高水位(剩余最小栈区)、任务编号(用于区分被分配相同任务名的任务)

Notes:

        vTaskList函数本质上使用 xTaskGetSystemState() API函数获取原始数据。

        vTaskList在执行期间禁用中断。

        configUSE_TRACE_FACILITY and configUSE_STATS_FORMATTING_FUNCTIONS must both be set to 1 within FreeRTOSConfig.h for vTaskList() to be available.
 

效果:

        

vTaskGetInfo函数

函数原型:void vTaskGetInfo( TaskHandle_t xTask, TaskStatus_t *pxTaskStatus, BaseType_t xGetFreeStackSpace, eTaskState eState )

作用:获取单个任务信息;如要获取全部任务信息可使用 uxTaskGetSystemState() 函数代替。

形参:

        xTask:任务句柄,可以使用函数 xTaskGetHandle 通过任务名称获取, INCLUDE_xTaskGetHandle must be set to 1 in FreeRTOSConfig.h for xTaskGetHandle() to be available. xTaskGetHandle 函数消耗时间较长,可将返回句柄存储起来,以便后续使用。

        pxTaskStatus:指向事前定义好,用来存储任务信息的结构体

        xGetFreeStackSpace:高水位标志,决定是否获取任务高水位(该任务曾经存在的堆栈空间的最小值),pdFALSE:不获取;pdTRUE:获取。

        eState:任务状态,eInvalid:获取任务状态(需要一些时间);其他值:直接赋予给任务状态;

作用:获取任务名称、任务运行时间、系统占用率、优先级、剩余栈区……存储到事先准备好的结构体中,任务信息基本全都包含。

Notes:

        仅限在调试中使用,该函数会导致任务调度器长时间处于挂起状态。

        configUSE_TRACE_FACILITY must bet defined as 1 in FreeRTOSConfig.h

Notes:

        该类函数会导致任务调度器较长时间处于挂起状态,占用资源多,应尽量减少该类函数的使用次数。

        


参考资料

【【参考资料】FreeRTOS_Reference_Manual_V9.0.0.pdf】

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值