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 次下载
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
门控,以便在编译时检测到不存在功能的用法。
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。