Embedded software is specifically computer software, written exclusively to control hardware or devices which are generally not considered computers, commonly referred to as embedded systems. Usually it is designed for low-powered machines and has memory and time constraints. For example, a digital camera can be controlled through an embedded system, but if it is a high-end digital camera, then a separate application will need to run on a computer. The software will most likely be written in assembly language and/or machine language (C/C++). Hardware will also usually have its own embedded software. Thus, one application can run on a computer system with another application that is specific to that computer system.
In order for an embedded software to be used, it needs to have been written to run on a host computer platform without modifications. A good example of embedded software development is the Linux operating system. Linux has thousands of pre-compiled scripts, called RPM, that are made specifically for use by embedded systems. These scripts make it easy for end-users to install the necessary applications (e.g. sound card, camera drivers, etc.)
Embedded systems run on embedded operating systems such as Linux, Solaris, BSD, etc. They may be either single user (preferably using a web browser) or multi-user. Multi-user operating systems have different user settings (e.g., security, processes, etc.) than single-user operating systems do. Therefore, a web browser can be used to control the camera while a different program can control the printer.
There are two drawbacks to embedded software development for embedded systems; firstly, the nature of the technology used limits the types of languages and object-oriented constructs that can be used. The second is that it is not always feasible to find good programming samples or libraries that are free of bugs and that meet the system requirements. Still, there are many vendors who provide good software for embedded systems.
On the other hand, there is an option for embedded software development with a built-in operating system like the RTOS or ULTRAM. Such a system has been designed specifically for embedded systems, using low-level language such as assembly language. Although the advantage is that a programmer can write his software in a high-level language, he must also understand and use the low-level hardware. It can be said that such a system provides full support for its application using low-level languages.
There are companies like Datacom, ARM, Eucleo, LPC, NEC, Xeikon, Piva, Syclo, UTStarcom, and Xilsoft that offer a wide range of high-quality and powerful embedded system solutions based on the RTU or ULTRAM technology. There are many other solutions based on microprocessors such as the AVR and . . . . . . microSD technologies. All in all, it can be said that the embedded devices market will stay vibrant and interesting for quite some time.