Hello and welcome. In this post I would like to introduce you to the topic of embedded systems architecture.

Architecture?! That has something to do with the appearance of buildings.

But these basic tasks and principles can be applied to any other creative activity. So also to the development of embedded systems. The more and more complex systems require a very well thought-out structure for a stable and large range of functions.

With the introduction of a good system architecture under the transferred use of the methods from the construction art some advantages result. A basic framework can be quickly transferred to new projects and only a few adjustments have to be made at the application level. The division into elements facilitates the understanding of a system. This makes it easier for an outsider to see whether all requirements are implemented. Tasks are grouped into meaningful blocks and can be easily replaced or reused.

In Figure 1, I have given you an example of a higher-level architecture for an embedded system. There, there is a division into five layers. Each of these layers in turn has its own architecture concept.

Figure 1: Embedded Systems Layers

Figure 1: Embedded Systems Layers

I don’t want to go into detail about the hardware layer here. It consists of the components used: Processor, circuit board and the connections for peripheral devices. This layer is almost always designed in cooperation with a hardware developer. The embedded developer tends to just specify the requirements.

Hardware Abstraction Layer

The hardware abstraction layer (HAL) is located between the hardware of the embedded system and the operating system. In general, the HAL contains the boot loader, the board support package, device drivers, and other components.

The boot loader is executed before the operating system kernel is executed. It completes the initialization of the hardware, creates the image of the memory area, and thus enables the hardware and software environment to reach a suitable state for the system kernel to boot. From the end user’s perspective, the boot loader is used to load the operating system.

The BSP abstracts the hardware operation, making the operating system independent of the hardware and able to run on different hardware architectures. A separate BSP must be created for each operating system. For example, a VxWorks BSP and a Windows CE BSP have similar functions for an embedded hardware development board, but have completely different architectures and interfaces. The BSP as a software module is rather unknown for desktop PCs, since the hardware architecture (Intel x86, among others) hardly differs.

In addition, device drivers enable the operating system to shield the differences between hardware components and peripherals and provide a uniform software interface for operating the hardware.

Operating System Layer

An operating system is a software system for the uniform management of hardware resources. It abstracts many hardware functions and makes them available to applications in the form of services. Scheduling, file synchronization and networking are the most common services provided by the operating system.

In embedded systems, the operating system has its own specific requirements: Stability, adaptability, modularity and real-time processing.

The most common operating systems in the embedded field are Embedded Linux, Windows CE, VxWorks, Android or Ubuntu. Embedded Linux is a general purpose Linux kernel that has been tailored, customized and modified for mobile and embedded products. Windows CE is a customizable embedded operating system that Microsoft has introduced for a variety of embedded systems and products. VxWorks, a real-time embedded operating system from Wind River. With its excellent real-time capabilities and reliable features, it is used in communications, military, aerospace, and other fields that require sophisticated real-time technologies. VxWorks is used in particular in NASA’s Mars probes.

System Service Layer

The system service layer is the service interface that the operating system provides for the application. Applications can access various services provided by the operating system through this interface. In a sense, it plays the role of a link between the operating system and the applications.

This layer generally includes the file system, graphical user interface, task manager, etc. A GUI library (for example, the X Window System) provides the application with various GUI programming interfaces that allow the application to interact with the user through application windows, menus, dialog boxes, and other graphical forms instead of the command line.

Application Layer

The application, in the top layer of the software hierarchy, implements the system functionality and the business logic. From a functional point of view, all levels of modules in the application aim to execute system functions. From a system perspective, each application is a separate process. Typically, applications run at lower priority and use the API system schedule provided by the operating system to interact with the operating system.

Done…

That was an exhausting trip into system architecture. I hope I was able to give you a good overview and show you how useful a good concept is.

How do you feel about the use of architectures in embedded system development? Does it make the system unnecessarily complex or do the advantages outweigh the disadvantages?

I wish you maximum success!