您尚未登录。

楼主 # 2025-03-15 14:46:30

Xiagb
会员
注册时间: 2020-03-29
已发帖子: 22
积分: 36

rv32 cpu该怎么适配rust,试着模仿写了点但编译出错

项目地址:https://github.com/xiaguangbo/custom_rv32_rust
picorv32 + rust
各种适配要被搞麻了,所以打算都自己写

离线

楼主 #1 2025-03-15 14:50:13

Xiagb
会员
注册时间: 2020-03-29
已发帖子: 22
积分: 36

Re: rv32 cpu该怎么适配rust,试着模仿写了点但编译出错

出错代码:
program_picorv32ec/project/src/main.rs
```
#[picorv32asm::entry]
fn main() -> ! {
    loop {}
}
```

现在的错误:
```
$ cargo build
   Compiling picorv32asm v0.1.0 (/home/xiaguangbo/linux/project/custom_rv32_rust/program_picorv32ec/picorv32asm)
   Compiling project v0.1.0 (/home/xiaguangbo/linux/project/custom_rv32_rust/program_picorv32ec/project)
   Compiling picorv32entrymacro v0.1.0 (/home/xiaguangbo/linux/project/custom_rv32_rust/program_picorv32ec/picorv32asm/picorv32entrymacro)
error: unsafe attribute used without unsafe
--> src/main.rs:6:1
  |
6 | #[picorv32asm::entry]
  | ^^^^^^^^^^^^^^^^^^^^^ usage of unsafe attribute
  |
  = note: this error originates in the attribute macro `picorv32asm::entry` (in Nightly builds, run with -Z macro-backtrace for more info)
help: wrap the attribute in `unsafe(...)`
  |
6 | unsafe(#[picorv32asm::entry])
  | +++++++                     +

error: could not compile `project` (bin "project") due to 1 previous error
```

奇了怪了,我看别的项目也这么写就可以用,比如wch rust项目的

最近编辑记录 Xiagb (2025-03-15 15:03:55)

离线

楼主 #2 2025-03-17 11:50:57

Xiagb
会员
注册时间: 2020-03-29
已发帖子: 22
积分: 36

Re: rv32 cpu该怎么适配rust,试着模仿写了点但编译出错

删除`program_picorv32ec/picorv32asm/picorv32entrymacro/Cargo.toml`里的 `edition = 2024`

离线

#3 2025-03-17 16:12:05

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

Re: rv32 cpu该怎么适配rust,试着模仿写了点但编译出错

rust太复杂了,在MCU上写rust跟写C++差不多;
MCU上一般是用静态内存分配,用不了rust内存管理的强项;
不能直接调用MCU厂商提供的固件C库,只能用开源社区的库,代码质量反而无法保证;

所以MCU上的rust生态不可能会壮大,最多业余玩-玩而已。

离线

#4 2025-03-18 03:17:35

unturned3
会员
注册时间: 2020-07-01
已发帖子: 272
积分: 301

Re: rv32 cpu该怎么适配rust,试着模仿写了点但编译出错

海石生风 说:

MCU上一般是用静态内存分配,用不了rust内存管理的强项;

rust 默认就是静态 (stack) 分配啊。rust 的 “内存管理” 就是 compile time borrow checking,保证数据的 owernship 和 lifetime 符合要求,跟静态、动态分配没有关系。


海石生风 说:

不能直接调用MCU厂商提供的固件C库

用 FFI (外部函数接口) 就行啊


但说实话,感觉大部分厂商给的 C SDK 代码质量都很差,bug 一大堆(包括内存bug)。用 rust 调用这种 SDK 那照样还是得炸

离线

#5 2025-03-18 16:13:39

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

Re: rv32 cpu该怎么适配rust,试着模仿写了点但编译出错

rust的策略是用于替代频繁malloc/free的场合,MCU里基本都是静态(static)全局变量,所以rust无用武之地。在这里用rust,反而要搞一堆unsafe,那rust的意义何在?
FFI不是直接调用,绝大部分C/C++之外的语言都支持通过FFI调用C,像C++调用C这种才叫直接调用。FFI很繁琐的。
SDK代码质量差的是小众芯片厂,那么rust社区一般也不支持该小众芯片。

最近编辑记录 海石生风 (2025-03-18 16:19:57)

离线

楼主 #6 2025-03-19 12:31:59

Xiagb
会员
注册时间: 2020-03-29
已发帖子: 22
积分: 36

Re: rv32 cpu该怎么适配rust,试着模仿写了点但编译出错

仓库里的已经可以运行了,效果就是闪灯。正在进行下一步

离线

楼主 #7 2025-03-19 12:38:35

Xiagb
会员
注册时间: 2020-03-29
已发帖子: 22
积分: 36

Re: rv32 cpu该怎么适配rust,试着模仿写了点但编译出错

离线

楼主 #8 2025-03-19 13:43:49

Xiagb
会员
注册时间: 2020-03-29
已发帖子: 22
积分: 36

Re: rv32 cpu该怎么适配rust,试着模仿写了点但编译出错

此项目地址修改到:https://github.com/xiaguangbo/picorv32_and_rust

离线

页脚

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

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