Lightweight hardware abstraction
Hardware pin reassignments turned a small firmware tweak into a tangled mess of #ifdefs and scattered port references. Gene Breniman shows how a lightweight hardware abstraction, implemented with per-board include headers and meaningful macros like MODE_LED and LED_ON, cleans up the code and makes it easy to target multiple prototypes. The post emphasizes keeping changes local to configuration headers to reduce validation scope and maintenance.
Embedded Software Creation II - European Normative & Legislation
In this post I will explain the European Normative. I will answer the main questions and I will be open to answer all the doubts any of you could have. Please leave a comment and I will answer if i could.
Why I need to look and accomplish some standards?The main reason is if you want to comercialize the product in the European Union, if exists any European Directive that cover the product, the product must be marked with the CE mark. For USA it work in the same way by the...
C++ on microcontrollers 4 – input pins, and decoding a rotary switch
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.
Modulation Alternatives for the Software Engineer
Jason starts with a hardware curiosity, the 7497 synchronous rate multiplier, and turns it into a practical lesson for firmware engineers. He contrasts conventional PWM with a simple accumulator-based method called "synthetic division," showing how it implements first-order delta-sigma behavior in software. The post explains when to pick PWM or delta-sigma and why the accumulator trick can give higher effective resolution at low update rates.
C++ on microcontrollers 3 – a first shot at an hc595 class with 8 output pins
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...
A true pioneer passes away... A farewell to Ritchie.
Dennis Ritchie's work on C and UNIX quietly shaped the tools we use every day. Gene Breniman recalls becoming a convert after reading Kernighan and Ritchie's The C Programming Language and how C replaced assembly in his embedded projects. This personal farewell explains why K&R remains a near-biblical reference for many engineers and why Ritchie's influence still matters.
Using XML to describe embedded devices (and speak to them)
Make embedded devices tell you what they can do. Martin Strubel shows how to use XML and XSLT with the DClib/netpp framework to describe hardware, map registers into abstract properties, and auto-generate compact C, documentation, and VHDL. The netpp property protocol then lets you probe, query, and control those properties over TCP, UDP, or other transports, simplifying test benches and multi-device families.
C++ on microcontrollers 1 - introduction, and an output pin class
Wouter van Ooijen shows how small C++ abstractions make GPIO code portable and reusable. Starting from a simple output_pin interface he implements concrete pins for an LPC2148 GPIO and a 74HC595 shift register, then composes behaviors with wrappers like tee and invert. The post demonstrates virtual methods, references, and constructor initialization lists to build drivers you can reuse across boards.
Kind of Buggy! The state machine fantastic//
Richard Dorfner shows a compact way to debug an intermittent homing failure in a Pan/Tilt camera by logging the last 30 state transitions in a circular buffer. He tags each entry with a function identifier and uses breakpoints to walk the recorded sequence backwards. That reveals a timing interaction between a 100 ms periodic flag and the homing code that stopped the motor state machine. The method is low-overhead and ideal for single-threaded embedded systems.
Get your microcontroller and PC to talk
Projects often need a quick PC interface for an otherwise standalone microcontroller, but learning VB or Visual C++ can feel like overkill. Jayaraman Kiruthi Vasan shows how Processing, an open source, C like environment with serial and Arduino libraries, gives embedded engineers a fast, low friction way to build GUIs and COM links to chips like the 8051 and Renesas R8C. The post promises a hands on example connecting Processing to a 8051.
Embedded Software Creation II - European Normative & Legislation
In this post I will explain the European Normative. I will answer the main questions and I will be open to answer all the doubts any of you could have. Please leave a comment and I will answer if i could.
Why I need to look and accomplish some standards?The main reason is if you want to comercialize the product in the European Union, if exists any European Directive that cover the product, the product must be marked with the CE mark. For USA it work in the same way by the...
Parlez vous Fortran?
A look at the variety of programming languages that are [or have been] used for embedded and some thoughts on the future possibilities.
Scorchers, Part 2: Unknown Bugs and Popcorn
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.
Product quality: belief or proof?
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.
Software Prototyping
In my recent blog entry on the product development process (way down, near the end of the entry), I wrote the following:
"I continue these sorts of tests, building more and more complexity, until I am satisfied that my circuit is basically functional. Then, using the test code that I have created as a model, I begin to write the real software for my product. As my software grows, to complete the full functionality of my design, I sometime find it useful to drop back to my 'test software'...
Get your microcontroller and PC to talk
Projects often need a quick PC interface for an otherwise standalone microcontroller, but learning VB or Visual C++ can feel like overkill. Jayaraman Kiruthi Vasan shows how Processing, an open source, C like environment with serial and Arduino libraries, gives embedded engineers a fast, low friction way to build GUIs and COM links to chips like the 8051 and Renesas R8C. The post promises a hands on example connecting Processing to a 8051.
Short Circuit Execution vs. Unit Testing
Short-circuit evaluation in C can make perfectly logical code behave differently than you expect, especially during unit testing. Stephen Friederichs walks through a simple if statement where a conditional function is never called because of short-circuiting, causing surprising test failures and hidden side effects. He shows why stubs reveal the issue and recommends using a temporary variable to ensure the call always occurs.
Favorite Tools: C++11 User-defined literals
Units are a frequent source of bugs in embedded software, and keeping code aligned with product specs helps prevent mistakes. This post shows how C++11 user-defined literals let you write expressive, type-safe unit values like 80_MPH and convert them to meters per second using constexpr operator"" overloads. The conversion happens at compile time, improving readability and reducing reliance on macros or magic numbers.
Stand-by or boot-up
Many factors affect the usability of devices - a key one is how long it takes to start up.
Size matters - System success depends on initial design
A seemingly small UI choice can reshape an entire embedded system. Gene Breniman uses a real product example to show how picking a graphic touchscreen instead of a character LCD can multiply CPU, memory, OS, and licensing needs. The post explains why capturing requirements early and planning for growth paths keeps complexity and cost under control, and how to size hardware to fit real needs.
Tracing code and checking timings
When you cannot afford logs or to stop the CPU, GPIO toggles become a powerful real-time tracer. Richard shows how driving IO pins and watching them with an oscilloscope or logic analyzer reveals control flow, function timings, and ISR activity with very little overhead. He also explains using direct port writes and conditional compilation to keep measurements noninvasive and easy to enable or disable.
Remember Y2K?
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.
Building Linux Kernel for Desktops
Kernel building for desktop Linux is less daunting than it used to be. In this short primer Kunal Singh introduces the distribution-specific tools and procedures that simplify compiling a desktop kernel, with focused pointers for Fedora, Ubuntu, and SUSE. Engineers will get a quick overview of where to start and which tools each distribution provides to streamline a custom kernel build.
Embedded Software Creation I - Methodologies
Maykel Alonso lays out the principal methodologies used to build embedded software, from cascade and incremental to iterative and spiral. The post walks through common stages, including requirements, analysis, design, implementation, integration, testing and maintenance, and highlights when each model fits firmware projects. Read this for a practical lens on picking a development approach that matches hardware constraints and regulatory demands.
Parlez vous Fortran?
A look at the variety of programming languages that are [or have been] used for embedded and some thoughts on the future possibilities.
Who needs source code?
Many developers feel that the supplying source code is essential for licensed software components. There are other perspectives, including the possibility of it being an actual disadvantage. Even the definition of source code has some vagueness.
Software Prototyping
In my recent blog entry on the product development process (way down, near the end of the entry), I wrote the following:
"I continue these sorts of tests, building more and more complexity, until I am satisfied that my circuit is basically functional. Then, using the test code that I have created as a model, I begin to write the real software for my product. As my software grows, to complete the full functionality of my design, I sometime find it useful to drop back to my 'test software'...
Hello Android
Finally I could get Android Early SDK up and running on my Fedora Core-7 Machine.
The process was quite simple. However I had to struggle for a few days, because Fedora install the gnu version of Java and Android requires Java from Sun.
Here are the steps I had to follow:
(1) Install the eclipse IDE (if you do not have it already) with following command:
$> yum install eclipse-jdt eclipse-jdt-sdk (to be done as super user).
(2) now install the Android SDK and ADT plug-in for Eclipse...
Size matters - System success depends on initial design
A seemingly small UI choice can reshape an entire embedded system. Gene Breniman uses a real product example to show how picking a graphic touchscreen instead of a character LCD can multiply CPU, memory, OS, and licensing needs. The post explains why capturing requirements early and planning for growth paths keeps complexity and cost under control, and how to size hardware to fit real needs.
“Smarter†cars, unintended acceleration – and unintended consequences
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...


















