| Crates.io | mielin-rt |
| lib.rs | mielin-rt |
| version | 0.1.0-rc.1 |
| created_at | 2026-01-18 01:56:17.981768+00 |
| updated_at | 2026-01-18 01:56:17.981768+00 |
| description | Lightweight embedded runtime for Cortex-M and resource-constrained IoT devices |
| homepage | |
| repository | https://github.com/cool-japan/mielin |
| max_upload_size | |
| id | 2051577 |
| size | 955,188 |
Embedded Runtime Profile
Lightweight runtime for Cortex-M and other embedded targets, enabling MielinOS to run on resource-constrained IoT devices.
MielinRT provides a minimal runtime environment for embedded devices, bringing the power of agent-based computing to microcontrollers, sensors, and edge devices.
mielin-rt/
├── agent.rs # Lightweight agent representation
├── power.rs # Power management and battery monitoring
└── lib.rs # Embedded runtime core
Add to your Cargo.toml:
[dependencies]
mielin-rt = { path = "../mielin-rt" }
mielin-hal = { path = "../mielin-hal" }
#![no_std]
#![no_main]
use mielin_rt::EmbeddedRuntime;
use mielin_rt::power::PowerMode;
#[entry]
fn main() -> ! {
let mut runtime = EmbeddedRuntime::new();
// Initialize runtime
runtime.init().expect("Failed to initialize");
// Set power-saving mode
runtime.set_power_mode(PowerMode::LowPower);
loop {
// Your agent code here
}
}
Core runtime for embedded environments:
use mielin_rt::EmbeddedRuntime;
let mut runtime = EmbeddedRuntime::new();
runtime.init()?;
// Get detected architecture
let arch = runtime.architecture();
Battery-aware operation and power mode control:
use mielin_rt::power::{PowerMode, BatteryStatus};
// Check battery status
let battery = BatteryStatus {
level_percent: 15,
is_charging: false,
};
// Trigger migration if battery is low
if battery.should_migrate() {
// Migrate agent to a powered node
}
// Set power mode
runtime.set_power_mode(PowerMode::UltraLowPower);
| Mode | Description | Typical Current |
|---|---|---|
Normal |
Full performance | 10-50 mA |
LowPower |
Reduced clock speed | 1-5 mA |
UltraLowPower |
Minimal activity | 10-100 μA |
Sleep |
Deep sleep, wake on interrupt | <10 μA |
Lightweight agent container for embedded:
use mielin_rt::agent::EmbeddedAgent;
let agent = EmbeddedAgent::new([0x1, 0x2, /* 16 bytes UUID */]);
EmbeddedRuntimepub struct EmbeddedRuntime {
arch: Architecture,
power_mode: PowerMode,
}
impl EmbeddedRuntime {
pub fn new() -> Self;
pub fn init(&mut self) -> Result<(), RuntimeError>;
pub fn architecture(&self) -> Architecture;
pub fn set_power_mode(&mut self, mode: PowerMode);
}
PowerModepub enum PowerMode {
Normal,
LowPower,
UltraLowPower,
Sleep,
}
BatteryStatuspub struct BatteryStatus {
pub level_percent: u8,
pub is_charging: bool,
}
impl BatteryStatus {
pub fn should_migrate(&self) -> bool;
}
Minimum requirements:
use mielin_rt::power::BatteryStatus;
fn check_and_migrate(battery: &BatteryStatus) {
if battery.should_migrate() {
// Create migration snapshot
let snapshot = capture_agent_state();
// Send to nearby powered node
send_migration_request(snapshot);
// Enter deep sleep
enter_sleep_mode();
}
}
use mielin_rt::power::PowerMode;
// Run agent during day, migrate at night
if is_nighttime() {
runtime.set_power_mode(PowerMode::Sleep);
migrate_to_always_on_node();
} else {
runtime.set_power_mode(PowerMode::Normal);
}
Use Sleep Modes: Enter sleep when idle
runtime.set_power_mode(PowerMode::UltraLowPower);
Batch Operations: Reduce wake/sleep cycles
// Bad: Wake up every second
// Good: Wake up once, process batch
Optimize Clock Speed: Run at minimum required frequency
runtime.set_power_mode(PowerMode::LowPower); // Reduces clock
Migrate Early: Don't wait until battery is critical
if battery.level_percent < 20 {
prepare_migration();
}
pub enum RuntimeError {
InitializationFailed,
LowBattery,
}
cargo test --target thumbv7em-none-eabihf # For Cortex-M4
cargo test # For host testing
#![no_std]
#![no_main]
use mielin_rt::{EmbeddedRuntime, power::{PowerMode, BatteryStatus}};
#[entry]
fn main() -> ! {
let mut runtime = EmbeddedRuntime::new();
runtime.init().unwrap();
loop {
// Read sensor
let temperature = read_temperature_sensor();
// Check battery
let battery = read_battery_status();
if battery.should_migrate() {
// Low battery - migrate to powered node
migrate_agent();
runtime.set_power_mode(PowerMode::Sleep);
}
// Transmit data
send_telemetry(temperature);
// Sleep until next reading
runtime.set_power_mode(PowerMode::UltraLowPower);
sleep_ms(60_000); // 1 minute
}
}
MIT OR Apache-2.0