打印

倒垃圾:GD 全系列 MCU 的软件支持就是这副德行!

[复制链接]
楼主: xcvista
手机看帖
扫描二维码
随时随地手机跟帖
21
本帖最后由 imdx 于 2021-4-30 12:41 编辑
aple0807 发表于 2021-4-29 16:50
一开始确实不太习惯,不过也有它的好处,这种寄存器定义方式比结构体执行效率高,代码量相对较小。 ...

GD的库寄存器定义方法熟悉了确实挺不错,不是只有ST一种风格。

使用特权

评论回复
22
imdx| | 2021-4-30 12:36 | 只看该作者
xcvista 发表于 2021-4-29 11:17
我这里已经有用 STM32F042F4P6 这个只有 16kB Flash,据说是世界上最便宜的 USB ARM 单片机实现的 SWD+串 ...

固件越完善,软件越强大,用到SWD/JTAG这些接口的机会就会越少。

使用特权

评论回复
23
imdx| | 2021-4-30 12:41 | 只看该作者
像GD的库,本身是开源的,其实可以放到github上,用户发现bug修改以后可以直接提PR,这样库的bug修复能更快一些。

使用特权

评论回复
24
xcvista|  楼主 | 2021-4-30 13:51 | 只看该作者
imdx 发表于 2021-4-30 12:33
GD的库寄存器定义方法熟悉了确实挺不错,不是只有ST一种风格。

我之前提到过,ARM 有一套标准的寄存器定义方法,ST、TI、NXP 都是这么做的。GD 的寄存器定义方法反而虽然有其可取之处(可以在补入一些 #ifndef 之后在 C 和汇编之间共用)但不符合这套大厂都遵循的标准。

使用特权

评论回复
25
xcvista|  楼主 | 2021-4-30 13:53 | 只看该作者
imdx 发表于 2021-4-30 12:36
固件越完善,软件越强大,用到SWD/JTAG这些接口的机会就会越少。

对必须用 SWD/JTAG 才能看到的底层行为的盲目会成为你编码中的一大隐患。罔论安全漏洞这种必须用 GDB 这种直接看内存和寄存器的调试器才能查找的 bug。

使用特权

评论回复
26
imdx| | 2021-5-1 08:49 | 只看该作者
xcvista 发表于 2021-4-30 13:53
对必须用 SWD/JTAG 才能看到的底层行为的盲目会成为你编码中的一大隐患。罔论安全漏洞这种必须用 GDB 这 ...

看内存和寄存器没错,但不是只能通过SWD/JTAG,我的固件调试功能本身就可以通过串口来看内存和寄存器。

使用特权

评论回复
27
imdx| | 2021-5-1 08:55 | 只看该作者
xcvista 发表于 2021-4-30 13:51
我之前提到过,ARM 有一套标准的寄存器定义方法,ST、TI、NXP 都是这么做的。GD 的寄存器定义方法反而虽 ...

TI的库就别提了,C2000的库我已经忍受很多年了,烂。NXP的库不熟悉不评价。
ARM是有一套标准,然而这个世界上不是只有一套标准,ARM的也不一定就是最好的,多熟悉一种方式,理解它的优缺点,对自己没有什么坏处,当然不想学习接触新东西的话当我没说。

使用特权

评论回复
28
xdqfc| | 2021-5-1 09:55 | 只看该作者
GD老版的库跟STM的是一样的,大家都习惯STM的,所以那个时候,跳到GD这边来的STM的客户都用的爽歪歪,GD现在的新库总体也不错,习惯一下就好,也不必把GD说的这么烂吧。

使用特权

评论回复
29
caigang13| | 2021-5-2 10:13 | 只看该作者
哈哈哈,淡定淡定啊。

使用特权

评论回复
30
chenjun89| | 2021-5-2 10:41 | 只看该作者
哈哈哈,国产有时候真的有点恨铁不成钢的感觉。

使用特权

评论回复
31
imdx| | 2021-5-2 10:45 | 只看该作者
chenjun89 发表于 2021-5-2 10:41
哈哈哈,国产有时候真的有点恨铁不成钢的感觉。

包括国产用户不?哈哈哈

使用特权

评论回复
32
chenjun89| | 2021-5-2 10:49 | 只看该作者
imdx 发表于 2021-5-2 10:45
包括国产用户不?哈哈哈

肯定不包括啊,现在这么好的机会,国产替代的趋势也很明朗,可是很多国产芯片公司还是不争气啊,假如有天老美不再高制裁了,我估计很多民营企业还是宁愿用进口的。

使用特权

评论回复
33
chenjun89| | 2021-5-2 10:53 | 只看该作者
imdx 发表于 2021-5-2 10:45
包括国产用户不?哈哈哈

芯片本身bug多就不说了,最要命的是,很多公司官网上连个芯片的数据手册都无法下载,必须要提供公司信息联系方式,然后就是让你等待联系。我去.....

使用特权

评论回复
34
imdx| | 2021-5-2 16:13 | 只看该作者
chenjun89 发表于 2021-5-2 10:53
芯片本身bug多就不说了,最要命的是,很多公司官网上连个芯片的数据手册都无法下载,必须要提供公司信息 ...

资料开放程度,这个和是否国产关系不大,和公司相关,国外也有这样的。比如BCM,资料就及其封闭。

使用特权

评论回复
35
weifeng90| | 2021-5-2 16:19 | 只看该作者
哈哈,淡定淡定啊。

使用特权

评论回复
36
xcvista|  楼主 | 2021-5-4 01:57 | 只看该作者
imdx 发表于 2021-5-1 08:49
看内存和寄存器没错,但不是只能通过SWD/JTAG,我的固件调试功能本身就可以通过串口来看内存和寄存器。 ...

如果我要在你的固件里面找安全漏洞,首先安全漏洞触发条件下串口调试还能不能用都成问题,罔论串口调试代码到了安全漏洞面前就全都成了攻击代码 ROP 的材料了,甚至串口调试代码本身都会有安全漏洞。SWD/JTAG 用的是专用调试硬件,程序代码不能直接访问,不存在引入漏洞。实际应用代码还可以关闭调试硬件接口,只要软件本身没有漏洞,就可以彻底封死风险点了。

再说了,有些时候项目非常大,最后者 10kB 就会变成压死项目成败的最后一根稻草。我不用 STM32Cube 是这个道理,不用 GD 库也是这个道理,不用串口调试更是这个道理。

使用特权

评论回复
37
忘了停止| | 2021-5-18 21:27 | 只看该作者
他们非要自己造一个“独特的轮子”的目的无非是:你车上要用的轮子只有我这儿有别处买不到,如果你既想用我的车却不想买我的轮子,那么不好意思,只好请你自己再造一个。

使用特权

评论回复
38
imdx| | 2021-5-19 07:51 | 只看该作者
xcvista 发表于 2021-5-4 01:57
如果我要在你的固件里面找安全漏洞,首先安全漏洞触发条件下串口调试还能不能用都成问题,罔论串口调试代 ...

这逻辑真是够混乱的,漏洞和串口啥关系?只要软件没漏洞?说起来容易,人家芯片验证比你软件开发严谨一万倍,有漏洞也是你代码引入的。没有SWD的芯片一大堆,没有串口的还没见过。很多芯片只能用串口LOG来调试,人家用得也好好的。
ps.GD的库写得还行,你要是觉得不爽可以自己轮一个出来,或者继续用STM32好了。
ps2.虽然目前市面上gdlink除了官方的以外另外一款是我做的,我自己用得其实很少,最多的场合是用来写入bootloader,调试用的极少。
ps3.如果你的代码迭代很久以后还依赖SWD/JTAG调试,说明还是不够完善。

使用特权

评论回复
39
lvben5d| | 2021-5-19 10:36 | 只看该作者
本帖最后由 lvben5d 于 2021-5-19 10:44 编辑

本质 都是写寄存器 没啥区别,你用结构体成员变量去赋值  跟这个宏定义调用,编译后得汇编代码是一摸一样得。都是直接对寄存器地址读写操作。 不过这个风格跟原来STM32那个不一样了(甚至跟从前的GD32不一样),貌似我记得GD32以前也是 寄存器基地址做结构体首地址,GD32E103 貌似改了F103的这种常规写法。      结构体定义寄存器的方式  其实是最好的! 因为偏移地址都基本固定,写库 代码量也会少一点,用户不管是使用库 和 学习直接操作寄存器都有参考的空间。     这个东西应该没啥侵权啊,没理由做最佳的方式。   唯一的解释就是 用函数名来代替你直接操作寄存器地址 可读性强一些吧(不用库函数的moment?)。  PS: 我的代码的确直接用到了操作寄存的这个,而不是用库函数,减少了函数的调用和退出。   
TIMER_CNT(TIMER1) = 0;                    直接操作寄存器地址  赋值0  汇编代码应该是比操作库函数少吧? 清晰度好,就是自己要记住,可读性一般TIMER_CTL0(TIMER1) |= 0x00000001;


使用特权

评论回复
40
xcvista|  楼主 | 2021-5-19 11:03 | 只看该作者
imdx 发表于 2021-5-19 07:51
这逻辑真是够混乱的,漏洞和串口啥关系?只要软件没漏洞?说起来容易,人家芯片验证比你软件开发严谨一万 ...

我前面自始至终没有讲过硬件和芯片测试,我讲的是你的串口 monitor 软件在我触发了安全漏洞的情况下起了什么作用的问题。哪怕你的 monitor 没有漏洞,一个有漏洞的固件可以把你的 monitor 也拖下水,monitor 甚至可以给漏洞代码用 ROP 突破 MPU 保护提供便利。

关于 GD 的库,我的怒火集中在为什么库函数和寄存器定义非要强行捆绑,而且捆绑的库函数还那么低效,还不允许我单独将寄存器定义剥离出去。

使用特权

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

本版积分规则