15次发布
0.4.5 | 2024年8月2日 |
---|---|
0.4.4 | 2024年8月2日 |
0.4.3 | 2024年6月17日 |
0.4.1 | 2024年4月29日 |
0.1.1 | 2024年2月28日 |
在 无标准库 中排名第 91
每月308次下载
80KB
2K SLoC
MicroRTU SDK
为创建MicroRTU的wasm块提供工具。
可以通过 cargo doc --
命令生成文档。
lib.rs
:
MicroRTU SDK
为创建MicroRTU的wasm块提供工具。
示例
这是一个添加两个数字的基本块示例。
use micrortu_sdk::{
params, ports, register_block, Shared, StepResult, FactoryInput
};
use static_cell::StaticCell;
pub struct Counter;
ports! {
#[block_names(counter)]
pub struct Ports {
count: TI13 InOut 1 1,
}
}
params! {
#[block_names(counter)]
pub struct Params {}
}
pub fn factory(_: &mut FactoryInput) -> Option<&'static mut Counter> {
static COUTNER: StaticCell<Counter> = StaticCell::new();
Some(COUTNER.init(Counter))
}
pub fn init(_: &mut Shared, _: &mut Counter) -> StepResult {
0
}
pub fn step(shared: &mut Shared, _: &mut Counter) -> StepResult {
let mut ports = Ports::parse(&mut shared.latched_ports[..]);
ports.count.value += 1.;
0
}
register_block!(Counter, counter, factory, init, step);
WASM二进制布局
要定义可以在MicroRTU配置中引用的 block_name
块,您需要从您的最终wasm blob中导出3个函数。
必需的导出
init
init
函数的签名应为 () -> ()
。
SHARED
SHARED
符号,对齐到8字节,且对于至少512字节的读取和写入必须有效。
COLLECTED_STRINGS
它应该是 &[u8]
,这是切片的起始和长度指针。它应该指向所有端口和参数名称的连接。 name_offset
和 name_len
是相对于此切片的。
factory_{block_name}
factory_{block_name}
是一个将被调用来生成wasm块的函数。它的签名应为 (i32) -> i32
,并且代码必须确保它遵循Rust的该签名语义。
for<'a> extern "C" fn(&'a FactoryInput) -> Option<&'static mut BlockName>;
其中 BlockName
是您的块类型。
init_{block_name}
init_{block_name}
是一个在 step
之前将被调用的函数。它的签名应该是 (i32, i32) -> i32
,并且代码必须确保它遵循 Rust 的该签名语义
for<'a> extern "C" fn(&'a mut Shared, &'a mut BlockName) -> StepResult;
step_{block_name}
step_{block_name}
是一个用于执行“步骤”的函数。它的签名应该是 (i32, i32) -> i32
,并且代码必须确保它遵循 Rust 的该签名语义
for<'a> extern "C" fn(&'a mut Shared, &'a mut BlockName) -> StepResult;
ports_{block_name}
和 params_{block_name}
还必须有类型为 &[BindingDefinition]
的端口和参数的导出,这在内存中是 [i32; 2] - 指向切片起始地址和长度的指针。
依赖项
~9–11MB
~228K SLoC