next up previous
Next: References Up: Embedded Programming with C++ Previous: Conclusions


There are times when the proper development environment for a project is not an operating system at all. For these times, run time suppport is all that is required for convenient development. If an operating system does not contribute to the solution, it is part of the problem and should not be there.

Without an operating system, however, the code generated must stand alone on the target hardware. The runtime support necessary to allow this, and even to add some extra features normally associated with operating systems (like threads and memory management) is fortunately not difficult or expensive.

uCR does a good job of providing the necessary runtime support to the compiler, with little overhead. Its small size comes from a careful attention to the details of performance, and stubborn controll of feature creep. The core design allows interesting functionality to be placed in libraries outside of uCR and brought in by the linker only if a programmer uses it.

With uCR, it is possible to get software for a new board up and running, if the CPU is already supported, in a few hours. It is an important milestone to get a trivial program running an infinite loop on a new processor board and it is best to not invest days getting there. Once trivial programs work, more extensive hardware debugging can commence.

The ongoing work on uCR is available for anonymous ftp from the Picture Elements ftp and web site, including the documentation, at:, and

It is indeed interesting that efforts to reduce code size and increase speed have led to the conclusion that significant portions of the source code must be visible to the programmer in the form of inline functions.

Stephen Williams
Sun May 4 15:28:26 PDT 1997