Skip to content

RMP实时内核——以最小为设计

一个 C 文件,最低 1.6 KB ROM 与 432 字节 RAM;五十余个工程,从 8 位 AVR 覆盖到 Cortex-M55 与 RISC-V。小到可以完整理解,也小到可以作为 RVM 的客机运行。

▶立即运行 · Linux / 红白机演示 编译一个 32 位 Linux 二进制,或者把 RMP.nes 丢进模拟器—— 不需要开发板就能看到完整的性能测试输出。
RMP 徽标

验证工作仍在进行中

形式化验证尚未完成:第一阶段(可用、可移植的内核)已经完成,第二阶段 (形式化规格及其证明)正在进行,第三阶段(按 IEC 61508 SIL 4 / ISO 26262 ASIL D 进行的经验证重写)尚未开始。目前的依据是白盒测试 100% 分支覆盖——SIL 2 / EAL 4 预认证水平,而不是一张已完成的证书。

设计为最小 ​

1.6 KBSTM32F030F4(Cortex-M0)上的 ROM,含第一个线程
432 B同一配置下的 RAM,含线程栈
52 B内核 + 精简 HAL 合计占用
1 × .C内核、内存管理、控件与 FXAA 同在一个文件

RMP 刻意只提供 RTOS 必需的原语,不在此基础上增加可选组件:线程、信号量、 邮箱、FIFO、消息队列、阻塞消息队列、闹钟、调度器锁定以及高效内存池。 这种“最小”不是审美选择,而是让内核小到可以完整理解、做到 100% 分支覆盖, 并最终可以形式化证明的前提。

天然可移植 ​

Cortex-M0 / M0+Cortex-M3 / M4 / M7Cortex-M23 / M55Cortex-R4 / R5RV32 RISC-VAVRMSP430RL78PIC24 / dsPIC33PIC32 / MIPSC28x DSPMOS 6502Z80unSPx86 Linux

同一份内核源码可以跑在 32 KB 的 AVR、16 位 MSP430、32 位 Cortex-R5 和 RISC-V 微控制器上。移植层被刻意做得很薄,让通用内核接受真实硬件的检验, 而不是躲在庞大的板级支持包后面。完整的工程与工具链列表见 支持平台。

无需中间件的图形 ​

RMP 控件库
控件库:按钮、滑杆与对话框
RMP 计算器示例
用内建控件搭出的计算器
FXAA 抗锯齿
由编译开关控制的 FXAA 抗锯齿

没有开发板也能运行 ​

RMP 自带两个无需硬件的演示:

  • x86 Linux —— 在 Project/GCCMF-X86L 下编译 32 位二进制并运行,即可看到完整的性能测试输出。RMP 借助 ptrace 和信号实现上下文切换,因此并不快,但所有原语都能工作。
  • 红白机 / NES —— 下载 RMP.nes, 放进支持南梦宫 163 扩展芯片(iNES mapper 019)的模拟器即可运行。该扩展芯片 提供可读取的 IRQ 计时器,RMP 用它来测量周期。
RMP 在红白机上运行
RMP 性能测试在红白机(南梦宫 163 烧录卡)上运行

一个内核,两种角色 ​

RMP 既是完整的裸机 RTOS,也是 RVM 的参考客机:同一份源码 可以构建出虚拟化版本,以非特权虚拟机身份运行,所有特权操作都经由监视器。 虚拟化移植保持内核 ABI 不变,因此 RMP 常被用来测量虚拟化本身的开销。

平台芯片YieldMailSem
ARMv6-MSTM32L071CB400751649
ARMv7-MSTM32F405RG312540448
ARMv7-MSTM32F767IG192352292
RV32IMACCH32V307VC233384336

以上均为 GCC 最高优化下的 CPU 周期数。完整的表格(包括虚拟化开销列) 见性能测试。

第一个线程 ​

C
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”:一个线程控制块、一个栈数组和一次调用。 快速上手会带你编译一个真实工程并读懂它的性能输出。

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

GitHub·Discord·QQ 群 1038895132·rtospro.com