The Secret Embedded Software Definition Experts Use

Scour the web for “embedded software definition”, “what is embedded software?” or definition of embedded software. You’ll find a wide range of articles that state something like the following:

“Embedded software is computer software, written to control machines or devices that are not typically thought of as computers, commonly known as embedded systems. It is typically specialized for the particular hardware that it runs on and has time and memory constraints.”

Source: Wikipedia

“Embedded software is a piece of software that is embedded in hardware or non-PC devices. It is written specifically for the particular hardware that it runs on and usually has processing and memory constraints because of the device’s limited computing capabilities.”

Source: Techopedia

These definitions vaguely catch the idea of embedded software, but they don’t tell us what it is!

What is Embedded Software?

Embedded Software is code designed and constructed to run on specialized, application-specific hardware that manages data through inputs, processing, outputs, and storage in various forms. Embedded software is often deterministic, with soft and hard real-time scheduling deadlines.

The definition stated above is closer to what embedded software and firmware experts use to describe embedded software. Notice that the first part of the definition is like the general definition:

“Embedded Software is code designed and constructed to run on specialized, application-specific hardware”

However, the critical difference in the definition comes in the second part of that sentence:

“that manages data through inputs, processing, outputs, and storage in various forms.”

In the seventeen-plus years, I’ve been designing and building embedded systems, I’ve found that two fundamental principles can separate successful and unsuccessful designs. These two principles are highlighted in the above-embedded software definition by explicitly discussing data.

Let’s quickly explore these two principles to give you a better idea.

Principle #1 – Data Dictates Design

The first principle is that “data dictates design”. Embedded software developers often get hung up on the hardware, events, states, and other distractions. When I work with a customer, I often come into a chaotic situation with developers running around in every direction like their pants are on fire.

At the heart of every embedded software design is the data. The data is really what the embedded software is all about. I’d even go further and say that the embedded system is all about the data. Every system has inputs that are processed to produce the desired output. Those inputs and outputs are often stored in some volatile or non-volatile manner. If you follow the data, the design will fall into place. All the extra stuff everyone is chasing and distracting them will either fall away or fall into place.

Principle #2 – There is No Hardware (Only Data)

The second principle that directly stems from our embedded software definition is that there is no hardware, only data. Now might be thinking that is non-sense. However, the very first sentence in our definition states:

“Embedded Software is code designed and constructed to run on specialized, application-specific hardware”

I say right there that it’s designed for hardware! I worded the definition in this manner because most embedded software designers are not ready to let go of this definition. Modern, successful, expert embedded software developers write their software to be hardware independent. The hardware is abstracted to remove hardware dependencies and decouple the hardware from the application code.

The hardware simply acts as a path to retrieve, output, and store the data. Therefore, an LED application should not be directly accessing GPIO lines. Instead, the LED application should take a data object representing the LED. Then, the data is manipulated and, at the proper time, passed to hardware-specific routines that know how to map the LED object to hardware and set it in the right state.

Designing and constructing embedded software just on the data is a powerfully modern concept that teams should use to their advantage.

Embedded Software Definition Conclusion

Embedded software is code designed and constructed to run deterministically, often with real-time deadlines that manage data through inputs, processing, outputs, and storage in various forms. Click To Tweet

We’ve seen in today’s post that the definitions often used to describe embedded software are inadequate. The definitions don’t get at the heart of an embedded system or what we should focus on when we design them. However, we have successfully set the record straight and provided several modern definitions for embedded software. We have also defined several principles you can use to improve your embedded software design.

If you are interested in learning more about designing an embedded system focused on the data, consider reading “3 Tips for Data-Centric Software Design” and my latest book Embedded Software Design – A Practical Approach to Architecture, Processes and Coding Techniques.

One thought on “The Secret Embedded Software Definition Experts Use”

  1. Like wikipedia many sources mention the “processing and memory constraints because of the device’s limited computing capabilities”

    But few talk about why this is. To me a strong definition of embedded SW is that it part of a product where the SW and the HW is sold as one device, most often build for a specific purpose.
    This means that If the manufacturer of said device, can reduce cost on the HW by spending a little more time in developing SW, the fixed cost go down.

    This is the factor that pushes the HW capability and cost down, if you have medium to high volume in devices sold.
    This also means that in cases of low volume production, you more often see more capable and thus more expensive HW, as the major cost is on SW development, but it is still embedded SW.

Leave a Reply

Your email address will not be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.