目录
一、文件、目录结构
1、FreeRTOS官方文件目录结构
以STM32F103移植FreeRTOS v9.0.0为例,官方源码文件目录结构为,FreeRTOS文件夹和FreeRTOS-Plus文件夹,其中FreeRTOS-Plus为FreeRTOS生态的东西,这里用不到,主要讲FreeRTOS文件夹。
-
Demo
-
各内核及开发环境的工程文件...
-
CORTEX_STM32F103_Keil //我们用这个
-
......
-
-
License
-
license.txt
-
-
Source(核心文件夹)
-
include (需要包含的文件)
-
portable (接口文件、对应开发工具选择移植)
-
MemMang(内存管理相关)(重要)(下面有四个内存管理等级)
-
1、heap_1.c (最简单,不允许释放内存。)
-
2、heap_2.c (允许释放内存,但不会合并相邻的空闲块)
-
3、heap_3.c (简单包装了标准 malloc() 和 free(),以保证线程安全)
-
4、heap_4.c (合并相邻的空闲块以避免碎片化。 包含绝对地址放置选项)
-
5、heap_4.c (如同 heap_4,能够跨越多个不相邻内存区域的堆)
-
-
RVDS(接口文件)
-
port.c
-
portmacro.h
-
-
-
croutine.c (协程相关)(不怎么用)
-
event_groups.c (事件标志组相关)
-
list.c (列表)
-
queue.c (队列和队列项)
-
tasks.c (任务相关)
-
timers.c (软件定时器相关)
-
2、头文件
头文件 | 说明 |
---|---|
FreeRTOS.h | API函数头文件,要先调用这个头文件再调用其他,本质根据配置是否定义其他函数 |
FreeRTOSConfig.h | FreeRTOS配置文件 |
其他:list.h\queue.h... | 各功能的支持头文件 |
3、移植指南
-
移植首先需要接口文件port.c/portmacro.h和内存管理文件:分别在FreeRTOS->Source->portable->RVDS->ARM_CM3->port.c中和FreeRTOS->Source->portable->MemMang->heap_4.c。
-
然后移植功能相关核心代码:FreeRTOS->Source->(include文件夹&croutine.c&list.c&queue.c......)
-
最后需要一个配置文件,"FreeRTOSConfig.h",可以自己创建,不过也可以在FreeRTOS官方Demo中复制一份。(Demo->CORTEX_STM32F103_Keil)
-
编写三个中断服务函数的宏,FreeRTOS已经实现好了分别是
-
#define xPortPendSVHandler PendSV_Handler(要注释掉it.c中的函数)
-
#define vPortSVCHandler SVC_Handler (要注释掉it.c中的函数)
-
#define xPortSysTickHandler SysTick_Handler(也可以在it.c中调用xPortSys...())
-
二、数据类型
FreeRTOS的类型定义在portmacro.h中:
-
TickType_t : FreeRTOSConfig.h中定义configUSE_16_BIT_TICKS时,TickType_t就是uint16_t,否则TickType_t就是uint32_t,
-
BaseType_t : 32位架构中,它就是uint32_t,BaseType_t通常用作简单的返回值的类型,还有逻辑值,比如 pdTRUE/pdFALSE
三、变量名前缀
-
通常,一个变量的命名分为[类型前缀]+[含义]
前缀 | 含义 |
---|---|
c | char |
s | short , uint16_t |
l | long , uint32_t |
x | BaseType_t,结构体,句柄类型 |
u | unsigned |
p | 指针 |
uc | unsigned char , uint8_t |
pc | char 指针 |
四、函数名
-
函数的命名规则为:[返回值类型]+[在哪个文件]+[含义]
例:
函数名 | 说明 |
---|---|
vTaskDelay | 返回值类型:void,在Tasks.c中,功能延时 |
xQueueReceive | 返回值类型:BaseType_t,在queue.c中,功能删除 |
... | ... |
五、宏命名
-
宏的名字是大写,可以添加小写前缀,表示宏在那个文件中定义。
宏前缀 | 说明 |
---|---|
port | 在portable.h/portmacro.h |
task | 在task.h中 |
pd | 在projdefs.h中 |
config | 在FreeRTOSconfig.h中定义 |
err | 在projdefs.h中 |
-
逻辑值的宏
宏 | 值 |
---|---|
pdTURE | 1 |
pdFALSE | 0 |
pdPASS | 1 |
pdFALL | 0 |
六、源码链接
1、FreeRTOSv9.0.0源码
链接:https://pan.baidu.com/s/1jzJH48YGuPM_fRaGNLobYQ?pwd=ucex
提取码:ucex
2、STM32F103VET6移植Keil工程
链接:https://pan.baidu.com/s/1sJeodwzl0jCTIwJajhxQNw?pwd=1234
提取码:1234