客机支持
RVM 用即插即用的移植层准虚拟化 RTOS 内核:客机库镜像各官方 RTOS 目录树的相对布局,只包含新增的文件——官方内核文件从不被包含或修改, 因此直接覆盖合并总是安全的。
支持矩阵
| 客机 | 版本 | 状态 | ARMv6-M | ARMv7-M | RV32 (RISC-V) | 工具链 |
|---|---|---|---|---|---|---|
| RMP | 最新 | 实用性 | ✅ | ✅ | ✅ | Keil、IAR、GCC |
| FreeRTOS | V9.0.0 | 实用性 | ✅ | ✅ | ✅ | Keil (RVDS)、IAR、GCC |
| uC/OS-II | V2.93 | 实用性 | ✅ | ✅ | ✅ | Keil (RVDS)、IAR、GCC |
| uC/OS-III | V3.08.02 | 实用性 | ✅ | ✅ | ✅ | Keil (RVDS)、IAR、GCC |
| RT-Thread | V4.1.1 | 实用性 | ✅ | ✅ | ✅ | Keil (RVDS)、IAR、GCC(RV32 仅 GCC) |
| DjyOS | V1.1.0 | 纪念性 | — | ✅ 仅 M7 | — | GCC(仅 STM32H743) |
| KLite | V5.2.1 | 纪念性 | — | ✅ 仅 M7 | — | GCC(仅 STM32H743) |
- 实用性移植覆盖上表全部架构/工具链组合,并计入 性能测试表。
- 纪念性移植是单组合纪念移植(Cortex-M7 + GCC + STM32H743ZIT6), 用于在固定单组合的内核上示范移植技术。
- RMP 不通过客机库分发:它在 RMP 目录树内原生自带 RVM 平台层 (
Source/Platform/*_RVM/),无需客机侧打包。
评估板卡
Cortex-M0+:STM32G071RBT6 · Cortex-M4:STM32F429ZIT6 · Cortex-M7: STM32H743ZIT6 · RV32IMAC:CH32V307VCT6
各客机要点
RMP
EDI 自家的实时内核,也是所有其他客机移植所移植的 RVM 切换模板的原本: 加锁状态的让出请求变成内核 pend 标志、在解锁点重放,因此移植层只会看到 未屏蔽的立即切换请求。
FreeRTOS
用嵌套计数器模拟官方 PendSV 挂起的软件延迟让出。configUSE_RVM_OPTIMIZED_YIELD 在任务栈快速路径与纯超级调用让出之间切换(后者让出延迟约 4 倍但语义完全 一致);RV32P 上 configUSE_PORT_RVF/configUSE_PORT_RVD 选择 FPU 帧宽。
uC/OS-II
自包含(不依赖 uC-CPU/uC-LIB)。OS_CPU_SR_Save/Restore 映射到 RVM 虚拟 中断屏蔽快照;干净帧走汇编快速路径,脏帧走让出超级调用。内核对象必须在 任务上下文中创建,因此应用从 init 任务启动。
uC/OS-III
OS_CFG_RVM_FAST_YIELD_EN 提供与 FreeRTOS 相同的快速/超级调用权衡。 直接切换保证入站任务以未屏蔽状态开始,保持内核 Disable; Yield; Enable 契约。
RT-Thread
干净帧走快速路径,脏 ICI/IT 帧延迟到超级调用路径。要求 RT_USING_LIBC。RV32P 上仅支持 GCC。
DjyOS(纪念性)
DjyOS 调度的是事件;每次切换都在内核异步信号屏蔽内完成。移植层把全部 线程托管在一个 RVM 用户线程里,把上下文伪装成 22 字异常帧。客机必须以 -mfloat-abi=soft 编译。
KLite(纪念性)
永远延迟型内核形态:cpu_contex_switch() 只挂起 pend,最外层 cpu_leave_critical() 通过带伪装快速路径的让出分派器消费它。工程生成器 用 -klt 标志选择。
移植契约
每个移植层都实现同样的五件事——临界区、让出、上下文切换、中断送达钩子 和启动——但各内核自身保证的东西不同。每个客机的完整契约/策略分析 (包括中断模型的三层门与帧可互换性)见仓库中的 GUEST.md 文档。
安装(目录树覆盖合并)与工程生成见快速上手。
