The embedded software or firmware is the brain of an embedded device. This type of software, however, works differently than conventional forms found on PCs or mobile devices — these are generic and work identically on such operating systems. PC software runs without directly accessing the underlying hardware.
The purpose of embedded software works alternatively in that it’s written explicitly for a type of hardware. The programs are typically unique and specific to a device or product and is the only software running on the device. Essentially, it’s the final machine code that directly accesses the underlying controller or processor and the built-in and/or connected peripherals; embedded software gives life to the hardware, defining the purpose of the device.
Embedded software includes compiling high-level programming languages into machine code that’s uploaded to the memory of the target microcontroller or processor. While “C” is the most common (more than 80% of embedded software is written in C), several other languages like Python, Java, JavaScript, C++, Verilog, Rust, and low-level assembly languages are also used.
Software development tools — which integrate the code on embedded devices — include a code editor, linker, debugger, and compiler/assembler.
The code editor writes and edits the source code for the embedded software. This typically includes a collection of several modules or files. For example, the main code might rely on multiple libraries or header files to implement task-specific logic. The linker combines the main code and all the dependencies into one executable unit. The debugger ensures there are no syntactical or logical errors in the code. The compiler or assembler converts the source code into the final implementable machine code, converting it directly into machine code. The assembler interprets the code line by line and converts the source code first into an object code.
If there are no errors in the code, the object code is ultimately converted into a final executable machine code. In this article, we’ll explore the top software development tools available for developing embedded software.
Arduino
Arduino IDE is an open-source integrated development environment for creating embedded software. The tool was made to program Arduino boards, which have become incredibly popular and offer a large support community.
One reason for this popularity is the source code can be easily ported into many commercial controllers. In fact, several emerging microcontroller platforms like ESP are designed in compliance with an Arduino ecosystem; they can be easily programmed on Arduino IDE by installing an add-on library.
Arduino IDE, however, is already packed with a host of libraries and example codes. The IDE can even be extended to support new platforms.
PyCharm
If C is the dominant programming language in the embedded world, Python is next in line. Since IoT and AI have converged with embedded software, Python has become an important programming language to implement network communication, machine learning, and deep learning on edge devices.
For example, CCTVs installed in many airports have a local database supporting criminal suspects’ facial recognition. Often the image recognition and comparison tools are performed thanks to Python software.
PyCharm is an integrated development environment by a Czech company, JetBrains. It was primarily developed for Python programming though it supports many other programming languages, including HTML/CSS, JavaScript, Cython, TypeScript, etc. The IDE is available for Microsoft Windows, Mac OS, and Linux. Three editions are available, including a community, professional, and educational platform.
As a software development tool for Python-based embedded applications, PyCharm offers more than most embedded systems software. It includes advanced features like error highlighting, auto-completion, debugging, automatic code refactoring, project management, virtual machines, and integrated software testing.
If you’re developing software that needs to communicate with a cloud service or network server, this IDE supports frameworks like Django, Flask, Pyramid, etc.
Webstorm
Webstorm is another integrated development environment from JetBrains, primarily for programming in JavaScript. JavaScript is the dominant programming language for serverless web development.
Many IoT applications use Node.js plus Express for network programming in the backend and do the front end over Angular or React. All involve programming in only one language — JavaScript. As full-stack developers are already programming back- and front-end of web-based embedded applications in JavaScript, the language is an obvious choice for embedded hardware. JavaScript also has rich libraries that support IoT, AI, and deep learning.
Eclipse
Initially developed for software development in Java, Eclipse is an open-source IDE that can be used to code applications in several programming languages, including C++, Java, Python, PHP, etc. It offers dedicated versions for all major programming languages, and the IDE can be extended via plug-ins. Eclipse is the tool of choice for programming automotive embedded software.
Visual Studio
Visual Studio is popular for programming desktop, mobile, and embedded software applications. It comes with a Visual C++ extension for IoT applications. The C code can be compiled to upload on microcontrollers and Linux-based embedded devices.
With Visual Studio for IoT, developers can directly code, edit, and debug Linux machines. There are also several third-party compilers and tools that enable the programming of many different embedded applications — the IDE can be interfaced with the GNU toolchain via VisualGDB, allowing for the rapid development and debugging of embedded firmware.
Qt Creator
The Qt Creator is an excellent tool for programming embedded applications in C++, JavaScript, and QML. Users can easily create 2D and 3D interfaces and user spaces for embedded applications.
As a software development tool, it offers several advanced features like syntax highlighting, auto-completion, integrated testing, debugging, and a virtual keyboard. The IDE includes a cross-compiler and supports on-device debugging for several hardware platforms. It’s supported and used by several top electronics manufacturers across multiple verticals, including automotive, consumer electronics, biomedical equipment, automation, and IoT.
MATLAB & Simulink
Together, MATLAB and Simulink are a common toolset among electrical and electronics engineers. Simulink is typically used for model-based designs supporting system-level design, simulation, automatic code generation, testing, and verification of embedded systems.
MATLAB comprises a large collection of tools and programming interfaces for numerical computing. Embedded engineers use MATLAB to create user interfaces, data visualization, data analysis, and implement programming algorithms. The software supports interfacing with programs written in all major languages, including C++, Java, Python, C#, and others.
Using MATLAB and Simulink, it’s possible to design and code embedded applications from prototyping to production.
ARM Keil
The ARM Keil is an integrated development environment for programming ARM-based microcontrollers and hardware platforms that supports C/C++. The IDE includes a code editor, linkers, simulators, debuggers, assemblers, and C++ compilers. The IDE works well with all Cortex and ARM-based evaluation boards and has many libraries, third-party tools, and example codes.
This software can be used for programming evaluation boards and commercial microcontrollers. It can be used for the embedded software development of everything from hobby projects to industrial applications; the tool is simplistic enough for students and effective enough for professionals.
MPLAB X
MPLAB is a newer cross-platform tool for Microsoft Windows, Mac OS, and Linux. The IDE can program PIC microcontrollers and digital signal processors from Microchip. The PIC is a microcontroller family that embedded systems manufacturers widely use. The IDE supports embedded software development using C/C++ for PIC, AVR, SAM, dsPIC, and CEC microcontrollers. It also includes advanced features like syntax highlighting, auto-completion, mark occurrences, project management, and integrated testing.
NetBeans
NetBeans is an integrated development environment for programming in Java v8 and supports other programming languages like C/C++, HTML, CSS, JavaScript, and PHP. The IDE is often preferred for developing IoT applications written in Java. There are many high-availability and scalable cloud services and platforms based on Java. Java is a rich programming language that’s widely used for the development of high-end desktop, mobile, server, and embedded applications.