External Articles and Resources To Learn Embedded Software Engineering #
Some of this list was derived from Awesome-Embedded. The list has been updated to remove dead links. Many tutorials and blogs have been added as well.
Embedded 101 #
- Short Embedded Systems Guide
- Low-Level Programming University
- Foundations of Embedded Systems
- Low Level Learning Udemy Class
- EdX Class
- Udemy Class
- Learn via a game about hacking embedded systems
- Learn via a Game
- Embedded System Lecture Notes
Common Fundamentals & Tools #
- The C build process
- C++ Build Process
- How a Program gets to main()
- How cross compiling works
- Toolchains
- Beginners Guide to GNU ARM toolchain
- Linker Command File Primer
- ARM Cortex M4 Blink Example (Linker Script)
- ELF β Executable and Linkable Format
- What is an application binary interface (ABI)?
- Building Bare-Metal ARM Systems with GNU
- Learn How Debuggers work via Writing One
MCU programming #
Various Bare-metal Programming Guides (STM32/ARM Focused) #
- Bare metal programming guide - a detailed guide for beginners
- Bare metal programming stm32
STM32 #
- STM32 Programming Tutorials
- STM32 bootloader
- STM32 programming with Embedded GNU Compiler
- A tiny portable 3D graphics lib for micro controllers (Oled display)
- stm32f4xx with Rust at the HAL - A series of tutorials for building STM32F4xx applications with Rust.
- rustlink - small set of Rust tools to program STM32 devices
- STM32 with VSCode
MSP430 #
- 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.
MSP432 #
- Embedded Software in C for an ARM Cortex M
- RTBN videos (not working all)
- [RTOSdownload] (http://edx-org-utaustinx.s3.amazonaws.com/UT601x/RTOSdownload.html)
TM4C123 #
Raspberry #
- Baremetal Programming Raspberry Pi
- Stanford CS104e - An Experimental Course on Operating Systems
- Raspberry Pi Bare Metal & related link
- Exploring AArch64 assembler - Raspberry
- A bootloader for the Raspberry Pi using the ethernet device
- Baking Pi β Operating Systems Development
- Computer Systems
- Learning operating system development using Linux kernel and Raspberry Pi
Linux, Linux kernel, and device driver development #
- embedded linux
- low-level programming university #linux-kernel-and-device-driver
- Linux inside - A little bit about a linux kernel
- Writing device drivers in Linux
- Linux Drivers Tutorial
- c-periphery - A C library for peripheral I/O (GPIO, SPI, I2C, MMIO, Serial) in Linux.
- Linux Kernel Exploitation - A bunch of links related to Linux kernel exploitation
- Start linux kernel module development!
- Minimal Linux Live - a tiny educational Linux distribution
- The Bash Guide
Assembly #
RTOS #
- List of open source real-time operating systems
- FreeRTOS - Explaination
- 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
- How to create an OS from scratch
- How I ended up writing a new real-time kernel
- tock - A secure embedded operating system for Cortex-M based microcontrollers.
OS #
- 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
- Operating System Development Series
Bootloader #
- Bootloaders 101
- Understand boot process
- Writing a Bootloader Part 1
- 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
Makefile #
- Makefile Tutorial by Example
- Make Tutorial - BYU Computing Video
- Managing projects with GNU Make
- GCC and Make
- Makefile Notes
Embedded Development Environments & Tools #
Cheatsheets #
- GNU GDB Debugger Command Cheat Sheet
- git cheatsheet
- vim/vi cheatsheet
- Markdown cheatsheet
- Shell cheatsheet
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.