Embedded systems can be developed using discrete component or a microcontroller or microprocessor based hardware platforms. For small scale microcontroller based embedded system designs, usually a simple firmware is developed. But for high level or resource intensive embedded designs like mobile phones, media players, networking equipment, industrial automation, navigation equipment and medical instruments, we have to use an operating system based firmware to achieve system reliability and efficiency. In such designs, a developer usually keeps his focus on developing the actual application rather than managing or controlling the target system hardware which is handled by an operating system. Such operating systems are designed and optimized for hardware with limited feature set, unlike the operating systems for desktop PC’s.
Embedded operating systems are primarily categorized as high-level (or general-purpose) and real-time operating systems (RTOS). RTOS are further categorized as “soft” and “hard” real-time. RTOS’s schedule their tasks to execute them in a specific amount of CPU time because they have to respond to events in “real time” while simultaneously maintaining processing result accuracy. A “soft” real-time OS can tolerate delays in achieving task completion “deadlines”. On the other hand, a “hard” real-time OS must complete its tasks within the scheduled amount of time. Some popular embedded high-level and real-time OS’s are discussed in this article.
Linux, or commonly known as Embedded Linux, is the most popular and widely used operating system for embedded systems. This popularity of Linux in embedded systems community is primarily because of Linux being free and open source. This means no royalties or licensing fees, unlike the proprietary embedded operating systems. Linux is used by approximately 18% of embedded engineers. Help and support on Linux is available from a huge open source community.
Linux is not a real time operating system (RTOS) at its base but it offers some soft real-time capabilities. It can be made to function as a hard real-time OS by using one of at least two techniques. First technique is patching the Linux kernel, for example by using RTAI (Real-Time Application Interface). The second technique is using a real-time OS running Linux as the idle task, for example “RTLinux”. RTLinux extends the existing source to provide a framework that guarantees compliance with hard real-time requirements.
The other widely used embedded operating system is the Microsoft Windows CE which is a proprietary product and Microsoft licenses Windows CE to OEM’s (Original Equipment Manufacturers) and device makers. It is not directly based on the Windows for desktop PC’s. Windows CE also has a big user base and offers good embedded hardware and drivers support. Memory requirements by Windows CE are considerably low and this makes it suitable for devices with minimal storage. This is an advantage over Linux which implements comparatively larger memory footprint. Windows CE has built-in real-time operating system capabilities. Windows CE kernel implements “preemptive multitasking” to provide a guarantee that all applications will have a specific percentage of the CPU time.
Apart from all the embedded operating systems with or without the real-time capabilities discussed in this article, there exist some which are RTOS’s to their root. One of them is VxWorks by Wind River Systems (now owned by Intel) which is one of the most prominent and widely deployed embedded RTOS’s, especially designed for embedded systems. VxWorks comes with Integrated Development Environment (IDE), usually Wind River’s Workbench, and Board Support Package (BSP) or hardware specific code to speed up the application development process. VxWorks used to ran on top of real time kernels like VRTX (Versatile Real-Time Executive) and pSOS but now has its own kernel developed by the name “WIND”.