Your Unit Tests Won't Find the Wolves: Why Embedded Developers Should Be Fuzzing
You test the happy paths. You check the well-formatted packets and the expected inputs. But real users don't read manuals, and real data doesn't follow your protocol spec. Fuzzing throws millions of randomized inputs at your code to find the crashes you never thought to look for. Here's why it matters for embedded systems.
Quickfire Heuristics: A Fast Usability Evaluation Framework for Lean Hardware Teams
That device with the single LED that requires you to count blink patterns just to understand system status. The button you must hold for 8 seconds, which also performs four other actions depending on hold duration. These are not accidents of negligence; they are the predictable output of development processes that have no rigorous usability evaluation component. Usability tends to slip through the gaps of standard engineering reviews, surfacing late, when design flexibility is already gone. This article introduces a framework that adapts Jakob Nielsen's Ten Usability Heuristics, for hardware and embedded systems, translating each principle into concrete evaluation questions for physical interfaces, firmware state machines, constrained displays, and cross-layer interactions. Using a smartwatch as the running example, it also introduces a structured session format, maps the framework to key lifecycle stages, and extends it to manufacturing, test, and field service contexts.
Embedded Linux Board Farms 101: The Requirements That Actually Matter
When you keep your embedded Linux boards in a rack or remote lab, the "plug in HDMI" workflow breaks down fast. One bad kernel push and SSH never comes back. This post lays out the core requirements for a real board farm: out-of-band serial console access, remote power cycling, and scripted reimaging so you never need someone on-site who knows Linux. Once those primitives are in place, everyday smart home devices — Tasmota switches, Home Assistant, environmental sensors — become legitimate development tools that bring enterprise lab capabilities to a hobbyist budget. Includes a pre-flight checklist for transitioning from KVM-style access to a fully remote setup, and a preview of the full implementation presented at the Embedded Online Conference in May.
Small Language Models (SLMs): The Future of AI is Smaller, Faster, and Closer to the Edge
AI industry is shifting from a "bigger is better" mentality to a focus on efficiency, localization, and real-world utility. The article argues that the AI industry is pivoting from massive, cloud-bound models toward Small Language Models (SLMs) designed for efficiency, speed, and edge deployment. Driven by the need to overcome cloud-centric hurdles like high latency, bandwidth costs, and privacy risks, SLMs (ranging from 100M to 14B parameters) leverage architectural innovations such as quantization, sparse attention, and high-quality synthetic data to deliver specialized intelligence on local hardware. Rather than replacing large models, SLMs represent a shift toward a hybrid intelligence future where the cloud provides depth while the edge provides real-time, sustainable action, ultimately moving the focus of AI progress from raw parameter count to practical, real-world utility.
Debug, visualize and test embedded C/C++ through instrumentation
Instrumenting a firmware is a highly effective methodology for debugging and testing an embedded softwares. In this article, I will present a way of achieving this using Scrutiny, an open-source software suite developed as a personal initiative, designed to streamline debugging, telemetry, and hardware-in-the-loop (HIL) testing for embedded devices.
Never use Float or Integer
Ada treats numbers as more than just numbers, and that changes how embedded code fails. This post shows why you should avoid using Float and Integer directly, then demonstrates how distinct types, ranges, and subtypes let the compiler catch unit mix-ups and out-of-range values before runtime. It also shows the same code running on a Raspberry Pi Pico, and briefly introduces SPARK for proving correctness.
Monte Carlo Integration
Monte Carlo integration looks deceptively simple, estimate an area by throwing random points at it and counting hits. Jason Sachs uses that idea to approximate pi, compare error scaling, and then show why the same approach becomes far more useful in higher dimensions. He also demonstrates a stratified sampling trick that improves accuracy by spending samples where they matter most.
Can an RTOS be really real-time?
Real-Time Operating Systems are meant for real-time applications. But with conventional shared-state concurrency and blocking, can you honestly know the worst-case execution time of an RTOS thread?
Always-On Intelligence Without the Cloud: Why it matters more than you think
Much of the AI conversation today is still focused on scale: larger models, more data, more compute. Embedded systems live in a different reality, where constraints are unavoidable, and efficiency is the priority. What’s emerging is not a smaller version of cloud AI, but a different approach altogether, the one that values locality, predictability, resilience, and trust. Always-on intelligence without the cloud isn’t just a technical milestone. It’s a change in how we think about where intelligence belongs.
Designing for Humans: Viewing DFM and Industrialization Through the Lens of the Fitts MABA–MABA List
"Operator’s fault" and "Inadequate Training" are the phrases you typically hear when yield loss and stubborn manufacturing issues are discussed. While these factors may play a role, they rarely tell the whole story. This article views DFM and industrialization through the lens of a classic human factors principle; the Fitts MABA-MABA list, and highlights a critical, yet less-discussed factor: the lack of manufacturing-focused human factors considerations in product design. It explores practical examples like Proprioceptive Fatigue and Visual SNR, and shows how lots of chronic manufacturing issues are results of bad upstream design decisions, echoing the fact that in many cases, inspection exists not because it is inherently valuable, but because the design failed to encode correctness directly into the product or process. If you’ve ever wondered why "retraining" never seems to fix a recurring defect, this take on industrialization and manufacturing might explain why.
Cracking the (embedded) Coding Interview
Landing your first embedded job is thrilling, but surviving months of interviews is brutal. This post condenses one engineer’s recent experience into a pragmatic playbook, covering behavioral prep, targeted coding practice, and the embedded theory you actually get asked about. Read it for a focused roadmap: what to study, which platforms to use, and how to present yourself so interviewers root for you.
Embedded Systems Roadmaps
What skills should every embedded systems engineer have? What should you study next to improve yourself as an embedded systems engineer? In this article I'll share with you a few lists from well-respected sources that seek to answer these questions, with the hope of helping provide you a path to mastery. Whether you've only just finished your first Arduino project or you've been building embedded systems for decades, I believe there's something in here for everyone to help improve themselves as embedded systems engineers.
VHDL tutorial
Gene Breniman presents a hands-on VHDL walkthrough for a programmable clock divider implemented on a Xilinx CoolRunner CPLD (XC2C32A). The example shows how to declare ports and internal signals, implement a clock-division process with reset and falling-edge detection, and create a simple addressable latch to select clock rates from a 40MHz master clock. It’s a compact, practical guide for embedded engineers learning VHDL and CPLD design.
Linear Feedback Shift Registers for the Uninitiated, Part I: Ex-Pralite Monks and Finite Fields
Jason Sachs demystifies linear feedback shift registers with a practical, bitwise view and the algebra that explains why they work. Readable examples compare Fibonacci and Galois implementations, show a simple software implementation, and reveal the correspondence between N-bit Galois LFSRs and GF(2^N) so you can pick taps and reason about maximal-length pseudorandom sequences.
VHDL tutorial - A practical example - part 3 - VHDL testbench
Gene Breniman walks a complete VHDL testbench workflow for a CPLD-based data acquisition engine, from Xilinx ISE testbench generation to stimulus processes. He shows clock and SPI gating, a simulated ADC data generator tied to ADC_LRCK and ADC_BCK, and how simulation revealed a timing bug in the nvSRAM header that was then fixed in the VHDL. Practical and hands-on for verification work.
Linear Feedback Shift Registers for the Uninitiated, Part VIII: Matrix Methods and State Recovery
Matrix methods for LFSRs look intimidating, but Jason Sachs walks through companion-matrix representations and shows why they matter for time shifts and state recovery. He derives lookahead masks from powers of the companion matrix, then translates those matrix insights into efficient bitwise and finite-field algorithms. The article includes two simple state-recovery methods and working Python/libgf2 examples you can run and adapt.
Chebyshev Approximation and How It Can Help You Save Money, Win Friends, and Influence People
Are expensive math libraries or huge lookup tables eating CPU and flash on your microcontroller? In this practical guide Jason Sachs shows how Chebyshev polynomial approximation (with range reduction, splitting, and small interpolated tables) can give near-minimax accuracy while using far less code and runtime. The post compares Taylor series, plain and interpolated tables, and explains how to fit empirical sensor data and evaluate coefficients efficiently.
VHDL tutorial - Creating a hierarchical design
Complex VHDL files quickly become hard to read and maintain. This tutorial demonstrates how to break a design into reusable entities by building a divide-by-10 component, explaining ports, sensitivity lists, and the inout usage for a toggled output. It then shows how to instantiate and chain three instances into a ÷1000 divider, with synthesis notes from compiling to an XC2C128 device.
3 Tips for Developing Embedded Systems with AI
Explore how to leverage AI in developing embedded systems with three practical tips, learn why documenting your workflows, supercharging testing and debugging, and adopting AI-assisted code generation can save time, reduce errors, and boost performance in your projects, and discover actionable insights to streamline development in resource-constrained environments, this blog explains how to prepare for AI integration while keeping the expertise of experienced engineers intact, offering real-world examples that show how even incremental AI adoption can revolutionize your development process, whether you’re new to AI or seeking to enhance existing practices, these strategies provide a clear roadmap to build smarter, more efficient embedded systems using AI.
Understanding and Preventing Overflow (I Had Too Much to Add Last Night)
Integer overflow is stealthier than you think, and in embedded systems it can break control loops or corrupt data. Jason Sachs walks through the usual culprits, including addition, subtraction, multiplication, shifting and Q15 fixed-point traps, plus C-specific pitfalls such as undefined signed overflow and INT_MIN edge cases. He then lays out practical defenses: prefer fixed-width types, widen and saturate intermediates, enable wraparound where appropriate, and reason about modular congruence for compound arithmetic.
Adventures in Signal Processing with Python
Jason Sachs shows how PyLab (numpy, scipy, matplotlib) can handle many signal-processing and visualization tasks engineers usually reach for MATLAB to do. He walks through practical examples including PWM ripple, two pole RC filters, and symbolic math with SymPy, and shares real-world installation tips and trade-offs. The post closes with pointers to IPython and pandas to speed interactive analysis and data handling.
How to Estimate Encoder Velocity Without Making Stupid Mistakes: Part I
Encoder velocity estimation is easy to get wrong, and Jason Sachs walks through the traps engineers fall into. He demolishes the common advice to time between encoder edges, shows how encoder quantization and state-width errors break that approach, and argues for fixed-rate sampling with sensible filtering for most control uses. Part II will cover more advanced estimators for higher performance needs.
Ten Little Algorithms, Part 2: The Single-Pole Low-Pass Filter
Jason Sachs shows how a single-pole IIR low-pass filter, implementable in one line y += alpha * (x - y), tames noise in embedded signals without floating point. The post explains how to compute alpha from tau and delta-t, practical tradeoffs like phase lag and oversampling, and fixed-point pitfalls including how many extra state bits you need to avoid quantization. Short, practical, and code-ready.
Thermistor signal conditioning: Dos and Don'ts, Tips and Tricks
Jason Sachs shows how to keep thermistor conditioning simple and accurate for embedded systems. He warns against analog linearization and excessive analog stages, and explains why ratiometric dividers, proper ADC buffering, and using the same reference voltage give better results. The post also covers thermal pitfalls like self-heating and lead conduction, plus practical tips for ADC autocalibration and polynomial temperature conversion.
VHDL tutorial - part 2 - Testbench
In this follow-up Gene Breniman builds a VHDL testbench in Xilinx ISE, showing how to generate a continuous master clock, apply a power-on reset, and sequence register strobes to change clock divisors. He walks through timing waits and observation delays needed to verify ADC clock rates. The article also shows how simulation exposed a copy-paste bug in the original design.
My Love-Hate Relationship with Stack Overflow: Arthur S., Arthur T., and the Soup Nazi
Jason Sachs traces his decade-long relationship with Stack Overflow, celebrating its fast answers, polished UI, and massive searchable archive while calling out a growing culture of harsh moderation. He argues strict, quality-first closures and inflexible automation often alienate newcomers and block helpful short-term answers. The post urges kinder handling of gray-area questions and smarter automation to keep the site useful and welcoming.
So You Want To Be An Embedded Systems Developer
This is a practical, boots-on-the-ground roadmap of books, videos, and inexpensive dev boards you can actually use to become an embedded systems developer. It contrasts hobbyist platforms like Arduino and Raspberry Pi with professional ARM-based evaluation kits, lists must-read resources for firmware, real-time systems, and testing, and emphasizes hands-on practice and the safety responsibilities of working with real-world devices.
Zebras Hate You For No Reason: Why Amdahl's Law is Misleading in a World of Cats (And Maybe in Ours Too)
Amdahl’s Law is a useful warning, but Jason Sachs argues it can be misleading if you stop at the equation. Using the Kittens Game as a playful model, he shows how Gustafson’s perspective, positive feedback loops, and system-level synergy can turn modest component speedups into big real-world wins. The article closes with concrete embedded-systems examples like ISR timing and developer productivity.
Using the Beaglebone PRU to achieve realtime at low cost
Fabien Le Mentec shows how the BeagleBone Black's PRU coprocessors can run hard realtime control loops, removing the need for an FPGA or dedicated microcontroller. He walks through Linux setup, device tree enabling, assembler and loader tools, and a timer example that reads ADCs and drives PWM from PRU code. The post highlights community SDKs and a recent TI Code Composer Studio option for C-based PRU development.
Coroutines in one page of C
Yossi Kreinin shows how to get usable coroutines in plain C by combining setjmp/longjmp with a bit of inline assembly. The post walks through a working iterator example, explains why you must allocate and switch a separate stack, and outlines the start/yield/next API. It also flags portability pitfalls like stack growth direction and frame pointers, and points to makecontext and Tony Finch alternatives.
Free Sessions @ the 2023 Embedded Online Conference
The 2023 Embedded Online Conference has pre-released 37 theatre talks and demos you can watch for free today by creating an account and skipping payment. Stephane Boucher walks through the free sessions and the paid portion of the weeklong program, highlighting live Q&A, hands-on workshops, and keynote talks across April 24–28. Add sessions to your agenda and check the schedule daily for last-minute changes.
Back from Embedded World 2023
Embedded World 2023 brought Stephane Boucher back to Nuremberg after three years, and the scale of the show still impressed him, with more than 900 vendors on the floor. He also highlights the value of in-person networking, from catching up with Embedded Online Conference speakers to swapping travel stories over dinner. The trip wrapped with a side visit to Heidelberg, then a quick look ahead to the next Embedded Online Conference.
What to See at Embedded World 2023
Stephane Boucher is heading back to Embedded World 2023 in Nuremberg and is excited to feel the show’s post-pandemic buzz, with more than 900 vendors on the floor. He’s compiled a short list of vendors worth visiting and invites attendees to a casual meet-up on Tuesday evening at Hausbrauerei Altstadthof at 18:30. Join him to reconnect, network, and catch the latest industry trends.
Favorite Software AND Hardware Tools for Embedded Systems Development
Tool choice can make or break an embedded project, and Stephane Boucher gathered developers' favorite hardware and software picks from the Embedded Online Conference into one handy roundup. The post points to a companion video and lists concrete tools from oscilloscopes and logic analyzers to J-Link probes, Python, unit-test frameworks, and soldering irons. It is a quick, practical peek at what experienced embedded engineers actually use.
A New Related Site!
The post announces the launch of MLRelated, a new Related site dedicated to machine learning and deep learning. It positions MLRelated as complementary to existing Related sites by highlighting cross-cutting interests: TinyML for embedded developers, machine/deep learning applications in signal processing, and FPGA-based AI/ML implementations. The new site debuts with a modest amount of content and is expected to expand rapidly through contributions from the Related community in the form of blogs, forum threads, and webinars. The author invites readers to report navigation errors, share feedback, and propose ideas to help steer MLRelated into a practical, community-driven resource for researchers and practitioners in ML and adjacent domains.
New Promo Video for the 2022 Embedded Online Conference
Less than a week remains before the 2022 Embedded Online Conference, and Stephane Boucher shares a new promo video that previews an all-star lineup of embedded engineers, shown in order of appearance: Helen Leigh, Peter McLaughlin, Jack Ganssle, Colin O'Flynn, Miro Samek, Jean Labrosse and others. If you haven't registered yet, watch the video and save $100 on registration with promo code EMBEDDEDRELATED.
2022 Embedded Online Conference - Final Push!
The Embedded Online Conference is just weeks away, and Stephane Boucher is making one last push to get the word out. Engineers who share the conference promo image on LinkedIn or Twitter can enter a raffle to win one of two Saleae Logic Pro 8 analyzers, with a simple hashtag-based entry process.
The 2021 DSP/ML Online Conference
The 2021 DSP/ML Online Conference is packed with talks and workshops for engineers working at the intersection of signal processing and machine learning. Stephane Boucher highlights sessions ranging from TinyML and SDR to FIR filter design, convolution, clustering, and DSP libraries for IoT. Registration also includes instant access to all talks from last year, plus a discount option if cost is a barrier.
Embedded Online Conference 2021 - Watch the Speakers Share their Thoughts on the Value for Attendees
Stephane Boucher gathered short interviews with several speakers from the upcoming Embedded Online Conference, asking them why conferences matter and what makes this event worth attending. Their answers are edited into a single video that highlights practical reasons to tune in. If you haven't registered yet, use promo code ER149 to save more than 40% on your registration fee.
8 Weeks - 8 Giveaways!
Eight weeks, eight hardware and training prizes aimed at embedded engineers, from oscilloscopes to Tracealyzer licenses. Register for the 2021 Embedded Online Conference before each week's raffle date and you'll be automatically entered to win items like a Rigol scope, Saleae Logic Pro 8, Joulescope, RTOS workshops, and more. Use promo code ER90 to save $100 on registration through April. Practical prizes to boost your bench and skills.























