cubemx+freertos CPU占用率检测

使用STMCubeMX配置工具,配置FREERTOS检测任务对CPU的占用率,并且通过串口打印
STMCubeMX版本为5.1.0
软件包版本为:STM32Cube FW_F1 V1.7.0

一、打开相关配置

将这三处设置成enable
二、配置一个50us的定时器
在这里插入图片描述

三,生成代码,更改代码

生成的freertos.c部分相关代码如下

/* USER CODE BEGIN 1 */
    /* Functions needed when configGENERATE_RUN_TIME_STATS is on */
    _weak void configureTimerForRunTimeStats(void)
    {

    }

 _weak unsigned long getRunTimeCounterValue(void)
{
	
	return 0;
}

增加部分代码如下

/* USER CODE BEGIN 1 */
uint32_t RUN_Time=0;
/* Functions needed when configGENERATE_RUN_TIME_STATS is on */
void configureTimerForRunTimeStats(void)
{
	RUN_Time=0;
	MX_TIM4_Init();
	HAL_TIM_Base_Start_IT(&htim4);
}

unsigned long getRunTimeCounterValue(void)
{
	
	return RUN_Time;
}

在tim.c中增加代码

extern uint32_t RUN_Time;
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
	if(htim->Instance==TIM4)
	{
		RUN_Time++;
	}
}

新建任务函数如下

void CPU_Task(void const * argument)
{

  /* USER CODE BEGIN CPU_Task */
	
  /* Infinite loop */
	uint8_t CPU_RunInfo[400];
  for(;;)
  {
	  memset(CPU_RunInfo,0,400); //信息缓冲区清零

	vTaskList((char *)&CPU_RunInfo); //获取任务运行时间信息

	printf("---------------------------------------------\r\n");
	printf("任务名   任务状态   优先级   剩余栈   任务序号\r\n");
	printf("%s", CPU_RunInfo);
	printf("---------------------------------------------\r\n");

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

	vTaskGetRunTimeStats((char *)&CPU_RunInfo);

	printf("任务名         运行计数         使用率\r\n");
	printf("%s", CPU_RunInfo);
	printf("---------------------------------------------\r\n\n");
    osDelay(1000);
  }
  /* USER CODE END CPU_Task */
}

实验结果如下
在这里插入图片描述

  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值