Awesome-Embedded
A curated list of awesome embedded resource.
Table of content
- Awesome-Embedded
- Tech blogs
Interview
On the way to be a full-stack embedded software engineer.
- coding-interview-university - A complete computer science study plan to become a software engineer.
Embedded Software Skill
- Skills/Knowledge required to become a champion Embedded Software Developer.
- How to be low-level programmer
- Programmer Competency Matrix
Common
- Integer size in C on 32-bit and 64-bit system
- TeraTerm - TTL command reference
- TeraTerm Scripts
- Linker Command File Primer
- The C build process
- Building Bare-Metal ARM Systems with GNU
- ELF – Executable and Linkable Format
- Toolchains
- What is an application binary interface (ABI)?
- ARM Cortex M4 Blink Example (Linker Script)
- A Sample Linker Script
- Linking and Loading
- Embedded Software _ Getting started
- How to convert from an armlink scatter file to a GNU ld linker script
- Using the GNU Linker
MCU programming
Bare-metal programming (Don't need MCU)
- Simplest bare metal program for ARM (table of content)
- Bare metal programming guide - a detailed guide for beginners
MSP430
- MSP430-GCC
- CS4101: Introduction to Embedded Systems - The course is designed around labs, using TI MSP430 LaunchPad and Arduino Uno to discuss concepts such as basic I/O, timing and clocking, interupt handling, serial communication, embedded operating systems, synchronization, etc.
- msp430-template - A template for MSP430 firmware.
- MSP430 reference
TM4C123
- EmbeddedSystems.Playground
- Macros in TivaWare
- Analog to Digital Conversion, Data Acquisition and Control
- Embedded Systems - Shape The World
- HowTo: Develop on the TI Tiva LaunchPad using Linux
- Linux command line build system to generate binaries for TM4C123 (ARM Cortex M4)
- The complete tutorial for Stellaris LaunchPad development with GNU/Linux (I)
- Getting Started with the TI Stellaris LaunchPad on Linux
- Embedded Systems with TM4C123 @Valvano
- Create FreeRTOS Demo Project using the GCC Compiler
- Serial bootloader on TM4C12x Microcontroller
- Tivaware bootloader
- Diagnosing Common Development Problems and Tips & Info for TM4C Devices
- FreeRTOS-GCC-tm4c123glx - A port of FreeRTOS to the Texas Instruments Tiva TM4C123GLX Launchpad.
- Stellaris_TM4C123G_GCC_Template - Texas Instruments template project for the TM4C123 series using GNU toolchain.
- tm4c-gcc - TM4C123 GCC project template.
- tivaapps - Example hello-world apps for Texas Instruments TI-RTOS for Tiva C using a Linux host
- Drivers and examples - Drivers for internal peripherals and external modules for Tiva C, examples of FreeRTOS features under development/FreeRTOS
MSP432
- Real-Time Bluetooth Networks - UTAustinX - Learn the design fundamentals of a real-time operating system (RTOS) and how to build a Bluetooth network in this hands-on project-based course.
STM32
- STM32 bootloader
- Tests to program STM32 Nucleo in C with GCC ARM embedded toolchain and libopencm3
- A demo project of FreeRTOS running on a STM32F4 Discovery board.
- DFU Bootloader for STM32 chips
- Customizable Bootloader for STM32 microcontrollers.
- Lightweight USB device Stack for STM32 microcontrollers
- STM32 programming with Embedded GNU Compiler
- A tiny portable 3D graphics lib for micro controllers (Oled display)
- Getting started with the STM32F4-Discovery board using the EmBitz IDE
- libopencm3 and FreeRTOS projects using the STM32F103C8T6 MCU
- A template for builting STM23F0 ARM projects with GCC
- Open source flash program for STM32 using the ST serial bootloader
- stm32-hid-bootloader - Driverless USB HID bootloader and flashing tool for STM32F10X devices
- stm32l1xx-template - A template for building firmware for the STM32L1xx.
- STM32F103C8 Examples
- stm32f103 - Bare metal programming on a generic STM32F103c8 board
- stm32_samples
- stm32f4de example code
- stm32f4xx with Rust at the HAL - A series of tutorials for building STM32F4xx applications with Rust.
STM32F7
STM8
- stm8-bare-min - Tiny peripheral library for STM8S
- stm8-bootloader - Serial bootloader for STM8S microcontrollers
- stm8-multi-tasker - STM8-Multi-Tasker - Preemptive/Cooperative Round Robin Scheduler for STM8
- Wolk STM8 stuff
- STM8S001J3_tiny_board - A tiny dev board for STM8S001J3 MCU designed in KiCad.
ESP8266
- An open source bootloader for the ESP8266
- An esp8266 rom creation tool
- Wi-FI ESP8266 learning journey
- Wi-FI ESP32 learning journey
- Sming - ESP8266/ESP32 IoT Framework
Raspberry
- Raspberry Pi Bare Metal & related link
- ChibiOS/RT on the Raspberry Pi
- Raspberry Pi ARM based bare metal examples
- Bare metal Raspberry Pi 3 tutorials
- Open Projects: Raspberry, Beaglebone BSP
- A Real-Time Operating System on the Raspberry Pi
- A port of FreeRTOS to the raspberry pi
- FreeRTOS Sucessfully Ported
- Exploring AArch64 assembler - Raspberry
- A bootloader for the Raspberry Pi using the ethernet device
- Bare Metal Raspberry Pi
- Bare Metal Programming in C
- Baking Pi – Operating Systems Development
- Search for 'Raspberry' topic on Github
- elinux: Raspberry Pi Programming or elinux: RPi Hub
- Stanford CS104e - An Experimental Course on Operating Systems
- Computer Systems
- Build a Debian-based ARM64 system for Raspberry Pi 3
- Learning operating system development using Linux kernel and Raspberry Pi
- A port of FreeRTOS to the raspberry pi 2B. With USB+Ethernet+TCP/IP.
- 64-bit Tiano Core UEFI for the Raspberry Pi 3
- CXCORE-RaspberryPi3-ubuntu-18.04-aarch64
- Sample source: Baremetal source code for Raspberry
- Sample source: NarcOS - A bare metal ultralight kernel for Raspberry Pi 3
- Sample source: FreeRTOS v9.0.0 port for Raspberry Pi 1
- Sample source: A bare-metal experiments with the RaspberryPi
- 「BareMetalで遊ぶ Raspberry Pi」のプログラムです。
- UEFI for RaspberryPi2 and RaspberryPi3 based on Linaro EDK2
- ARM-episodes & ARM exploitation for IoT
- ARM shellcode and exploit development - BSidesMunich 2018
- 64 bit Bare Metal Programming on RPI-3
- Raspberry Pi 3 Bare Metal
- Assembly code for Raspberry Pi
- A public Baremetal Raspberry Pi code
- Raspberry-Pi Bare Metal Tutorial
- uCOS-II on Raspberry Pi
- Porting uCOSII to the raspberry pi A+/B+/2B
- Bare-metal examples
- Bare-metal lab
- Exploring Raspberry Pi: Interfacing to the Real World with Embedded Linux {book}
- Exploring Raspberry Pi: Interfacing to the Real World with Embedded Linux {website}
Beaglebone
- BeagleBone Black I2C References
- Learning BeagleBone Python Programming
- Simple implementation of an OS for the BeagleBoard C4 with ARMv7 A8 processor.
- Various projects that utilize low level hardware instructions to interface with leds, speaker output and joystick input.
- Windows Embedded Compact BSP for TI's Beaglebone
- BBB-BareMetal- Works on the beaglebone black (bare metal)
- Running a Baremetal Beaglebone Black & Part 2
- Bare Metal on the BeagleBone (Black and Green) & link1 + Link2
- A tutorial on bare-metal [OS] development on the Texas Instruments BeagleBoard.
- bare metal c project for beaglebone, ti sitara am335x
- Bare Metal Applications on OSD335x using U-Boot
- bbb-asm-demo - Extremely tiny baremetal application for BeagleBone Black
- Beaglebone - Getting started with JTAG and CCS
- BeagleBoardJTAG
- beaglebone_samples
- FreeRTOS for BeagleBone Black
Linux kernel and device driver development
- Linux inside - A little bit about a linux kernel
- Writing device drivers in Linux
- YOLINUX Tutorials
- Linux driver programming
- Free training materials and conference presentations
- eBook: Linux Drivers or Slides: Linux Drivers
- c-periphery - A C library for peripheral I/O (GPIO, SPI, I2C, MMIO, Serial) in Linux.
- OpenEmbedded,
- Linux driver practices
- Linux Kernel Exploitation - A bunch of links related to Linux kernel exploitation
- Linux Kernel Module Cheat
- Start linux kernel module development!
- Minimal Linux Live - a tiny educational Linux distribution
- low-level programming university #linux-kernel-and-device-driver
Assembly
RTOS
- List of open source real-time operating systems
- ROS
- FreeRTOS
- FreeRTOS - Explaination
- FreeRTOS API Reference Documentation
- How to Write a Small RTOS
- RTOS From Scrach
- mini-arm-os & qemu with a stm32 or here - Build a minimal multi-tasking OS kernel for ARM Cortex-M series from scratch
- Writing a simple operating system from scratch
- Free real-time operating system (RTOS) designed for deeply embedded applications
- MPSoC FreeRTOS Development
- Atomthreads: Open Source RTOS
- High performance motor control
- MINIX3: Open source RTOS
- 30 Days make OS --> YOS @Yannik
- Community: OSDEV.org, reddit/osdev
- Real-time System Group
- object-oriented C++ RTOS for microcontrollers
- RT-Thread is an open source IoT operating system from China.
- How to create an OS from scratch
- Sample Source: TetrOS is a small feature rich Tetris clone which is written in Assembly.
- Sample Source: RTOS for microcontrollers
- Sample Source: A Powerful embedded RTOS for ARM Cortex M microcontrollers
- Sample Source: An embedded operating system for ARM Cortex-M based microcontrollers
- Sample Source: rnk is a RTOS targeting ARM architecture.
- Sample Source: RTOS-From-Scratch
- Sample Source: Embeded OS for PIC32MX270F256B
- How I ended up writing a new real-time kernel
- Sample Source: TNeo - a well-formed and carefully tested preemptive real-time kernel for 16- and 32-bits MCUs
- yaos is an embedded operating system for Internet of Things(IoT) devices, specifically for a single-core processor without MMU virtualization.
- RT-Thread for Raspberry Pi 2B
- tock - A secure embedded operating system for Cortex-M based microcontrollers.
- AliOS-Things - AliOS Things released by Alibaba is an open-source implementation of operating system (OS) for Internet of Things (IoT).
- CoRTOS & CoRTOS Simple Cooperative RTOS - An open source minimalist RTOS.
- µOS++ Reference
- TNKernel - a compact and very fast real-time kernel for the embedded 32/16/8 bits microprocessors.
- Femto OS - a very concise portable real time - preemptive operating system (RTOS) for embedded microcontrollers with minimal ram and flash, say 2KB .. 16KB flash and 128 .. 1024 bytes ram.
Automotive
- Sample Source: Trampoline is a static RTOS for small embedded systems. & labs
- Sample source: An integration an example AUTOSAR project which every part in AUTOSAR (OS, RTE, BSW, MCAL) are collected from different open source.
- automotive software(OSEK & AUTOSAR) - Because I am not powerful so I decided to develop tiny but smart part of automotive software based on open source, and create a general AUTOSAR & Automotive Software study environment.
OS
- ucLinux: The Embedded Linux/Microcontroller project is a port of Linux to systems without a Memory Management Unit (MMU).
- Tizen
- Bootstrap yourself to write an OS from scratch. A book for self-learner.
- Kernel 101 – Let’s write a Kernel
- The little book about OS development
- TetrOS - Tetris that fits into the boot sector.
- Writing a Simple Operating System from Scratch
- JamesM's kernel development tutorials
- Bare Bones - a simple kernel for 32-bit x86 and boot it.
- Operating System Development Series
- 7 Steps to Writing a Simple Cooperative Scheduler
- A simple OS kernel for research, teaching, and fun
- Operating Systems C Term 2018
WindowCE
- GuruCE Blog
- Windows CE Base Team Blog
- DevWinCE blog
- Windows Embedded Compact BSP for Raspberry Pi
- Windows Embedded Board Support Package for BeagleBone
Compiler
Bootloader
- Writing a boot loader in Assembly and C
- Writing a Bootloader Part 3
- A bootloader for ARM Cortex-M based microcontrollers
- OpenBLT - an open source and portable bootloader for microcontrollers.
- ARMv7M ELF loader
- Writing a Bootloader Part 1
- can-bootloader - The bootloader used to flash our CAN-connected boards
- Bootloaders 101
- Understand boot process: link1, link2, link3
- Keywords: hello world bootloader, writing a bootloader from scratch, how to write a bootloader in assembly, ...
Makefile
Peripheral
Memory Protection Unit
- Building Hardware Components for Memory Protection of Applications on a Tiny Processor
- KeyStone Architecture: Memory Protection Unit (MPU)
USB
- tinyusb - An open source USB stack for a variety of Embedded Systems.
Others
- A practical approach to Kalman filter and how to implement it
- Embedded System programming: Diving into Syllabus for investigation.
- ELC 2018 Presentations
- ARM Edition: Sparky ARM Edition is a Sparky version created for a single board mini computer RaspberryPi.
- The gem5 Simulator is a well-known sophisticated simulator used for computer system research at both architecture and micro-architecture levels. Main page is here.
- LineageOS Android Distribution
- The NoCAN platform
- Realtime OS on Embedded Systems
- These projects were produced in the five weeks of ECE 4760 each year.
- Advanced fault backtrace library for ARM Cortex-M series MCU
- mcu-starter-projects - Simple starter projects for bare-metal MCU development.
- DirtyJTAG - JTAG adapter firmware for STM32F1
- Generic_MCU_Software_Infrastructure - Provide necessary software infrastructure, service, macros to support some high level abstruct concept or paradigm, such as OOPC, FSM, delegate (event-driven) and etc.
- apollo - An open autonomous driving platform.
Embedded GUI Development
- Embedded Wizard - Sophisticated GUI for Your Embedded Platform
- lvgl - Graphics library to create an embedded GUI with easy-to-use graphical elements, beautiful visual effects and low memory footprint. It offers anti-aliasing, opacity, and animations using only one frame buffer.
Machine Learning & AI on MCU
- nnom - A higher-level Neural Network library for microcontrollers.
- nn4mp
- Embedded Learning Library (ELL) - Microsoft's library to deploy intelligent machine-learned models onto resource constrained platforms and small single-board computers.
- Qualcomm Neural Processing SDK for AI - Libraries to developers run NN models on Snapdragon mobile platforms taking advantage of the CPU, GPU and/or DSP.
- CMSIS NN - A collection of efficient neural network kernels developed to maximize the performance and minimize the memory footprint of neural networks on Cortex-M processor cores.
- ARM Compute Library - Set of optimized functions for image processing, computer vision, and machine learning.
- uTensor - AI inference library based on mbed (an RTOS for ARM chipsets) and TensorFlow.
- EmbededAI - A library that provides elements of AI to C++ applications.
- kann - A lightweight C library for artificial neural networks.
- m2cgen - A CLI tool which allows to transpile trained classic ML models into a native code of various programming languages with zero dependencies including C.
Utilities
- lm4tools
- mspdebug - Debugging tool for MSP430 MCUs
- pycs - Python Based ARM CoreSight Debug and Trace Tools
Tips & tricks
Awesome Cheat Sheets for Developer Utility, like Git, Vim , Tmux, SublimeText, Markdown, Shell.
Tech blogs
- What a C programmer should know about memory
- What Every Programmer Should Know About Memory
- What Every C Programmer Should Know About Undefined Behavior part 2 part 3
- A Guide to Undefined Behavior in C and C++
- Software Engineering Takeaways
- Embedsys weekly newsletter
FAQ_Embedded
Looking for more lists like this?
- awesome-c - A curated list of awesome C frameworks, libraries and software.
- A curated list of project-based tutorials in C
- Curated list of project-based tutorials
- Curated list of awesome lists
- A curated list of awesome Raspberry Pi tools, projects, images and resources
- Curated List of Self-Driving Cars and Autonomous Vehicles Resources
- awesome-embedded-systems
- awesome-cheat-sheets - Awesome Cheat Sheets for Developer Utility, like Git, Vim, Tmux, Sublime Text, Markdown, Shell.
- awesome-embedded-rust - Curated list of resources for Embedded and Low-level development in the Rust programming languague.