FreeRTOS 查看CPU使用情况 uxTaskGetSystemState()

开启宏定义

配置时钟

选用ARR 32位的TIM,预分频4200 - 1,计数节拍周期50us,ARR拉满

代码部分

补充函数定义

__weak void configureTimerForRunTimeStats(void)
{
	HAL_TIM_Base_Start(&htim2);
}

__weak unsigned long getRunTimeCounterValue(void)
{
	return __HAL_TIM_GetCounter(&htim2);
}

最后调用函数 uxTaskGetSystemState() 测算任务的CPU占用百分比

TaskStatus_t TaskInfo[10];	//任务信息列表
uint32_t TotalRunTime = 0;	//运行总时间
uint32_t TaskRunTime = 0;	//任务运行时间
uint8_t TaskNum = 0;		//任务数量

/* 获取任务数量 */
TaskNum = uxTaskGetNumberOfTasks();

/* 获取任务信息和运行总时间 */
uxTaskGetSystemState(TaskInfo, TaskNum, &TotalRunTime);	

/* 循环打印任务占用CPU百分比 */
for(uint8_t i = 0; i < TaskNum; i++)
{
	/* 获取任务运行时间,除以总时间即为CPU占比 */
	TaskRunTime = TaskInfo[i].ulRunTimeCounter;
	float Propoetion = TaskRunTime * 100.0 / TotalRunTime;
	
	/* 进入临界区,打印信息*/
	taskENTER_CRITICAL();
	printf("%-15s%-12.2f%-5.2f%%\r\n", TaskInfo[i].pcTaskName, TaskRunTime*0.05, Propoetion);
	taskEXIT_CRITICAL();
}
实验现象

第一列是任务名,第二列任务运行时间(ms),第三列占用百分比。可以看见 IDLE 任务即空闲任务占用95%左右CPU

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值