Embedded systems and their applications
An embedded system is a computer system that can be used to perform a special purpose or a dedicated function and you can find many applications of embedded systems, e.g., in automotive: ignition system, engine control, auto parking system, braking system like ABS, EBD and so on. Other examples of embedded systems are modern consumer electronics products, e.g., smart TVs, digital cameras, toasters, ovens and toys.
Also, embedded systems are used in the industrial field, but the focus here is on control systems and robotics.
Embedded systems vs. general purpose systems
As mentioned before, an embedded system is a computer system designed to perform a special function but what are the other differences between a general purpose system like your PC and an embedded system? Embedded systems have very limited resources, and by resources I mean the hardware and the software functionality when comparing these resources to those of a general personal computer (PC). When talking about hardware limitations, these hardware specifications will affect the computing performance as well as memory and power functionality without operating system. Embedded systems require more quality and reliability. Some embedded devices require a very high level of quality and reliability, such as a car’s engine controller crashing while driving on a freeway or something wrong happening with a medical device during surgery that might cause a fatal result.
If you would like to start developing or designing an embedded system, you should be aware of embedded system design principles, so let’s talk about some software development models for embedded systems.
The big bang model: Use this model for one shoot project or a very small project because this model doesn’t require any planning or processes during or after development.
The code and fix model: You can use this model when there are defined clear product requirements without any formal processes before the development.
The Waterfall model: This model can be used if you develop a very large project that starts a process based on the previous step.
The Spiral model: This model is like the waterfall model but in this model you will get a feedback after every step or process.
Now it’s time to talk about embedded software architectures.
The architecture of an embedded system is an abstraction of an embedded device, i.e., the architecture will focus on the high-level design without going deeper into the low level. Thus, the architecture will not show the detailed design including the hardware circuit design, source code, at this level the hardware and software components in the design as interacting elements. Each architecture level's details are represented in the form of structures. A structure is like a “snapshot” of your system’s hardware and software at your design time. So we can imagine the architecture of an embedded system as follows:
Module that contains the following subsystems and components (Layers, Kernel, virtual machine, channel architecture)
Component and connector contains the following (client/server, process, memory, safety, and reliability)
Allocation that contains the following (work assignment, implementation, and deployment)
Every embedded system model should consist of a hardware layer, a system software layer, and an application software layer.
Programming languages and embedded systems
There is no perfect language for developing embedded system software and you should bear in mind that every system software can be based on one or more languages, e.g., Java and.NET Framework, that can add additional elements to your system architecture. Other languages can also be based upon a variety of standards like ANSI C, Kernighan and Richie C. The hardware components in your embedded systems will only perform the following functions: transmit, store and execute machine code. Machine code is a language that consists of ones and zeros but this language has been a very hard language for programmers. Over time, programming languages such as C, C++, and Python made the development of a computer system much easier and these languages are more similar to human languages; also they are independent of the hardware. On the other hand, the low-level languages are very close to the hardware, so we can categorize the languages into generations.
The first generation: machine code that just consists of (0, 1)
The second generation: assembly language (this language depends on the hardware architecture)
The third generation: high-level languages (these languages use more English phrases like C, Pascal and so on)
The fourth generation: very high-level languages (they are almost object-oriented languages like Java, C++, C#)
The fifth generation: natural languages (these languages are similar to our conversational language and typically used in the artificial intelligence field and not used yet in the embedded systems domain)
Embedded computer vision systems
Embedded computer vision systems are one of the hottest branches in the computer vision field. A vision systems is like our human vision system that allows machines to see. This technology has a lot of applications, especially in automotive, medicine, security and many more.
What exactly is an embedded computer vision system?
Embedded computer vision is a branch of computer vision that mainly focusses on developing vision algorithms to run on embedded systems, but you should keep in mind the limitation of processing power and low battery consumption when developing a computer vision application on an embedded system.
What do you need to start building an embedded vision system?
To start working with an embedded vision system you need the following components: a small camera, a processing board and a cable.
There are many reasons to use an embedded vision system: The main reason is that the components are very cheap compared to a general purpose vision system. In addition, they are small and can be integrated into other systems easily and they don’t use a lot of power.
Embedded vision systems and automotive applications
Today's camera systems in cars are used both for surveillance of the car's interior and its surroundings. The rear camera assists the driver by displaying a live video stream on a monitor system. This camera also uses advanced functions based on computer vision technology, e.g. the high beam assist function. But in these systems, the video is not displayed, just a specific function is directly derived from the image. Additionally, cameras are used in the interior of the car to monitor and detect the state of the driver and to perform control functions, for example, gesture and gaze control.
Embedded computer vision has many applications that can make our life much easier and safer. In the near future, there will be self-driving cars on our roads thanks to embedded systems and computer vision technologies.