2个版本
0.1.1 | 2020年7月30日 |
---|---|
0.1.0 | 2020年7月30日 |
#1499 in 嵌入式开发
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-eabi
或thumbv7em-none-eabihf
- 对于示例qemu项目,
<target_arch>
是thumbv7m-none-eabi
- 这可以通过运行以下命令完成:
- 您可能需要为项目创建一个自定义链接脚本。这需要设置中断表,并告诉FeRTOS堆的大小和位置。请查看示例项目以获取更多信息。
要将此crate添加到您的项目,只需打开项目的Cargo.toml文件,并在以下位置添加以下内容:[dependencies]
fe_rtos= {路径= "fe_rtos的路径" }
fe_osi= {路径= "fe_osi的路径" }
要使用此crate构建和将FeRTOS程序加载到微控制器中,您需要以下程序
- OpenOCD
- gdb-multiarch
- gcc-arm-none-eabi交叉编译器(用于链接器和汇编器)
由于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