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);
  }
 
}

实验现象

相关推荐
HIZYUAN7 小时前
AG32嵌入式系统如何实现加密与固件升级(一)
stm32·单片机·嵌入式硬件·mcu·fpga开发·创业创新
YTao_G11 小时前
STM32模块:022 PWR电源控制
stm32·单片机·嵌入式硬件
丁满与彭彭13 小时前
嵌入式学习笔记-MCU阶段-DAY01
笔记·单片机·学习
海海不掉头发14 小时前
【计算机组成原理】-CPU章节学习篇—笔记随笔
笔记·单片机·学习·考研·计算机组成原理
趣多多代言人14 小时前
从零开始手写嵌入式实时操作系统
开发语言·arm开发·单片机·嵌入式硬件·面试·职场和发展·嵌入式
h1372869786915 小时前
Type-C PD快充协议智能芯片S312L详解
嵌入式硬件
不想学习\??!16 小时前
STM32-外部中断
stm32·单片机·嵌入式硬件
不想学习\??!17 小时前
STM32-定时器
stm32·单片机·嵌入式硬件
LIN-JUN-WEI17 小时前
[ESP32]VSCODE+ESP-IDF环境搭建及blink例程尝试(win10 win11均配置成功)
c语言·开发语言·ide·vscode·单片机·学习·编辑器
LS_learner18 小时前
嵌入式系统中实现串口重定向
嵌入式硬件