Embedded software development

Software is software is software, it’s all the same, right ? Wrong ! Of course there are similarities, but there are also major differences. Important differences and we like to share our vision on them.

What is Software anyway ?

Software consists of a set of instruction sequences that a microprocessor can execute at any given moment. An instruction describes exactly what a microprocessor will do. There are several kinds of instructions, for example:

  • decisions (IF temperature_too_low THEN switch_on_heater)
  • go to a different location in the program (like Monopoly, “go directly to Jail, do not pass Go”)
  • retrieve or store data
  • perform a calculation (multiply A by B)
  • compare (compare A with B)

So software describes in detail what a microprocessor must do, step by step. To ensure that software wil work correctly, unexpected events have to be taken into account.

That’s why a software design has to be made. A software design describes what the program must do and how it must respond to expected and especially to unexpected situations.

What is a bug anyway ?

A good definition of a bug is: “A coding error that causes an unexpected defect, fault, flaw, or imperfection in a computer program. In other words, if a program does not perform as the developers intended, it is most likely a bug.” In practice any unspecified feature or modification is not classified as a bug.

What is Embedded software anyway ?

Embedded software is designed to perform a limited number of functions on inflexibel hardware.

You can find embedded software in a washing machine, an MP3 player, a game computer, a control system or a photo camera. Products with a limited number of functions. You don’t make photo’s with a washing machine and you also don’t want to play MP3’s on it, however ? Not embedded systems are PC’s, servers, palmtops and in our opinion mobile phones as well, being a border case.

In an embedded system there is a shortage of just about anything. All components are selected so that the necessary function can be only just performed. Memory costs money, processing power too so the less the better.

This is quite a different starting point than when you are designing PC software. PC’s are becoming faster, memory and hard drive space cheaper every day. So when your program runs slowly on todays PC it will run much better on next year’s PC. In contrary the embedded system won’t change anymore. The design of embedded software must make very efficient use of the available processing power and the available memory.

The quality of the software must comply to much higher standards and be tolerant to unexpected situations. A PC lock-up is an accepted fact of life, but no one accepts a locked-up coffee machine or washing machine. Not to speak about traffic light control or medical machines !

A good design is half the job

Think first, then act. That’s what making a design is all about. Think of what the software must be doing. Taking into account every unexpected situation and how to deal with each one to keep the system working properly.

When the specifications are defined, software development can start. During the course of hardware development consulting the hardware engineer is necessary, but quite some parts of the job can be done without true knowledge of the hardware design.

Overview, maintainability, quality, all important when designing embedded software. A design gives understanding about the software structure. A clear structure if the design is good.

All designs are always checked by a colleague. This keeps us keen and guarantees that the design is thorough and clear.