2个版本

0.1.1 2023年11月12日
0.1.0 2023年11月5日

#307操作系统


用于 rucos-cortex-m

BSD-3-Clause

20KB
307

RuCOS

Rust微控制器操作系统 (RuCOS,发音为roo-cos) 是一个针对嵌入式Rust应用程序(no_std)的实时内核。

设计目标

  • 提供类似于uC/OS-IIIFreeRTOS的功能集
  • 易于集成:无需自定义构建系统或特殊项目结构
  • 不使用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,需要nightlyRust工具链
  • 要运行 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