Computer users are likely most familiar with the software that runs on their operating systems. They many not, however, be so experienced with the software that regulates the operation of certain sophisticated hardware components. These components are programmed by professionals called embedded software engineers.
Hardware components that perform specific and specialized functions are called embedded systems. These act as computers within computers, with their own processors and memory. Embedded systems take in data from specific hardware components, execute their programming, and then pass data on to other pieces of hardware in the machine. The role an embedded system could be as complex as converting data from an internal antennae to a data format the rest of the device can use, or as simple as transmitting specific signals when activated by a button. An embedded software engineer creates the programs that run these devices.
The job of an embedded software engineer is similar to software engineers that create programs for desktop computers. The source code for converting data in one format into another is the same on a personal computer as it is in an embedded system. Where the embedded software engineer's job differs is in adding additional code for the program to run on the specialized piece of hardware acting as the embedded system.
The operating systems on which desktop applications execute include a variety of driver software. This is appropriate for these systems due to the range of hardware that could be in the computer, and the software that a user might run. Embedded systems are self-contained and only run a single program. For this reason, the programmer only needs to load a limited number of drivers, and the program itself, into the device's limited memory. The embedded software engineer's job usually includes determining the smallest number of drivers the program will need to operate the embedded device.
After an embedded software engineer finishes programming a device, his or her work has to be documented. Embedded systems are never used on their own, but as part of some larger project. In order to make use of the device, other engineers need to know information such as:
- what data the embedded system is expecting
- what data format its programming is expecting
- how the device will react to different inputs
- the format of the data the device will output
This information is then included in the technical documentation that the embedded software engineers produce themselves, often in the form of a manual. Sometimes, technical writers, rather than the actual engineers, create such manuals, from the notes the software engineers provide. Having documentation to refer to is invaluable for users.