前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >M-Arch(番外2)GD32L233评测-开发环境搭建(基本框架+freeRTOS+编译通过)

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

作者头像
滚神大人
发布2022-03-22 12:05:22
5640
发布2022-03-22 12:05:22
举报
文章被收录于专栏:趣Python

前言

板子还没有收到。

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

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

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

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

pack安装

pack名:

代码语言:javascript
复制
GigaDevice.GD32L23x_DFP_1.0.0.pack

双击安装,一路OK即可。

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

pack的bug

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

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

keil pack管理器的版本

框架融合

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

M-Arch架构:

M-Arch架构

M-Arch IO目录层次:

M-Arch IO目录层次

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

代码语言:javascript
复制
".\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单独拎出来:

代码语言:javascript
复制
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的半主机问题。

报错:

代码语言:javascript
复制
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) 

解决:

代码语言:javascript
复制
#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. */   
};

替换为:

代码语言:javascript
复制
__ASM (".global __use_no_semihosting");

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

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

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

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

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

keil 编译AC6配置

大功告成

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

代码语言:javascript
复制
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
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-01-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 趣Python 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • pack安装
  • 框架融合
  • 编译通过
    • 重点解决问题一:AC6的半主机问题。
      • 重点解决问题二:FreeRTOS的编译问题。
      • 大功告成
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档