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

STM32 CubeMX


STM32 CubeMX (第四步Freertos内存管理和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使用率

设置时基

配置代码

c 复制代码
__weak void configureTimerForRunTimeStats(void)
{
 g_osRuntimeCounter=0;
}

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

任务代码

c 复制代码
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);
  }
 
}

实验现象

相关推荐
从零点16 分钟前
STM32电机运动控制的设计
stm32·嵌入式硬件
听风说ml2 小时前
STM32 GPIO【深度理解】
stm32·单片机·嵌入式硬件
国科安芯3 小时前
核电厂执行器控制系统中的抗辐照MCU选型:为什么需要150krad(Si) TID指标?
服务器·单片机·嵌入式硬件·fpga开发·架构
云数据构建师4 小时前
TB62262FTAG芯片应用和设计电路图
单片机·嵌入式硬件·fpga开发
XINVRY-FPGA4 小时前
5CEFA9F23I7N Altera CycloneV E(Enhanced)FPGA
人工智能·嵌入式硬件·计算机视觉·fpga开发·硬件工程·dsp开发·fpga
乄夜4 小时前
嵌入式面试高频!!!C语言(十四) STL(嵌入式八股文)
c语言·c++·stm32·单片机·mcu·面试·51单片机
编码追梦人11 小时前
从零入门嵌入式系统:核心概念 + 环境搭建 + 传感器实战
单片机·嵌入式硬件
椰壳也可12 小时前
06_作业基于CubeMx实现按键控制LED灯(裸机)(立芯嵌入式笔记)
笔记·stm32·学习
dqsh0613 小时前
树莓派5+Ubuntu24.04 LTS CH348 / CH9344 驱动安装 保姆级教程
linux·c语言·单片机·嵌入式硬件·iot
点灯小铭14 小时前
基于单片机的16位逐次逼近AD电路设计
单片机·嵌入式硬件·毕业设计·课程设计·期末大作业