cubemx+freertos CPU占用率检测

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

一、打开相关配置

cubemx+freertos CPU占用率检测_第1张图片
二、配置一个50us的定时器
cubemx+freertos CPU占用率检测_第2张图片

三,生成代码,更改代码

生成的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 */
}

实验结果如下
cubemx+freertos CPU占用率检测_第3张图片

你可能感兴趣的:(STM32,STM32,freertos)