Writing software for embedded systems
There are several different ways of writing code for embedded systems depending on the complexity of the system and the amount of time and money that can be spent. For example, developing software for ready-built hardware is generally easier than for discrete designs. Not only are hard-ware problems removed — or at least they should have been — but there is more software support available to overcome the obstacles of downloading and debugging code. Many ready-built designs provide libraries and additional software sup-port which can dramatically cut the development time.
The traditional method of writing code has centred on a two pronged approach based on the use of microprocessor emulation. The emulator would be used by the hardware designer to help debug the board before allowing the software engineer access to the prototype hardware. The software engi-neer would develop his code on a PC, workstation or develop-ment system, and then use the emulator as a window into the system. With the emulator, it would be possible to download code, and trace and debug it.
This approach can still be used but the ever increasing cost of emulation and the restrictions it can place on hardware design, such as timing and the physical location of the CPU and its signals, coupled with the fact that ready-built boards are proven designs, prompted the development of alternative techniques which did not need emulation. Provided a way could be found to download code and debug it on the target board, the emulator could be dispensed with. The initial solu-tion was the addition and development of the resident onboard debugger. This has been developed into other areas and in-cludes the development of C source and RTOS aware software simulators that can simulate both software and hardware on a powerful workstation. However, there is more to writing software for microprocessor-based hardware than simply com-piling code and downloading it. Debugging software is cov-ered in the next chapter.