All Projects → modm-io → Modm

modm-io / Modm

Licence: mpl-2.0
modm: a C++20 library generator for AVR and ARM Cortex-M devices

Programming Languages

cpp
1120 projects

Projects that are alternatives of or similar to Modm

Xpcc
DEPRECATED, use our successor library https://modm.io instead
Stars: ✭ 177 (-52.8%)
Mutual labels:  stm32, microcontroller, avr, cortex-m
Tinygo
Go compiler for small places. Microcontrollers, WebAssembly (WASM/WASI), and command-line tools. Based on LLVM.
Stars: ✭ 9,068 (+2318.13%)
Mutual labels:  stm32, microcontroller, avr
Blog
A set of various projects based on ESP8266, ESP32, ATtiny13, ATtiny85, ATtiny2313, ATmega8, ATmega328, ATmega32, STM32 and more.
Stars: ✭ 198 (-47.2%)
Mutual labels:  stm32, microcontroller, avr
terminal
Terminal inside the microcontroller (cli for mcu)
Stars: ✭ 31 (-91.73%)
Mutual labels:  avr, microcontroller, stm32
DemOS
Free, simple, extremely lightweight, stackless, cooperative, co-routine system (OS) for microcontrollers
Stars: ✭ 18 (-95.2%)
Mutual labels:  avr, microcontroller, cortex-m
IntrOS
Free cooperative operating system (OS) for microcontrollers
Stars: ✭ 38 (-89.87%)
Mutual labels:  avr, microcontroller, cortex-m
stm32f103xx
DEPRECATED
Stars: ✭ 31 (-91.73%)
Mutual labels:  microcontroller, cortex-m, stm32
xForth
Experimental Forth cross compiler for tiny devices
Stars: ✭ 53 (-85.87%)
Mutual labels:  avr, microcontroller, cortex-m
toolchain68k
build a toolchain for cross developement. Supports motorola m68k-elf, avr and arm-none-eabi
Stars: ✭ 18 (-95.2%)
Mutual labels:  avr, stm32
px-fwlib
open source bare-metal C firmware and documentation for microcontrollers
Stars: ✭ 247 (-34.13%)
Mutual labels:  avr, stm32
Cortex M Quickstart
Template to develop bare metal applications for Cortex-M microcontrollers
Stars: ✭ 372 (-0.8%)
Mutual labels:  microcontroller, cortex-m
Great-Cow-BASIC-Demonstration-Sources
Demonstration files for Great Cow BASIC - a compiler for Microchip and AVR 8-bit microcontrollers
Stars: ✭ 18 (-95.2%)
Mutual labels:  avr, microcontroller
FT800-FT813
Multi-Platform C code Library for EVE graphics controllers from FTDI / Bridgetek (FT810, FT811, FT812, FT813, BT815, BT816, BT817, BT818)
Stars: ✭ 80 (-78.67%)
Mutual labels:  avr, stm32
async-stm32f1xx
Abstractions for asynchronous programming on the STM32F1xx family of microcontrollers.
Stars: ✭ 24 (-93.6%)
Mutual labels:  cortex-m, stm32
mdepx
MDEPX — A BSD-style RTOS
Stars: ✭ 17 (-95.47%)
Mutual labels:  microcontroller, cortex-m
STM32-RFM95-PCB
STM32 and AVR128 Printed Circuit Board for creating IOT nodes with the RFM95 LORA chip
Stars: ✭ 14 (-96.27%)
Mutual labels:  avr, stm32
chirp8-avr
CHIP-8 implementation in Rust targeting AVR microcontrollers
Stars: ✭ 40 (-89.33%)
Mutual labels:  avr, microcontroller
O7
Oberon → ARMv{6,7E}-M compiler
Stars: ✭ 27 (-92.8%)
Mutual labels:  cortex-m, stm32
Distortos
object-oriented C++ RTOS for microcontrollers
Stars: ✭ 354 (-5.6%)
Mutual labels:  microcontroller, cortex-m
M7M01 MuEukaron
An capability-based microkernel general-purpose operating system focusing on scalability, predictability, mixed-criticality and recoverability. THIS PROJECT IS IN PREVIEW STATE CURRENTLY
Stars: ✭ 79 (-78.93%)
Mutual labels:  microcontroller, cortex-m

modm: a barebone embedded library generator

modm (pronounced like dial-up "modem") is a toolbox for building custom C++20 libraries tailored to your embedded device. modm generates startup code, HALs and their implementations, communication protocols, drivers for external devices, BSPs, etc… in a modular, customizable process that you can fine-tune to your needs.

This project also has a technical blog to document larger design concepts.

modm is optimized for the harsh requirements of the Eurobot competition, where our robots need to run reliably and completely autonomously for the game's 100 second duration. Our robots contain a lot of different microcontrollers, some without a lot of resources, so modm needs to fulfill a diverse set of objectives, like small code size with small memory consumption, predictable program flow, extreme portability.

The library source code is licensed as MPLv2 with any external source code under compatible licenses (BSD, Apache2, MIT). So feel free to fork this project and adapt it to your needs. The only thing we ask of you is to contribute your changes back so everyone can benefit.

Please clone modm recursively, you need all the submodules:

git clone --recurse-submodules https://github.com/modm-io/modm.git

Features

  • Efficient and fast object-oriented C++20 API.
  • Support for hundreds of AVR and ARM Cortex-M microcontrollers from Atmel and ST.
  • Build system agnostic: Choose SCons, CMake or use your own.
  • Data-driven, target-specific HAL generation using the lbuild engine.
  • No memory allocations in HAL with very low overall RAM consumption.
  • Highly-configurable modules with sensible defaults and lots of documentation.
  • Cross platform peripheral interfaces incl. bit banging:
    • GPIO and GPIO expanders.
    • ADC and Analog.
    • UART, I2C, SPI, CAN.
  • Interfaces and drivers for many external I2C and SPI sensors and devices.
  • Debug/logging system with IOStream and printf interface.
  • Lightweight, stackless threads and resumable functions using cooperative multitasking.
  • Functional (partial) libstdc++ implementation for AVRs.
  • Integration of useful third-party software: FreeRTOS, ROSserial, CMSIS-DSP.
  • Useful filter, interpolation and geometric algorithms.
  • Lightweight unit testing system (suitable for AVRs).
  • Hundreds of tests to ensure correct functionality.

Targets

modm can generate code for 506 AVR, 163 SAM and 2010 STM32 devices, however, there are different levels of support and testing.

Device Family Support Device Family Support Device Family Support
AVR ★★★ STM32F0 ★★★★ STM32F1 ★★★★
STM32F2 ★★★★ STM32F3 ★★★★★ STM32F4 ★★★★★
STM32F7 ★★★★ STM32L1 ★★★★ STM32L4 ★★★★
STM32L4+ ★★★★ STM32G0 ★★★★ STM32G4 ★★★★
SAMD21 ★★ Raspberry Pi

All of these targets are compiling and booting correctly (★) and have GPIO and UART working (★★). Most targets have support for basic peripherals, like I2C, SPI and ADC (★★★) as well as complicated peripherals, like Timers, CAN and external memory (★★★★). We also use a few targets in everyday development, which are very well tested (★★★★★).

We are only a small team of developers and are limited in the amount of targets we can support and test in hardware. We have prepared, but currently not finished support for STM32F2, STM32L0 and STM32L1. Open an issue to ask if your specific target is supported out-of-the-box and what you can do if it's not.

Boards

We have out-of-box support for several development boards including documentation.

AL-AVREB-CAN Arduino NANO Arduino UNO Black Pill
Blue Pill DEVEBOX-STM32F4XX DISCO-F051R8 DISCO-F072RB
DISCO-F100RB DISCO-F303VC DISCO-F407VG DISCO-F429ZI
DISCO-F469NI DISCO-F746NG DISCO-F769NI DISCO-L152RC
DISCO-L476VG FEATHER-M0 MEGA-2560-PRO MINI-F401
MINI-F411 NUCLEO-F031K6 NUCLEO-F042K6 NUCLEO-F103RB
NUCLEO-F303K8 NUCLEO-F303RE NUCLEO-F334R8 NUCLEO-F401RE
NUCLEO-F411RE NUCLEO-F429ZI NUCLEO-F439ZI NUCLEO-F446RE
NUCLEO-F446ZE NUCLEO-F746ZG NUCLEO-F767ZI NUCLEO-G071RB
NUCLEO-G431KB NUCLEO-G431RB NUCLEO-G474RE NUCLEO-L152RE
NUCLEO-L432KC NUCLEO-L476RG OLIMEXINO-STM32 Raspberry Pi
SAMD21-MINI STM32-F4VE STM32F030F4P6-DEMO

Drivers

We also have a number of completely target-independent drivers for external devices connected via I2C, SPI, UART, BitBang, etc. Most of these also give you access to the entire device so you can easily configure them for you specific needs.

AD7280A AD7928 ADNS9800 ADS7843 AMS5915 APA102
SPI-FLASH BME280 BMP085 BNO055 CAT24AA DRV832X
DS1302 DS1631 DS18B20 EA-DOG ENCODER-OUTPUT FT245
FT6X06 GPIO-SAMPLER HCLAx HD44780 HMC58x HMC6343
HX711 I2C-EEPROM ILI9341 IS31FL3733 ITG3200 L3GD20
LAN8720A LAWICEL LIS302DL LIS3DSH LIS3MDL LM75
LP503X LSM303A LSM6DS33 LTC2984 MAX6966 MAX7219
MCP23X17 MCP2515 MMC5603 NOKIA5110 NRF24 TFT-DISPLAY
PAT9125EL PCA8574 PCA9535 PCA9548A PCA9685 SIEMENS-S65
SIEMENS-S75 SK6812 SK9822 SSD1306 STUSB4500 SX1276
TCS3414 TCS3472 TLC594X TMP102 TMP175 VL53L0
VL6180 WS2812

Please see our examples for a complete list of tested targets and drivers.

How can I contribute?

The easiest way for you and the best way for us to see if something is unclear or missing, is if you use the library and give us some feedback by filing a bug report or if you have a fix already, opening a pull request.

See CONTRIBUTING.md for our contribution guidelines.

The modm project is maintained by Niklas Hauser (@salkinium) with significant contributions from Sascha Schade (@strongly-typed), Fabian Greif (@dergraaf), Kevin Läufer (@ekiwi), Martin Rosekeit (@thundernail), Daniel Krebs (@daniel-k), Georgi Grinshpun (@georgi-g) and 33 more contributors.

Folder structure

examples
Example projects that show the usage of parts of the modm library. These projects are always up to date and are tested to compile by our CI.
src
This folder contains the actual source code of modm grouped into several modules.
test
Contains hundreds of tests for making sure modm works the way we expect it to.
docs
General documentation about this library and how to use it.
ext
Third-party code used in this library.
tools
Support tools, scripts and files.
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].