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

STM32 CubeMX (第四步Freertos内存管理和CPU使用率)

STM32 CubeMX


STM32 CubeMX (第四步Freertos内存管理和CPU使用率)

  • STM32 CubeMX
  • 一、STM32 CubeMX设置
    • 时钟配置
    • HAL时基选择TIM1(不要选择滴答定时器;滴答定时器留给OS系统做时基)
    • 使用STM32 CubeMX 库,配置Freertos
    • 使能定时器,计时0.1中断
    • 使能宏定义
  • 二、实验一,CPU使用率
    • 配置代码
    • 任务代码
    • 实验现象


学习使用Freertos第四步
在 FreeRTOS 中,中断管理和软件定时:

  1. ·taskENTER_CRITICAL()·; 是一个函数在 FreeRTOS 中使用的,用于进入临界区(critical section)。在临界区内,中断会被禁用,这样可以确保在多任务环境下共享资源的安全性。你可以在需要保护共享资源的代码段中使用
  2. · taskENTER_CRITICAL()·; 来禁用中断,然后在临界区结束时使用 taskEXIT_CRITICAL();
    来重新启用中断。这样可以防止多个任务同时访问共享资源而导致的竞态条件。

一、STM32 CubeMX设置

时钟配置

在这里插入图片描述

HAL时基选择TIM1(不要选择滴答定时器;滴答定时器留给OS系统做时基)

在这里插入图片描述

使用STM32 CubeMX 库,配置Freertos

选择CMISS_V1接口就可以满足Freertos接口;且代码量比CMISS_V2小(CMISS_V2支持更多的RTOS接口,所以代码量比CMISS_V1多)
在这里插入图片描述

使能定时器,计时0.1中断

在这里插入图片描述

使能宏定义

在这里插入图片描述

二、实验一,CPU使用率

设置时基
在这里插入图片描述

配置代码

__weak void configureTimerForRunTimeStats(void)
{g_osRuntimeCounter=0;
}__weak unsigned long getRunTimeCounterValue(void)
{
return g_osRuntimeCounter;
}

任务代码

void StartDefaultTask1(void const * argument)
{/* USER CODE BEGIN StartDefaultTask1 *//* Infinite loop */for(;;){printf("Task01 \r\n");		// printf输出字符串osDelay(1000);}/* USER CODE END StartDefaultTask1 */
}/* USER CODE BEGIN Header_StartTask02 */
/**
* @brief Function implementing the Task02 thread.
* @param argument: Not used
* @retval None
*/
/* USER CODE END Header_StartTask02 */
void StartTask02(void const * argument)
{/* USER CODE BEGIN StartTask02 *//* Infinite loop */for(;;){printf("Task02 \r\n");		// printf输出字符串osDelay(1000);}/* USER CODE END StartTask02 */
}/* USER CODE BEGIN Header_CpuStartTask03 */
/**
* @brief Function implementing the CpuTask03 thread.
* @param argument: Not used
* @retval None
*/
/* USER CODE END Header_CpuStartTask03 */uint8_t CPU_RunInfo[400];		            //保存任务运行时间信息
void CpuStartTask03(void const * argument)
{/* Infinite loop */for(;;){printf("  B:阻塞  R:就绪  D:删除  S:暂停  X:运行 \r\n");memset(CPU_RunInfo,0,400);				//信息缓冲区清零osThreadList(CPU_RunInfo);              //获取任务运行时间信息printf("---------------------------------------------\r\n");printf("Task      Task_Status Priority  Remaining_Stack Task_No\r\n");printf("%s", CPU_RunInfo);printf("---------------------------------------------\r\n");//    memset(CPU_RunInfo,0,400);				//信息缓冲区清零
//    
//    vTaskGetRunTimeStats((char *)&CPU_RunInfo);
//    
//    printf("Task       Running_Count        Utilization\r\n");
//    printf("%s", CPU_RunInfo);
//    printf("---------------------------------------------\r\n\n");osDelay(1000);}}

实验现象

在这里插入图片描述

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

相关文章:

  • 题解 | #1012.Equalize the Array# 2023杭电暑期多校10
  • UE4/5C++多线程插件制作(二十一、使用)
  • 【C#】关于?的用法
  • linux——mysql的高可用MHA
  • 【学习日记】【FreeRTOS】空闲任务与阻塞延时
  • 衣服材质等整理(时常更新)
  • 电子商务环境下旅游价值链
  • spring源码分析bean的生命周期(下)
  • 完美解决Github提交PR后报错:File is not gofumpt-ed (gofumpt)
  • pytorch3d成功安装
  • 【vue3】同个页面引入多个图表组件实现自适应的方法
  • 一文了解汽车芯片的分类及用途介绍
  • Linux0.11内核源码解析-truncate.c
  • LED驱动型IC芯片的原理介绍
  • VLAN实验
  • Qt应用开发(基础篇)——高级纯文本窗口 QPlainTextEdit
  • 三维可视化平台有哪些?Sovit3D可视化平台怎么样?
  • Xxl-job安装部署以及SpringBoot集成Xxl-job使用
  • 【【超声波避障小车代码】】
  • TDI(Time Delay Integration)
  • RHCE——一、安装部署及例行性工作
  • 服务器数据库中了360后缀勒索病毒怎么办?360后缀勒索病毒的加密形式
  • 期权就是股指期货吗,哪个好做一点?
  • week32
  • 【数据库】P1 数据库基本常识
  • c语言——计算两个数的乘积
  • 单机模型并行最佳实践
  • 编程练习(3)
  • PyTorch学习笔记(十三)——现有网络模型的使用及修改
  • Python爬虫的scrapy的学习(学习于b站尚硅谷)