STM32hal库FreeRTOS移植笔记
- 进入FreeRTOS官网下载FreeRTOS源码,其中LTS指的是长期支持版本
- 在文件夹中解压并打开,其中FreeRTOS-Kernel是FreeRTO核心组件
- 在FreeRTOS-Kernel中我们需要移植的有
-
inclue文件夹:包含需要使用到的头文件
-
portable文件夹:选择Keil文件夹,MemMang其中是内存管理的组件,RVDS文件夹:根据你的MCU核心选择合适文件
-
还有下列可能要用到的FreeRTOS内核.c文件
-
下载2022版本的FreeRTOS包,使用其中的demo的FreeRTOSConfig.h文件,这是FreeRTOS的配置文件,可以对其进行裁剪以及配置,我这里使用的是stm32f407get6故选择FreeRTOSv202212.01\FreeRTOS\Demo\CORTEX_M4F_STM32F407ZG-SK
-
在keil中添加对应的头文件路径
-
修改FreeRTOSConfig.h文件,修改为第二个预编译
-
在stm32f4xx_it.c文件中将“PendSV_Handler”,“SVC_Handler”,“SysTick_Handler”这三个函数注释掉并在cubemx将下面三个配置删除
-
在FreeRTOSConfig.h文件中将下面的组件注释掉
- #define configUSE_IDLE_HOOK 0
- #define configUSE_TICK_HOOK 0
- #define configCHECK_FOR_STACK_OVERFLOW 0
- #define configUSE_MALLOC_FAILED_HOOK 0
在 FreeRTOS 中,这些预编译指令用于配置内核的特定功能。以下是每个指令的含义:
-
configUSE_IDLE_HOOK
:- 这个配置项用于启用或禁用空闲任务钩子函数。如果设置为
1
,可以定义一个空闲任务钩子函数vApplicationIdleHook()
,在系统处于空闲状态时调用。
- 这个配置项用于启用或禁用空闲任务钩子函数。如果设置为
-
configUSE_TICK_HOOK
:- 这个选项用于启用或禁用滴答(tick)钩子函数。如果设置为
1
,可以定义一个滴答钩子函数vApplicationTickHook()
,在每次系统滴答时调用。
- 这个选项用于启用或禁用滴答(tick)钩子函数。如果设置为
-
configCHECK_FOR_STACK_OVERFLOW
:- 此选项用于启用或禁用堆栈溢出检查。如果设置为
1
,FreeRTOS 会在上下文切换时检查每个任务的堆栈大小,以防止堆栈溢出。
- 此选项用于启用或禁用堆栈溢出检查。如果设置为
-
configUSE_MALLOC_FAILED_HOOK
:- 这个配置项用于启用或禁用内存分配失败钩子函数。如果设置为
1
,可以定义一个钩子函数vApplicationMallocFailedHook()
,当内存分配失败(例如,调用pvPortMalloc()
时没有足够内存)时会调用该函数。
- 这个配置项用于启用或禁用内存分配失败钩子函数。如果设置为
将这些选项设置为
0
表示禁用相应的功能,从而减少系统的开销和复杂性。 -
值得注意的是,freertos默认的时基单元是系统时钟即systick,所以在使用cubemx时,hal的系统时钟需要使用其他定时器,不能使用systick定时器
参考链接
FreeRTOS移植教程(超详细)——基于GD32F303X系列MCU - - 21ic电子技术开发论坛
[STM32]从零开始的STM32 FreeRTOS移植教程_stm32使用rtos-CSDN博客
STM32用CUBEMx生成工程, 不使用CMSIS, 自己移植freertos
cubemx在使用freertos的时候为何推荐使用除systick以外的timebase_cubemx提示freertos不用systick时基-CSDN博客
【STM32/FreeRTOS】SysTick定时器及FreeRTOS系统节拍_freertos时钟使用systick还是timer-CSDN博客