Embedded Software is all around us, running in the majority of electrical appliances in households, businesses, and industries. Often referred to as “firmware”, it is software tailored to specific hardware and the fixed-function or set of functions, it needs to perform.
Hardware platforms running embedded software range from small controllers with limited processing and memory to multi-board, multi-processor systems running sophisticated control and monitoring algorithms.
Some examples of embedded software:
- Bluetooth controller software in EarPods
- Tire pressure monitoring software running in modern cars’ wheels
- Management and control software running on switches and routers
- Control software running inside (smart)SFPs.
Why use Embedded Software?
Embedded software is used for implementing complex functions which cannot or should not be realized in hardware, be it in board design, in programmable logic, or in ASIC logic.
The strength of embedded software is the ability to perform a multitude of different operations on a heterogeneous set of data and inputs, especially when the program flow branches out into many different conditions, each requiring different actions to be taken. Such cases are best implemented in software.
The basis for a good embedded solution is determined in the design phase of the product where the choice of feature/requirement versus implementation is made.
The key here is to find the sweet spot between performance, power, and heat dissipation, maintainability, and flexibility. Electronic circuitry and implementations that use application-specific integrated circuits (ASICs) are very power efficient and fast when a fixed set of operations can be performed on a large, homogeneous data set.
However, there is a downside in using hardware and that is flexibility and development cost (NRE). AimValley has expert knowledge in hardware, ASIC/FPGA, and software design and can help find the best fit for any embedded design.
Our recommendations for using embedded software:
Complexity
When complex processing is required, embedded software is better suited. Some complex processsing examples:
- Management interfaces for configuration and upgrades.
Applying configuration items widens the scope of a system’s deployment. Allowing upgrades adds the possibility to get the hardware platform to market quickly with a limited feature set and to add features later through upgrades. - Monitoring/reporting. Fault handling and collecting & reporting of performance counters is a typical general-purpose computing task.
If a given application requires fault handling and/or performance counters this will be done by embedded software - Protocols. Due to their complex nature, (networking) protocols are best implemented in software. Especially when multiple interdependent protocols are running on a single system it is preferable to run these in software unless there are very stringent performance requirements.
Cost
Combinations of complex electronic and mechanical designs can be simplified or replaced through the use of embedded processors running software programs.
Efficiency
The right combination of hardware, ASIC/FPGA, and software optimizes the embedded solution in terms of real-estate, power consumption (heat), and performance.
Flexibility & Future Proof
Whereas hard-wired electronics can only be changed prior to manufacturing, embedded software and software, in general, can be changed, upgraded, and improved through version upgrades.
As can be seen from the points and examples provided, both embedded software implementations and hardware/FPGA implementations have their own strong points. Embedded software is fit to run large sets of conditional instructions on varied datasets where hardware and FPGA/ASIC implementations are better at performing linear, high-speed operations on large uniform datasets.
Note that hardware is specifically built for one specific data set and is costly to change. An FPGA is somewhat more flexible as it is programmable hardware that can be adapted for various data sets. Depending on cost, complexity, and efficiency, software might be the better solution.
Time critical steps can best be handled in hardware/ FPGA. Work can be handed off to software for the less time critical parts.
Embedded System Architecture
Given the wide variety of platforms and systems running embedded software, a few main architectures can be distinguished:
Control loop
The simplest of embedded software architectures is a control loop or bare metal software system. This software runs directly on an embedded processor, without any form of operating system. The program runs a top level loop that determines the program flow, in combination with interrupts being handled. The program itself is responsible for the management of all processor resources such as non-volatile memory and RAM.
Preemptive/Cooperative multitasking
In this type of embedded system, a small operating system layer provides the facilities to run multiple tasks in “parallel” on a single processor and the control structures to facilitate communication and coordination between tasks.
This architecture is normally employed on platforms without Memory Management Unit(MMU). This means that any code can (over)write the data of any other task. This calls for carefully developed software as an error can bring down the entire system.
Multi-threading
In this type of embedded system, a sophisticated, feature-rich operating system is used. This may be a common operating system with real-time extensions to improve real-time behavior or a specific full-featured Real-time operating system.
This type of system claims more resources than the other architectures discussed. However, it offers advantages in hardware support/drivers, software packages that can be integrated, closed or open source, and system/debugging facilities. An MMU is required, separating user space and kernel space processes, creating a more reliable system with portable code.
The application consists of one or more processes running one or more threads. Development takes place in languages like C, C++. Since additional features can be added easily, also interpreted languages like Java, Python and PHP are encountered on these systems.
Some more characteristics of these architectures are listed below.
AimValley Expertise
Aimvalley is a provider of Carrier-class Telecom and Datacom systems employing embedded software solutions tailored to each specific platform and application:
- From large, multiprocessor applications to small bare metal applications.
- BSP packages to support custom hardware platforms.
- High quality, thoroughly tested, robust software components.
- Experience with a wide variety of interfaces and protocols.
- Realizing a short time-to-market through re-use and portable code.
AimValley proven track record
Nearly all software projects done by AimValley involve embedded software. This has allowed us to build up a large collection of mature and high-quality components that can be used to create a head start for a new project.
AimValley embedded software contributes to the success of products developed on an OEM basis and is used in the following AimValley products: