Skip to content
UPEEC

Firmware Development

Languages, startup, linking, bootloaders, drivers, DMA and the tools to debug firmware.

Intermediate
Comments 0

This is an overview — pick a sub-topic below.

Sub-topics (22)

C for Embedded Systems

The main firmware language: direct register access, predictable output, tiny runtime.

Easy♥ 0🔖 0💬 0

C++ for Embedded Systems

Modern C++ adds type safety and zero-cost abstractions to firmware.

Intermediate♥ 0🔖 0💬 0

Embedded Rust

Rust brings memory safety without garbage collection to microcontrollers.

Advanced♥ 0🔖 0💬 0

Startup Code

The code that runs before `main`: sets the stack, copies initialised data from flash to RAM, zeroes `.bss`, configures clocks.

Advanced♥ 0🔖 0💬 0

Linker Scripts

Tell the linker where each section goes in memory.

Advanced♥ 0🔖 0💬 0

Memory Sections

`.text` (code), `.rodata` (constants), `.data` (initialised globals, copied to RAM), `.bss` (zeroed globals), heap and stack.

Intermediate♥ 0🔖 0💬 0

Bootloaders

A small program at the start of flash that decides whether to run the application or update it.

Intermediate♥ 0🔖 0💬 0

Firmware Updates

Replace firmware safely in the field.

Intermediate♥ 0🔖 0💬 0

OTA Updates

Over-the-air firmware updates via Wi-Fi, BLE or cellular.

Advanced♥ 0🔖 0💬 0

BSP (Board Support Package)

Code that adapts software to a specific board: pin assignments, clocks, external chips, memory.

Intermediate♥ 0🔖 0💬 0

Device Drivers

Code that operates a peripheral or external chip through a clean API.

Intermediate♥ 0🔖 0💬 0

DMA (Direct Memory Access)

A hardware engine that moves data between peripherals and memory without the CPU.

Intermediate♥ 0🔖 0💬 0

Fixed-Point Arithmetic

Represent fractions with integers scaled by a power of two — fast on MCUs without an FPU.

Intermediate♥ 0🔖 0💬 0

MISRA C and C++

Safety-critical coding guidelines (MISRA C:2023, MISRA C++:2023).

Advanced♥ 0🔖 0💬 0

CERT C

SEI CERT secure coding standard for C — rules to prevent vulnerabilities.

Advanced♥ 0🔖 0💬 0

Static Analysis for Firmware

Find bugs without running code: buffer overflows, null dereferences, MISRA violations.

Intermediate♥ 0🔖 0💬 0

JTAG

A standard debug and test interface (IEEE 1149.1) using TCK, TMS, TDI, TDO pins.

Intermediate♥ 0🔖 0💬 0

SWD (Serial Wire Debug)

ARM's two-pin debug interface (SWDIO, SWCLK) — the usual way to flash and debug Cortex-M chips.

Easy♥ 0🔖 0💬 0

Spotted a mistake or want to add detail? Suggest an improvement — Content Contributors' edits are reviewed by editors before they go live.

Discussion (0)

Sign in or join free to ask questions and discuss this topic.