三 裸机移植FreeRTOS 源码
1、在裸机工程目录下建一个文件夹FreeRTOS,
(1)在新建的目录下建 src 和 port 文件夹
(2)把Source下的".c"文件复制到src。
(3)把"MemMang"和将要使用的编译器文件复制到 port。此处使用MDK就复制"RVDS"。
(4)直接复制"include文件夹"到FreeRTOS文件夹内。
2、在编译器(MDK)里新建分组
(1)在开发环境里面新建 FreeRTOS/src 和 FreeRTOS/port 两个分组。
在 FreeRTOS/src 里面添加 文件夹 src 里面的内容。
在 port 里面添加 :
[1]MemMang 里面的内容,常用的是"heap_4.c"。
[2]RVDS 里面ARM_CMx(x为根据内核表示0、3、4或者7)的内容。
3、在裸机工程目录下建一个文件夹 user
(1)在 user 目录里存放自己的代码,把 "FreeRTOSConfig.h"文件复制进去,或者自己新建一个。
(2)在 在开发环境里面新建 user 分组,把自己的代码和 FreeRTOSConfig.h 添加进去。
4、添加路径
5、修改 FreeRTOSConfig.h 文件内容
主要修改两个方面:
添加宏定义__NVIC_PRIO_BITS, CortexM 系列产品优先级仅使用 4 位。
修改优先级相关的几个宏定义:
//使能抢占式调度器
#define configUSE_PREEMPTION 1
//系统主频
#define configCPU_CLOCK_HZ (SystemCoreClock )
//系统时钟节拍 1KHz,即 1ms。
#define configTICK_RATE_HZ ( ( TickType_t ) 1000 )
//定义可供用户使用的最大优先级数,如果这个定义的是 5,那么用户可以使用的优先级号是 0,1,2,3,4,不包含 5,对于这一点,要特别的注意。
#define configMAX_PRIORITIES ( 5 )
//定义堆大小, FreeRTOS 内核, 用户动态内存申请
#define configTOTAL_HEAP_SIZE ( ( size_t ) ( 17 * 1024 ) )
工程里面不能有 SysTick, PendSV 和 SVC 三个系统中断的使用,因为 FreeRTOS 系统已经实现了这三个中断。
修改后在这个文件的末尾加上 Systick, PendSV 和 SVC 中断函数的宏定义, 目的是将 FreeRTOS 移
植文件 port.c 文件里面的中断服务程序映射到 CMSIS 定义的标准名称, 这样就不需要用户去修改工
程启动代码中这几个中断的名字了, 很方便就实现了两个函数的统一:
#define vPortSVCHandler SVC_Handler
#define xPortPendSVHandler PendSV_Handler
#define xPortSysTickHandler SysTick_Handler
6、至此,最小的 FreeRTOS 内核移植完成。