1
0
Fork
You've already forked multipass
0
No description
  • C++ 64.6%
  • C 32.5%
  • Makefile 1.2%
  • Assembly 0.8%
  • Python 0.6%
  • Other 0.2%
2026年07月08日 21:00:26 +02:00
ext switch to upstream libopencm3 (it actually supports Python3 by now!) 2024年02月08日 13:06:07 +01:00
include POSIX counter: add TSC support 2026年04月16日 11:21:39 +02:00
LICENSES add licensing information 2020年12月08日 18:19:13 +01:00
model nrf24: Add powerDown transition 2020年10月26日 09:30:50 +01:00
script make cat: automatically terminate when receiving a "done" line 2026年06月09日 15:23:13 +02:00
src datalogger: add influxdb gateway 2026年07月08日 21:00:26 +02:00
tests update msp430fr5994lp test 2024年03月07日 12:56:39 +01:00
.gitignore treebench: use separate tree.cc; remove main.cc (now generated automitcally) 2026年04月15日 09:08:18 +02:00
.gitlab-ci.yml Update CI image 2025年08月12日 15:40:24 +02:00
.gitmodules switch to upstream libopencm3 (it actually supports Python3 by now!) 2024年02月08日 13:06:07 +01:00
.mailmap add mailmap 2024年11月30日 20:26:47 +01:00
COPYING COPYING: update copyright year 2024年03月07日 12:49:27 +01:00
make-elf update copyright 2023年07月03日 21:10:07 +02:00
Makefile Makefile: Create an empty .config if needed 2025年04月30日 09:40:09 +02:00
mp update copyright 2023年07月03日 21:10:07 +02:00
mpm update copyright 2023年07月03日 21:10:07 +02:00
README.md README: Add Codeberg mirror 2026年04月15日 13:40:58 +02:00

multipass - a multi-architecture library operating system

multipass is a C++ Library Operating System for a few embedded targets / architectures. As such, it does not provide multi-threading support or similar conveniences. Its objective is similar to the Arduino environment: provide a simple framework for embedded application/driver development and evaluation with a main() and optional loop() function and a text output channel, and then get out of the way as much as possible. It favors simplicity over performance and proper abstraction. Re-using components outside of multipass should be fairly easy.

Application, target / architecture, and drivers are configured using make config (X11, kconfig-qconf) or make nconfig (Terminal, kconfig-nconf). Each application must implement int main(void) and do everything itself from that point on. If the loop or wakeup features are enabled, void loop(void) or void wakeup(void) must be implemented as well.

Getting Started

  • make config
  • make
  • make program
  • make monitor

Two helper scripts are provided:

  • ./mp is a shortcut for make info and make program (build and flash)
  • ./mpm is a shortcut for make info, make program, and make monitor (build, flash, and monitor output)

Flags are passed to each make invocation.

For common applications, the arch and app compile switches can be used, e.g. ./mpm arch=posix app=ledblink

You should see some data about the compilation process, "Hello, world!", and some numbers. As POSIX is not a standalone target (it builds an ELF binary that is executed directly on Linux), you do not need a microcontroller to run it. Terminate execution using Ctrl+C.

Supported Targets

See make config for an up-to-date list. Unless noted otherwise, all targets support GPIO input/output, UART output (typically using the built-in USB-TTL chip of the respective development board), and an optional cycle counter. The following table gives a quick overview over targets and additional features; the remainder of this README covers details.

Target Clock Non-Volatile Memory Volatile Memory Supported Drivers / Features
ATMega168P 16 MHz 512 KiB Flash + 512 B EEPROM 1 KiB SRAM I2C, SPI, UART, WS2812B, ADC
ATMega328P 16 MHz 32 KiB Flash + 1 KiB EEPROM 2 KiB SRAM I2C, SPI, UART, WS2812B, ADC
ATMega2560 16 MHz 256 KiB Flash + 4 KiB EEPROM 8 KiB SRAM I2C, UART, DMX, ADC
LM4F120H5QR (Cortex-M4F) 80 MHz 48 KiB Flash 4 KiB SRAM
MSP430FR5969 16 MHz 48 (64) KiB FRAM 2 KiB SRAM I2C, SPI, UART, DMX, ADC
MSP430FR5994 16 MHz 48 (256) KiB FRAM 4 (8) KiB SRAM I2C, SPI, UART, DMX, ADC
RM46L852 (Cortex-R4F) 160 MHz 1.25 MiB Flash 192 KiB SRAM
STM32F446RE (Cortex-M4) 168 MHz 512 KiB Flash 128 KiB SRAM I2C
STM32F746ZG (Cortex-M7) 216 MHz 1 MiB Flash 320 KiB SRAM I2C
STM32H747XI (Cortex-M7) 480 MHz 2 MiB Flash + 128 MiB QSPI NOR Flash 1 MiB SRAM + 32 MiB SDRAM
POSIX I2C

ATTiny88 (Blinkenrocket)

Peripheral communication:

  • I2C controller

ATMega168P, ATMega328P (Arduino Nano, Arduino Uno)

Peripheral communication:

  • I2C controller
  • SPI controller
  • UART input/output
  • WS2812B output via Adafruit NeoPixel driver

Hardware features:

  • ADC (partially)

ATMega2560

Peripheral communication:

  • I2C controller
  • UART input/output on USART0 / USART1 / USART2 / USART3
  • DMX output on USART1 / USART2 / USART3

Hardware features:

  • ADC (partially)

LM4F120H5QR (Stellaris Launchpad)

Peripheral communication:

  • UART output

MSP430FR5969 (MSP430FR5969 Launchpad)

Peripheral communication:

  • I2C controller on eUSCI_B0
  • SPI controller on eUSCI_B0
  • UART input/output on eUSCI_A0 / eUSCI_A1
  • DMX output on eUSCI_A1

Hardware features:

  • ADC (partially)

MSP430FR5994 (MSP430FR5994 Launchpad)

Peripheral communication:

  • I2C controller on eUSCI_B1
  • SPI controller on eUSCI_B1
  • UART input/output on eUSCI_A0
  • DMX output on eUSCI_A1 / eUSCI_A2 / eUSCI_A3

Hardware features:

  • 20bit mode (use up to 256 KiB FRAM for code and data)
  • ADC (partially)

RM46L8 (Hercules RM46L8 Launchpad)

Peripheral communication:

  • UART output

STM32F446RE (NUCLEO-F446RE)

Peripheral communication:

  • UART output on USART2
  • I2C on I2C1 muxed to PB8 / PB9

STM32F746ZG (NUCLEO-F746ZG)

Peripheral communication:

  • UART output on USART3
  • I2C on I2C1 muxed to PB8 / PB9

POSIX

Runs the selected application as POSIX thread, e.g. under Linux on a Raspberry Pi.

Peripheral communication:

  • I2C controller via /dev/i2c
  • stdin/stdout

Supported Peripherals

See make config for an up-to-date list.

Sensors

  • AM2320 Temperature+Humidity (I2C)
  • BME280 Temperature+Humidity+Pressure via Bosch SensorTec driver (I2C)
  • BME280 Temperature+Humidity+Pressure+IAQ via Bosch SensorTec driver (I2C)
  • CCS811 VOC (I2C)
  • HDC1080 Temperature+Humidity (I2C)
  • LM75 Temperature (I2C)
  • MAX44006 R+G+B+Clear+IR irradiance (I2C)
  • MAX44009 illuminance (I2C)
  • MPU9250 accelerometer+gyroscope+magnetometer (I2C)
  • SCD4x CO2+Temperature+Humidity (I2C)
  • SEN5x PM1.0+PM2.5+PM4.0+PM10+Temperature+Humidity+VOC (I2C)
  • VEML6075 UVA+UVB irradiance (I2C)

"VOC" refers to volatile organic compounds; "PM" refers to particulate matter.

Displays

  • LS013B4DN04 / 430BOOST-SHARP96 ×ばつ96 transflective LCD (SPI)
  • Pervasive Aurora Mb V230/V231 4.2" iTC E-Paper Display via EPD Extension Board Gen 2 (SPI)
  • SSD1306 ×ばつ64 / ×ばつ32 OLED display controller (I2C)

Others

  • ADS111x ADC (I2C)
  • DS2482 1-Wire Bus Controller (I2C)

References

Mirrors of the multipass repository are available at: