- 主题:GD32的库真是写的稀烂
结构体要注意pack,要提防编译器自作主张给你塞几个字节进去。
用宏来描述确定性更强,而且抽象成本是0
/* registers definitions */
#define DMA_INTF REG32(DMA + 0x00U) /*!< DMA interrupt flag register */
/* bits definitions */
/* DMA_INTF */
#define DMA_INTF_GIF BIT(0) /*!< global interrupt flag of channel */
#define DMA_INTF_FTFIF BIT(1) /*!< full transfer finish flag of channel */
#define DMA_INTF_HTFIF BIT(2) /*!< half transfer finish flag of channel */
#define DMA_INTF_ERRIF BIT(3) /*!< error flag of channel */
【 在 tom6bj (tom) 的大作中提到: 】
: 结构体风格的移植性有什么问题呢, 都是标准c
: stm32官方库通过了什么ansi认证的吧
: gd32的库用了大量的宏,很多操作在预编译阶段就搞定了,可读性略差,感觉效率应该高一点。对于倾向于直接使用寄存器操作的用户更友好。
: ...................
--
FROM 36.45.172.*
谁这么想不开从java/web转来写stm32...
还不如学nios ii 封成posix api
【我搞了个ECLayer的思路也是从nios ii继承来的
【 在 tom6bj 的大作中提到: 】
: 感觉hal是给没写过mcu, 从java/web之类转行过来的码农准备的吧。。。
:
--
FROM 111.198.57.*
编译慢对于mcu开发问题不大。因为mcu上要塞的东西本来就不多。
编译出的文件大小和c的全面对比还要再往后放放,目前我也还在探索中。
你更关心极限最小体积,这块我觉得要精通rust之后才行,眼下我的熟练度还完全
不够。而且单对比hal很难说是否公平。毕竟stm32的hal和rust的hal完全不一样。
我只能说rust在机制上对比c是有优势的,但rust比c复杂的多,不同选项下有的东
西一开可能很容易就超了。
所以我目前是在stm32f0上开发找个real case综合测试下。64K rom,8K ram,塞个
gui进去,含字库,再加一些常见的逻辑,i2c啊,timer啊,一些逻辑控制啊,485
通讯啊等等。之前用c基于hal做,把所有优化措施都用上之后非常勉强的能塞进
去。rust这块我还没把之前的gui port完暂时还不知道,只能说先搞个感性认识。
真要折腾极限测试需要投入巨大精力,rust和c两边都要做极限尺寸优化之后再pk才
有价值,我估计我是没时间去做这个事情了~
另一方面在系统编程方面,我也开始用rust代替之前用python做的项目了。目前大
概是python一天完成的活用rust干了20天...当然目前我在两方面的熟练度上存在巨
大差异...rust下我知道怎么用meta programming做的更快的,但熟练度不够暂时无
法支撑这些想法...
【 在 spadger (imdx) 的大作中提到: 】
: 编译慢可以等等,生成的二进制文件尺寸和C比如何?我比较关心这个。
: HAL库太臃肿了,只要用了,目标文件就小不了。
--
修改:lvsoft FROM 180.109.234.*
FROM 180.109.234.*
高层轮子都有不少了...lvgl虽然目前是c移植过来的,但我看reddit上有人想轮一个
pure rust的...
你看我前面贴的gcode的例子,那个也是pure rust的。
之前活没干起来所以没怎么关注到,现在一搜就感觉趋势不太对,很多人都在摩拳擦
掌的在rust里造轮子....
【 在 tom6bj (tom) 的大作中提到: 】
: 这是底层轮子都有了吧。。。
: 我数了一下, stm32f10x官方usb库, 回调函数最多得42个
: (实际用不了这么多, 很多是nop_process)
--
修改:lvsoft FROM 180.109.234.*
FROM 180.109.234.*
Hal库是传说中未来的主推,想长期搞这个的还是不得不去熟悉玩弄一下的。不过结合cube,我最近把一个旧项目重写了一下,感觉还可以,没有特别难接受。
【 在 tom6bj 的大作中提到: 】
: 感觉hal是给没写过mcu, 从java/web之类转行过来的码农准备的吧。。。
:
--
FROM 114.87.83.*
rust几年前就基本定型了,但当时用于嵌入式开发还必须用unstable分支,所以我当
时没有真正开始。演化到现在我感觉差不多可以进入了。
比如hal库已经迭代过一轮,我觉得后面应该也不会再重来了...
思维上嘛...我用过scala这种更反人类的语言...暂时压力不大...
不过rust这种严格的检查写代码确实太累,容易中断思路。习惯了python这样的写几
行试试再说的风格,再来写rust确实会比较烦躁。所以说我还在摸索合适的平衡点...
【 在 eggcar (eggcar) 的大作中提到: 】
: LL库还好,基本是把寄存器zero-cost地翻译成人类语言了
: rust还没进化完成是个问题,跟早几年的go一样,演化速度快 学习跟不上趟...我
在等它啥时候release 1.0
: 不过我觉得未来会有在rust基础上演化出来的更合乎人类思维的语言,解决跟编译
器斗智斗勇的问题。。。
--
FROM 180.109.234.*
还有一个问题,rust这种zero-cost abstraction,会不会导致debug很困难?
【 在 lvsoft 的大作中提到: 】
: rust几年前就基本定型了,但当时用于嵌入式开发还必须用unstable分支,所以我当
: 时没有真正开始。演化到现在我感觉差不多可以进入了。
: 比如hal库已经迭代过一轮,我觉得后面应该也不会再重来了...
: ...................
--
FROM 111.198.57.*
这个不是大问题。
更难debug的是functional的编程方式,但mcu上可以选择还是基于procedural
approach写代码。
zero-cost abstraction本身不会影响可读性,相反可以改善可读性杜绝错误。
比如plot(x,y),x和y都是一个uint16,理论上你可以犯错误写成plot(y,x)。
rust可以不增加代价的封装成CoordX(x),CoordY(y),写反了马上就能检测出来,
这是我目前相当喜欢的特性。
当然zero-cost abstraction并不仅仅是这个用途,这个框架比较大难以一言而尽。
如果是meta programming确实就比较难调试了。但我在另一个基于rust的系统性项
目中用了一个基于meta programming写的parser,我发现也没我预想的那么糟糕。
rust的compiler还是相当给力并且友善的。
【 在 eggcar (eggcar) 的大作中提到: 】
: 还有一个问题,rust这种zero-cost abstraction,会不会导致debug很困难?
--
修改:lvsoft FROM 180.109.234.*
FROM 180.109.234.*
不管什么语言,最终都要变成机器指令,目前阶段,C还是距离机器指令最近的。
不过就算是C,在不同的硬件上生成的机器指令可能都会有非常大的差异。
现在写汇编的人应该不多了,但是debug的时候,还是经常需要看汇编指令的。
Rust我不熟悉,不过目前还想象不出一种语言能取代C在底层编程上的地位。选一种工具更重要的是各种轮子的数量和质量,这方面处于稳定器的语言更有优势,希望Rust能发展好吧,以后能用上。
【 在 lvsoft (Lv(The Last Guardian)) 的大作中提到: 】
: 编译慢对于mcu开发问题不大。因为mcu上要塞的东西本来就不多。
: 编译出的文件大小和c的全面对比还要再往后放放,目前我也还在探索中。
: 你更关心极限最小体积,这块我觉得要精通rust之后才行,眼下我的熟练度还完全
: ...................
--
FROM 36.45.172.*
c比较简单,所以编译成对应的机器码的过程比较容易预测。
这也是为啥c++在嵌入式开发中应用比较少的原因。
rust我目前还不敢说它的可预测性如何。但rust的设计目标之一还确实是要取代C做
底层系统编程的。rust也很早就完成了自举,也即基于rust实现rust自身的一切。
现在在rust圈有个比较明显的趋势就是很多人都在各个层面讨论要轮个基于pure
rust的底层设施。
目前rust的轮子已经不少了,在crates.io上,现在有40091个库...最近半年有更新
的库有15000个左右。作为对比,pypi下有233683个项目,活跃项目也就60000个左
右(满足alpha级成熟度,或者一年内有更新)。
crates里面的很多库版本号虽然都是0.2,0.3...但我用的几个质量都很好的,让我
非常满意。不足的地方更多的是功能不足而不是实现的不好。这个跟python下面的
0.x项目质量是相当不同的。
【 在 spadger (imdx) 的大作中提到: 】
: 不管什么语言,最终都要变成机器指令,目前阶段,C还是距离机器指令最近的。
: 不过就算是C,在不同的硬件上生成的机器指令可能都会有非常大的差异。
: 现在写汇编的人应该不多了,但是debug的时候,还是经常需要看汇编指令的。
: ...................
--
FROM 180.109.234.*