#sdk #scripting #micrortu

无std micrortu_sdk

MicroRTU SDK

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

Download history 279/week @ 2024-04-27 12/week @ 2024-05-04 4/week @ 2024-05-18 1/week @ 2024-05-25 125/week @ 2024-06-08 156/week @ 2024-06-15 14/week @ 2024-06-22 9/week @ 2024-07-06 245/week @ 2024-07-27 63/week @ 2024-08-03

每月308次下载

MIT/Apache 协议

80KB
2K SLoC

MicroRTU SDK

crates.io Documentation

为创建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_offsetname_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