移植freeRTOS到一个完全不同且现在没有得到官方支持的处理器不是一件容易事,这边文档会介绍关于移植的一些知识。
处理器不同,实现的细节也就不同,因此这个文档没法将移植说的很详细,只是提供一个大致的移植过程及方法介绍。建议在移植的时候,先去看下官方支持的分支,然后找一个尽可能与你的处理器类似的分支作为参考。后面也会在”示例工程”章节中介绍如何去修改一个已经存在的例程。
建立文件目录结构
freeRTOS的内核源代码通常仅包含3个文件(如果使用协程的话,4个),和一个或者两个适配文件。
推荐的步骤:
- 下载最新版本的freeRTOS源代码。
- 解压文件,注意维护的目录结构。
- 熟悉源代码组织及目录结构。
- 创建一个包含移植文件的文件夹。应该遵守这样的组织机构:
FreeRTOS/Source/portable/[compiler name]/[processor name]
- 复制空的
port.c
和portmacro.h
文件到你刚才创建的文件夹中。这两个文件包含一系列需要实现的函数,可以参考其他已经存在的文件创建。 - 如果处理器的栈生长方式是向下生长(高地址到低地址),那么需要把
portSTACK_GROWTH
设置为-1,否则设置为1. - 创建文件夹包含示例程序,路径
FreeRTOS/Demo/[architecture_compiler]
. - 复制已经存在的
FreeRTOSConfig.h
和main.c
文件当第7步创建的文件夹中。 FreeRTOSConfig.h
中的设置项需要根据你的实际应用修改。- 在刚才创建的目录下创建目录
parTest
(probably FreeRTOS/Demo/[architecture_compiler]/ParTest
)。复制ParTest.c文件到这个目录下。 ParTest.c
包含三个简单的函数:- 设置GPIO,用来翻转LED
- 点亮或熄灭LED
- 翻转LED
这三个函数需要你自己根据你的开发板去实现。你可以参考已存在的其他处理器的
ParTest.c
文件。
创建工程
现在创建工程所需的全部文件都已经准备好了,是时候建立工程去编译它们了。显然,很多函数都仅仅只有原型,而没有去实现,现在这个工程还做不了什么事情,具体实现还要依靠你自己。
工程所需要包含的源文件:
- Source/tasks.c
- Source/Queue.c
- Source/List.c
- Source/portable/[compiler name]/[processor name]/port.c
Source/portable/MemMang/heap_1.c (or heap_2.c or heap_3.c or heap_4.c) - Demo/[processor name]/main.c
- Demo/[Processor name]/ParTest/ParTest.c
工程需要包含的头问价路径(建议使用相对路径而不是绝对路径):
- Demo/Common (i.e. ../Common)
- Demo/[Processor Name]
- Source/include
- Source/portable/[Compiler name]/[Processor name]
实现
这是最难的一部分,适配层的文件此时需要开发者自己去实现,建议先实现pxPortInitialiseStack()
,为了实现这个函数你需要先了解清楚你的任务堆栈的上下文结构,也就是任务在切换时,堆栈需要保存哪些寄存器或者需要恢复哪些寄存器。
当前内容版权归 tangguocheng 或其关联方所有,如需对内容或内容相关联开源项目进行关注与资助,请访问 tangguocheng .