The tools that we use as developers can make a dramatic difference in the speed, quality, and overall cost of the software we develop. Here are five tools that I’ve found to be very helpful. Some of these tools I’ve discovered recently while others have been used for over a decade. Regardless, I use these tools on a daily basis and I’m sure other developers will find them – or similar tools – of great value.
Tool #1 – Saleae Logic Analyzer
Being able to see and record a signal is crucial to embedded software developers. There have been many times that I’ve had to scope an SPI bus to monitor the signals to make sure that the physical layer was doing what I thought it should be. Early in my career, I relied on an oscilloscope, but today’s software developers can usually get away with a good high-speed logic analyzer.
I typically use a Saleae Logic Pro 8, which is a bit expensive but the new Logic Pro 8 works so well that I can’t complain. It can even perform an analog sampling on the signal which helps ensure the analog signal as well as the digital logic look as they should.
Beningo Embedded Group, Used with Permission
|A SPI bus screen capture showing the digital logic analyzed in the top four channels with analog voltage measurements in the bottom half.|
Tool #2 – Percepio Tracealyzer
RTOS tracing tools are a fantastic way to visualize and see how software is behaving and performing. A colleague of mine quite accurately describes them as “oscilloscopes for software engineers”. A tracing tool allows developers to see the transitions into and out of tasks, monitor stack and heap usage, monitor state machines along dozens of other activities that are occurring in software every millisecond.
The trace tool that I use is the Percepio Tracealyzer, which works well for RTOS’s like FreeRTOS, ThreadX, and a few others. Tools like Tracealyzer provide developers with insights into the performance of their software that otherwise would be time-consuming and difficult to track down. The idea is that they record events that occur in the software and then relay those events to a host to display the events and perform various analyses on the data. I’ve found that tools like this can help speed up debugging and also help developers verify that software is doing what they expect it to do.
Beningo Embedded Group, Used with Permission
|An example trace showing the event timeline, CPU utilization, and event log.|
Tool #3 – Understand
Understand, developed by Scitools, provides developers with a great environment to analyze and understand their software. I use Understand when performing software audits to help me quickly understand the state of the codebase. The tool provides capabilities to perform cyclomatic complexities, perform software metric analysis and static analysis, among other things. I found this tool so useful that it moved from my audit and analysis toolset to my daily software development toolset. If you want to ensure your software is meeting your coding standards or see where it might be going astray, then you need this tool.
Tool #4 – Atlassian and Gitlab
Effectively managing an embedded software project's processes is again, quite critical to a successful project. I’m typically an Atlassian user but I’m seeing more colleagues and clients using Gitlab. Both companies seem to provide similar capabilities albeit in different ways. To me, it isn’t so much about deciding which one is better than it is making sure that your development team is effectively using the tools provided by these types of companies.
One area that I have seen a big push and have been pushing myself is continuous integration and testing. Embedded software teams working in small to mid-sized projects tend to not have well-defined testing and continuous integration processes. I’ve found that these processes not only improve quality but can save considerable time and effort. Personally, I like the Gitlab CI/CD capabilities but again every development team should find what works for them and use a tool with these capabilities for the repository, code reviews, CI/CD, and software quality management.
Tool #5 – SEGGER J-Trace
Over the last few years, I’ve been on a big push to improve embedded software testing and management. (Which is probably clear from the tools I use every day). I know that a lot of companies try to leverage on-board debuggers and skip having to pay for professional debug probes. Years ago, I used to do the same until I got tired of the giant collection of low-cost programmers and development boards I had lying around the office.
I have quite a few different debug probes around the office, but the one that I use the most is my J-Trace. The capability that I like about this probe the most is that it has support for Arm’s extended trace microcell (ETM) which allows a developer to perform instruction tracing on microcontrollers that support it. This allows a developer to use Ozone to perform instruction tracing and when coupled with test cases for on-target testing understand code coverage, memory usage, and several other parameters.
The tools that developers use daily can make the difference between meeting a deadline or not; creating quality software or not; meeting software budgets or not. When I was 17 years old and purchasing my first multi-meter and electronics tools, a wise friend convinced me not to buy the cheap tools but to pay more for the ones that would last. More than 20 years later, I still have and use those same tools. It’s one of the main reasons I’m not afraid to buy quality tools, knowing that they will last and provide the best return-on-investment.
We’ve just examined the tools that I typically use daily but there are undoubtedly many others there that developers can and should add to their toolkit. What tools have you found that make software development easier? If you have a spare moment, share your favorite tools in the comments.
Jacob Beningo is an embedded software consultant who currently works with clients in more than a dozen countries to dramatically transform their businesses by improving product quality, cost and time to market. He has published more than 200 articles on embedded software development techniques, is a sought-after speaker and technical trainer, and holds three degrees which include a Master of Engineering from the University of Michigan. Feel free to contact him at firstname.lastname@example.org at his website www.beningo.com, and sign-up for his monthly Embedded Bytes Newsletter.