#rtos #syscalls #cpu #arm #cortex-m #scheduler #cortex-m

nightly no-std fe_rtos

适用于ARM Cortex-M处理器的简单操作系统

2个版本

0.1.1 2020年7月30日
0.1.0 2020年7月30日

#1499 in 嵌入式开发

LGPL-3.0

65KB
1.5K SLoC

当前构建状态: 构建状态

FeRTOS是一个简单的“操作系统”,目前支持ARM Cortex-M处理器,虽然未来计划支持其他架构。它目前具有以下功能

  • 能够同时运行多个“任务”。
  • 支持动态内存分配
  • 信号量以帮助避免竞争条件
  • IPC接口,允许不同任务之间通信
  • 各种系统调用

此仓库包含两个不同的crate:fe_rtos和fe_osi。
fe_rtos是包含内核、调度器和系统调用实现的crate。
fe_osi是用户程序与fe_rtos中系统调用接口的crate。
目前,您必须将包含fe_rtos、fe_osi和用户程序的单一二进制文件加载到目标设备中,但未来我们计划允许用户加载任意二进制文件,这将使这种区别更加明显。

在使用此crate时需要注意的重要事项

  • 由于没有操作系统的限制,您必须使用#![no_std]#![no_main]属性
  • 您的函数必须包含一个名为main的函数,如下所示 pub fn main() -> !
    • 这不是标准Rust中的main函数,而是在运行时完成后的调用
    • 这基本上是一个正常的main函数,但您必须确保它不会返回
    • 这应该具有#[no_mangle]属性才能正确工作
  • 在构建之前,您可能需要下载针对目标架构的rust信息
    • 这可以通过运行以下命令完成:rustup target add <target_arch>
    • 对于tm4c,<target_arch>将可能是thumbv7em-none-eabithumbv7em-none-eabihf
    • 对于示例qemu项目,<target_arch>thumbv7m-none-eabi
  • 您可能需要为项目创建一个自定义链接脚本。这需要设置中断表,并告诉FeRTOS堆的大小和位置。请查看示例项目以获取更多信息。

要将此crate添加到您的项目,只需打开项目的Cargo.toml文件,并在以下位置添加以下内容:[dependencies]

  • fe_rtos= {路径= "fe_rtos的路径" }
  • fe_osi= {路径= "fe_osi的路径" }

要使用此crate构建和将FeRTOS程序加载到微控制器中,您需要以下程序

由于FeRTOS依赖于不稳定的功能,因此您必须使用nightly rust编译器来构建它。您可以通过运行以下命令启用它:rustup default nightly。要恢复到稳定的rust,请运行rustup default stable

常见问题解答

为什么我应该使用FeRTOS而不是FreeRTOS之类的软件?

您可能不应该。

此代码从以下示例开始:https://docs.rust-embedded.org/embedonomicon/preface.html

依赖项

~0.6–1.1MB
~16K SLoC