下载内核文件:FreeRTOS 实时内核 (RTOS) - 浏览 /FreeRTOS at SourceForge.net
选择一个合适的版本,本次移植使用10.0.1。 可以使用最新的版本进行移植。
下载完成并解压文件。
本次使用的MCU为STM32F103ZET6。
FreeRtos文件夹用于存放操作系统相关文件。
打开KEIL软件,新建Project,选择处理器,我这里选择ARMCM3。
在工程中添加文件组。
编译,此时缺少main函数。
解压好内核文件,将FreeRTOSv10.0.1\FreeRTOS\Source目录下的所有文件移植至工程目录下的FreeRtos文件下。
删除不需要的文件,只保留MemMang和RVDS文件夹。
删除RVDS目录下的其他文件,保留ARM_CM3。
添加文件到工程中。
添加头文件路径。
编译,此时缺少FreeRTOSConfig.h头文件。
..\FreeRtos\include\FreeRTOS.h(56): error: #5: cannot open source input file "FreeRTOSConfig.h": No such file or directory
在下载的源码文件例程中找一个FreeRTOSConfig.h添加到工程目录下,包含其所在的路径。
编译,此时报错未定义xTaskGetCurrentTaskHandle,在工程中搜索xTaskGetCurrentTaskHandle。
工程中只有此处定义了#define INCLUDE_xTaskGetCurrentTaskHandle 0,可试将0改为1。
再编译时,未定义xTaskGetCurrentTaskHandle的问题已经解决。又回到了上次出现的问题。
.\Objects\FreeRTOS.axf: Error: L6218E: Undefined symbol Image$$ARM_LIB_STACK$$ZI$$Limit (referred from startup_armcm3.o).
解决办法,点击魔法棒,在Linker下取消Use Memory Layout from Target Dialog的勾选,按下图先后顺序进行操作。
最后编译,工程中已经无报错无警告了。一份只含FreeRTOS的工程文件创建完成。
首先准备一份无报错无警告的现有工程文件,以STM32F103VET6固件库开发模板为例。
在工程目录下新建一个FreeRTOS文件夹用于存放FreeRTOS内核源码,并将下载好的源码移植到该目录下。
删除不用的文件,在FreeRTOS\portable目录下只保留MemMang和RVDS文件,FreeRTOS\portable\RVDS目录下只保留ARM_CM3文件。当然这些文件也可以保留在工程文件夹中,只是用不到。(操作与 3. 移植内核源码相同)
在KEIL软件中,将FreeRTOS源码添加到工程中,并添加头文件路径后编译
在此处报的错与上一节相同,需要在工程目录下添加FreeRTOSConfig.h文件,并添加头文件路径(在此是将FreeRTOSConfig.h文件添加到User目录下,就省去重新添加路径)。再者,还需修改宏定义INCLUDE_xTaskGetCurrentTaskHandle 0(0改为1)。
本章节只介绍了向现有工程文件中移植FreeRTOS源码,并未做文件源码的修改与添加。