EmbeddedRelated.com
The 2026 Embedded Online Conference

Remember Y2K?

Colin 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.


Getting Started With Zephyr: Writing Data to EEPROM

Mohammed Billoo December 6, 20235 comments

In this blog post, I show how to implement a Zephyr application to interact with EEPROM. I show how the Zephyr device driver model allows application writers to be free of the underlying implementation details. Unfortunately, the application didn't work as expected, and I'm still troubleshooting the cause.


My TDD Journey Started Dec 6, 1999

James Grenning December 6, 2023

My story of learning Test-Driven Development started 23 years ago today. TDD has helped me exercise my code well before there is target hardware to run on. TDD helps me prevent defects. It can help you too.


More than just a pretty face - a good UI is essential

Colin Walls November 30, 20231 comment

A user interface can make or break a device - determining its success in the marketplace. With careful design, the UI can make the product compelling and result in a high level of satisfaction from new and experienced users.


Getting Started with NuttX RTOS on Three Low Cost Boards

Alan C Assis November 27, 20238 comments

If you are an embedded system developer chances are you already played with Linux on some embedded board and saw how it is powerful, right?

So, I have a good news: you can have same power using NuttX on some ultra low cost board powered by a microcontroller instead of microprocessor (that normally is way more expansive).

In fact many companies already realized it before me. It explains why NuttX is the kernel used by many IoT frameworks:

Another great news is that few days ago...


Elliptic Curve Cryptography - Multiple Signatures

Mike November 19, 2023

The use of point pairing becomes very useful when many people are required to sign one document. This is typical in a contract situation when several people are agreeing to a set of requirements. If we used the method described in the blog on signatures, each person would sign the document, and then the verification process would require checking every single signature. By using pairings, only one check needs to be performed. The only requirement is the ability to verify the...


Lightweight C++ Error-Codes Handling

Massimiliano Pagani November 16, 20232 comments

The traditional C++ approach to error handling tends to distinguish the happy path from the unhappy path. This makes handling errors hard (or at least boring) to write and hard to read. In this post, I present a technique based on chaining operations that merges the happy and the unhappy paths. Thanks to C++ template and inlining the proposed technique is lightweight and can be used proficiently for embedded software.


Flood Fill, or: The Joy of Resource Constraints

Ido Gendel November 13, 2023

When transferred from the PC world to a microcontroller, a famous, tried-and-true graphics algorithm is no longer viable. The challenge of creating an alternative under severe resource constraints is an intriguing puzzle, the kind that keeps embedded development fun and interesting.


Embedded Systems Roadmaps

Nathan Jones November 9, 2023

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.


Embedded Systems Co-design for Object Recognition: A Synergistic Approach

Charu Pande November 4, 2023

Embedded systems co-design for object recognition is essential for real-time image analysis and environmental sensing across various sectors. This methodology harmonizes hardware and software to optimize efficiency and performance. It relies on hardware accelerators, customized neural network architectures, memory hierarchy optimization, and power management to achieve benefits like enhanced performance, lower latency, energy efficiency, real-time responsiveness, and resource optimization. While challenges exist, co-designed systems find applications in consumer electronics, smart cameras, industrial automation, healthcare, and autonomous vehicles, revolutionizing these industries. As technology advances, co-design will continue to shape the future of intelligent embedded systems, making the world safer and more efficient.


Ten Little Algorithms, Part 4: Topological Sort

Jason Sachs July 5, 20151 comment

Other articles in this series:

Today we’re going to take a break from my usual focus on signal processing or numerical algorithms, and focus on...


Second-Order Systems, Part I: Boing!!

Jason Sachs October 29, 20142 comments

I’ve already written about the unexciting (but useful) 1st-order system, and about slew-rate limiting. So now it’s time to cover second-order systems.

The most common second-order systems are RLC circuits and spring-mass-damper systems.

Spring-mass-damper systems are fairly common; you’ve seen these before, whether you realize it or not. One household example of these is the spring doorstop (BOING!!):

(For what it’s worth: the spring...


How to use I2C devices in (Apache) NuttX: Scanning for Devices

Alan C Assis April 22, 2024

Previously in this EmbeddedRelated article, we saw how to use Buttons Subsystem on NuttX using a RaspberryPi Pico board. Now we will change from user input device (buttons) for something more generic: I2C protocol. NuttX supports a lot of I2C devices (sensors, displays, EEPROMs, I/O Expanders, I2C multiplexers, and many more). And most important: because NuttX is a Linux-like RTOS you will find the very familiar i2ctool to search for devices in your I2C bus. So, lets to get...


Ten Little Algorithms, Part 5: Quadratic Extremum Interpolation and Chandrupatla's Method

Jason Sachs November 11, 20159 comments

Today we will be drifting back into the topic of numerical methods, and look at an algorithm that takes in a series of discretely-sampled data points, and estimates the maximum value of the waveform they were sampled from.


The Other Kind of Bypass Capacitor

Jason Sachs January 3, 20173 comments

There’s a type of bypass capacitor I’d like to talk about today.

It’s not the usual power supply bypass capacitor, aka decoupling capacitor, which is used to provide local charge storage to an integrated circuit, so that the high-frequency supply currents to the IC can bypass (hence the name) all the series resistance and inductance from the power supply. This reduces the noise on a DC voltage supply. I’ve...


C to C++: Using Abstract Interfaces to Create Hardware Abstraction Layers (HAL)

Jacob Beningo September 21, 20235 comments

In C to C++, we've been exploring how to transition from a C developer to a C++ developer when working in embedded system. In this post, we will explore how to leverage classes to create hardware abstraction layers (HAL). You'll learn about the various inheritance mechanisms, what an virtual function is, and how to create an abstract class.


From bare-metal to RTOS: 5 Reasons to use an RTOS

Jacob Beningo October 18, 20167 comments

Developers can come up with amazing and convoluted reasons to not use an RTOS. I have heard excuses ranging from they are too expensive (despite open source solutions) all the way to they aren’t efficient and use too much memory. In some circumstances some excuses are justified but there are many reasons why a developer should look to an RTOS to help with their real-time scheduling needs.

From bare-metal to RTOS Quick Links
  • Part 1: 

C Programming Techniques: Function Call Inlining

Fabien Le Mentec April 29, 20137 comments
Introduction

Abstraction is a key to manage software systems as they increase in size and complexity. As shown in a previous post, abstraction requires a developper to clearly define a software interface for both data and functions, and eventually hide the underlying implementation.When using the C language, the interface is often exposed in a header '.h' file, while the implementation is put in one or more  corresponding '.c' files.

First, separating an interface from its...


Another 10 Circuit Components You Should Know

Jason Sachs October 30, 20131 comment

It's that time again to review all the oddball goodies available in electronic components. These are things you should have in your bag of tricks when you need to design a circuit board. If you read my previous posts and were looking forward to more, this article's for you!

1. Bus switches

I can't believe I haven't mentioned bus switches before. What is a bus switch?

There are lots of different options for switches:

  • mechanical switch / relay: All purpose, two...

The 2026 Embedded Online Conference