FreeRTOS移植

1. FreeRTOS下载、

下载内核文件:FreeRTOS 实时内核 (RTOS) - 浏览 /FreeRTOS at SourceForge.net

FreeRTOS移植_第1张图片

选择一个合适的版本,本次移植使用10.0.1。 可以使用最新的版本进行移植。

FreeRTOS移植_第2张图片

 下载完成并解压文件。

FreeRTOS移植_第3张图片

2.  创建工程文件

本次使用的MCU为STM32F103ZET6。

FreeRtos文件夹用于存放操作系统相关文件。

FreeRTOS移植_第4张图片

 打开KEIL软件,新建Project,选择处理器,我这里选择ARMCM3。

FreeRTOS移植_第5张图片

CMSIS 栏选中 CORE Device 栏选中 Startup 这两个文件。

FreeRTOS移植_第6张图片

FreeRTOS移植_第7张图片

 在工程中添加文件组。

FreeRTOS移植_第8张图片

编译,此时缺少main函数。

FreeRTOS移植_第9张图片

 还有错误,可先不管。FreeRTOS移植_第10张图片

 3. 移植内核源码

 解压好内核文件,将FreeRTOSv10.0.1\FreeRTOS\Source目录下的所有文件移植至工程目录下的FreeRtos文件下。FreeRTOS移植_第11张图片

 删除不需要的文件,只保留MemMang和RVDS文件夹。

FreeRTOS移植_第12张图片

 删除RVDS目录下的其他文件,保留ARM_CM3。

FreeRTOS移植_第13张图片

 添加文件到工程中。

FreeRTOS移植_第14张图片

添加头文件路径。

 FreeRTOS移植_第15张图片

 编译,此时缺少FreeRTOSConfig.h头文件。

..\FreeRtos\include\FreeRTOS.h(56): error:  #5: cannot open source input file "FreeRTOSConfig.h": No such file or directory

FreeRTOS移植_第16张图片

 在下载的源码文件例程中找一个FreeRTOSConfig.h添加到工程目录下,包含其所在的路径。

 FreeRTOS移植_第17张图片

 编译,此时报错未定义xTaskGetCurrentTaskHandle,在工程中搜索xTaskGetCurrentTaskHandle。FreeRTOS移植_第18张图片

工程中只有此处定义了#define INCLUDE_xTaskGetCurrentTaskHandle 0,可试将0改为1。

 FreeRTOS移植_第19张图片

 再编译时,未定义xTaskGetCurrentTaskHandle的问题已经解决。又回到了上次出现的问题。

.\Objects\FreeRTOS.axf: Error: L6218E: Undefined symbol Image$$ARM_LIB_STACK$$ZI$$Limit (referred from startup_armcm3.o).

FreeRTOS移植_第20张图片

解决办法,点击魔法棒,在Linker下取消Use Memory Layout from Target Dialog的勾选,按下图先后顺序进行操作。

 FreeRTOS移植_第21张图片

 FreeRTOS移植_第22张图片

最后编译,工程中已经无报错无警告了。一份只含FreeRTOS的工程文件创建完成。

4. 在现有工程中移植FreeRTOS

首先准备一份无报错无警告的现有工程文件,以STM32F103VET6固件库开发模板为例。

FreeRTOS移植_第23张图片

 FreeRTOS移植_第24张图片

在工程目录下新建一个FreeRTOS文件夹用于存放FreeRTOS内核源码,并将下载好的源码移植到该目录下。

FreeRTOS移植_第25张图片

 FreeRTOS移植_第26张图片

 删除不用的文件,在FreeRTOS\portable目录下只保留MemMang和RVDS文件,FreeRTOS\portable\RVDS目录下只保留ARM_CM3文件。当然这些文件也可以保留在工程文件夹中,只是用不到。(操作与 3. 移植内核源码相同

在KEIL软件中,将FreeRTOS源码添加到工程中,并添加头文件路径后编译

FreeRTOS移植_第27张图片

 在此处报的错与上一节相同,需要在工程目录下添加FreeRTOSConfig.h文件,并添加头文件路径(在此是将FreeRTOSConfig.h文件添加到User目录下,就省去重新添加路径)。再者,还需修改宏定义INCLUDE_xTaskGetCurrentTaskHandle 0(0改为1)。

 再编译,工程中遍0报错,0警告了。FreeRTOS移植_第28张图片

 本章节只介绍了向现有工程文件中移植FreeRTOS源码,并未做文件源码的修改与添加。

 

你可能感兴趣的:(M3,单片机,嵌入式硬件)