#kernel #rtos #operating-system #system-interface #toppers

sys no-std itron

基于 μITRON 及其派生品的操作系统接口

10 个版本

0.1.9 2021年11月19日
0.1.8 2021年10月1日
0.1.7 2021年7月1日
0.1.4 2021年6月30日

563嵌入式开发

每月 26 次下载

MIT/Apache

295KB
6.5K SLoC

Rust 接口,用于与基于 μITRON 及其派生品的操作系统交互。

内核选择

此crate为每个支持的RTOS内核实现公开了一个Cargo功能。以下是被支持的:

  • asp3: TOPPERS/ASP3
    • 支持的其他功能:dcre(动态对象创建)、rstr_task(受限任务)、messagebuf(消息缓冲区)、ovrhdr(溢出处理器)、subprio(任务子优先级)
  • solid_asp3: 带有 SOLID 扩展的 TOPPERS/ASP3
    • 支持的其他功能:dcre(动态对象创建)、messagebuf(消息缓冲区)、pi_mutex(优先级继承)、exd_tsk(退出并删除调用任务)
  • fmp3: TOPPERS/FMP3
    • 支持的其他功能:systim_local(处理器局部内核滴答)
  • solid_fmp3: 带有 SOLID 扩展的 TOPPERS/FMP3
    • 支持的其他功能:dcre(动态对象创建)、systim_local(处理器局部内核滴答)、exd_tsk(退出并删除调用任务)
  • none(默认):公开所有函数但始终引发恐慌的存根实现

启用这些功能中的多个是错误的。指定不正确的内核是不安全的,因为内核之间的 ABIs 不同。此 crate 假定调用指定内核的 API 函数是内在安全的(如果使用正确)。为给定内核指定不受支持的功能可能会导致编译器或链接器错误¹。

项目根据所选内核支持的功能集进行 cfg 门控,以便在编译时检测到不存在功能的用法。

¹ TOPPERS 内核的扩展是互斥的,但即使指定了所有这些扩展,构建 crate 文档也应成功。

Cargo 功能

除了上述描述的内核选择功能外,此软件包还支持以下Cargo功能

  • nightly 启用仅限nightly版本的功能。目前,此功能启用了 doc_cfg 并暴露 itron::time::timeout!
  • unstable 启用不稳定(在API稳定性方面)的实验性功能,这些功能在未来可能会更改或删除。

API设计

本节仅在启用unstable功能时相关。

对象ID包装器

内核对象ID封装在不可见包装器中,可以通过调用创建方法或从原始对象ID转换来构造。虽然与任意内核对象的交互本身不会显示内存不安全,但从原始对象ID的转换必须通过 unsafe 调用来完成,因为创建的包装器可能会被用来干扰其他代码对这类对象的使用,破坏其假设,可能违反内存安全。删除无所有权的对象也是 unsafe,因为这些对象可能仍在其实际所有者中使用,如果ID被重用,实际所有者将触摸看似无关的对象。我们称之为 外部对象安全 的这种系统与在撰写时提出的 Rust RFC 中的I/O安全相关。

允许 获取 当前处理器的当前任务的对象ID包装器。然而,以这种方式创建的包装器不得比原始任务存活时间更长。

假定内核处于运行状态

假定在内核运行时调用此crate的函数(即,sns_ker 返回 FALSE)。确保它们不在初始化或终止例程中调用是应用程序程序员的职责。

受限任务

如果未通过 rstr_task 功能启用受限任务,则假定调用者是 非受限任务。当从受限任务调用时,阻塞函数可以返回 E_NOSPT,如果不启用 rstr_task 功能,则不会被处理并会导致UB。

依赖关系