EmbeddedRelated.com
The 2026 Embedded Online Conference

The three laws of safe embedded systems

Michael J. PontMichael J. Pont November 12, 20151 comment

This short article is part of an ongoing series in which I aim to explore some techniques that may be useful for developers and organisations that are beginning their first safety-related embedded project.


Developing software for a safety-related embedded system for the first time

Michael J. PontMichael J. Pont October 31, 20151 comment

Developing a safety-related embedded product is not the same as writing ordinary firmware, and this article lays out eight practical steps to get you started. Using a washing-machine controller as a running example, it covers scoping, key requirements, hazard analysis, applicable standards, platform and MCU choices, runtime monitoring, and prototyping. The checklist helps teams prepare for verification, testing, and later certification work.


“Smarter” cars, unintended acceleration – and unintended consequences

Michael J. PontMichael J. Pont October 20, 2015

In this article, I consider some recent press reports relating to embedded software in the automotive sector.

In The Times newspaper (London, 2015-10-16) the imminent arrival of Tesla cars that “use autopilot technology to park themselves and change lane without intervention from the driver” was noted.

By most definitions, the Tesla design incorporates what is sometimes called “Artificial Intelligence” (AI).Others might label it a “Smart” (or at least “Smarter”)...


Coding Step 3 - High-Level Requirements

Stephen FriederichsStephen Friederichs August 17, 20152 comments

Stephen Friederichs turns the series toward embedded code by showing how to write a single high-level requirement for an embedded Hello World. He explains when requirements pay off, how they support testing and scope control, and why you should not write them for every small script. He then lays out five practical rules and applies them to a concrete EHW-001 serial transmission requirement.


Lessons Learned from Embedded Code Reviews (Including Some Surprises)

Jason SachsJason Sachs August 16, 20152 comments

Jason Sachs recounts a round of motor-controller code reviews and the practical lessons his team learned about quality and tooling. He explains how a simple "ready for review" checklist and automated style checks kept meetings focused on substantive issues, and why choosing the right review tool matters after discovering lost comments in Stash. Read for concrete tips on process, subgit mirroring, vera++, and Upsource.


Dark Corners of C - The Comma Operator

Stephen FriederichsStephen Friederichs July 23, 20158 comments

Ever seen a line like if (!dry_run && ((stdout_closed = true), close_stream(stdout) != 0)) and wondered what that comma means? Stephen Friederichs unpacks the rarely-discussed C comma operator, shows a circular-buffer example where it seemed to simplify looping, then demonstrates how precedence and readability problems (and even MISRA C bans) make it dangerous in practice. Read on for practical uses and cautionary lessons.


Ten Little Algorithms, Part 4: Topological Sort

Jason SachsJason Sachs July 5, 20151 comment

Jason Sachs detours from signal processing to make topological sort feel practical and even a little funny, using a Martian Stew recipe to illustrate dependencies and cycles. He walks through two canonical algorithms, Kahn’s method and the depth-first-search variant, compares adjacency-list and matrix graph representations, and provides complete Python implementations so you can run and inspect cycle detection and ordering yourself.


Important Programming Concepts (Even on Embedded Systems) Part VI : Abstraction

Jason SachsJason Sachs June 16, 20153 comments

Abstraction is essential, but it is not free. Jason Sachs walks through the many faces of abstraction—pattern recognition, generalization, simplification, and indirection—and shows how each helps and hurts real projects. Using examples from math, API design, UI toolkits, schematics, and embedded C, he gives practical context so firmware engineers can apply abstractions without causing maintenance or debugging headaches.


Coding Step 2 - Source Control

Articles in this series:

When I first started out in programming, version control was not an introductory topic. Not in the least because it required a 'server' (ie, a computer which a teenaged me couldn't afford) but because it seemed difficult and only useful to teams rather than...


Coding Step 1 - Hello World and Makefiles

Stephen FriederichsStephen Friederichs February 10, 20156 comments

Stephen Friederichs walks through compiling a C Hello World using GCC on Windows, then shows how a simple makefile can automate the process. You will see how output naming, project layout, and makefile targets work, and learn dependency rules based on timestamps plus how to force rebuilds with clean and FORCE targets. This is a practical first step to escape the IDE and use Unix-style build tools.


Tenderfoot: Recommended Reading

Matthew EshlemanMatthew Eshleman June 28, 20171 comment

Twenty years on, these are the books that turned an electrical engineer into an embedded software pro. Matthew Eshleman walks through influential reads from Code Complete to Practical Statecharts and Test Driven Development, explaining how each shaped his design, estimation, and testing practices. This short list is a practical starting point for 'tenderfoots' launching an embedded firmware career.


Review: Modern Software Engineering

Steve BranamSteve Branam December 27, 20212 comments

Long-lived branches, manual releases, and slow feedback waste engineering time. This review of three Dave Farley books distills a practical playbook: continuous delivery pipelines, trunk-based development, and disciplined TDD to keep trunk always releasable. It shows how fast, automated feedback at every stage shrinks cycle time, reduces merge pain, and makes teams far more productive.


The Hardest Bug I Never Solved

Matthew EshlemanMatthew Eshleman December 27, 20189 comments

A single overlooked sentence in the STM32 datasheet turned intermittent startup resets into a major time-leach. Senior engineers chased DMA buffers and overflows for hours until Unni discovered the ISR vector table had been relocated to RAM with only 256 byte alignment while the MCU required 512 bytes. The misalignment caused interrupts to jump to the reset handler, and fixing the alignment stopped the reboot loop for good.


Introduction to Deep Insight Analysis for RTOS Based Applications

Jacob BeningoJacob Beningo September 20, 20171 comment

Debugging can consume over 40% of a development cycle, and Jacob Beningo argues RTOS projects need more than breakpoints and assertions. He presents deep insight analysis as a trio of techniques—RTOS-aware debugging, run-time analysis, and profiling with coverage—that expose what the system is actually doing. These methods help engineers cut guesswork and speed verification of complex embedded applications.


Embedded Firmware Refactoring, Optimisation and Migration

Ian SmithIan Smith March 29, 2016

Legacy embedded products often hit CPU, memory, or power limits long before customers stop wanting new features. This article lays out three practical paths: squeeze more from the current build with optimisation, make the codebase maintainable through refactoring, or port firmware to new hardware when constraints demand it. Read on for a pragmatic view of when each approach makes sense and how to reduce risk.


Working with Microchip PIC 8-bit Interrupts

Luther StantonLuther Stanton March 30, 2025

This fifth and final post of the Getting Started with Microchip PIC 8 Bit Development series looks at interrupts on 8-bit PIC microcontrollers. After a review of basic interrupt functionality, an actual implementation is explored with the development of a four bit counter driven via Timer0 interrupts whose value is displayed through four LEDs on Microchip's Curiosity HPC Development Board.


C++ on microcontrollers 3 – a first shot at an hc595 class with 8 output pins

Wouter van OoijenWouter van Ooijen November 2, 2011

 previous parts: 1, 2

This blog series is about the use of C++ for modern microcontrollers. My plan is to show the gradual development of a basic I/O library. I will introduce the object-oriented C++ features that are used step by step, to provide a gentle yet practical introduction into C++ for C programmers.  Reader input is very much appreciated, you might even steer me in the direction you find most interesting.

In the first part of...


Vala applications on Embedded Linux: maybe a clever choice [part 1]

Felipe LavrattiFelipe Lavratti December 19, 2016

If you need a high-level language for constrained embedded Linux devices, Vala is worth a look. It compiles to C and relies mainly on GLib, giving you native performance and minimal runtime dependencies. With reference counting instead of a garbage collector, modern language features, and a small storage footprint, Vala can outperform Python, Java, or Qt on low-RAM, low-storage boards. This first part focuses on dependencies, ABI compatibility, runtime characteristics, and a real-world example.


3 Overlooked Embedded Software Elements

Jacob BeningoJacob Beningo July 9, 20223 comments

Jacob Beningo points out three often-overlooked elements that can make embedded projects less painful and faster to ship. He highlights model-generated code for off-target iteration, configuration-generated code to manage SKUs and avoid fragile conditional compilation, and automated test harnesses to catch regressions early. The post gives practical reasons to consider each approach and how they fit into modern embedded DevOps.


Getting Started with the Microchip PIC® Microcontroller

Luther StantonLuther Stanton March 11, 2024

This first post of a five part series looks at the available hardware options for getting started with Microchip 8-bit PIC® Microcontroller, explores the MPLAB® X Integrated Development Environment and walks through setting up a project to expose the configured clock to an external pin and implement a single output GPIO to light an LED.


The 2026 Embedded Online Conference