当前位置: 首页 > news >正文

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 */
}

http://www.lryc.cn/news/113129.html

相关文章:

  • 机器学习---概述(二)
  • OPENCV C++(六)canny边缘检测+仿射变换+透射变换
  • 大量删除hdfs历史文件导致全部DataNode心跳汇报超时为死亡状态问题解决
  • 农商行基于分类分级的数据安全管控建设实践
  • 读写文件(
  • .net core 依赖注入生命周期
  • 栈和队列的实现
  • java中的垃圾收集机制
  • TCP网络服务器设计
  • 4. C++构造函数和析构函数
  • 【Spring Cloud 四】Ribbon负载均衡
  • “星闪”:60%能耗 6倍速度 1/30时延**
  • cocosCreator 之 i18n多语言插件
  • redis 如何保证数据一致性
  • 因果推断(三)双重差分法(DID)
  • neo4j入门实例介绍
  • CGAL-2D和3D线性几何内核-点和向量-内核扩展
  • Ubuntu 22.04 安装docker
  • 电脑维护进阶:让你的“战友”更强大、更持久!
  • 【Leetcode】75.颜色分类
  • Pytesseract学习笔记
  • cnvd通用型证书获取姿势
  • elasticsearch的副本和分片的区别
  • Docker部署Gitlab
  • ABeam News | ABeam大中华区新人入社式,开启崭新的职场探索之旅吧!
  • 【C++】开源:sqlite3数据库配置使用
  • [Docker实现测试部署CI/CD----Jenkins集成相关服务器(3)]
  • 【Shell】基础语法(二)
  • Unity之webgl端通过vue3接入腾讯云联络中心SDK
  • 《算法竞赛·快冲300题》每日一题:“连接草坪(II)”