本帖最后由 jf_39160458 于 2021-10-13 16:03 编辑
1 RT-Thread介绍RT-Thread全称是 Real time-Thread,顾名思义,它是一个嵌入式实时多线程操作系统。它是一款完全由国内团队开发维护的嵌入式实时操作系统(RTOS),具有完全的自主知识产权。经过近12个年头的沉淀,伴随着物联网的兴起,它正演变成一个功能强大、组件丰富的物联网操作系统。 RT-Thread的官网:https://www.rt-thread.org/。读者可以在官网上看到许多RT-Thread的相关介绍。
RT-Thread 主要采用 C 语言编写,浅显易懂,方便移植。它把面向对象的设计方法应用到实时系统设计中,使得代码风格优雅、架构清晰、系统模块化并且可裁剪性非常好。
2 代码下载目前RT-Thread提供很多下载方式,有百度网盘、GitHub、Gitee。本书推荐使用Gitee方式,下载连接:https://gitee.com/rtthread/rt-thread。
(1)打开网址:https://gitee.com/rtthread/rt-thread ,单击“统计”——“发行版”,建议下载 4.0.3版本。
3 cortex-m4通用代码GD32F303是基于ARM® Cortex®-M4处理器的32位通用微控制器。而rt-thread已经针对Cortex®-M4核提供了通用的移植代码,位于文件夹“libcpuarmcortex-m4”,如图:
可以看到事实上 rt-thread已经几乎支持了arm大部分系列的芯片。这里的代码基本都是汇编代码,主要是任务切换相关的。
由于rt-thread已经把移植工作中最难的部分标准化了,那我们接下来移植BSP可以说事半功倍。
3 BSP工程文件夹创建进入“bsp”文件夹,可以看到,目前已经支持了很多GD芯片系列了,其中就由GD32F303。但是我们也可以自己尝试一下移植工作,熟悉了一下流程。
(1)创建bsp基础工程文件夹
这里我们可以直接复制同样是Cortex®-M4核的芯片的bsp文件夹作为基础文件夹,例如这里我直接复制gd32450z-eval,这个bsp是gd32f450芯片的,也是Cortex®-M4核。新的文件夹名为gd32303e-qidian,进入该文件夹。
打开rtconfig.py文件,可以看到该文件指定了我们使用的芯片架构为arm cortex-m4
(2)修改template.uvprojx工程文件
打开“template.uvprojx”文件,我们需要修改芯片为“GD32F303ZE”
但是我在操作这一步的时候总是失败。
于是我找到官方例程“01_GPIO_Runing_Led”的GD32303E_EVAL.uvprojx文件,把它复制过来修改成 “template.uvprojx”。
打开,可以看到该工程有很多代码。
这些我们都不需要,直接删除所有代码文件,删除后如下:
修改为c99模式:
保存退出。
(3)修改库文件
打开“Libraries”文件夹,可以看到有很多GD32F4XX的库文件。
我们芯片是GD32F303,需要换成GD32F30X官方库文件。
先删除3个文件夹,保留SConscript文件
GD32F30X官方库文件可以去官网下载:
http://www.gd32mcu.com/cn/download/0?kw=GD32F3
下载后,把GD32F30X官方库文件都复制过来,如图:
打开SConscript文件,需要将原先库文件的路径都改成GD32F30X库文件路径,修改后如下:
(4)修改驱动文件
进入“drivers”文件夹,可以看到有很多驱动文件,都是之前GD32F450的,我们需要删除,保留board 和 drv_usart 即可,然后将我们下载的GD32F30X官方例程中的“gd32f30x_libopt.h”文件也复制过来,如图:
打开“SConscript”文件,删除红色框代码,只保留drv_usart.c相关的即可
(5)修改 board.h ,设置正确的内存大小
打开“board.h”文件,这里我们需要修改内存大小为我们芯片对应的大小,GD32F303ZE是64K,改成64即可:
(6)修改Kconfig文件
打开“gd32303e-qidian”文件夹下的 Kconfig文件,需要将SOC_GD32450Z修改成 SOC_GD32303Z,同时删除红色框部分代码,因为我们GD32F303不支持SDRAM。
(7)menuconfig生成工程
修改到这里,我们差不多可以运行menuconfig生成我们keil工程文件了。进入menuconfig,我们不需要网络功能,把lwip的配置去掉,如图:
(8)串口驱动
修改到这里,事实上,我们还差串口驱动修改,由于串口驱动的修改比较多,这里暂时不展开,可以先直接拿已经修改好的串口驱动文件覆盖即可。或者直接对编译报错的代码直接注释掉,后续我们再移植串口驱动
(9)修改编译错误
修改到这里,我们
输入 scons --target=mdk5 ,生成新工程文件后,我们打开“project.uvprojx”,然后开始编译,可以看到会有一些错误提示,
这个是头文件不对,我们需要把gd32f4xx.h 修改成 gd32f30x.h
修改编译报错后,可以看到编译成功,结果如下:
烧录到开发板也可以成功运行到main函数。
0