Basic Software Techniques for
Embedded Applications
Embedded Processor Market
Tied to Advances in Semiconductors
A typical chip in near future
50 square millimeters
50 million transistors
1-10 GHz, 100-1000 MOP/sq mm, 10-100 MIPS/mW
Cost is almost independent of functionality
10,000 units/wafer, 20K wafers/month
Processor, MEMS(micro-electromechanical system), Networking, Wireless,
Memory
So there is a strong incentive to port your application, system, box to the “chip”
Trends in Embedded Systems
Increasing code size
average code size: 16-64KB in 1992, 64K-512KB in 1996
migration from hand (assembly) coding to high-level languages
Reuse of hardware and software components
processors (micro-controllers, DSPs)
software components (drivers)
Increasing integration and system complexity
integration of RF, DSP, network interfaces
32-bit processors, IO processors (I2O)
Structured design and composition methods are essential.
Embedded Software Development Tools and
Processes
Hardware & Software
Hardware – Host development system
Software – Compilers, simulators, etc.
Target systems
PC or similar with I/O cards
PC or similar with custom I/O
COTS(Commercial of the Shelf) boards
Custom designed boards, interfaces, etc.
Software Development
Native Compiler – Host and Target same uP
Cross Compiler – Host develops code for a different target uP
Process
Edit source files – code versioning systems
compile to relocatable object code (*.obj files)
link & locate – link obj files with library code to produce absolute object code
file.
convert object code to Intel hex format or other formats for programming
memory device
Program target
Programming Target system
Most programs stored in Flash memory
On-Chip flash – in-circuit serial programming
External memory devices – Separate programmer device required
External programmer – parallel and gang programmers
Testing & Debugging
Simulator – limited usage
Monitor program – linked with application program,
In- circuit emulator – less used nowadays
Logic analyzer – more a hardware tool
JTAG (Joint Test Action Group) emulation and debugging – used for
microcontrollers and SOC's (system on chip) where P is not directly
accessible.
Testing & Debugging features
Run program
Step single instruction or single HLL statement
Trace execution
Monitor uP registers and memory contents
Disassemble machine code to assembly language
Watch variables (i.e. memory contents)
Breakpoints – stop execution
Advance breakpoints – conditional
Code coverage and performance analysis
Execute in realtime and capture information.
Types of Embedded Software
Development Tools
Editor
A text editor is the first tool you need to begin creating an embedded
system. It is used to write source code in programming languages C
and C++ and save this code as a text file.
A good example of a text editor is Geany. This is a small and
lightweight environment that uses the GTK+ toolkit. Geany supports
C, Java, PHP, HTML, Python, Perl, Pascal and other types of files.
Basic functions of Geany: Syntax highlighting, Code folding, Symbol
name auto-completion, Snippets, Auto-closing of XML and HTML
tags, Code navigation
Compiler
Source code is written in a high-level programming language. A
compiler is a tool for transforming the code into a low-level machine
language code — the one that a machine can understand.
Keil C51 is a popular compiler that creates apps for 8051
microcontrollers and translates source code written in the C language.
Assembler
The function of this tool is to convert a human-written code into a
machine language. In comparison with a compiler, which can do so
directly, an assembler initially converts source code into object code,
and then to a machine language.
GNU Assembler (GAS) is widely used for Linux operating systems
and can be found in the Macintosh tools package.
Debugger
This is a critical tool for testing. It goes through the code and
eliminates bugs and errors, notifying places where they occur. Precisely,
debuggers pinpoint the lines where issues are found, so programmers
can address them quickly.
A good debugger tool is IDA Pro that works on Linux, Windows and
Mac OS X operating systems. It has both free and commercial
versions and is highly popular among developers.
Linker
Traditionally, code is written into small pieces and modules. A linker is
a tool that combines all these pieces together, creating a single
executable program.
GNU ld is one of the linker tools.
Emulator
An emulator is a replication of the target system with identical
functionality and components. This tool is needed to simulate software
performance and to see how the code will work in the real-time
environment.
Using emulators, programmers can change values in order to reach the
ideal performance of the code. Once the code is fully checked, it can
be embedded in the device.
Integrated Development Environment (IDE)
Talking about the list of embedded software development tools, we
cannot but mention integrated development environments. All the
above-mentioned tools are needed for creating your embedded
software. But it would be extremely inconvenient to use them
separately, adding another layer of complexity to the project.
Hence, to simplify the development process, it is highly recommended
to use integrated environments. IDE is software that provides a set of
necessary tools in one package.
Embedded Software Development
Tools List
PyCharm
A Czech company JetBrains created this IDE specifically for developers
working with Python. Nevertheless, PyCharm is suitable for cross-platform
development as it supports JavaScript, CoffeeScript, TypeScript, Cython, SQL,
HTML/CSS, AngularJS, Node.js, template languages, and more, together with
Windows, macOS and Linux operating systems.
PyCharm provides everything you need for productive embedded software
development: Intelligent code completion, Error highlighting and fixing,
Automated code refactoring, Easy project navigation, Support for web
development frameworks such as Django, Flask, Google App Engine,
Pyramid, and web2py, Integrated testing, Remote development on virtual
machines
PyCharm offers the community, professional and educational editions, proving
to be a perfect tool for various programming purposes.
WebStorm
Another IDE from JetBrains is WebStorm, used for creating
JavaScript, CSS and HTML solutions.
WebStorm performs autocompletion, on-the-fly code analysis, code
navigation, refactoring, debugging and integration with version control
systems. It also supports multiple nesting e.g. when a JS script is
embedded in an HTML document, in which another HTML code is
embedded, inside which JavaScript is embedded. The organization of
information in these layers provides correct refactoring.
Qt Creator
Qt integrated development environment has a comprehensive set of
libraries, APIs and tools to create software for embedded devices in
C++, JavaScript and QML.
Features: Cross-compiling, Autocompletion, Syntax highlighting,
Virtual keyboard, On-device debugging, Functional safety, 3D/2D
user interfaces
The leading embedded systems manufacturers across more than 70
industries, including automotive, automation, medical, TV and
STB, Internet of Things, mobile apps and more, choose Qt Creator to
build their products.
MPLAB X
MPLAB X is the latest version of an integrated development environment MPLAB created by
Microchip Technology company. The software is based on the open-source NetBeans platform and is
designed to create applications for various types of PIC microcontrollers and digital signal controllers.
The software runs on a personal computer and includes cross-platform support for Windows, Mac
OS and Linux. MPLAB X allows project managing, code writing, editing and debugging.
The main advantages that may sway you in the direction of choosing this IDE are:
Ease of use — you can easily customize the front panel and put frequently used tools there
Auto-completion — this feature is used to complete known header files automatically, without
having to type them in
Mark occurrences — if you highlight any variable with the cursor, all the instances of this
variable in the file are shown, which is extremely helpful in debugging
Live syntax checker — this feature is able to detect common errors, reducing the total number
of errors at the end of the compilation
Dashboard window — contains useful information on the project properties
Visual Studio
A popular integrated development environment by Microsoft —
Visual Studio — is used to build not only computer programs and
mobile apps, but embedded software as well. The extension Visual
C++ for IoT development enables programmers to debug native
C/C++ code either locally on Windows, or on microcontrollers, or on
remote Linux machines. Using Visual Studio for IoT, you can build,
edit and debug devices running on Linux.
VisualGDB provides an interface between Visual Studio and the GNU
toolchain to build and debug embedded firmware. Thus, you can
configure your project by implementing third-party compilers and
tools.
Eclipse
Initially, the Eclipse integrated development environment was created
for Java applications, and now it is the most widely used solution by
Java programmers. Nevertheless, Eclipse can work with other
programming languages (Ada, ABAP, C, C++, C#, Python, PHP, etc.)
via plug-ins.
A separate package — Eclipse IDE for Automotive Software
Developers — contains tools and frameworks for quick and easy
creation of embedded automotive software.
NetBeans
A free and open-source IDE for Java 8 development, NetBeans is
supported by a large community of developers and users. It also
encompasses PHP and C/C++ tools and allows for creating apps with
CSS, JavaScript and HTML.
Basic NetBeans features:
Fast and smart code editing
Easy and efficient project management
Rapid UI development
Debugging
Support for multiple languages
Cross-platform support
Rich set of plugins
MATLAB
MATLAB is a package of tools and a programming language designed for numerical
computing. Developers in different areas use MATLAB to create user interfaces,
implement algorithms, work with data plots, functions, matrices, graphs, etc. This
environment enables interfacing with programs written in C, C++, C#, Java, Python and
other languages.
Additional software Simulink that comes with MATLAB is used to create simulations.
The combination of MATLAB and Simulink is useful for embedded software developers,
as it allows them to design and code an embedded system from prototyping to
production.
The advantages are:
Robust and easy-to-use debugging tools
Rich and efficient library of mathematical and statistical functions
A solid user community
Well-developed literature on all tools
Arduino
The open-source IDE Arduino helps create programs for Arduino
microcontrollers. It provides a range of features and libraries that
make the life of embedded programmers easier.
The main advantages are:
Ready-to-use boards with all needed components
Libraries with examples of codes
Open-source and extensible hardware and software
Cross-platform support for Windows, Mac OS and Linux
Access to a large community
Easy to learn and use
ARM Keil
ARM Keil development tools provide a complete environment for creating embedded applications
for the widest range of ARM-based devices. The software package includes leading C/C++
compilers, simulation models, debuggers, linkers, assemblers, middleware libraries.
In addition, ARM Keil offers evaluation boards for the most popular devices based on Cortex and
ARM processors.
Advantages:
Easy to learn and use
Intuitive interface
Integration with third-party tools
Code templates
Example projects
Technical support by ARM experts
Suitable both for professionals and beginners
Embedded systems and IoT solutions are applied in numerous areas
and undoubtedly increase productivity and save expenses. At the same
time, they add complexity to processes and create additional challenges
for personnel.
There is no way to say which tool you should choose for creating
embedded software, since their number is enormous. We may say that
it all depends on the programmer’s skills and preferences, as well as on
the project needs.
Reference:
https://slideplayer.com/slide/5175993/
https://www.sam-solutions.com/blog/top-ten-embedded-
software-development-tools/
https://youtu.be/mve884mPysg