项目地址:https://github.com/xiaguangbo/custom_rv32_rust
picorv32 + 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)
离线
删除`program_picorv32ec/picorv32asm/picorv32entrymacro/Cargo.toml`里的 `edition = 2024`
离线
MCU上一般是用静态内存分配,用不了rust内存管理的强项;
rust 默认就是静态 (stack) 分配啊。rust 的 “内存管理” 就是 compile time borrow checking,保证数据的 owernship 和 lifetime 符合要求,跟静态、动态分配没有关系。
不能直接调用MCU厂商提供的固件C库
用 FFI (外部函数接口) 就行啊
但说实话,感觉大部分厂商给的 C SDK 代码质量都很差,bug 一大堆(包括内存bug)。用 rust 调用这种 SDK 那照样还是得炸
离线
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)
离线
仓库里的已经可以运行了,效果就是闪灯。正在进行下一步
离线
离线
此项目地址修改到:https://github.com/xiaguangbo/picorv32_and_rust
离线