[研电赛技术支持]

GD32 的库真是写得与众不同

[复制链接]
2801|21
手机看帖
扫描二维码
随时随地手机跟帖
li880wert|  楼主 | 2021-4-22 17:09 | 显示全部楼层 |阅读模式
rc, GPIO, ck, IO, ip, pi
用过很多MCU,一般库写法都是定义寄存器结构,然后将结构定义 指定外设地址上,可GD的不这样干
所有的操作都是地址在位置,加偏移,而且每个外设的某一位还用enum强制定义,导致每设置一次要调用,
一次,我想直接写 (RCU_USART0|RCU_GPIOA),直接给警告了,

再一个不方便之处,需要调试时候,根本看不到这个结构位置的变量值,所有要看的值都得调他写的宏,一个个调出来,在中断时候想一次性读取ISR 的状态,发现不可能,只能一次一次调用
    rcu_periph_clock_enable( RCU_USART0);
    rcu_periph_clock_enable(RCU_GPIOA);

使用特权

评论回复
li880wert|  楼主 | 2021-4-22 17:11 | 显示全部楼层
我想在UART中断里面一次读取ISR 状态 ,根本不可能,只能
   if(usart_interrupt_flag_get(USART0,USART_INT_FLAG_RBNE))  一个个调用每个状态才知道有什么发生,

使用特权

评论回复
sonicll| | 2021-4-22 17:36 | 显示全部楼层
本帖最后由 sonicll 于 2021-4-22 18:10 编辑
li880wert 发表于 2021-4-22 17:11
我想在UART中断里面一次读取ISR 状态 ,根本不可能,只能
   if(usart_interrupt_flag_get(USART0,USART_IN ...

库是死的,人是活的,你可以自己写条语句直接读状态寄存器:

uint32_t val;
val = USART_STAT(USART0);

然后自己判断每个bit就行了。GD那个usart_interrupt_flag_get函数,因为它不仅要读中断标志,还要读控制寄存器判断中断是否使能,每个中断使能位在不同的寄存器里。

还有你说的rcu_periph_clock_enable(),这个函数也是因为要操作的bit,有可能在不同的寄存器里,所以才用的enum,我觉得这都情有可原。你看ST的库里,虽然可以这样用:
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_USART1, ENABLE);

但是用户要自己操心函数是RCC_APB2PeriphClockCmd还是RCC_APB1PeriphClockCmd的问题,ST版块里因为这个APB1和APB2出问题的新手实在太多了。




使用特权

评论回复
评论
xyz549040622 2021-4-23 16:12 回复TA
同意! 
xcvista| | 2021-4-22 17:47 | 显示全部楼层
同感,而且要命的是想要扔掉库完全捅寄存器 GD 直接没有独立头文件,强行把那个屎山库往我的项目里塞。

使用特权

评论回复
xcvista| | 2021-4-22 17:53 | 显示全部楼层
还有一点,SVD 也是写成了屎。我用 SystemView 联合 GDB 调试各种问题搞得我一个头两个大。我建项目串口早就不是必需品了,调试普遍已经改用直接调试器看内存了,这时候就很依赖 SVD 了。

再进一步,要是没有独立头文件,但是有过得去的 SVD,我还可以用 ARM 的转换工具从 SVD 输出一个独立设备头文件。结果现在独立设备头文件没有,库是屎山还甩不掉,SVD 又是屎,这开发环境也太臭了。

使用特权

评论回复
li880wert|  楼主 | 2021-4-22 18:39 | 显示全部楼层
我只是吐槽下,GD 抛弃了 C的 指针精华

使用特权

评论回复
评论
雨水 2021-5-11 11:27 回复TA
估计是写库的人指针部分不怎么熟 
前功尽弃| | 2021-4-23 10:21 | 显示全部楼层
只能说明功底还不够,哈哈

使用特权

评论回复
imdx| | 2021-4-23 11:36 | 显示全部楼层
没有与众不同,只是和STM32不同而已。我觉得他们的库挺好的,就是更新太慢,有些小bug。

使用特权

评论回复
风来吴山| | 2021-4-23 13:46 | 显示全部楼层
sonicll 发表于 2021-4-22 17:36
库是死的,人是活的,你可以自己写条语句直接读状态寄存器:

uint32_t val;

说的好

使用特权

评论回复
JerryWu75| | 2021-4-23 14:14 | 显示全部楼层
刚刚从STM32F103迁移到GD32F103,从来不用库,简单方便

使用特权

评论回复
nipperhu| | 2021-4-28 15:46 | 显示全部楼层
GD 是国内走向世界的品牌,必须和ST 有区别的,有任何问题都可以联系我,GD代理商 胡工(微信同号)13825615011

使用特权

评论回复
foxtang| | 2021-4-28 15:56 | 显示全部楼层
楼主我想看看楼主写的代码有多高级

使用特权

评论回复
3htech| | 2021-5-2 07:33 | 显示全部楼层
同感,这个库写的确实有点另类。

使用特权

评论回复
xdqfc| | 2021-5-2 10:08 | 显示全部楼层
楼主要是不习惯新库的话,直接用GD32的老版本的库就是了,那个跟STM32的基本差不多。

使用特权

评论回复
caigang13| | 2021-5-2 10:09 | 显示全部楼层
慢慢来嘛

使用特权

评论回复
萝卜头008| | 2021-5-4 09:06 | 显示全部楼层
风格各不同,适应别人的就好,不要指望别人写的都合你的心意

使用特权

评论回复
jcky001| | 2021-5-4 15:22 | 显示全部楼层
GD32想好好磨磨楼主的性子,不可太急

使用特权

评论回复
aple0807| | 2021-5-11 12:07 | 显示全部楼层
以前研究新唐的arm9也是这个风格的,所有寄存器直接用地址指针访问,用习惯后感觉还是挺方便的。

使用特权

评论回复
yangxiaor520| | 2021-5-11 18:38 | 显示全部楼层
楼主研究的细致

使用特权

评论回复
li880wert|  楼主 | 2022-2-25 15:25 | 显示全部楼层
难道各位不用调试没发发现指针的好处,读取某个寄存器,直接在观察窗口输入指针地址,就能得到这个外设所有的状态数据,
你这宏写的寄存器,要看各个外设,还得在程序中一条条加上读取 各寄存器的代码,

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

29

主题

506

帖子

7

粉丝