Before getting into these blocks, we need to understand that programming embedded systems is very much different from application programming. Also embedded systems programming has a set of challenges because of the following reasons:
From a programmer’s perspective there are four building blocks for any system namely boot-loader, operating system, device drivers, networking subsystem apart from the device’s main functionality. When the system gets powered up the boot-loader is the first program that gets activated from the non-volatile memory. This boot loader will vary from one system to another, because it mainly depends on the way system is configured. This boot loader will in turn revoke the operating system by calling its entry point, which in-turn initializes various operating system services (memory, tasks, scheduler etc…).
Once the operating system services are initialized, all the low level device drivers followed by other subsystems (like networking) are brought up. At this point we can say that the platform is built for the system. After this initialization is complete, the system would be in a position to perform its expected functionality. This functionality will vary from device to device as each system is built for a different purpose. Say for example a router’s main functionality would be to route the packets but a microcontroller’s functionality may be measuring the temperature using a sensor. Finally functionality programming is the main core of embedded system which requires a powerful programming language.
In spite of so many new programming languages, 85% of embedded systems are built using C language. This is mainly because it produces the most optimal machine code. Here is where Data Structure programming plays the critical role. If the above mentioned blocks can be equated to various organs of human body, data structure programming is the life-blood of that body. Without sound data structure programming no embedded systems can be built. Sounds different? Read on.
As mentioned in the beginning of this article, embedded systems have a very limited amount of memory. So using the memory optimally and freeing them plays a very vital role. Since data structures (especially in C) provide this power to the programmers, it becomes the life-blood of the system. If you get a chance to look into the code base of any embedded system, you will come across Abstract Data Types (ADTs) liked lists, stacks, queues and graphs very frequently. Also other subsystems (say for example networking) provide certain interface or framework for programmers. It is up to the programmers to make use of them and build the expected functionality. The networking subsystem provides the ‘socket’ interface and learning it is comparatively easy. But what exactly the programmer wants to do with sockets? How is he going to program the network protocol using sockets? The answer is once again data structures. That’s why through understanding and programming knowledge of data structures is the key building any embedded system.
To conclude understanding the various frameworks and data structure programming are the fundamental building blocks of any embedded system.