<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Toolchains &amp; Build Systems on Embedded Systems Development</title><link>https://applied-ee.github.io/embedded/docs/development/toolchains-and-build-systems/</link><description>Recent content in Toolchains &amp; Build Systems on Embedded Systems Development</description><generator>Hugo</generator><language>en-us</language><atom:link href="https://applied-ee.github.io/embedded/docs/development/toolchains-and-build-systems/index.xml" rel="self" type="application/rss+xml"/><item><title>Cross-Compilation Basics</title><link>https://applied-ee.github.io/embedded/docs/development/toolchains-and-build-systems/cross-compilation-basics/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://applied-ee.github.io/embedded/docs/development/toolchains-and-build-systems/cross-compilation-basics/</guid><description>&lt;h1 id="cross-compilation-basics"&gt;Cross-Compilation Basics&lt;a class="anchor" href="#cross-compilation-basics"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Cross-compilation is the process of building code on one machine (the host) that will run on a different machine (the target). In embedded development, the host is typically an x86_64 Linux or Windows workstation, while the target is an ARM Cortex-M microcontroller with no operating system, no filesystem, and a fraction of the host&amp;rsquo;s memory. The toolchain bridges this gap — it knows the target&amp;rsquo;s instruction set, memory layout, and calling conventions, and produces binaries that the host cannot execute directly.&lt;/p&gt;</description></item><item><title>Build Systems — Make, CMake &amp; Beyond</title><link>https://applied-ee.github.io/embedded/docs/development/toolchains-and-build-systems/build-systems-make-cmake/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://applied-ee.github.io/embedded/docs/development/toolchains-and-build-systems/build-systems-make-cmake/</guid><description>&lt;h1 id="build-systems--make-cmake--beyond"&gt;Build Systems — Make, CMake &amp;amp; Beyond&lt;a class="anchor" href="#build-systems--make-cmake--beyond"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;A build system turns source files into flashable firmware reproducibly. Without one, every build requires remembering the exact compiler flags, include paths, linker scripts, and object file order — a process that breaks the moment the project moves to a different machine or a new developer. Even a 10-file embedded project benefits from a Makefile; larger projects with multiple libraries and configuration variants need something more structured like CMake or PlatformIO.&lt;/p&gt;</description></item><item><title>Flashing &amp; Boot Modes</title><link>https://applied-ee.github.io/embedded/docs/development/toolchains-and-build-systems/flash-and-boot/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://applied-ee.github.io/embedded/docs/development/toolchains-and-build-systems/flash-and-boot/</guid><description>&lt;h1 id="flashing--boot-modes"&gt;Flashing &amp;amp; Boot Modes&lt;a class="anchor" href="#flashing--boot-modes"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Getting compiled firmware into a microcontroller&amp;rsquo;s flash memory — and ensuring it boots correctly — is the final step between a successful build and a running system. Multiple flashing methods exist, each with different hardware requirements, speed, and use cases. The boot sequence itself is deterministic on Cortex-M: the processor reads the vector table, loads the stack pointer, and jumps to the reset handler, all within microseconds of power-on. Understanding both the flashing path and the boot path is essential for reliable bring-up.&lt;/p&gt;</description></item><item><title>Vendor SDKs &amp; Hardware Abstraction Layers</title><link>https://applied-ee.github.io/embedded/docs/development/toolchains-and-build-systems/vendor-sdks-and-hals/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://applied-ee.github.io/embedded/docs/development/toolchains-and-build-systems/vendor-sdks-and-hals/</guid><description>&lt;h1 id="vendor-sdks--hardware-abstraction-layers"&gt;Vendor SDKs &amp;amp; Hardware Abstraction Layers&lt;a class="anchor" href="#vendor-sdks--hardware-abstraction-layers"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;A Hardware Abstraction Layer (HAL) sits between application code and peripheral registers, providing an API that describes intent (configure UART at 115200 baud) rather than mechanism (write 0x00000068 to USART1-&amp;gt;BRR). Vendor SDKs bundle a HAL with startup code, linker scripts, middleware, and example projects. The choice of SDK — or the decision to bypass it — affects code size, performance, portability, and debugging difficulty throughout the life of a project.&lt;/p&gt;</description></item></channel></rss>