The world is well groomed for the next big bang – The Internet of Things. Gartner, world’s leading research and advisory company, states that 14.2 billion connected things will be in use in 2019, and that total will reach 25 billion by 2021. As a customer, IoT is all around us! The adoption of IoT is already began in various applications – smart home, smart industries and IoT is reached agriculture too! IoT is constantly getting bigger and better. However from an Engineer’s perspective there is always a confusion when it comes to differentiating Embedded System programming and IoT programming. Thanks to the vast nature of IoT it has become a huge puzzle to solve.
So let us throw some light on this topic by clearly understanding the differences.
What is an Embedded System?
Let us first define what an Embedded System is!
While the textbook definition might say “Embedded System it is a combination of hardware and software” which “performs a specific task”. While the larger part of the definition still holds good, Embedded Systems have evolved over the years. An Embedded System can be defined as a combination of customized hardware and customized software. Customized hardware is the personalized design to suit your specific system with specific set of requirements. Customized software (also known as Embedded Firmware) is the software piece that gives life to the hardware. Developers conceptualize, write and cultivate the source code in order to develop a program that can be perform desired functionality.
Compared to General Purpose System (GPS), Embedded Systems (ES) are constrained in terms of resources. This means it will have lesser computing power, memory and lesser peripherals compared to a General Purpose System (GPS). For example your laptop might have 4GB of RAM (which is a GPS) whereas your wearable device (ES) might hardly have 200 MB of RAM. This makes programming ES is much different and challenging than GPS.
Let us take an example of mobile phones of a particular brand. They will release mobile phones in different models. Each of them will have a specific hardware specification (storage space, screen type, resolution, memory size, camera pixels etc…). The software requirements (Version of OS say Android, Number of applications, Additional security features) purely depend on the hardware capability. What applies to model X will not be applicable for model Y, which exactly is nothing but the customized nature of Embedded System.
Embedded System – with and without OS:
Taking a step further, Embedded systems can be with or without an Operating System(OS) running in it. The devices that run whose functions are elementary and the control is not challenging are the embedded system without operating system. For example, think about a simple temperature sensing device. The functionality of Embedded Software is very simple. It has to read the sensor data and display them in the output say Seven Segment Display (SSD). The programming logic and coding is very simple in nature with single task / application running in the system. Hence this can be a system running without an OS. From hardware perspective a simple micro-controller connected with peripheral devices would be sufficient for this.
On the contrary take another example say home set-top box. This device has to do multiple task or applications in terms of streaming, storing, channel handling, subscription information, user information and many. In order to achieve them an Operating System is required which can enable multi-tasking by managing resources efficiently. From hardware perspective this will have more powerful microprocessors with peripheral devices with higher capacity. These operating systems are typically called as Embedded Operating Systems (EOS). Examples of EOS include Linux, Android and Symbian. If the nature of application has higher time constraint (ex: Robots) then the EOS requires additional features. Such operating systems are called as Real Time Operating Systems (RTOS). Some of the examples of RTOS include FreeRTOS, Mbed OS and VxWorks.
Embedded System Programming:
Now that we understand definition of Embedded System and OS, the next steps if abot programming Embedded Systems. In order to program an Embedded system two major aspects comes into picture. They are programming languages and target hardware. Let us look into them in detail.
When it comes to programming languages majority of the Embedded Systems are programmed using three languages:
- Assembly language: An assembly language is any low level programming language in which there is a strong coherence between the program’s statement and the architecture’s machine code.
- C programming language: C language is got a great acceptance for embedded systems. The C language is more reliable, scalable and portable and much easier to understand. It has got some unique set of features (ex: pointers) and provides the best optimized machine code. Because of such reasons it is called as “middle level language” used in most of the Embedded Systems.
- C++ programming language: C++ is a high level object oriented language that benefits programmers write fast, portable programs. C++ contributes rich library support in the form of Standard Template Library.
Now let us take a look into target hardware. As discussed in the previous section, the target hardware can or cannot have OS running on them. Some of the examples include:
- Non OS based hardware platform (Micro-controllers) – PIC, Atmel, 8086
- OS based hardware platforms (Micro-processors) – ARM, x86
Based on these family of controllers / processors, target hardware platforms are built. Some of the commonly used platforms are Arduino, Raspberry Pi, Beaglebone, UDOO and many more. Typically developers will develop their prototype in these hardware and eventually move onto customized hardware for actual development and mass-production. These hardware platforms typically have support for Cross-compilers, Integrated Development Environment (IDE), Debuggers, Code profilers and many such facilities to make the development process faster and easier.
Let us talk about Internet Of Things (IoT):
Let us now talk about IoT and understand how different it is from Embedded System programming.
IoT is a system of relevant computing devices that provide with unique identifier and the ability to transfer the data over a network. IoT is nothing but bringing things to life. A device is connected to internet and the usage of that device is made easy. It consist of five major elements which are called out in the diagram below.
Difference between Embedded System programming and IoT programming:
Here goes the answer or difference: Embedded system programming is subset of Internet of Things (IoT) programming. Let us take a practical view on this.
As you saw in the diagram above IoT consists of IoT devices, IoT gateway and many other elements. Where as IoT device and IoT gateway are the elementary components of IoT, which are nothing but an Embedded system. The IoT device will be a lightweight device which will perform a specific functionality (ex: street light monitoring device). Since these devices are deployed in large scale it makes sense to keep them small and cost effective as well. Hence IoT devices are Embedded Systems without having OS running in it.
Moving further, IoT gateway (ex: gateway to monitor multiple street light monitoring devices) is more powerful device which connects / monitors multiple IoT devices and also connects them with the cloud. This requires IoT device to run an Operating System in it. These are EOS or RTOS as explained in the previous section. To meet some of the IoT specific requirements (ex: security) OS providers are making changes and releasing a flavour to meet IoT needs. Android Things, Amazon FreeRTOS, RIOT OS are some of the examples of IoT specific OS.
From programming perspective both IoT device and IoT gateway will follow the same approach as mentioned above for Embedded Systems. It will use any programming language (Assembly / C / C++) with a target platform and program the required functionality. By doing this both IoT device and IoT gateway can achieve the desired functionality. Along with this Embedded System developer need to learn how to integrate IoT gateway into the cloud via TCP/IP networking platform. By this the role of Embedded developer is not only to have a product view but also have a solution view by integrating his devices and gateway in order to make an end-to-end IoT use case work.
IoT is a big paradigm that tries to integrate multiple thing together. Embedded Systems are part of the overall IoT by taking two key components in terms of IoT devices and IoT gateway. The IoT devices are smaller and specific in nature which will not have OS running them. However IoT gateway are larger and generic in nature which will have OS running them. These OS can come in multiple flavors namely Embedded OS, IoT OS or RTOS. With this Embedded programming becomes a part of IoT programming.
From a Embedded system developer’s perspective, programming IoT device or IoT gateway will remain the same. They will use a programming language (like C) and use a target platform in order to develop them. However the role of Embedded system developer has grown more in IoT domain, as he/she not only has to develop the device (product view) but also integrate them into the cloud (solution view) in order to have an end-to-end IoT solution work.
Thanks to IoT, it’s time for Embedded system developer transition to solution developer from a product developer!