EmbeddedRelated.com

Autonomous vehicle - design questions to ponder

Ed NutterEd Nutter January 27, 2016

Designing an autonomous or remotely controlled vehicle forces tradeoffs between purpose, environment, and terrain. This post lists practical questions to drive decisions about mission profile, ruggedization, power and data handling, sensing, and modularity so your robot survives and completes tasks. Engineers will get a concise checklist to provoke design choices and avoid common failure modes in real-world deployments.


Global Variables vs. Safe Software

Stephen FriederichsStephen Friederichs December 9, 2015

10,000 global variables is a striking code smell, and Stephen Friederichs uses the Toyota unintended-acceleration case to show why. He argues the issue was not mere coding style but absent processes: poor testing, lack of enforced standards, incorrect stack analysis, and unowned autogenerated code. Read this for a practical take on why globals and weak processes in safety-critical systems are a much bigger danger than style debates suggest.


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.


Number Theory for Codes

Mike RosingMike Rosing October 22, 20156 comments

If CRCs have felt like black magic, this post peels back the curtain with basic number theory and polynomial arithmetic over GF(2). It shows how fixed-width processor arithmetic becomes arithmetic in a finite field, how bit sequences are treated as polynomials, and why primitive polynomials generate every nonzero element. You also get practical insights on CRC implementation with byte tables and LFSRs.


“Smarter” cars, unintended acceleration – and unintended consequences

Michael J. PontMichael J. Pont October 20, 2015

Smarter cars are arriving fast, but the software tricks behind them may be creating new safety and compliance risks. This post connects Tesla’s autopilot, the VW emissions scandal, and a reported Porsche throttle-delay case to ask whether automotive standards and regulations are keeping pace with increasingly intelligent vehicle control systems.


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.


Introduction to Microcontrollers - Ada - 7 Segments and Catching Errors

Mike SilvaMike Silva September 22, 20145 comments

Mike demos an Ada implementation of a multiplexed 7-segment driver on the STM32F407 Discovery board, highlighting Ada idioms like protected objects for ISRs and packed-boolean GPIO mapping. The post shows practical timer setup for Timer 6, how to avoid ARR/CNT races, and how Ada's runtime range checks plus a last-chance handler surface out-of-range errors with file and line diagnostics.


Bad Hash Functions and Other Stories: Trapped in a Cage of Irresponsibility and Garden Rakes

Jason SachsJason Sachs January 28, 20141 comment

A tiny filename decision in MATLAB's publish() can silently swap rendered equations, and Jason Sachs shows why that matters. He reproduces the bug, walks through hash-function basics and collision math, and contrasts safe and unsafe caching strategies. The piece then broadens into practical lessons about software fringes, legacy constraints, and the usability traps that leave engineers repeatedly stumbling over avoidable design choices.


Data Validity in Embedded Systems

Stephen FriederichsStephen Friederichs October 5, 20131 comment

Real-world sensors and serial links often deliver garbage, and embedded software must recognize and handle invalid inputs before they cause failures. In this post Stephen Friederichs walks through practical validity checks, from simple range tests and sentinel values to hardware status flags and timing checks for stale data. He also outlines safe responses, from graceful degradation to fail-safe shutdowns, so firmware behaves predictably in the unexpected.


Embedded Software Creation II - European Normative & Legislation

Dr. Maykel AlonsoDr. Maykel Alonso December 20, 20116 comments

If you are building a product for the European market, standards and directives can determine whether it can legally ship with a CE mark. Maykel Alonso breaks down how European normative and legislation fit together, what “New Approach” and “Global Approach” mean, and which directives commonly affect embedded products. The post also points engineers to the Official Journal of the European Union and a useful directive reference table.


Never use Float or Integer

Mark HermelingMark Hermeling March 18, 20264 comments

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.


Remember Y2K?

Colin WallsColin Walls December 21, 20231 comment

There was fear that the turn of the century at the end of 1999 would cause problems with many embedded systems. There is evidence that the same issue may occur in 2038.


Scorchers, Part 4: Burned by the Happy Path (Simon Says)

Jason SachsJason Sachs December 31, 2024

Designs that only work along the happy path break in real use, causing frustration and sometimes safety risks. Jason M. Sachs uses everyday examples from microwaves to car Auto Park logic to show how mutable software and physical state create brittle behavior. He outlines practical firmware fixes such as clear state machines, sensor or user-driven resynchronization, soft-start delays, and a ‘‘Drunken Happy Path’’ fuzzing approach to find real-world failure modes.


Graphical medicine

Colin WallsColin Walls December 5, 2024

Although an appealing user interface is a good option for any device, in medical applications it can be a life saver.


Autonomous vehicle - design questions to ponder

Ed NutterEd Nutter January 27, 2016

Designing an autonomous or remotely controlled vehicle forces tradeoffs between purpose, environment, and terrain. This post lists practical questions to drive decisions about mission profile, ruggedization, power and data handling, sensing, and modularity so your robot survives and completes tasks. Engineers will get a concise checklist to provoke design choices and avoid common failure modes in real-world deployments.


Product quality: belief or proof?

Colin WallsColin Walls October 7, 2024

Embedded software development is a challenging activity, so it is essential to have tools and IP that is of the best quality. However, assessing that quality can be, in itself, a challenge.


Ten Little Algorithms, Part 8: Miller-Rabin Primality Test (and Living with Uncertainty)

Jason SachsJason Sachs May 18, 2026

Part 8 of the Ten Little Algorithms series: A look at the Miller-Rabin primality test, along with Pollard's rho algorithm for factoring, and some perspectives on very low levels of uncertainty.


Beyond the Packet: Designing Reliable Serial Communication for Embedded Systems

Prabo SemasinghePrabo Semasinghe May 4, 2026

Serial communication between microcontrollers sounds simple until the protocol quietly breaks your system. Prabo Semasinghe walks through the design steps for building a robust communication framework: packet structure, error detection, acknowledgment handling, state machine design, and the failure-mode testing that actually proves it works.