freeRTOS的文件结构
- FreeRTOS-Labs
- FreeRTOS-Plus 包含freeRTOS+的组件和demo项目
- FreeRTOS 包含内核和demo项目
- Source目录:
- 三个必须文件list.c queue.c task.c和其他的一些附加的文件
- include目录存放内核的头文件
- portable目录存放与内存管理相关的内容、与架构和编译器相关的内容,前者里面关注的是heap_x.c文件。后者里面需要关注的文件只有port.c和protmacro.h
- Source目录:
freeRTOS的移植
需要关注的文件:
- Source文件下主要存放的是freeRTOS内核的文件
Makefile文件的编写
可以分为多个makefile文件构建系统
内核文件列表
输入文件列表
FREERTOS_DIR:以FreeRTOS目录为项目的基目录
FREERTOS_SOURCE_DIR:该目录指定freertos的内核文件存放的目录
FREERTOS_INC:该目录指定freertos的头文件
FREERTOS_SRC:内核文件列表
输出文件列表
FREERTOS_OBJS:freertos中所有与底层相关的代码生成的目标文件。依赖于FREERTOS_SRC、PORT_OBJS和SDK_OBJS
体系结构相关的文件列表的声明
输入文件列表
ARCH_PORTABLE_INC:体系结构相关的头文件,例如CMSIS头文件等
ARCH_PORTABLE_SRC:一般是port.c
ARCH_PORTABLE_ASM:与cpu移植相关的汇编程序文件(一般是异常处理函数的实现,线程上下文的切换)
输出文件列表
PORT_OBJS:依赖于ARCH_PORTABLE_SRC和ARCH_PORTABLE_ASM
bsp文件的声明
输入文件列表
SDK_DIR:bsp文件存放的目录
SDK_SRC:c语言的引导程序,自己实现的标准库文件,驱动代码文件的列表
SDK_ASM:汇编的boot代码,和异常向量表的汇编程序的文件列表
输出文件列表
SDK_OBJS:依赖于SDK_SRC和SDK_ASM
应用文件的声明
输入文件列表
APP_SRC:应用的c文件列表
APP_ASM:应用的汇编文件列表
APP_INCLUDES:应用的头文件
输出文件列表
APP_OBJS:依赖于APP_SRC和APP_ASM
编译环境的构建
该文件中应该建立的变量有
LINKER_SCRIPT:链接脚本相关,链接脚本存放的位置
GCC工具链相关的变量:
GCC、OBJCOPY、OBJDUMP、AR、RANLIB、GDB
编译标志:
CFLAG、ASMFLAGS和LDFLAGS
makefile中VPATH和vpath的使用
makefile中patsubst的使用:用于文件模式的替换
patsubst 原模式, 目标模式, 文件列表
makefile中notdir的使用:去掉文件的绝对路径只保留文件名
gcc中–wrap选项的使用:使用方式–wrap==symbol。作用是在调用symbol函数时会替换为__wrap_symbol函数,就是为了替换系统函数。
起编译作用的makefile
输出文件:
OUT_ELF:最后的输出文件,依赖于OUT_ELF中指定的文件,由gcc直接编译输出为elf文件
OUT_OBJS:依赖APP_OBJS和FREERTOS_OBJS
APP_OBJS:依赖于APP_SRC和APP_ASM