您尚未登录。

楼主 # 2022-07-05 23:36:35

shaoxi2010
会员
注册时间: 2019-06-13
已发帖子: 372
积分: 321

用RUST来测试下航芯ACM32F403RET7官方开发板

在晕哥店里捡个漏拿便宜开发板,趁现在兴致还在赶紧玩玩。由于平常使用Mac和linux环境居多,基本不在window下开发,
受海石生风大佬的帖子感觉应该可行。最近在学习RUST,不久前stable部分的组建也完善了现在用RUST开发已经不在需要
arm-none-gcc的支持可以使用llvm实现全套编译,顺便可以省下几个G的工具链。目前cortex-m下rust支持很简单,cargo-embed
可以实现管理下载编译调试一条龙,probe-rs项目也可以支持CMIS包,svd2rust可以实现基本寄存器库,配合cortex-m和
cortex-m-rt支持,点个灯还是没有问题,简单记录分享下,尝试白嫖。

1. 需要安装rust相关组建

rustup default stable #使用稳定版工具链
rustup component add llvm-tools-preview #安装llvm工具链
rustup target add thumbv8m.main-none-eabihf #安装M33标准库
cargo install cargo-embed cargo-generate cargo-binutils target-gen svd2rust #安装辅助工具集

2. 下载修改的模版到本地,在官方基础上修改为stm32f103并使用cargo-embed管理,也添加了acm32的描述文件。
可以使用CMIS的pack用target-gen生成yaml描述,具体参考probe-rs项目
已修改好项目地址: https://github.com/shaoxi2010/cortex-m-quickstart

3. 使用cargo generate生成led项目 cargo generate --git ./cortex-m-quickstart -n acm32f4-rs

4. 生成acm32f40x寄存器库信息
a.先在acm32f4-rs的同级目录下新建一个rust库,使用cargo new --lib acm32f40x创建一个lib
b.使用pack文件解压出svd文件,并将ACM32F4.svd文件拷到acm32f40x目录下
c.使用svd2rust -i ACM32F4.svd生成代码,将生成的lib.rs文件拷贝到src目录下
d.强迫症患者用rustfmt对生成文件进行重新格式化,库就算搞定了
PS:pack文件下是没有寄存器feild描述,比较坑爹,没发使用位方法,但是我看stm32是有的。。。

5. 回到led项目,将刚生成的寄存器库添加到Cargo.toml文件中

6. 其他修改参考rust的cortex-m的说明即可,可参考芯片yaml文件。

7. 在Embed.toml文件修改[default.general]下的chip = "ACM32F403RET7"

8. 写点逻辑代码编个简单的LED程序,完成。

9. 最后接上USB,连接电路板,cargo embed执行下载调试。

点灯完整项目可参考: https://github.com/shaoxi2010/acm32f4-rs
运行效果如下:

最近编辑记录 shaoxi2010 (2022-07-06 11:41:17)

离线

#1 2022-07-06 18:19:29

Marco
会员
所在地: liu7312@sina.com
注册时间: 2022-05-24
已发帖子: 14
积分: 9

Re: 用RUST来测试下航芯ACM32F403RET7官方开发板

rust是个什么?  交叉编译工具链么?

离线

#2 2022-07-07 10:20:12

le062
会员
注册时间: 2019-02-07
已发帖子: 73
积分: 68.5

Re: 用RUST来测试下航芯ACM32F403RET7官方开发板

rust牛逼。
c快点完蛋吧,C语言就是语法刺客,太容易把问题遗留到测试阶段了。

离线

#3 2022-07-07 10:21:03

le062
会员
注册时间: 2019-02-07
已发帖子: 73
积分: 68.5

Re: 用RUST来测试下航芯ACM32F403RET7官方开发板

曾经的C小红,变成了C小黑 neutral:|:|

离线

#4 2022-07-07 16:26:16

海石生风
会员
所在地: 深圳
注册时间: 2019-07-02
已发帖子: 567
积分: 692
个人网站

Re: 用RUST来测试下航芯ACM32F403RET7官方开发板

看视频里这个编译时间已经是增量编译的情形了吧,虽然说不是很快但还可以接受。rust其中的一个硬伤是不能直接调用C导致生态不好建立。

离线

楼主 #5 2022-07-07 17:13:26

shaoxi2010
会员
注册时间: 2019-06-13
已发帖子: 372
积分: 321

Re: 用RUST来测试下航芯ACM32F403RET7官方开发板

那个是clean后从新编译速度还行,rust的硬伤挺多的,C调用在这里面很小,因为ABI的调用规则是一样的。蛋疼反而再一些奇奇怪怪的地方,航芯的SVD里没有寄存器描述,库类型系统检查的优势完全反而弄得到处都得unsafe,算下来还不如C得头文件。格式化字符串会导致容量暴涨,这个FLASH大还好,f103上还是挺难取舍得。

离线

#6 2022-07-07 22:08:17

海石生风
会员
所在地: 深圳
注册时间: 2019-07-02
已发帖子: 567
积分: 692
个人网站

Re: 用RUST来测试下航芯ACM32F403RET7官方开发板

@shaoxi2010
rust跟C的设计思想可以说是两个极端,rust调用C虽说可行,但非常吃力。我曾想用rust调用C的UI库来进行图形开发,发现对接非常困难,可能是我的功力不够,只好做罢。
并且rust开始走C++的老路,特性非常多,代码阅读起来吃力。而C因为特性太过简单,很多人会用大量的指针来模拟面向对象,导致阅读调试也很吃力。
所以现在嵌入式领域缺少像golang那样简洁而又高级的语言。

最近编辑记录 海石生风 (2022-07-07 22:09:39)

离线

#7 2022-07-08 10:30:45

ling0625
会员
注册时间: 2022-07-08
已发帖子: 6
积分: 16

Re: 用RUST来测试下航芯ACM32F403RET7官方开发板

准备也测试一下

离线

#8 2022-07-08 11:08:04

Copper
会员
注册时间: 2021-12-29
已发帖子: 30
积分: 60

Re: 用RUST来测试下航芯ACM32F403RET7官方开发板

Marco 说:

rust是个什么?  交叉编译工具链么?

。。。一种编程语言,根C、python的概念是平级的。

离线

#9 2022-07-12 11:03:43

xbass
会员
注册时间: 2022-07-12
已发帖子: 1
积分: 1

Re: 用RUST来测试下航芯ACM32F403RET7官方开发板

LZ听厉害的。这芯片好用么?

离线

#10 2022-10-04 02:30:22

jlau
会员
注册时间: 2018-06-11
已发帖子: 205
积分: 197.5

Re: 用RUST来测试下航芯ACM32F403RET7官方开发板

海石生风 说:

rust跟C的设计思想可以说是两个极端,rust调用C虽说可行,但非常吃力。我曾想用rust调用C的UI库来进行图形开发,发现对接非常困难,可能是我的功力不够,只好做罢。
并且rust开始走C++的老路,特性非常多,代码阅读起来吃力。而C因为特性太过简单,很多人会用大量的指针来模拟面向对象,导致阅读调试也很吃力。
所以现在嵌入式领域缺少像golang那样简洁而又高级的语言。

@海石生风
zig和c/c++的互操作性很佳,你甚至可以拿zig做c/c++编译器。
可以试试zig,像这位一样:Build an LVGL Touchscreen App with Zig

离线

#11 2022-10-04 13:05:34

海石生风
会员
所在地: 深圳
注册时间: 2019-07-02
已发帖子: 567
积分: 692
个人网站

Re: 用RUST来测试下航芯ACM32F403RET7官方开发板

@jlau
zig一直都在关注,之前还尝试了下拿zig cc当做C交叉编译器在Linux跨平台编译AWTK到Windows平台。只不过zig当前正在进行自举且尚未完工,交叉编译能力比之前要差点,编译AWTK的源码都ok,但在链接阶段失败了。打算过段时间,等自举得差不多了再尝试。

zig现在还没实现自举,还不能在生产环境中使用。期待它早日发布1.0.0版本吧。

最近编辑记录 海石生风 (2022-10-04 13:15:19)

离线

#12 2022-10-05 14:21:36

jlau
会员
注册时间: 2018-06-11
已发帖子: 205
积分: 197.5

Re: 用RUST来测试下航芯ACM32F403RET7官方开发板

@海石生风
你是AWTK开发人员吗?我一直觉得用zig实现gtk/glib那样规模和完善度的库是一个很好的证明自己的机会。当然gtk/glib有点大,能用zig实现AWTK也是很好的证明,有人推动一下就好了。

对于rust,从热度和复杂性来说我感觉有成为第二个c++的趋势。我比较同意这篇文章里面的说法,rust的做法有点迂腐了,减少了编程的乐趣。linux 6.1要集成rust支持了,我很想看看几年后just for fun的linus会怎么看待rust。

对于c++的继任者,我感觉google的carbon有可能更受欢迎。carbon对c++的兼容跟zig对c的兼容一样好。rust意味着重学重写,carbon和zig意味着学多一点。

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn