概述
本文主要描述了GD32E230移植FreeRTOS的简要步骤。移植描述过程中,忽略了Keil软件的部分使用技巧。默认读者熟练使用Keil软件。本文的描述是基于OpenMCU_FreeRTOS这个工程,该工程已经下载放好了移植GD32E230 FreeRTOS的所有文件
OpenMCU_FreeRTOS工程的愿景主要有:
1.、能移植支持主流mcu的freeRTOS
2、深入分析FreeRTOS代码和第三方库代码,让嵌入式学习变得非常容易;
3、集成一些嵌入式产品中常用的第三方库文件,并且该工程会开发做一些产品原型,所有的技术方案,就像它的名字一样,全部开源。
移植步骤
1、keil创建GD32E230的工程
注意:一定要选中RTE中CMSIS中的CORE部分
2、工程创建完毕后,在keil中建立分组管理,如下所示:
创建完成后的效果:
4、下载FreeRTOS源码
本文在描述过程中,所有的源码都是基于OpenMCU_FreeRTOS工程。文章的最后部分,有该工程的链接。
5、在刚才新创建的keil GD32E230工程目录下创建Appication文件夹和Utilities文件夹
6、将如下文件拷贝到Application文件夹下面.
7、将如下文件拷贝到Utilities文件下下面
注:
拷贝的文件都来自于OpenMCU_RTOS工程;读者可以通过文章最后的连接,获得工程源码。
8、Application分组添加c文件
9、CMSIS添加system_gd32e23x.c C文件,文件存放的路径为:
OpenMCU_FreeRTOS\arch\GD32\GD32E23x\CMSIS\GD\GD32E23x\Source\
10、添加GD32E23x BSP驱动文件,文件路径为:
OpenMCU_FreeRTOS\arch\GD32\GD32E23x\GD32E23x_BSP\Source
11、添加启动文件startup_gd32e23x.s
文件路径:OpenMCU_FreeRTOS\arch\GD32\GD32E23x\CMSIS\GD\GD32E23x\Source\ARM\startup_gd32e23x.s
12、添加freeRTOS内核C文件,文件路径为:
OpenMCU_FreeRTOS\kernel
13、添加内核移植中的与GD32E230相关的代码
由于GD23E230基于Cortex-M23架构,这部分代码跟Cortex-M4和Corex-M0的架构的移植不同,有安全和非安全的区别,我们基于非安全并且不开启ARM TrustZone特性进行讲解描述;
需要关注的文件路径:
port.c文件:OpenMCU_FreeRTOS\kernel\portable\ARMv8M\non_secure
portasm.c: OpenMCU_FreeRTOS\kernel\portable\ARMv8M\non_secure\portable\GCC\ARM_CM23_NTZ
heap_4.c: OpenMCU_FreeRTOS\kernel\portable\MemMang
FreeRTOSConfig.h: GD32E230\Application
14、所有分组添加完后如下图所示:
15、添加编译时的头文件路径
1、Application
2、OpenMCU_FreeRTOS\arch\GD32\GD32E23x\CMSIS\GD\GD32E23x\Include
3、OpenMCU_FreeRTOS\arch\GD32\GD32E23x\CMSIS
4、OpenMCU_FreeRTOS\arch\GD32\GD32E23x\GD32E23x_BSP\Include
5、Utilities
6、OpenMCU_FreeRTOS\kernel\include
7、OpenMCU_FreeRTOS\kernel\portable\ARMv8M\non_secure
8、OpenMCU_FreeRTOS\kernel\portable\ARMv8M\non_secure\portable\GCC\ARM_CM23_NTZ
添加完成后,如下所示:
16、编译器选项设置
加入GD32E230定义和修改编译警告级别
17、修改gd32e23x_it.c文件中的如下函数定义
删除SVC_Handler, PendSV_Handler SysTick_Handler 等函数定义
18、修改FreeRTOSConfig.h文件,将堆内存修改为5KB
由于整个GD32E230系列的SRAM配置如下如所示:
因此,将FreeRTOS的堆内存调整为5KB(程序本身加载也占用内存,调整过大,会导致程序链接编译错误)
19、编译输出