Skip to content

客机支持 ​

RVM 用即插即用的移植层准虚拟化 RTOS 内核:客机库镜像各官方 RTOS 目录树的相对布局,只包含新增的文件——官方内核文件从不被包含或修改, 因此直接覆盖合并总是安全的。

支持矩阵 ​

客机版本状态ARMv6-MARMv7-MRV32 (RISC-V)工具链
RMP最新实用性✅✅✅Keil、IAR、GCC
FreeRTOSV9.0.0实用性✅✅✅Keil (RVDS)、IAR、GCC
uC/OS-IIV2.93实用性✅✅✅Keil (RVDS)、IAR、GCC
uC/OS-IIIV3.08.02实用性✅✅✅Keil (RVDS)、IAR、GCC
RT-ThreadV4.1.1实用性✅✅✅Keil (RVDS)、IAR、GCC(RV32 仅 GCC)
DjyOSV1.1.0纪念性—✅ 仅 M7—GCC(仅 STM32H743)
KLiteV5.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 文档。

安装(目录树覆盖合并)与工程生成见快速上手。

本软件是 EDI 的官方作品,属于公有领域。