OpenMCU(二):GD32E23xx FreeRTOS移植

概述

本文主要描述了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、编译输出

工程连接

yanl1229/OpenMCU_FreeRTOS

相关推荐
炸膛坦客10 小时前
单片机开发工具篇:(十四)配置输出 .map 文件及其本地路径
c语言·单片机·嵌入式硬件
笨笨饿11 小时前
140_AI新手村MCP与Skills是干嘛的
开发语言·人工智能·python·stm32·单片机·嵌入式硬件·物联网
hahaha601613 小时前
色彩恒常性概述
人工智能·嵌入式硬件·数码相机·计算机视觉
我叫洋洋13 小时前
Cadence CIS 元器件库合并实战:3000+ 焊盘、156 个符号零冲突并入自有库
数据库·单片机·嵌入式硬件·oracle·电路
hahaha601614 小时前
Shades-of-Gray (SoG) 算法--白平衡算法
人工智能·嵌入式硬件·算法·计算机视觉
ebiobiz14 小时前
极海 APM32 使用 Nimmake 编译指南
c++·python·单片机·嵌入式硬件·mcu
小神兵16 小时前
对电压源与电流源的的简单理解
单片机·嵌入式硬件·物联网
comyccccc17 小时前
三极管与MOS管工作原理全解析学习笔记
单片机·嵌入式硬件
FPGA小徐17 小时前
运放电路:负载必须接地时,如何做电流采样(浮地负载 vs 接地负载)
单片机·嵌入式硬件
木白CPP18 小时前
USB(一): USB 概述&&介绍
linux·网络·嵌入式硬件