Software developers face constant challenges. Not only must their code be functionally correct, it must also be reliable. In addition, competition among software vendors has taken software quality to significantly higher levels. Producing high-quality code has become one of the core requirements in the software industry today as it differentiates leading software vendors from the rest of the field.

Software development in the embedded world, however, presents a unique set of challenges.

Whether they realize it or not, millions of people throughout the world use some form of an embedded system in their daily activities. Cell phones and MP3 players are good examples. Wouldn't it be nice to have a top of the line cell phone or MP3 player for half the cost? Who wouldn't love to own an 80-GB MP3 player that could slip nicely into a coat pocket for the price of a toaster?

One of the major considerations in the design of embedded systems is cost. Reducing cost becomes a major requirement when a system is produced on an ever-increasing scale. One way to reduce cost is to limit the amount of memory available within a device. A large amount of memory is considered a luxury when it comes to designing embedded systems.

With the cost issue in mind, embedded software developers are required to write efficient code, constantly adhering to code size and performance. This becomes quite a challenge for engineers developing operating systems. Scheduling complex algorithms to achieve correct functionality is a burden in itself, and as the number of tasks increases, protecting the data and functionality of one task from the other tasks becomes critically important. Needless to say, a bug in one task could eventually corrupt the entire system.