FreeRTOS(vTaskList与vTaskGetRunTimeStats)

目录

1、Cube配置

①配置SYS

 ②配置TIM3

 ③配置USART2

 ④配置FreeRTOS

⑤配置中断优先级

2、代码添加改动

①在main函数合适位置开启TIM3中断

②修改HAL_TIM_PeriodElapsedCallback函数

 ③完善两个相关函数

④vTaskList与vTaskGetRunTimeStats的使用

vTaskList:获取系统中所有任务的任务名、任务状态、优先级、最小剩余堆栈、创建序号相关信息

vTaskGetRunTimeStats:获取每个任务的运行时间,并统计每个任务占用CPU的时间;

1、Cube配置

①配置SYS

sysTick被FreeRTOS强行占用,设置另外的时钟给HAL延时使用

 ②配置TIM3

配置TIM3频率为20KHz,用来作为vTaskGetRunTimeStats的计数时钟,不要忘记使能TIM3中断

 ③配置USART2

用于发送获取到的任务信息

 ④配置FreeRTOS

CMSIS_V1:支持M0/M0+/M3/M4/M7

CMSIS_V2:支持所有Cortex-M系列,A5/A7/A9

 设置堆栈大小为10K,并启用人物计时相关宏

 创建任务

⑤配置中断优先级

2、代码添加改动

①在main函数合适位置开启TIM3中断

  /* USER CODE BEGIN 2 */
  HAL_UART_Transmit(&huart2,(uint8_t*)"HAL_TIM_Base_Start_IT \r\n", 20, HAL_MAX_DELAY);
  HAL_TIM_Base_Start_IT(&htim3);
  /* USER CODE END 2 */

②修改HAL_TIM_PeriodElapsedCallback函数

	if (htim->Instance == TIM3) {
	    CPU_RunTime++;
	}

 ③完善两个相关函数

__weak void configureTimerForRunTimeStats(void)
{
	CPU_RunTime=0;
}

__weak unsigned long getRunTimeCounterValue(void)
{
return CPU_RunTime;
}

④vTaskList与vTaskGetRunTimeStats的使用

void Print_CPURunInfo_Task(void const * argument)
{
  /* USER CODE BEGIN Print_CPURunInfo_Task */
  char CPU_RunInfo[200];
  char buffer0[100]="  Name              State  Priority LeftStack Number\r\n";
  char buffer1[100]="  Name               RunCount      UtilizeRatio \r\n";
  /* Infinite loop */
  for(;;)
  {
	vTaskList(CPU_RunInfo);
	HAL_UART_Transmit(&huart2,(uint8_t*)buffer0, strlen(buffer0), HAL_MAX_DELAY);
	HAL_UART_Transmit(&huart2,(uint8_t*)CPU_RunInfo, strlen(CPU_RunInfo), HAL_MAX_DELAY);
	HAL_UART_Transmit(&huart2,(uint8_t*)"\r\n", 2, HAL_MAX_DELAY);

	vTaskGetRunTimeStats(CPU_RunInfo);
	HAL_UART_Transmit(&huart2,(uint8_t*)buffer1, strlen(buffer1), HAL_MAX_DELAY);
	HAL_UART_Transmit(&huart2,(uint8_t*)CPU_RunInfo, strlen(CPU_RunInfo), HAL_MAX_DELAY);
	HAL_UART_Transmit(&huart2,(uint8_t*)"\r\n", 2, HAL_MAX_DELAY);

	HAL_UART_Transmit(&huart2,(uint8_t*)"------------------\r\n", 25, HAL_MAX_DELAY);
    osDelay(1000);
  }
  /* USER CODE END Print_CPURunInfo_Task */
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Zhang丶&|!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值