【GD32F427开发板试用】+VSCODE下基于RT-thread Nano 3.03的移植

本篇文章来自极术社区与兆易创新组织的GD32F427开发板评测活动,更多开发板试用活动请关注极术社区网站。作者:易水

前言

我日常的工作环境使用的是windows系统,但是公司对正版有要求,故开发环境用的是vscode,这是一个基于GCC的开发环境,在此环境下开发的程序在LINUX环境下可以直接用。
GD32官方提供了Keil和IAR支持,但是没有提供对ARM-GCC的支持配置文件。
所以要想在GCC模式下开发,就要自己进行造轮子,并进行移植,把官方要做的事情,我们自己做了。把官方要猜的坑,我们来踩了。

说明

我这篇文章可能写的有点繁琐,大家可以看做如何教大家拿到一块陌生的开发板后,如何从零到一的在vscode上进行开发移植。
本来我是打算写一篇在vscode下开发GD32的裸机程序的,但是论坛已有相同的功能了。我想了想自己最近正在vscode上做GD32F103芯片的RT Thread的移植,在经过漫长的数周开发踩坑,心态爆炸后,终于在12.5号完成了GD32F103芯片的RT Thread移植开发。然后,今天用了一个上午,完成了GD32F427开发板的RT-thread Nano 3.03移植开发。
踩坑结束,作文报告给大家。

准备工作

  1. 到官方网站下载datasheet等各项数据手册。
  2. 准备一台电脑,下载vscode,ARM-GCC 交叉编译器gcc-arm-none-eabi-10-2020-q4-major。具体安装方法可在论坛搜索,我这里就不讲了。
  3. 把官方的所有数据手册大致浏览一遍。

过程

建立一个工程文件,我这里直接拿来野火的工程结构来创建。

  • .vscode:系统自动创建
  • build:makefile编译来的
  • Doc:自己创建,放置说明。
  • Libraries:GD32底层固件
    * CMSIS:CM4等文件,把官方的CMSIS文件拷贝过来,并在此文件夹下新建startup文件夹。 * FWlib:GD32F427底层外设驱动文件。
  • rtthread:RT-thread Nano 3.03文件。
  • User:main函数等文件。需要自己编写,改写。
  • gd32f407_427_flash.ld:LinkerScript文件,需要自己改写,默认大家都会移植,不会参考论坛其他人的。
  • Makefile:编译连接文件,需要自己编写,默认大家都会,不会可以参考论坛其他人的。

移植修改

  1. 在cpuport.c文件111行增加如下代码
    #define SCB_AIRCR (*(volatile unsigned long )0xE000ED0C) / Reset control Address Register / #define SCB_RESET_VALUE 0x05FA0004 / Reset value, write to SCB_AIRCR can reset cpu */
  2. 在cpuport.c文件354行增加如下代码
    /** * reset CPU */ RT_WEAK void rt_hw_cpu_reset(void) { SCB_AIRCR = SCB_RESET_VALUE; }
  3. 修改context_gcc.S为context_gcc.s
  4. 在.ld中添加如下代码
    /* The program code and other data goes into FLASH / .text : { . = ALIGN(4); (.text) / .text sections (code) / (.text) / .text sections (code) / (.glue_7) / glue arm to thumb code / (.glue_7t) / glue thumb to arm code / (.eh_frame) KEEP ((.init)) KEEP ((.fini)) /*RT-thread GCC Add start*/ / section information for finsh shell / . = ALIGN(4); __fsymtab_start = .; KEEP((FSymTab)) __fsymtab_end = .; . = ALIGN(4); __vsymtab_start = .; KEEP((VSymTab)) __vsymtab_end = .; . = ALIGN(4); /* section information for initial. / . = ALIGN(4); __rt_init_start = .; KEEP((SORT(.rti_fn*))) __rt_init_end = .; . = ALIGN(4); /* RT-thread GCC Add end / . = ALIGN(4); _etext = .; / define a global symbols at end of code */ } >FLASH
  5. 在.s文件修改101行启动函数main为entry。
    以上基本是在RT-thread Nano 3.03移植时必做的修改,修改完这些,编译才能大致无错。移植RT-thread Nano 3.03以上的系统时,有一部分改进了,需要大家具体问题具体分析。
  6. Makefile中修改.c.h文件路径,修改.s.ld文件路径。
  7. 在Libraries/CMSIS/GD/GD32F4xx/Include文件夹下新建gd32f4xx_libopt.h,
  8. 在Libraries/CMSIS/GD/GD32F4xx/Include文件夹下新建RTE_Components.h文件。
  9. 删除gd32f4xx_it.c中所有的函数。

  1. 在gd32f4xx.h中预定义 GD32F427

以上完成后就可以make了。
make中的问题。

  1. MAKE中遇到提示note: previous declaration of ‘fd_mask’ was here,在Makefile中预定义-DRT_USING_NEWLIB

  2. Make中遇到error: redefinition of ‘union sigval’,
    1. 解决方法:https://github.com/RT-Thread/rt-thread/issues/20602. 解决方法:在Makefile中预定义-DHAVE_SYS_SIGNALS。
    在这里提一句,移植RT-thread操作系统 ,大家一定要去github上看lssues,很多问题的答案都在里面,我们碰到的问题很多前辈都碰到过,如果实在没有,恭喜你,你可以用自己的名字来给他留名了。
    结果
    基本上到这里移植就结束了,因为make到这里基本上就没有问题了。接下来就是写一个测试程序,来测试我们的程序。

  3. 在user文件夹下新建bsp文件夹,在bsp文件夹下新建LED文件夹,在文件夹下新建bsp_led.c,bsp_led.h文件,在里面写入程序。

    1. 在这里额外提一句,我不太喜欢RT的驱动框架,因为虽然方便,但是要想看懂,有点困难,对于我这种强迫症患者来说,实在不太友好。每次都要脑子里绕一下才能理解,有点费脑,无脑使用还是可以的。
    2. 公司标准审核的话,给其他人看和维护不太友好,因为每次都要我给他们讲解,即便加上注释也不行。
  4. 在main文件中,创建线程,并make编译。

大小如下。

板载GD-Link下载

  1. 打开GD-Link Programmer.exe
  2. 送的USB线链接GD-LINK mini USB插头,点击target->connet,自动建立链接。

链接成功,在屏幕下面如上图显示,在屏幕左侧会显示。

  1. 点击file->open文件,加载bin或hex文件。
  2. 点击target->program烧录文件,烧录成功如下。

26.4k烧录时间2.516S,还凑合,差不多10k/s。
做测试是够用了。
实验现象
就是灯一闪一闪的,大家可以自己下载我提供的文件去烧录,我没有上传到B站之类的外站进行外置链接,只是手机拍摄了一下视频,目前极术还不能直接上传视频,可能会对服务器有压力。
总结
GD32F427评测
先说GD32F427的评测,这个芯片资源尚可,频率不错,就是IO比较少,但是ram之类的是真大,非常适合移植操作系统,用作物联网方面,如果是IO资源需求较多的项目可能不是太适合。
裸机VSCODE开发难度,对于我来说,难度是容易。
在VSCODE下开发,makefile需要懂,GCC与keil开发也不一样,.LD.S文件要会移植改写。
说起来.s文件,大家可以在官方提供的固件包里找到keil与iar下的.s文件,然后参照里面的字段进行移植到GCC下,难度不难,主要就是一个细心的活计。
.ld文件可以自己写,但是要参考官方datasheet,设定好堆栈大小与RAM大小即可,难度一般。也可以在keil文件中安装好GD32F4的pack包之后去提取。
makefile文件可以自己写,也可以用py生成,具体可以参考论坛其他人的。
.ld文件有一个地方要重点提一下,我看到有部分坛友的.ld文件直接照搬其他人的,在分配RAM时,直接就写了256K,虽然GD32F427这个芯片RAM确实是256K,但是不知道大家有没有去看官方的datasheet。

GD32F427的256K组成是112k+16k+64K,这一部分是地址相互连接在一起的,但是这一部分也才192k,剩下的64k在0x10000000,与192K不在一个地址。还有4k在sram的备份域中。
这一点大家要注意,在RAM中存储的数据不要超过192K。小型项目基本用不到,大型项目一定要注意。
此外,关于这块板子设计上实在有一点让人吐槽,那就是没有焊接TTL转USB,232,485等芯片,你都上3300了,还不能上个ch340之类的通讯芯片来让测试吗?
我们工程师手上没有那么多通讯芯片模块啊。
实在不行CN3你引出TTL串口测试点啊,这里也没有引出,是生怕我们复用还是怎么着?实在让人不知道说什么好。
RT Thread的移植评测
这个操作系统最初是因为国内开源我才使用的,但是官方文档上面关于VSCODE的移植并不多,就算有,也没有具体国产芯片的移植方案。
大部分都是ENV活着keil的移植,因为keil移植确实方便。
我最开始移植使用的RT Thread的全面版,但是在vscode上的移植实在太困难,我就开始移植nano版,用的4的版本,但是移植也不顺利,老是有莫名其妙的问题出来。
最后我都准备放弃了,自己写一个操作系统来玩,突然想起来以前玩过野火的nano 3.0.3,于是最后尝试了一下移植,OK了,我都不知道说什么好。只能说版本低还是有好处的。高版本碰到的问题很可能你就是唯一。低版本的问题出现的早,很可能早就有人解决了。
此外建议大家在移植RT Thread的时候一定要把GCC更新到最新的10版本,

我的还是8.1.0,最新的RT Thread nano编译移植都通不多,根据github上的lssues说法,最新版本的RT Thread nano也只有最新的gcc 10才能够编译通过。
话说怎么添加压缩文件,我还没搞懂,先传上去,等我把代码传到百度云或者gitee之类的地方,然后放链接给大家。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值