Cortex‑M7 without hardware part 7: loose ends

This is Part 7 — and the final part — of my Cortex‑M7 without hardware series. Parts 1 through 6 built minimal bare-metal projects that would boot on Renode and QEMU. Minimal was the key word: the linker script had no alignment or symbol exports, the startup code skipped .data copying and .bss zeroing, and main.cpp had to talk to the host through hand-rolled inline assembly. Those shortcuts were fine for proving the concept, but they left the project in a state where most of the C, and especially C++, language was technically broken. This post ties up all the loose ends. By the end, both projects have: Working initialized globals — .data is copied from flash to RAM at startup Guaranteed zero-initialized globals — .bss is zeroed before main() C++ global constructors — .init_array is iterated so static objects are constructed Standard library I/O — printf and exit work without hand-rolled assembly ...

March 14, 2026 · 15 min · Hannupekka Sormunen

Cortex‑M7 without hardware part 1: linker script

This is the first post in my Cortex‑M7 without hardware series, which aims to build an Executable and Linkable Format executable (ELF) and run it without hardware (using emulated / simulated STM32F746 microcontroller unit. 1). ...

December 18, 2025 · 5 min · Hannupekka Sormunen