2个版本
0.1.1 | 2023年11月12日 |
---|---|
0.1.0 | 2023年11月5日 |
#307 在 操作系统
20KB
307 行
RuCOS
Rust微控制器操作系统 (RuCOS,发音为roo-cos) 是一个针对嵌入式Rust应用程序(no_std
)的实时内核。
设计目标
- 提供类似于uC/OS-III或FreeRTOS的功能集
- 易于集成:无需自定义构建系统或特殊项目结构
- 不使用
async/
await
模式 - 不要求内存管理或保护硬件
- 不使用实验性语言功能:在
stable
上编译 - 可移植:明确区分平台特定代码和内核
- 已测试:由于可移植性,我们可以在主机上对内核进行单元测试
- 使用Rust语言功能以确保编译时的内存和线程安全
用户指南
架构
rucos
包是一个no_std
数据结构的集合。它没有平台特定或unsafe
代码。《Kernel》结构被设计成在嵌入式应用程序中用作单例。
rucos
包单独使用比较困难,因为嵌入式应用程序需要在每个任务中都引用Kernel
单例。这就是“端口特定”包的作用所在(例如rucos-cortex-m
)。端口特定包在Kernel
API周围创建包装器,处理平台特定细节(例如堆栈初始化)并以安全的方式处理Kernel
单例(例如禁用中断)。
入门指南
使用RuCOS就像在Cargo.toml
中添加端口特定包并调用几个API一样简单。
use rucos_cortex_m as rucos;
let my_task = |_: u32| -> ! {
loop {
info!("Hello from Task {}", rucos::get_current_task());
rucos::sleep(rucos::TICK_RATE_HZ);
}
};
let mut idle_stack: [u8; IDLE_STACK_SIZE] = [0; IDLE_STACK_SIZE];
let mut my_task_stack: [u8; TASK_STACK_SIZE] = [0; TASK_STACK_SIZE];
rucos::init(&mut idle_stack, None);
rucos::create(0, 10, &mut my_task_stack, my_task, None);
rucos::start(...);
开发者指南
依赖
- 要构建
rucos
,只需要Rust工具链 - 要构建
rucos-cortex-m
,需要nightly
Rust工具链 - 要运行
rucos-cortex-m
示例,需要probe-rs
- 要调试
rucos-cortex-m
示例,需要probe-rs
VS Code 扩展
构建
./build_all
测试
rucos
cd kernel && cargo test
rucos-cortex-m
测试 rucos-cortex-m
需要针对特定的设备。使用 STM32F767 微控制器作为测试平台,但请注意,示例代码应该可以轻松地移植到其他设备。
理想情况下,将使用 cargo test
通过 defmt-test
自动化目标测试,但 RuCOS 应用的性质是它们不会终止,或者遵循我们可以断言的序列步骤。相反,使用 examples
进行测试,每个都需要手动运行
cd cortex-m && cargo run --example <name>
依赖
~645KB
~12K SLoC