1.6 KB ROM,432 字节 RAM
最小配置在 STM32F030F4(Cortex-M0)上测得,已包含第一个线程的控制块和栈。 其中内核与精简 HAL 合计只占 52 字节。
一个 C 文件,最低 1.6 KB ROM 与 432 字节 RAM;五十余个工程,从 8 位 AVR 覆盖到 Cortex-M55 与 RISC-V。小到可以完整理解,也小到可以作为 RVM 的客机运行。
RMP.nes 丢进模拟器—— 不需要开发板就能看到完整的性能测试输出。 
验证工作仍在进行中
形式化验证尚未完成:第一阶段(可用、可移植的内核)已经完成,第二阶段 (形式化规格及其证明)正在进行,第三阶段(按 IEC 61508 SIL 4 / ISO 26262 ASIL D 进行的经验证重写)尚未开始。目前的依据是白盒测试 100% 分支覆盖——SIL 2 / EAL 4 预认证水平,而不是一张已完成的证书。
RMP 刻意只提供 RTOS 必需的原语,不在此基础上增加可选组件:线程、信号量、 邮箱、FIFO、消息队列、阻塞消息队列、闹钟、调度器锁定以及高效内存池。 这种“最小”不是审美选择,而是让内核小到可以完整理解、做到 100% 分支覆盖, 并最终可以形式化证明的前提。
同一份内核源码可以跑在 32 KB 的 AVR、16 位 MSP430、32 位 Cortex-R5 和 RISC-V 微控制器上。移植层被刻意做得很薄,让通用内核接受真实硬件的检验, 而不是躲在庞大的板级支持包后面。完整的工程与工具链列表见 支持平台。



RMP 自带两个无需硬件的演示:
Project/GCCMF-X86L 下编译 32 位二进制并运行,即可看到完整的性能测试输出。RMP 借助 ptrace 和信号实现上下文切换,因此并不快,但所有原语都能工作。RMP.nes, 放进支持南梦宫 163 扩展芯片(iNES mapper 019)的模拟器即可运行。该扩展芯片 提供可读取的 IRQ 计时器,RMP 用它来测量周期。
RMP 既是完整的裸机 RTOS,也是 RVM 的参考客机:同一份源码 可以构建出虚拟化版本,以非特权虚拟机身份运行,所有特权操作都经由监视器。 虚拟化移植保持内核 ABI 不变,因此 RMP 常被用来测量虚拟化本身的开销。
| 平台 | 芯片 | Yield | Sem | |
|---|---|---|---|---|
| ARMv6-M | STM32L071CB | 400 | 751 | 649 |
| ARMv7-M | STM32F405RG | 312 | 540 | 448 |
| ARMv7-M | STM32F767IG | 192 | 352 | 292 |
| RV32IMAC | CH32V307VC | 233 | 384 | 336 |
以上均为 GCC 最高优化下的 CPU 周期数。完整的表格(包括虚拟化开销列) 见性能测试。
void Func_1(void* Param)
{
RMP_LOG_S("Parameter passed is ");
RMP_LOG_H((ptr_t)Param);
RMP_LOG_S("\r\n");
while(1)
{
RMP_Thd_Delay(30000);
RMP_LOG_S("Delayed 30000 cycles\r\n\r\n");
};
}
void RMP_Init_Hook(void)
{
RMP_Thd_Crt(&Thd_1, Func_1, &Stack_1, sizeof(Stack_1),
(void*)0x12345678, 1, 5);
}这就是全部“Hello world”:一个线程控制块、一个栈数组和一次调用。 快速上手会带你编译一个真实工程并读懂它的性能输出。