Embedded

Embedded Systems Architecture

By CourseTron Team ·  4 min read ·  Updated Oct 2026 💬 𝕏 in f
Table of Contents
    ? Print / Save as PDF

    In short: An embedded system is a layered stack where physical signals from sensors are conditioned and digitized, acted on by a processor running firmware against tightly budgeted memory, and pushed back out through actuators — and understanding how each layer constrains the next is what separates a reliable product from a field-recall.

    Ask ten engineers to define an "embedded system" and you get ten answers, but every real design shares the same spine: a dedicated computer that senses the physical world, decides, and acts, usually under hard constraints on power, cost, latency, and memory. A washing-machine controller, an ECU managing fuel injection 100 times per second, and a pacemaker that cannot miss a beat are all the same architecture at different stakes. This article walks that architecture layer by layer and explains why each boundary is drawn where it is.

    The Signal Chain: Sensors and Front-End Conditioning

    Everything starts with a transducer converting a physical quantity — temperature, pressure, light, acceleration — into an electrical signal. The catch is that raw sensor output is almost never usable by a digital core directly. A thermocouple produces tens of microvolts per degree C; an ADC input expects volts. So the first architectural layer is analog front-end (AFE) conditioning: amplification, anti-alias filtering, and level shifting.

    Consider a strain-gauge load cell producing ~2 mV/V at full scale. With 5 V excitation that is 10 mV full-scale. Feeding that into a 12-bit ADC with a 3.3 V reference wastes all but a handful of codes, so you place an instrumentation amplifier (gain ~250) ahead of it. The anti-alias filter is not optional: to sample at 1 kHz you must attenuate everything above 500 Hz (the Nyquist limit), or high-frequency noise folds down into your band and is indistinguishable from signal.

    Embedded system signal chainSensortransducerAFE + ADCamp / filterProcessorCPU + firmwareDAC / PWMdriverActuatormotor / valveFlash / RAMCourseTron · coursetron.com
    The canonical sense → process → actuate pipeline, with memory feeding the processor.

    Digitization: Where Analog Meets Digital

    The ADC is the gatekeeper between the continuous and discrete worlds. Three parameters dominate the architecture decision: resolution (bits), sample rate, and latency. A successive-approximation (SAR) ADC gives you deterministic conversion time — attractive for a control loop — while a sigma-delta ADC trades latency for 24-bit resolution in precision instrumentation. The choice ripples upward: a higher sample rate means more interrupts per second, which means more CPU cycles stolen from the application and a tighter interrupt-service-routine (ISR) budget.

    Rule of thumb: if your ISR runs every 10 µs on a 100 MHz core, you have only ~1000 cycles between interrupts. Spend 300 on context save/restore and the useful work budget is brutally small — which is exactly why DMA exists to move ADC samples without CPU involvement.

    The Processor Layer: MCU, Core, and Peripherals

    At the center sits the processor — in embedded contexts almost always a microcontroller (MCU) that integrates CPU core, memory, and peripherals on one die. An Arm Cortex-M is the workhorse: M0+ for ultra-low-power sensor nodes, M4F with a hardware FPU and DSP instructions for motor control, M7 with caches for higher-throughput work. The architectural insight is that the peripherals — timers, UART/SPI/I²C, CAN, DMA controllers — do most of the real-time heavy lifting so the core can sleep or run application logic. A hardware timer generating a PWM waveform is far more jitter-free than toggling a GPIO in software.

    This is where the hardware/software contract is written. Register maps, clock trees, and peripheral multiplexing define what the firmware is even allowed to do. Teams validating this layer at scale lean on RTL simulation and verification tools from Synopsys (VCS), Cadence (Xcelium), and Siemens (Questa) when the silicon itself is custom — and on vendor SDKs and hardware-abstraction layers (HALs) when it is an off-the-shelf MCU.

    LayerTypical sizeAccess timeRole
    CPU registers16–32 words<1 nsWorking data
    On-chip SRAM8 KB–1 MB1–3 cyclesStack, heap, buffers
    On-chip Flash32 KB–2 MB3–8 cycles (wait states)Firmware image
    External DRAMMBs–GBstens of nsFramebuffers, Linux

    Memory: The Budget That Shapes Everything

    Memory architecture in embedded systems is the opposite of a desktop. Code typically executes from non-volatile Flash (execute-in-place), while a small SRAM holds the stack, heap, and I/O buffers. A Cortex-M0+ node might have 32 KB Flash and 4 KB RAM — and that 4 KB has to hold the stack, every global, and your ring buffers simultaneously. There is usually no MMU and no virtual memory, so a stack overflow silently corrupts adjacent globals rather than faulting cleanly. This is why static analysis, worst-case stack-depth analysis, and MISRA-C discipline matter so much more here than in application programming.

    Why Flash wait states matter: at 100 MHz, Flash often cannot deliver one instruction per cycle, so the MCU inserts 2–4 wait states. A prefetch buffer or small instruction cache hides this — but only for linear code. Interrupt-heavy control code with constant branching sees the full penalty, which can halve effective throughput.

    Memory budget of a Cortex-M0+ nodeFlash: 32 KBSRAM: 4 KBFirmware imageexecutes in placeStackgrows downwardFree spaceRing buffers / heapGlobal variablesno MMU:overflowcorruptsglobalsStack, every global and all buffers share the same 4 KB.CourseTron · coursetron.com
    Where a 4 KB RAM budget goes on a small Cortex-M0+ node; the stack grows toward the globals.

    Firmware: The Tie Between Hardware and Software

    Firmware is the layer that makes hardware behave like a product. At the bottom sits the boot/startup code and the HAL that abstracts registers into functions. Above that sits either a bare-metal super-loop or a real-time operating system (RTOS) such as FreeRTOS or Zephyr, providing tasks, priorities, and deterministic scheduling. The architectural decision — super-loop vs. RTOS — hinges on timing: if you have several independent activities with different deadlines (read sensor at 1 kHz, update display at 30 Hz, service a comms stack), an RTOS with priority-based preemption is far easier to reason about than a hand-rolled state machine.

    The deeper point is determinism. A general-purpose OS optimizes average throughput; embedded firmware optimizes worst-case latency. A control loop that is usually 50 µs but occasionally 5 ms is a failed design, even though its average looks fine. For the full parts inventory behind these layers, see our companion piece on the components of embedded systems, and for scheduling specifics read RTOS vs. bare-metal firmware.

    One control-loop iterationSensorProcessActuatorSample waits inside Process, then drives the actuator.CourseTron · coursetron.com
    A single sample travels sensor → processing → actuator; the glowing packet changes color as it passes each layer.

    Outputs: Actuation and Closing the Loop

    The output path mirrors the input: the processor emits a digital command that must become a physical action. A DAC or, far more commonly, a PWM output drives a gate driver, which drives a MOSFET, which drives a motor or valve. The firmware rarely speaks to the actuator directly — it configures a timer peripheral and lets hardware generate the precisely-timed edges. Feedback closes the loop: the actuator's effect is re-sensed, the error is computed, and a controller (PID is the classic) nudges the command. This closed loop is the reason latency budgets propagate all the way from the ADC back to the PWM — total loop delay sets your achievable bandwidth and stability margin.

    Want to build these layers with your own hands — from ADC configuration to an RTOS control loop on real Cortex-M hardware? Explore CourseTron's embedded systems track on our courses page, and for silicon-level design services see our partner Avecas VLSI design services.

    Frequently Asked Questions

    What is the difference between a microprocessor and a microcontroller?

    A microprocessor is just the CPU core and needs external memory and peripherals; a microcontroller integrates the core, Flash, RAM, and peripherals (timers, ADC, comms) on one chip. Embedded designs favor MCUs because single-chip integration lowers cost, board space, and power — critical for high-volume products.

    Why do embedded systems use firmware instead of regular software?

    Firmware lives in non-volatile memory and runs directly on the hardware, often with no operating system or a small RTOS. It is written for determinism and tight resource limits rather than the throughput and abstraction of application software, giving precise, repeatable timing control over peripherals.

    Do all embedded systems need an RTOS?

    No. Simple devices with a single timing requirement run fine on a bare-metal super-loop. An RTOS earns its ~5–10 KB footprint when you have multiple concurrent activities with different deadlines and need priority-based preemption to guarantee the most urgent task always runs first.

    How does memory size constrain embedded design?

    Small SRAM (often a few KB) forces careful stack and buffer budgeting, static allocation over dynamic, and compact data structures. With no MMU on most MCUs, overflows corrupt memory silently, so worst-case stack analysis and coding standards like MISRA-C become essential safeguards.

    Advertisement