M-Arch(番外2)GD32L233评测-开发环境搭建(基本框架+freeRTOS+编译通过)

前言

板子还没有收到。

先把编译环境搞定吧,顺势把M23融合到我的M-Arch里面去。

IDE用的是keil,版本是5.30,前面弄过几次,反正吧不是特别友好。

官方特别提示了要用KEIL5,KEIL5工程的后缀是uvprojx,KEIL4工程的后缀是uvproj

另外我搭环境过程中发现编译器只能用AC6,跟AC5差别还是有一些,有些折腾人,细节后面说到。

pack安装

pack名:

GigaDevice.GD32L23x_DFP_1.0.0.pack

双击安装,一路OK即可。

but,这竟然发现也有小bug!!!

8821e28ebe1e7c423dcc803f11018f3b.png
pack的bug

说好的1.0.0版本,安装的竟然是0.0.0版本,手动@GD BOSS。

更离谱的是,keil上面有官方网站上还没有的新版本···

809179ae0c2e62db75bf9b27c8590bf3.png
keil pack管理器的版本

框架融合

M-Arch的基本思想是把IO进行封装和抽象,屏蔽厂家的差异性,从而达到IO跟业务解耦的目的。

M-Arch架构:

d0de03055bf7ffad0e0291e9f25974cf.png
M-Arch架构

M-Arch IO目录层次:

6f17cb8ab8ab42ba1ad975d2c5838101.png
M-Arch IO目录层次

在之前的设计中,我打算把GD32的放到一起,通过宏来区分,但是等把GD32L233CC配置(GD32L233CC的keil配置就是常规的startup S文件,头文件include以及库文件包含等)之后发现一个问题,之前的代码很多编译不过:

".\output_stm\m_arch_app.axf" - 147 Error(s), 248 Warning(s).

详细看了下报错信息,发现主要的一些差异点(同M3,M4):

  • M23的NVIC只有2bit,所以没有组的概念。

    • 所以,nvic_priority_group_set没有 ···

    • 所以,nvic_irq_enable函数参数不一样。

  • M23的很多资源只有1个,定义就不一样了。

    • 例如DAC只有一个,宏定义就是DAC而不是DAC0

    • 定时器有l个低功耗叫LPTIMER,其他的叫TIMER1,TIMER2,TIMER5,TIMER6,TIMER8,TIMER11

    • ···

这样的差异性造成的问题就是M23和M3,M4兼容起来比较困难。

索性把M23的IO单独拎出来:

E:.
│  io.c
│
├─gd32
│      interrupt.c
│      io_adc.c
│      io_crc.c
│      io_dac.c
│      io_fmc.c
│      io_gd32.c
│      io_gd32.h
│      io_gpio.c
│      io_rng.c
│      io_spi_rtc.c
│      io_system.c
│      io_timer.c
│      io_uart.c
│
├─gd32M0
│      interrupt.c
│      io_adc.c
│      io_crc.c
│      io_dac.c
│      io_fmc.c
│      io_gd32.c
│      io_gd32.h
│      io_gpio.c
│      io_rng.c
│      io_spi_rtc.c
│      io_system.c
│      io_timer.c
│      io_uart.c
│

编译通过

重点解决问题一:AC6的半主机问题。

报错:

error: '#pragma import' is an ARM Compiler 5 extension, and is not supported by ARM Compiler 6 [-Warmcc-pragma-import]
#pragma import(__use_no_semihosting)

解决:

#pragma import(__use_no_semihosting)               
//标准库需要的支持函数                   
struct __FILE   
{   
    int handle;   
    /* Whatever you require here. If the only file you are using is */   
    /* standard output using printf() for debugging, no file handling */   
    /* is required. */   
};

替换为:

__ASM (".global __use_no_semihosting");

当然,最简单的方式是直接用MicroLIB。

重点解决问题二:FreeRTOS的编译问题。

首先要保证配置OK,配置指堆栈大小,优先级等。

最简单的办法是直接从FreeRTOS的官方DEMO中直接整一个M0的配置来用。

另外,编译的时候要把告警配置为AC-5 Like,不然会有一堆的编译告警。

7da820fe1a00246139281fdb4e003498.png
keil 编译AC6配置

大功告成

至此,基本的编译环境算是搞定了。

linking...
Program Size: Code=23284 RO-data=1184 RW-data=24 ZI-data=13944  
FromELF: creating hex file...
After Build - User command #2: fromelf --bin -o "E:\Gitee\m-arch\m_arch_app.bin" "E:\Gitee\m-arch\m_arch_app.axf"
".\m_arch_app.axf" - 0 Error(s), 0 Warning(s).
Build Time Elapsed:  00:00:07

【注:本文首发于eeworld,后续也会在微信公众号:趣Python,发布。】

e309ccf2de3b3dbc17a475a334a759cb.gif 4258e3f2ff65c03c1e9df2413076107b.png 894137a1f84ece8c521b386cad6a4741.gif
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值