Freertos-CPU使用率统计

此篇文章在2023年5月23日被记录

RTOS-任务CPU占用统计

在项目开发过程中,有时会需要查看各个任务的资源占用,需要用到rtos的CPU使用统计,其原理也很简单,就是开一个频率特别高的定时器,rtos在运行过程累计各个任务的实际占用时长,继而统计显示

FreeRTOSConfig配置

//计算CPU使用率
#define configGENERATE_RUN_TIME_STATS  1 //启用运行时间统计功能 
#define configUSE_TRACE_FACILITY  1     //启用可视化跟踪调试 
/* 与宏 configUSE_TRACE_FACILITY 同时为 1 时会编译下面 3 个函数
* prvWriteNameToBuffer()
* vTaskList(),
* vTaskGetRunTimeStats()
*/
#define configUSE_STATS_FORMATTING_FUNCTIONS 1
extern volatile uint32_t CPU_RunTime; 
#define portCONFIGURE_TIMER_FOR_RUN_TIME_STATS() (CPU_RunTime = 0ul) 
#define portGET_RUN_TIME_COUNTER_VALUE() CPU_RunTime

启用一个硬件定时器

启用一个20K Hz频率的硬件定时器,在这个定时器中,会有一个标志位持续性的自增,rtos内核中会用这个标志位记录各个任务的运行市场,中断函数如下,我启用的是TIM2

volatile uint32_t CPU_RunTime = 0UL;
void TMR2_GLOBAL_IRQHandler(void)
{
    if (tmr_flag_get(TMR2, TMR_OVF_FLAG) != RESET)
    {
        CPU_RunTime++;
        tmr_flag_clear(TMR2, TMR_OVF_FLAG);
    }
}

打印任务状态与显示CPU使用率

    static uint8_t CPU_RunInfo[400];
    memset(CPU_RunInfo, 0, 400);
    vTaskList((char *)&CPU_RunInfo); // 获取任务运行时间信息

    printf("---------------------------------------------\r\n");
    printf("name        state     pro       water     num\r\n");
    printf("%s", CPU_RunInfo);
    printf("---------------------------------------------\r\n");

    memset(CPU_RunInfo, 0, 400); // 信息缓冲区清零

    vTaskGetRunTimeStats((char *)&CPU_RunInfo);

    printf("name           count                      use\r\n");
    printf("%s", CPU_RunInfo);
    printf("-------------------------------------------\r\n\n");

显示示例

---------------------------------------------
name        state     pro       water     num
SHxxx_TASK     	X	2	878	1
Auxxx Task     	R	2	5075	5
xxx Pm         	R	1	388	4
IDLE           	R	0	101	12
xxx_task      	B	3	687	6
xxx_task_loo	B	4	216	3
xxx_TASK      	B	3	971	11
xxx_task        	B	3	380	2
xxx_tx_tas	B	3	913	9
Tmr Svc        	B	5	487	13
xxx_rx_tas	B	4	917	8
phy_xxx	B	5	473	7
xxx_audio_task	B	5	773	10
---------------------------------------------
name           count                      use
SHxxx_TASK     	101083		<1%
xxx Pm         	178173		<1%
IDLE           	50990201		64%
xx_task        	24812095		31%
xxx Task     	124400		<1%
xxx_tx_tas	258962		<1%
xxx_task_loo	60382		<1%
xxx_TASK      	48645		<1%
xxx_task      	761773		<1%
xxx_rx_tas	38417		<1%
phy_xxx	20046		<1%
xxx_task	1189061		1%
Tmr Svc        	2		<1%
-------------------------------------------

freertos启用这些选项后,rtos内核执行的任务会变多,CPU的负担会增加,因此在产品发行前需要关闭这些选项

posted @ 2024-12-13 13:58  shumei52  阅读(380)  评论(0)    收藏  举报