For engineers that approach embedded systems design from a hardware background, configuring software for embedded systems can pose a significant challenge. Those with experience and know-how in software engineering will still need to adapt their software design and programming methodologies to meet the unique requirements of embedded systems design.
In this blog post, we discuss the different types of embedded software that are commonly deployed in embedded systems applications. We will define and characterize a basic software stack for embedded systems and explore some of the most common applications for embedded systems in commercial, industrial, and residential contexts.
Embedded systems consist of a microcontroller or microprocessor unit on a chip with other peripheral devices, serving a dedicated function or managing a specific application within a larger mechanical or electronic system. Embedded systems consist of both hardware and software, with physical components like an oscillator, memory, and a CPU, and a software stack that can vary in complexity based on the application.
Engineers that build embedded systems require a broad skill set that includes hardware design and development of embedded software that matches the defined requirements of the hardware specifications. Many embedded systems are designed for a limited and highly specific set of tasks or applications. As a result, new embedded systems software applications are often custom-coded to meet the unique requirements of each new project.
If embedded systems consist of both hardware and software then embedded software refers specifically to the software components of the system. We can further distinguish between two types of software used in embedded systems: the firmware and the application.
Firmware consists of software that is written in non-volatile memory within the embedded system, such that it cannot be easily modified or erased. Most embedded systems contain read-only memory (ROM) or electrically erasable programmable read-only memory (EEPROM) where firmware is stored. Firmware is typically used for running or booting the device.
In contrast, embedded software applications allow the system to perform tasks or functions that are required for the successful application of the device. An embedded application includes control or scheduling algorithms that allocate processing power to tasks, processes, or services based on their assigned priority.
The software stack for an embedded system can vary in complexity depending on the intended application for the product. The most complex systems consist of five or six layers while simpler systems might include just two or three. A six-layer software stack for an embedded system might include the following components:
Embedded systems are deployed in a wide range of commercial and consumer applications across industries. While the first embedded computers were used in products like calculators during the 1960s, technological advancements of the information age have accelerated the proliferation of devices with embedded systems throughout the world. In particular, devices that use embedded systems to transmit data over the internet (known as connected devices) have exploded in popularity with applications that include smart homes and wearable medical devices.
Below, we highlight some of the most common applications for embedded systems today:
Consumer electronics are a major product category when it comes to embedded systems, including things like mobile phones, video game consoles, printers, digital cameras, and more. There is a significant variation in the types of embedded systems that are deployed across various consumer products. The microcontroller system embedded in a digital camera, for example, might perform just a handful of highly specific functions or tasks. On the opposite end of the spectrum, mobile phones are powered by embedded systems that must be configured to run many different types of mobile applications (apps). The operating systems and architecture for these more complex embedded systems are more similar to those of desktop computers.
Smart home and smart home security products are driven by embedded systems that rely on specially programmed embedded software programs. Smart home products are a growing market segment for embedded systems engineers as consumers seek out low-cost solutions that enhance home safety and protection while providing convenience through automation.
There are several examples of smart home products that rely on embedded systems, including home security cameras that upload the video to the cloud or motion sensors that activate an alarm when an intruder is detected. Even smart plugs that enable voice activation or timer control of home audio and lighting systems depend on embedded software and systems.
Embedded systems are increasingly being deployed in military and aerospace applications, especially in aircraft navigational computers, GPS tracking computers, and vehicle guidance systems. On the commercial side, in-flight entertainment systems, flight data recorders, and other aircraft safety features can be designed with embedded systems that capture information from their environment using sensors and convey information about the vehicle status to the operators or pilot. Unmanned aerial vehicles (UAVs) are also powered by embedded software systems.
Many types of electronic communication devices contain embedded systems, including home and business networking products that facilitate connections between network endpoints and the worldwide web. Products such as routers, network hubs, and satellite phones contain embedded systems that incorporate internet connectivity features. Engineers develop specific embedded software applications that allow these devices to transfer messages between network devices and the internet.
Embedded systems are increasingly being deployed in the health care setting. Electronic medical devices are frequently designed with one or more internal microcontrollers that help coordinate their functioning within the timing and power constraints that are characteristic of embedded systems. While many types of embedded systems are meant to function with minimal user input, products in the health care system frequently require a user interface where a physician or technician can configure operational settings for the device. Examples of embedded systems in health care include CT scanners, ECG machines, magnetic resonance imaging (MRI) machines, and more.
Connected wearable devices are a growing area of application for embedded system software in healthcare. A patient wearing such a device can have their health and vital status monitored by physicians remotely, reducing the need for inpatient hospital stays and freeing up bed space for circumstances where it is critically needed. A connected, wearable heart rate monitor, for example, can automatically gather data from the patient and upload it to the cloud where it can be reviewed by a remotely located physician.
Embedded systems vary significantly in their design and applications within the industrial and manufacturing sectors. In large industrial systems, embedded systems control complex tasks that can be configured or adjusted through a human-accessible user interface. These systems may control assembly lines, adjust plant conditions, or perform other large-scale functions in the industrial context.
In addition to systems that control industrial machinery, there are also embedded systems in products that monitor and provide feedback on industrial and manufacturing processes. These embedded systems contain sensors that gather data from the manufacturing process and upload them to a centralized database where it can be analyzed for patterns or anomalies. Thanks to the broad range of available sensors, industrial facilities can be monitored across several dimensions including pressure, temperature, vibrations, power output, and more. These systems are providing manufacturers with a greater degree of control over the industrial processes they manage each day.
We can recognize many parallels between the traditional practice of software development and the way software is developed and deployed for embedded systems. Both types of software require underlying components, such as an application framework, runtime environment, and operating systems. Perhaps the most important distinction is that embedded software applications must be coded to account for the normal limitations associated with embedded systems, including on available processing capacity and power consumption.
Total Phase builds diagnostic tools that help embedded engineers efficiently debug their embedded systems software, resulting in more rapid development and reduced time-to-market. Tell us about your upcoming embedded systems project and we'll show you how Total Phase can help.