Embedded Systems
Firmware that runs the physical world. Writing reliable firmware: Embedded C and C++, GPIO, timers and interrupts, serial buses (UART, SPI, I²C, CAN, LIN), ADC/PWM/DMA, real-time operating systems, bootloaders and device drivers.
- Embedded C — C is the language of firmware. Learn fixed-width types, bit manipulation, register access, volatile, const and memory placement, interrupts and shared data, state machines, fixed-point maths and defensive practices like watchdogs.
- Embedded C++ — Modern C++ brings type safety and zero-cost abstractions to microcontrollers. Learn which features to use (classes, namespaces, references, constexpr, templates, enum class, RAII, std::array) and which to avoid or control (exceptions, RTTI, dynamic allocation, iostreams), plus virtual-function costs and compile-time peripheral configuration.
- GPIO, Timers & Interrupts — The first peripherals every embedded engineer masters. Learn GPIO modes (push-pull, open-drain, pull-ups, alternate function), drive strength and input thresholds, button debouncing, external interrupts (EXTI) with edge selection, timers for delays, periodic ticks, input capture (frequency/pulse measurement) and output compare.
- UART, SPI & I²C — Embedded devices talk over serial buses. Learn UART framing and baud rate, SPI modes, I²C addressing and pull-ups, CAN arbitration, RS-485 and Modbus, and how to choose the right protocol for each job.
- CAN — Controller Area Network is the backbone of in-vehicle communication. Learn the differential bus and termination, frame format (identifier, DLC, data, CRC, ACK), arbitration by priority, bit timing, error handling and bus-off, bus-load calculation, DBC signal databases and CAN FD.
- LIN — Local Interconnect Network is a low-cost, single-wire bus for simple sensors and actuators. Learn master/slave (commander/responder) operation, the frame (break, sync, protected ID, data, checksum), schedule tables, timing, LDF files and diagnostics.
- ADC, PWM & DMA — Three peripherals that connect MCUs to the analog world efficiently. Learn MCU ADC configuration (sampling time, resolution, scan and continuous modes, triggers), PWM generation (frequency vs resolution trade-off, duty, complementary outputs), PWM-as-DAC filtering, and DMA with circular double buffers.
- RTOS — Real-time operating systems guarantee that tasks meet deadlines. Learn tasks, priorities and preemptive scheduling, rate-monotonic scheduling and the utilisation bound, response-time analysis, interrupts, resource sharing and priority inversion, OSEK/AUTOSAR OS and FreeRTOS.
- Bootloaders — A bootloader lets ECU software be updated in the field. Learn memory layout (bootloader, application, calibration), the reprogramming sequence over UDS, CRC/signature verification, secure boot, A/B partitions for OTA, flash timing and fail-safe design.
- Device Drivers — Drivers hide hardware details behind clean interfaces. Learn driver layers and APIs, initialisation and error handling, interrupt-driven I/O with ring buffers, sizing buffers from data rates, blocking vs non-blocking designs, RTOS-aware drivers, Linux kernel/device-tree basics, and testing drivers.