Supported Ports
RMP is ported by construction, not by accident: the same kernel source builds for sixteen architecture families, from an 8-bit AVR to a Cortex-M55 and a RISC-V microcontroller. Each port keeps the platform layer thin, so the generic kernel is exercised by real hardware rather than hidden behind a large board-support package.
Architecture families
| Family | Example chips | Toolchains |
|---|---|---|
| ARMv6-M | STM32F030F4, STM32G071RB, STM32L071CB, HC32L136K8 | Keil, IAR, GCC |
| ARMv7-M | STM32F103/F107/F303/F405/F429/F767/H743 | Keil, IAR, GCC |
| ARMv8-M | Nuvoton M2351KIAAE (M23), STM32N657X0 (M55) | Keil, IAR, GCC |
| ARMv7-R | TI TMS570LS0432 (R4), TMS570LC4357 (R5) | CCS |
| RV32 | WCH CH32V307 (IMAC/IMAFC), SiFive FE310 | GCC, MounRiver, FreedomStudio |
| AVR | ATmega328P, ATmega1284P, ATmega2560 | Atmel Studio, GCC |
| MSP430 | MSP430F149, MSP430FR5994, MSP430G2553 | CCS |
| RL78 | Renesas R5F104PJ | CCRL / E2 Studio |
| PIC24 | PIC24FJ128GA010 | MPLAB XC16 |
| dsPIC33E | dsPIC33EP512MU810 | MPLAB XC16 |
| MIPS32 | PIC32MZ2048EFM100 | MPLAB XC32 |
| C28x | TMS320F2812, TMS320F28335 | CCS |
| MOS 6502 | RP2A03 (Famicom / NES) | CC65 |
| unSP | Sunplus SPCE061A | UNSP IDE |
| Z80 | Z84C0004 / TP-801 | Z88DK |
| x86 Linux | 32-bit Linux via ptrace | GCC |
ARMv6-M, ARMv7-M and RV32 also have virtualized platform layers for RVM — see Virtualized ports below.
Build projects
Every folder below is a complete, openable project. The vendor HAL packages that some of them need live in the M0A00_Library repository.
| Toolchain | Projects | Notes |
|---|---|---|
| Keil uVision 5 | RVMDK-* (13) | Cortex-M0/M0+/M3/M4/M7/M23/M55, including an F429 coverage build |
| IAR EWARM | EWARM-* (5) | Cortex-M23/M4/M7/M55 |
| GCC Makefile | GCCMF-* (14) | Cortex-M and RISC-V, plus GCCMF-X86L (Linux) and lwIP variants |
| MounRiver Studio | MRS-* (2) | CH32V307, with and without lwIP |
| Code Composer Studio | CCS-* (7) | MSP430, MSP430X, C28x, Cortex-R4/R5 |
| MPLAB X | MPLAB-* (3) | PIC24, dsPIC33E, PIC32MZ |
| Atmel Studio | ATS-* (3) | ATmega328P/1284P/2560 |
| E2 Studio | E2STUDIO-* (1) | RL78 |
| FreedomStudio | FreedomStudio-* (1) | SiFive FE310 (RV32) |
| CC65 | CC65MF-* (1) | Famicom / NES |
| UNSP IDE | UNSPIDE-* (1) | SPCE061A |
| Static analysis | CPPCHECK-LINT | cppcheck / PC-lint integration |
Browse everything in the Project tree — each folder has its own README with board-specific instructions.
Toolchains
- GCC / Clang-LLVM
- Keil uVision (ARMCC / ARMCLANG)
- IAR EWARM (ICCARM)
- Code Composer Studio
- MPLAB X XC16 / XC32
- Vendor IDEs: Atmel Studio, E2 Studio, MounRiver Studio, FreedomStudio, UNSP IDE, CC65, Z88DK
Other toolchains are not recommended or supported at this point. Because the kernel is plain C99 with a small platform layer, adding one is usually a matter of providing the context-switch assembly and the tick source.
Virtualized ports
Three platform layers target RVM rather than bare metal:
| Layer | Cores | Used by |
|---|---|---|
Include/Platform/A6M_RVM | ARMv6-M | STM32L071CB |
Include/Platform/A7M_RVM | ARMv7-M | STM32F405RG, STM32F767IG |
Include/Platform/RV32P_RVM | RV32 | CH32V307 |
The virtualized build keeps the kernel ABI intact and routes every privileged operation through the monitor, which is why the same benchmark suite can measure both bare-metal and virtualized performance. See the RVM project for the monitor side.
Deliberate limits
RMP targets microcontrollers and single cores on purpose. PIC18 (hardware stack), AVR32 (in decline), x86-64 and Cortex-A (MMU) are out of scope, and multi-core microcontrollers are not supported because their cores are usually asymmetric and lack cache coherency. The Why RMP page lists the recommended alternatives for each case.
