Embedded systems serve as a bridge between the traditional hardware and software. With artificial intelligence (AI), edge computing, and other advancements, the embedded systems are experiencing meteoric growth with many vast and interdisciplinary sub-fields. So, the term Embedded Systems means different to different people in the industry. This article will help gain some important perspectives about this field and understand the nitty-gritty involved.
Venn diagrams and infographics are a great way to describe the interdisciplinary fields of embedded systems. Venn diagrams depict the nature of embedded systems based on the experiences of different designers. It is interesting to note that most of these diagrams are different from each other in certain aspects, but also have striking similarities.
Some examples are given in the figures that follow.
After looking at the diagrams, you will notice that in many cases embedded systems constitute the overlap between computer science and electrical engineering. So, the question that comes to mind is: What are the disciplines or areas of engineering that one must be familiar with in order to work with embedded systems?
Because embedded systems require programming, we need a background in computer science. We should be able to write reliable and efficient code. And because we shall be interacting with electronic devices like sensors and actuators, we need a sound knowledge of electronics.
Diversifications That Make Embedded Systems Intriguing | ||
Project Domain | Some Domain-specific Skills/Requirements | The Why |
Mining and marine | Marine environment, Material engineering | The marine environment, particularly saline water and temperature, is tricky for embedded technology. The device will be extensively corroded the instant it is deployed in the sea, if it is not properly sealed. |
Controllers (like a traffic light controller for vehicles or trains) | Roadway/ Railway plans, Traffic light standards | In order to develop optimal controllers for transportation systems, one needs to know all rules and regulations that govern such systems. |
Handheld devices | Design, Ergonomics | For example, you need to be familiar with text fonts and work closely with a font designer. Also, your PCB needs to fit in the handheld enclosure, so industrial design plays a major role here. |
Automotive devices | SAE standards, SAE standards, Mechanical design, Thermal management |
You need to design devices that can withstand harsh conditions in a vehicle, like automotive vibrations, higher temperatures, etc. Also, you need to be aware of industry standards and practices, especially regional and customer-specific ones. |
IoT and Drones | Device security, Signal conditioning | Any connected equipment, from refrigerators to factory robots, can be hacked if IoT security is lacking. Hackers can take over the object’s functioning and steal the user’s digital data once they gain control. Hence, security is important. |
Robotics | Math, Control systems | Math, mapping, path planning, and control system skills are all essential in robotics. |
AI | Computer vision | For applications involving autonomous driving, mobile robots, etc, computer vision plays a major role. |
Monitoring systems (like greenhouse monitoring, soil condition monitoring, and inventory management) | Networks, Security, Control systems | Wherever a controlled environment is needed, like in monitoring systems, a clear understanding of control variables is needed. Even here, security plays a major role because a lot of sensitive user data is involved. |
That being said, you do not need to be a computer science graduate to do decent embedded systems development work. However, having a basic understanding of computer science may greatly assist you in organising your code into self-contained, reusable modules that are self-explanatory, easy to comprehend, and follow. Your code needs to be good enough for others (or even you) to extract source files that can be reused in other projects.
Many professionals working in the field of embedded systems confirm this thesis. Sundar Balasubramanian, an embedded systems professional with over two decades of experience says, “Knowing programming languages such as C or C++ to be used in embedded systems is enough, especially if you are not working on RTOS. If you’re working on RTOS, even then an extremely deep knowledge of CS (computer science) is not needed. In my two decades of experience with five years in embedded systems exhaustively, I feel both knowhow (electronics and computer science) is important for both types of engineers. Domain knowledge comes from work experience anyway.”
Hardware designer Petr Dvořák also agrees with this. “I have been weak in computer science and I had decided not so long ago I had to give up programming,” he says. To be a great embedded engineer, it is okay if you are not the best programmer in town.
The project-specific field of study
Besides the two main fields that influence embedded systems—computer science and electrical engineering—depending on the device or project you are working on a third field of study often comes into the picture.
For example, if you are working in the domain of robotics, you would require good mathematics skills and a strong knowledge of control systems. Similarly, having knowledge of control systems is very important if you are working on smart systems, like greenhouse monitoring, where you have to create controlled environments for greenhouses. Computer vision and AI are critical for applications like autonomous driving.
Therefore, a certain amount of knowledge outside embedded systems—or probably even outside engineering—is needed.
What would be your third field?
The coolest part about embedded design is that each project offers fresh opportunities for learning. It necessitates the embedded designer’s involvement in a variety of fields. There are lots of diversifications (see table) that make it such an intriguing field.
That being said, here are some technical skills an embedded systems developer needs to have, irrespective of the project domain:
- Computer architecture
- Understanding peripherals, reference manuals, datasheets
- Protocols, networking, and moving data
- Programming languages and structure
- Validation and verification of electronic boards
- PCB designing
- Quality assurance and compliance
- Power and battery management
Different job types
In a broader sense, your expertise and skillset in embedded systems would depend on the type of your job—whether it is firmware or purely hardware, or both. “Good programming logic, if you work in firmware, and an extremely good electronics know-how as per professional need (such as PCB designing, layout, understanding NETLIST), if you work exclusively in hardware, is necessary,” says Balasubramanian.
Embedded hardware engineering
Embedded hardware engineers are in charge of all areas of electrical system design, including high-speed digital circuits, power management, PCB layouts, and thermal management. They work with the algorithm and software teams to design and build high-performance computing platforms. Also, testing the hardware is a critical part of embedded hardware development.
Embedded hardware systems are designed, implemented, and tested on a regular basis by hardware test engineers. They employ numerous testing methods and keep track of hardware modifications and hardware-related issues. They regularly test systems to eliminate potential faults and collaborate with cross-functional teams to give system-level support (mechanical, software, hardware, etc).
Embedded firmware engineering
Firmware is a subset of software. It is often a program that controls an embedded system. Hence, firmware engineering includes both hardware and software. It might be part of a standalone product (code that is embedded into very small systems, such as a monitor, a mouse, or a washing machine) or it can run on a system that also runs higher-level software. For example, a laptop will contain a lot of firmware in the form of device drivers, etc.
While working closely with the hardware designers, a firmware engineer will focus mainly on the firmware. Firmware engineers create low-level software that can interact directly with the hardware, such as converting analogue sensor signals to digital data and managing communications protocols. We can say that firmware is a low-level interface to the hardware.
Embedded software engineering
There is a lot of uncertainty and vagueness when it comes to differentiating between an embedded software engineer and a firmware engineer. Many new types of embedded devices have emerged in recent years—devices that are more complex than traditional embedded systems but less complex than personal computers. These utilise file systems on their flash to put programs into memory for execution, and they run larger operating systems like Linux and UNIX.
Embedded software programmers deal with these types of systems as well as old-style firmware on occasion. Routers, smart TVs, and even smartphones and tablets are among the products they work on. Embedded software is basically software that is designed for a specific purpose and has a limited user interface. It will almost never be general-purpose, even if it is highly complicated.
Embedded systems engineering
Embedded systems engineers can create both hardware and firmware, and deal with tradeoffs in order to achieve the highest performance at the lowest cost. On very small devices (of which there are many), we can see them mostly doing hardware and firmware design. Overall, they handle hardware design and then entire hardware-software integration.
Systems architecture is another main aspect that these engineers deal with on a regular basis. The design, development, production, testing, and maintenance of embedded systems are some of their responsibilities. “Simply put, embedded hardware engineers work on the hardware side, and embedded software engineers work on the software/firmware side. Embedded systems engineers work on both,” says Rosmianto Aji Saputro, Senior Embedded Engineer at ZebraX.
Non-technical skills
Irrespective of your profession, you can never ignore soft skills. Some soft skills important for embedded system designers are:
- Communication skills
- Marketing
- User research
- Quality assurance
- Time management
- Problem-solving ability
- Ability to learn outside their comfort zone
- Creativity
The author, Aaryaa Padhyegurjar, is an Industry 4.0 enthusiast at EFY with a keen interest in innovation and research.