EmbeddedRelated.com

Scorchers, Part 2: Unknown Bugs and Popcorn

Jason SachsJason Sachs April 5, 20202 comments

Jason Sachs likens bug hunting to popping popcorn to explain diminishing returns when preparing a release. He argues that the rate of new bug reports is a practical signal for whether to keep testing or ship, and that late fixes incur hidden costs like extra testing, branching, documentation, and lost focus. The piece also warns that embedded firmware needs stricter pre-release testing because updates are rarer.


Some Advice For Working From Home

Steve BranamSteve Branam March 28, 20201 comment

Treat working from home like an intentional, repeatable process rather than a perk. Keep regular hours, a dedicated workspace, and clear household boundaries to preserve productivity and personal time. This post bundles practical setup and network tips, cybersecurity reminders, and quick mental-health habits such as exercise, meditation, and low-stress hobbies, with a reminder about social responsibility when teams shift to remote work.


UML Statechart tip: Handling errors when entering a state

Matthew EshlemanMatthew Eshleman March 8, 20204 comments

Handling synchronous failures during state entry is trickier than the UML spec implies, because UML forbids transitions inside entry actions. This post compares three practical firmware patterns: explicit guarded transitions, self-posting a failure event to a LIFO queue, and converting the operation into an asynchronous service. It lays out benefits, downsides, and when each approach is appropriate for small teams, mid-sized projects, or larger firmware efforts.


Examining The Stack For Fun And Profit

Steve BranamSteve Branam February 19, 20201 comment

Stack bloat can hide in short initialization paths, and this post walks through finding it with hands-on debugging. The author builds a tiny test program and uses gdb plus custom stack-helper scripts to scan, watch, and walk the stack. That process reveals getaddrinfo pulling in glibc DNS code that allocates large local buffers and uses alloca and PLT resolution, consuming roughly 11KB of stack.


Already 3000+ Attendees Registered for the Upcoming Embedded Online Conference

Stephane BoucherStephane Boucher February 14, 2020

More than 3,000 engineers have already signed up for the Embedded Online Conference, and free registration closes at the end of February. Stephane Boucher highlights four practical tracks—DSP and machine learning, FPGA, embedded systems programming, and embedded systems security—and notes that every talk will be available to stream on demand from May 20. If you prefer no-travel learning or want flexible access to world-class talks, register now.


So You Want To Be An Embedded Systems Developer

Steve BranamSteve Branam February 5, 20205 comments

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.


Racing to Sleep

Jason SachsJason Sachs December 30, 2019

Jason Sachs walks through a realistic field sensor case study, the BigBrotherBear 2000, to show how a careful power budget exposes surprising energy costs. He demonstrates that radios and data transmission often dwarf quiescent MCU current, explains the race-to-sleep principle for computation-bound tasks, and outlines practical wake-up and measurement trade-offs so engineers can extend battery lifetime in real deployments.


Jaywalking Around the Compiler

Jason SachsJason Sachs December 9, 20193 comments

Messing with inline assembly can feel powerful until the compiler silently undoes you. Jason Sachs walks through a real bug on a Microchip dsPIC33E where pushing CORCON and writing a fixed value corrupts compiler-managed state and produces wrong results when the compiler reorders code. The post shows why the stack and certain registers are off-limits to raw inline asm, and gives practical, safe patterns to save and restore mode bits.


Shibboleths: The Perils of Voiceless Sibilant Fricatives, Idiot Lights, and Other Binary-Outcome Tests

Jason SachsJason Sachs September 29, 2019

Binary tests look simple until you try to pick a threshold, because false positives, false negatives, and base rate all collide. Jason Sachs uses a deliberately absurd detective story, then walks through the math of expected value, medical screening tradeoffs, idiot lights, and even a triage-style three-way decision. The payoff is a practical way to think about when a pass/fail signal helps, and when raw data or a second test is worth the extra complexity.


Embedded Programming Video Course Shows How OOP Works Under the Hood

Miro SamekMiro Samek September 29, 2019

Want to see how OOP actually maps to machine level code? This free video course walks through encapsulation, inheritance, and polymorphism with hands-on comparisons between C and C++. You will inspect C implementations, compiler-generated code, and debug traces, and learn how encapsulation relates to RTOS concurrency. The polymorphism lesson reverses the usual order to expose runtime costs and previews implementing polymorphism in C.


Trust, but Verify: Examining the Output of an Embedded Compiler

Jason SachsJason Sachs September 27, 2015

Jason Sachs argues embedded engineers should read their compiler's assembly even if they rarely write assembly. He walks through Microchip XC16 output for dsPIC33 devices, showing how simple C variants and optimization flags produce very different code. The article demonstrates practical verification techniques and a tiny Python helper, pyxc16, to quickly inspect assembly for timing-sensitive firmware without rewriting everything in assembly.


Continuous Integration for Embedded Systems

Tayyar GUZELTayyar GUZEL September 5, 20172 comments

Hardware dependencies make continuous integration for embedded systems harder than for pure software, yet it is essential for quality and faster feedback. This post explains the three CI types, host, non-host and hardware-in-the-loop, then compares trade-offs in cost, parallelism, timing accuracy and portability. It also outlines steps in a typical CI pipeline and highlights practical tools and plugins, including Jenkins and static analysis to automate builds and tests.


Voltage - A Close Look

Ralph MorrisonRalph Morrison May 23, 201811 comments

The post examines what voltage actually indicates in fast circuits by revisiting a classic interview puzzle and transmission-line wave behavior. Using a voltmeter and a compass to infer electric and magnetic field directions, the author shows how the right-hand rule reveals energy-flow direction rather than a simple ‘voltage source’ location. Revisiting leading and reflected waves on an open transmission line, the post explains that reflected wave fronts convert magnetic field energy into electric field energy (doubling the voltage at the open) and that energy is exchanged between field forms rather than being lost or simply ‘reflected away.’ The author emphasizes that voltage can represent storage, flow, or dissipation depending on context, and that an oscilloscope remains the primary practical tool for observing these energy phenomena in high-speed design.


2025 Embedded Online Conference: Your Guide to This Year's Schedule

Stephane BoucherStephane Boucher May 8, 20252 comments

Stephane Boucher lays out a clear day-by-day guide to the 2025 Embedded Online Conference, highlighting keynotes, live workshops, and new features. The post explains the new track-based group Q&A format moderated by Jacob Beningo, early release of sponsored talks on May 9, and an attendee-only Discord for networking and follow-ups. Use this guide to plan which sessions and panels to prioritize.


March is Oscilloscope Month — and at Tim Scale!

Jason SachsJason Sachs March 6, 2014

Jason Sachs just upgraded his lab with an Agilent MSOX3034A after snagging a vendor promotion, and he walks through first-day wins from probe compensation to scripting. He shows why 10x probes need capacitive matching and how to use the scope's calibration square wave to compensate them. He also covers connecting the MSOX3000 to Python via pyvisa and SCPI, including decoding waveform data for export.


Linear Feedback Shift Registers for the Uninitiated, Part XI: Pseudorandom Number Generation

Jason SachsJason Sachs December 20, 2017

Jason Sachs breaks down when linear feedback shift registers make good pseudorandom sources and when they fail. He shows why LFSR output bits look very different from full-state integer samples, explains their two-valued autocorrelation and quasi-random behavior, and gives practical guidance on when an LFSR is acceptable for fast hardware bit generation and when you should use a proper PRNG instead.


Getting Started With Zephyr: Saving Data To Files

Mohammed BillooMohammed Billoo October 31, 20231 comment

In this blog post, I show how to implement a Zephyr application to mount a microSD card, create a new file on the microSD card, and write data to it. The lessons learned from such an application can be helpful for devices out in the field that need to write data to off-board memory periodically, especially in cases where Internet access may be sporadic.


Patterns of Thinking: Metaphors in Programming

Miro SamekMiro Samek May 14, 20223 comments

Why do some programming ideas click while others confuse engineers? This post shows that the metaphors you choose — from biological classification for inheritance to a “quantum” analogy for hierarchical state machines — shape how developers learn, design, and communicate. It also explains the surprising power of anthropomorphic (“naïve psychology”) language in team discussions and gives practical cautions about when metaphors help or mislead.


C++ on microcontrollers 4 – input pins, and decoding a rotary switch

Wouter van OoijenWouter van Ooijen November 12, 20112 comments

Wouter van Ooijen shows how to extend a small C++ I/O library for microcontrollers to support input pins and mixed I/O, and how to decode a rotary switch reliably. The post walks through a safe class hierarchy for input, output, and bidirectional pins, then builds a quadrature decoder with a saturating counter and an HC595 seven-segment demo you can run on LPCXpresso hardware.


Ada 2012 for ARM M3/M4 Released for Download

Mike SilvaMike Silva August 4, 201412 comments

AdaCore's initial Ada 2012 port for ARM Cortex M3/M4 is now downloadable, and Mike Silva walks it through a hands-on demo on an STM32F4 Discovery board. He shows an Ada-written LCD driver, LED multitasking, and how Ada language features like Ada.Realtime, array slices, and unchecked conversions make low-level GPIO and timing code clearer and safer. The post highlights atomic BSRR GPIO writes and Ravenscar runtime details.