公司动态

FreeRTOS移植

📅 2026/8/22 11:10:44
FreeRTOS移植
1.FreeRTOS源码下载1.1官网下载官网地址https://www.freertos.org/这里我们选择分发包202212.01版本下载。1.2Github下载Github地址https://github.com/FreeRTOS/FreeRTOS/releases2.FreeRTOS源码结构介绍下面是FreeRTOS官方安装包内部内容注意版本为202212.01包含各文件的功能。这里我们移植的话就选择移植FreeRTOS内核文件夹就可以。2.1源码整体结构名称描述FreeRTOSFreeRTOS内核FreeRTOS-PlusFreeRTOS组件但是一般我们会选择第三方组件tools工具GitHub-FreeRTOS-HomeFreeRTOS的GitHub仓库链接Quick_Start_Guide快速入门指南官方文档链接Upgrading-to-FreeRTOS-xxx升级到指定FreeRTOS版本官方文档链接History.txtFreeRTOS历史更新记录其他其他2.2FreeRTOS内核文件夹结构下面是FreeRTOS内核文件夹内容包含每个文件夹作用。名称描述DemoFreeRTOS演示例程支持多种芯片架构、多种型号芯片LicenseFreeRTOS相关许可SourceFreeRTOS源码Test公用以及移植层测试代码2.2.1Soure文件夹结构下面是FreeRTOS内核文件内Source文件夹内部内容。include文件夹和.c文件是通用的头文件和 C 文件这两部分的文件适用于各种编译器和处理器是通用的。标红的是移植必需的其他.c文件根据需要选取。名称描述include包含了FreeRTOS的头文件portable包含FreeRTOS移植文件包括与编译器相关文件keil编译环境文件croutine.c协程相关文件event_groups.c事件相关文件list.c列表相关文件queue.c队列相关文件stream_buffer.c流式缓冲区相关文件tasks.c任务相关文件timers.c软件定时器相关文件2.2.1.1portable文件夹结构portable文件夹内部包含各种处理器相关的文件夹在实际开发过程中只需要移植于目标芯片和开发环境相对应的文件夹即可同时还需要移植MemMang文件夹。在这里我们只需要移植以下三个文件夹即可。注意RVDS文件夹下包含多个内核芯片的移植文件只需移植对应的文件夹即可。也可以RVDS文件夹全部进行移植。名称描述Keil指向RVDS文件夹RVDS不同内核芯片的移植文件MemMang内存管理相关文件2.2.1.1.1RVDS文件夹下面是RVDS文件夹内部内容可以看到FreeRTOS 为我们提供了 cortex-m0、m3、m4 和 m7 等内核的单片机的接口文件根据mcu的内核选择对应的接口文件即可。这里我们采用的单片机型号是STM32F103C8T6是采用ARM3架构的所以我们这里只需移植ARM_CM3 这个文件夹。点开ARM_CM3文件夹后发现只有port.c与portmacro.h 两个文件。下面是ARM_CM3 文件夹内的内容。port.c文件里面的内容是由 FreeRTOS 官方的技术人员为 Cortex-M3 内核的处理器写的接口文件。portmacro.h文件port.c文件对应的头文件主要是一些数据类型和宏定义。2.2.1.1.2MemMang文件夹下面是MemMang文件夹下的内容MemMang 文件夹下存放的是跟内存管理相关的总共有五个 heap 文件以及一个 readme 说明文件。这五个 heap 文件在移植的时候必须使用一个这里我们采用heap4.c。3.FreeRTOS移植步骤下面我们正式开始进行FreeRTOS的移植目前我使用的开发板是STM32F103C8T6我们将先通过STM32CubeMX先生成一个可以执行的Keil文件用于后续的移植这里我们简单进行说明STM32CubeMX的配置。在STM32CubeMX中新建工程选择STM32F103C8Tx配置调试接口SYS - Debug - Serial Wire配置外部晶振RCC - High Speed Clock - Crystal/Ceramic Resonator配置时钟参数如下HSE 8MHzPLL HSE × 9SYSCLK 72MHzAHB 72MHzAPB1 36MHzAPB2 72MHz配置LED用于后续测试。PC13 - GPIO_Output配置USART1PA9 - USART1_TXPA10 - USART1_RX最后编写一个简单的LED闪烁确认工程能够编译和下载以及LED能正常闪烁。3.1文件目录中添加源码文件现在我们正式进行FreeRTOS的移植在工程文件夹内先新建一个FreeRTOS文件夹用于存放移植所需要的文件。在FreeRTOS文件夹下新建source文件夹存放7个.c文件。这些文件存放在官方文件的source文件夹下。再在FreeRTOS文件夹下新建一个portable文件夹存放下面三个文件。MemMang是与内存相关文件这里我们只用到heap_4所以只保留了该文件。RVDS内只需要保留与寄存器相关的文件我这里是ARM3就只保留了ARM3的文件。include文件夹内保留的是从官方文件demo中找到对应开发板和编译器的示例中抽取的FreeRTOSConfig.h文件。下面第一个图片是FreeRTOS文件夹下的内容第二个图片是RVDS下的内容第三个是MemMang文件夹下的内容。我们将FreeRTOSConfig.h文件放在Core/Inc下。图片一图片二图片三3.2工程中添加源码文件点击品字图标在Groups中新建FreeRTOS/Source和FreeRTOS/Portable在其中添加图片对应的.c文件。点击魔法棒选择C/C点击Include path将下面文件进行添加。3.3配置文件修改需要在FreeRTOSConfig.h中添加如下3个配置在FreeRTOSConfig.h中添加三个宏#definexPortPendSVHandlerPendSV_Handler#definevPortSVCHandlerSVC_Handler#defineINCLUDE_xTaskGetSchedulerState1在stm32f1xx_it.c文件中将有关PenSV和SVC的函数删除或者注释掉。在stm32f1xx_it.c文件中添加#includeFreeRTOS.h#includetask.h在Sys函数按如下添加externvoidxPortSysTickHandler(void);voidSysTick_Handler(void){if(xTaskGetSchedulerState()!taskSCHEDULER_NOT_STARTED){xPortSysTickHandler();}}这里简单解释一下为啥要进行这三个操作第一是添加三个宏定义后有关PenSV和SVC就重复定义了需要注释掉或者删除。最后是开启滴答计时器。