(Image courtesy: http://blogs.synopsys.com)
There is immense change happening in the embedded software design tool industry. Move from Assembly language to C, C++ and similar languages has made engineers capable of writing larger code systems comparatively faster. However, if you consider the current million-plus lines-of-code systems that are inherently complex, you will understand the need for something more.
Better coding standards eliminate bugs
Coding standards help to analyse the implementation of a software language. Numerous efforts have been made to implement the best practices in the use of ‘C’ language over the past decade or so. While there were early efforts to create rules which were well-judged and appropriate, there have also been misguided efforts that focused on not-so-important issues like style.
“Today, many companies’ proprietary coding standards could be classed as style sheets, consisting of identifier/file naming and code indentation rules, rather than a guide to avoiding common coding errors,” says Fergus Bolger, chief technical officer, PRQA.
The primary intent behind coding standards is to prevent undefined behaviour of software.
“As with any dialect, software languages generally contain features that, in their entirety, are rich beyond the needs of most software engineers. What this means is that most ordinary developers are not expected to be expert in the full language feature-set, and coding rules help to protect against language dangers or misuse,” adds Bolger.
“Well-known examples of undefined behaviour include dereferencing a null pointer, dividing by zero in an expression, and a function returning a handle to non-static local data,” he explains.
More focus on user interfaces
Traditionally, embedded software developers have been mainly working with the code that is close to the hardware, and user interfaces have been a very limited part of the whole development project. But now there is a change in customer requirements: People want the devices to have touch-based user interfaces.
Working of a Linux optimisation kit
So how is the industry going to evolve with respect to these tools?
“Embedded system developers need good tools in order to stay competitive and respond to customer needs. The tools must cover the whole software development process from user interface design to debugging and profiling and device deployment. Integrated development tools also enable agile and iterative development and validation of user interfaces as early as possible in the development process,” says Sami Makkonen, senior product manager, Digia, Qt R&D.
Improved performance optimisation
Various optimisation tools are available that help application developers take advantage of the optimisation of Linux.
Raj Johnson, president and CEO of Mapusoft Technologies, says, “The optimisation can be done in a couple of ways. One, you can rewrite your application and create a lot of static resources and eliminate a lot of dynamic allocations and so on and so forth. Two, if you’re using a Linux optimisation kit, it will do that for you. It will provide static environment underneath but dynamically reuse resources to provide applications and better performance. It also increases the performance of the Linux Kernel by taking advantage of the real-time extensions and functionalities provided by Linux.”
Text-based menu-driven user interfaces with hardware buttons are seen as legacy even though they would fit the purpose
— Sami Makkonen, senior product manager, Digia, Qt R&D
Our focus is to make sure that software could be evolved again and again so it can have a longer shelf life
—Raj Johnson, president and CEO, Mapusoft Technologie
Whenever the software underneath an embedded system is modified—for instance, an OS is upgraded or a change is made to the CPU compiler—there would be performance differences that need to be measured. There are now tools that allow you to do a detailed comparison of the performance provided by the system.
“The Profiler allows you to profile how fast the application is actually running on the new environment and also how much of the application programming interfaces is used by the application. Certain interfaces are heavily used. In that case, the Profiler will automatically make those interfaces and functions speed up. So every time a customer changes anything underneath or upgrades the OS or changes the compiler or the CPU, he will be able to collect data, compare and see whether it’s within the boundaries and so forth,” explains Johnson.
Going beyond programming languages
Michael Barr, chief technology officer, Barr Group, recently wrote an article titled ‘Trends in Embedded Software Design,’ published in May issue of Embedded System Design, in which he foresees complexity forcing programmers beyond programming languages like C.
“Don’t get me wrong, C is a language I know and love. But, as you may know firsthand, C is simply not up to the task of building systems requiring over a million lines of code. Nonetheless, million-plus lines-of-code system is where the demanded complexity of embedded software has been driving our programs for some time. Something has to give on complexity,” shares Barr.
The problem of complexity could be solved by utilising tools that are capable of writing their own code for certain situations.
“Thus I predict that tools that are able to reliably generate those millions of lines of C code automatically for us, based on system specifications, will ultimately take over,” Barr adds.
Static program analysis
Static program analysis is the analysis of software without actually executing the programs. Done by an automated tool, it is a crucial element of high-quality software development, enabling developers to prevent defects and identify coding issues early in the development cycle, passing better code into the later stages of the development process.
“Targeted code analysis tools can also help turn fragile legacy software into valuable, rugged, re-usable IP, while achieving incremental and full compliance to coding standards such as MISRA and IEC 61508,” shares Shanbhag.
Static analysis automates code reviews, removing the opportunity for human error in the process whilst ensuring a deterministic result that removes the emotion associated with individuals reviewing another developer’s code. This will be a real boon when dealing with the modern complex programs that contain millions of lines of code.
“Static analysis tools offer developers immediate feedback on the code they have written, allowing them to address issues before committing changes to the organisation’s repository. The tools can also be used to provide a measure of the overall project quality when used in conjunction with a software quality management system,” explains Shanbhag.
In a nutshell
These solutions allow engineers and design firms to reduce the design complexity as well as accelerate time to market. Optimisations solutions allow them to squeeze that last drop of performance from their system so that they remain on the cutting edge.