An Embedded system is a combination of hardware and software designed to do a specific function or functions. You may also think of an embedded system as a controller that is part of a larger design. Embedded systems are used to control many devices or certain parts of gadgets in everyday use today, such as airplanes, medical equipment, household appliances, automobiles, cameras, TV’s, the list goes on, and TVs. Modern Embedded Systems are often based on microcontrollers, microprocessors, systems on chips (SoC), Field-programmable Gate Array (FPGA). These are integrated circuits that are designed to carry out specific computations within the embedded system. Now that we have defined the embedded system, let us now define embedded software for you. The embedded software are more likely named as as firmware which is a part of program which is embedded or inserted into a semiconductor chip , runs from there. It is more likely considered as Embedded software is due to the fact that the program is embedded or inserted into a chip called Flash or ROM and runs out of the chip. For a layman, Embedded software can be compared to Operating System on our computer. Just like the Operating System controls the computer’s working, the Embedded software controls the working of the device they are mounted.
Why Embedded System Software.
Why are so Embedded System Software so bug-ridden? There are a lot of theories that flourish about the software complexity and other contributing factors. In software, 90% correctness in code is an utter disaster, which results in an unusable products, even 99.9% correctness in code means we are shipping junk. Writing a 100 lines of code is a feat that can be achieved by anyone, but as the lines of code becomes more and more, perfection or even near perfection requires intensifying amount of investments of energy and time. This is where Embedded software comes into play. As Embedded software is dedicated to mostly doing a specific job, coding for Embedded software consists of much lesser code lines. Designing software for a particular task is more accurate compared to developing software for the whole system. The process consumes less memory and is smaller in size and consumes a minimal amount of power, and can thus help in cost-cutting. With lesser lines of code, the software has enhanced performance speed. Overall, the Embedded System Software’s’ most critical features are accuracy, reliability, improved performance speed, and lesser installation cost.
Past vs. Future
Microprocessors were first introduced in the 1970s. Since then, Embedded system technology has come a long way. The first microprocessors were 4-bit and 8-bit devices. Nowadays, one can even find 64-bit microprocessors. An embedded systems designer has a broader choice of microprocessors than ever before and must choose based upon functionality, specification, support, availability, and price. This increasingly wide range of devices has several possible impacts on the software designer. Suitable programming tools must be available to support this array of processors; the tools should be consistent from one device to another. In the earliest days of embedded systems, a single engineer typically undertook both hardware and software design. The software element of the earliest Embedded System represented only a small part of the entire effort of the whole development process, less than 5% to 10%. Although hardware design has become more complex in the last few years, the amount of software has grown drastically, now often being 70% to 80% of the total design effort. There was no choice of programming language for the earliest microprocessors of 4 and 8-bit. The assembler was the only option. It was not a big problem as the applications of Embedded System were relatively simple. For a higher-level design methodology the Unified Modeling Language (UML) has become the most popular choice
Embedded Software Development Cycle
An Embedded Software development life cycle is a out-and-out succession of events from requirement capture to product delivery. It is the whole process starting from requirement engineering to delivery of the final product, including maintenance. The life of this process is very short in embedded systems. Hence model selection for this process is essential. The process comprises of both hardware and software. You can select a waterfall, spiral, or agile model depending upon your skill. This involves several steps, as follows.
- Planning: Capture Product Requirement Specifications Document
- Derive Software or Hardware Requirements documents using PRD
- Project planning and tracking: Resource planning, Budget planning, Risk plan and mitigation, Travel Plan, SCM plan, Test Resource identification, and planning, etc
- Design: Involves Low level and High-level Designs.
- Implementations- Coding, debugging, fixing issues, debugging hardware, Writing test code to test hardware, DIT.
- Testing -System Integration Testing Cycles (Generally three cycles)
- Beta Release for field trail
- Final Release and Addressing field issues
Challenges to Embedded Software Development
Though having an embedded system is advantageous, there are still many problems that a software designer faces in the development process of the Embedded system software. Some of the common problems include
Compatibility: Embedded software needs to be compatible with different versions and designs of hardware pieces. If the software is not compatible with the hardware, the purpose of having an embedded system is lost.
Debugging: Debugging is a big issue for embedded systems. Over the years, Embedded Software Developers are concerned that embedded projects carry an additional debugging and consume up to 40% of the developer’s time. When multiplied with different embedded components on the whole system, the process is time-consuming.
Security: Security is the most critical concern for an embedded system. Risks grow exponentially, especially for devices connected by the internet and interconnect with each other, thus increasing the risk of being hacked.
Increasing Complexity of the Application Space: In the recent past, an embedded system would be either small or simple, or the composition of almost non-interacting imported and assembled components. The complexity of functions will increase drastically. Increasing complexity is making the present design methodologies rapidly obsolete.
Role in Future Embedded Systems
As we prepare to end 2020, there are several diverse areas where embedded systems change lives forever and define how humans would interact with machines. There are several embedded systems providers who have come up with cutting-edge technologies that seem set to show us how embedded systems will be used in the near and distant future. Let us list down a few spheres in which embedded systems have turned current technology on its head and look set to define the future:
- AI – artificial intelligence, which is aided by machine learning
- VR – virtual reality
- AR – augmented reality
- IoT – Internet of Things
The general trend for the future is that more systems and objects will contain computer-controlled components. The increasing role of embedded electronics in automobiles, trains, planes, power systems, military systems, consumer electronics, and other telecommunication systems is increasing rapidly. However, the set of applications that use embedded systems will continue to grow exponentially.