1. Introduction
1.1 Embedded Systems
The definition embedded system covers a broad range of devices used in almost all parts of our lives. Therefore, they have become indispensable tools in todays world. Moreover, as the devices we use become more intelligent, they will consist of one or many embedded systems in them. Since there are various embedded systems used in operation, it may be unfair to give a strict and limiting description for such a broad range of devices. However, we can make some general definitions as follows.
We can think of an embedded system as a computing device developed for solving a specific problem. To do so, it interacts with the environment as acquiring data, processes the acquired data, and produces the corresponding output accordingly. To perform all these operations, joint usage of hardware and software becomes mandatory. Hence, the designer developing the embedded system must know how the hardware works and how the dedicated software should be formed for it. More importantly, the designer should grasp the idea of jointly using hardware and software to get the best from the embedded system.
The embedded system will be working in stand-alone form most of the times. It may communicate with other nearby devices as with Internet of Things (IoT) applications. However, this does not mean that there is a server and all embedded systems connect to it to perform their operations. On the contrary, each embedded system can work in stand-alone form and share data to perform a complex operation.
Since the embedded system works in stand-alone form most of the times, it depends on battery or energy harvesting module to operate. Therefore, energy dissipation becomes one of the main concerns in embedded system development. To note here, some embedded systems may be supplied by the main power line. However, the recent trend is forming a system such that it works independently. This leads to its deployment to remote locations where no main power line is available.
From our perspective, we can group embedded systems based on their hardware properties as follows. Field-programmable gate arrays (FPGA) form the first group. They provide the most flexible but hard to master hardware. Due to their properties, they have been extensively used in forming custom embedded systems at gate level. Therefore, we do not program an FPGA. Instead, we describe the system to be constructed by a hardware description language such as Verilog and VHDL.
The second hardware group in forming embedded systems consists of microcontrollers. A microcontroller has limited memory and computation power. However, it can be programmed in assembly or high-level language to perform the operations on it. The microcontroller also offers a cheap and energy efficient solution for embedded system formation. The most well-known microcontroller systems can be counted as Arduino and Arm Cortex-M based ones.
The microprocessors form the third embedded system group. In these, embedded Linux is used most of the times to control and organize operations. This also leads to graphical user interface (GUI) usage on them. Microprocessors also have fairly high memory and computation power compared to microcontrollers. However, energy dissipation and stand-alone usage are the main bottlenecks for them. The most well-known microprocessor-based embedded systems are the Raspberry Pi family and its clones.
The fourth hardware group for embedded systems consists of system on chip (SoC) devices. They have FPGA and microprocessor modules on them. Hence, they aim to benefit from both device properties. However, SoC programming and usage are still not as easy as a microcontroller (or microprocessor).
The mentioned four hardware groups have their dedicated development boards. Hence, they can be used easily in developing a prototype embedded system. They use cross compilers such that the code is written and debugged on PC. Then, it is embedded on the system. To note here, there is no GUI on an embedded system by default except embedded Linux-based boards.
Recently, new hardware options have emerged for embedded systems. One option is the joint usage of a microcontroller and microprocessor on the same dye. STMicroelectronics recently offered such devices containing both Arm Cortex-A and Cortex-M CPUs. Hence, each can be used for specific applications. The next option is the development boards consisting of graphical processing units (GPU). These devices allow parallel processing via high-level programming languages. The recent advances in deep learning and neural networks also led to devices consisting of neural processing units (NPU or TPU) dedicated to neural network implementation. Such units are becoming part of almost all embedded systems nowadays.