2个版本
0.1.1 | 2020年8月23日 |
---|---|
0.1.0 | 2020年8月23日 |
881 在 过程宏 中
每月 下载 22 次
在 2 个 包中使用
16KB
279 代码行
lvbitfile2rust
lvbitfile2rust从lvbitx文件生成静态寄存器映射。
通过命令行调用
cargo install lvbitfile2rust
lvbitfile2rust-cli /boot/user.lvbitx | rustfmt > rio.rs
作为宏调用
mod rio {
use lvbitfile2rust_macros::lvbitfile2rust;
lvbitfile2rust!("/boot/user.lvbitx");
}
生成的代码
lvbitfile2rust生成的代码与svd2rust生成的代码接口相似。生成的代码包含一个名为Peripherals
的结构体和一个名为take
的关联函数。调用take
将尝试打开一个FPGA会话并返回一个Peripherals
实例。这个Peripherals
实例包含每个由输入位文件描述的寄存器的字段。这些字段包含与每个寄存器相对应的结构体实例,具有read
和可能具有write
方法的结构体实例。在实践中,接口非常简单易用
use ni_fpga::fxp::UnsignedFXP;
mod rio {
use lvbitfile2rust_macros::lvbitfile2rust;
lvbitfile2rust!("/boot/user.lvbitx");
}
fn main() -> Result<(), Box<dyn std::error::Error>> {
// Turn PWM on if the RSL is on!
// My scope tells me the RSL blinks at 5Hz in teleop mode!
let peripherals = rio::Peripherals::take("RIO0")?;
loop {
let leds = peripherals.LEDs.read()?;
peripherals.PWM_Hdr0.write(&{
if leds.RSL {
UnsignedFXP::max_value()
} else {
UnsignedFXP::min_value()
}
})?;
}
}
如果输入位文件使用Clusters或Enums,生成的代码将依赖于ni-fpga和ni-fpga-macros。
依赖项
~1.5MB
~40K SLoC