Digital Signal Processing Reference
In-Depth Information
18 Operating System Support for SOPC Design
Many electronic devices that contain a processor now require complex software
that needs support for multitasking, synchronization of tasks, a wide range of
I/O devices, scheduling and buffering of I/O operations, memory management,
graphics displays, file systems, and/or networking. Developing custom code
(like was done in Chapter 16) that can provide all of these services is an
expensive and time consuming task. For example, one recent cell phone design
contained over five million lines of code. Few projects will have the time and
funding needed to develop all of this code entirely on their own. In cases such
as this, it makes economic sense to use an existing operating system. An
operating system (OS) can provide a wide array of features and services
including those listed above. Software developers are more productive when an
operating system is present since they can work at a higher level of abstraction
by using the operating system's Application Programming Interface (API) calls
to access the services provided by the OS.
The development time and costs saved more than offsets the licensing fees for
the operating system. The typical commercial embedded OS license fees run
only a few dollars per device and several open source operating systems are
free. Some very simple low-end devices might not need an OS, but complexity
constantly increases with each new generation of devices.
The traditional desktop operating systems require a memory management unit
(MMU) that provides hardware support for virtual memory addressing. This
allows the OS to provide a kernel memory address space and a user memory
address space. An MMU requires extensive processor hardware and the current
FPGA soft-core processors do not contain an MMU. Specially designed
embedded operating systems that have been targeted for small MMU-less
devices are available 11 . They use only a single linear memory address space. An
embedded OS typically requires less processing power and has a smaller
memory footprint than a desktop OS. It also is likely to support booting from
flash memory, produce ROMable code (i.e., generates code that can run from
ROM memory), and to have I/O device drivers for the I/O devices that are more
commonly found in small devices. A C/C++ compiler is typically provided with
the OS.
For these reasons, most complex embedded devices use an existing embedded
operating system. Embedded operating systems typically are developed largely
in C/C++ and normally come bundled with a C/C++ compiler, assembler, and
debugging tools to assist designers in developing application programs and
testing the device. Embedded system development tools must also support
program execution using code stored in non-volatile memory such as ROM or
Flash memory.
Figure 18.1 shows the response embedded designers gave in a 2006 survey to
the question “what languages do you use to develop embedded systems?” The
11 Embedded Linux System Design and Development by P. Raghavan, Amol Lad, and Sriram Neelakandan, 2005.
Search WWH ::




Custom Search