As an independent consultant, the advantage to having the right set of tools available for the job is only too apparent. Having the right tools not only decreases stress but also increases productivity and efficiency at a rate that far outweighs the cost of even the most expensive tools. After taking a few moments to consider the tools that make my job easier and more efficient, I’ve compiled a short list of 10 tool categories that are must haves. As part of the category I have mentioned tools that are relatively inexpensive but have made all the difference in my ability to produce value efficiently. The tools mentioned are ones that I personally use and have no financial or developmental tie to. They are simply tools that I must have to get the job done and enjoy using.
Tool #1 – Top-notch text editor
Many IDE’s come with a text editor that contains standard text editing features. These features may include basic search, replace, etc. These basic features are great for the hacker or maker whose 40-hour a week job isn’t to develop embedded software. A professional embedded software engineer needs a top-notch text editor with features beyond the basics. Features such as the ability to perform multi-selection editing, batch editing and text transposition to name a few are features that give the professional an efficiency edge.
One of my favorite text editors to use is Sublime Text 3. The text editor is supported across multiple platforms such as Windows and Mac. Sublime Text is also free to try indefinitely with a friendly periodic reminder to purchase the tool for less than $100. One other feature I have found useful is that the development language can be specified which then performs keyword and syntax highlighting. In any event, the moral of the story is that a serious developer needs a high-end text editor beyond the capabilities of those included in your standard IDE distribution.
Tool #2 – Text Comparison Tool
Tools such as SVN and Git provide basic functionality for comparing the current version of a file or folder with its previous version. I have come across times though when these basic tools just don’t fit the bill. For example, on occasion I have updated source from a client or 3rd party vendor come across my desk that isn’t revision controlled. I could add the code to my own revision system but for the most part I have no interest in having this third party code in my system. In order to determine what has changed, I can use a tool such as Beyond Compare that can generate a change report so that I can see every change that has occurred in every file at a glance.
I have found at times when a code base breaks and incremental compare and updates are necessary Beyond Compare has worked wonders beyond anything that SVN or Git tools have to offer. The best part is that the 30-day trial is a literal 30-day trial. One day is a day that a developer opens and uses the tool and not just 30 calendar days since installation.
Tool #3 – Static code analyzer
One of the most important tools that every embedded software developer should use is a static code analyzer. A static code analyzer is a tool that performs an analysis on the software without running it and performs syntax checks on the code that go beyond the checks of a compiler. The static analyzer can identify a large number of possible coding errors such as the lack of a default case in a switch statement, ambiguous code blocks, non-reachable code and many other coding errors that result in difficult to find bugs.
Unfortunately static code analyzers tend to be pricy. The least expensive professional grade analyzers runs around $500 with the most expensive being 10’s of thousands of dollars. I personally have been using PC-Lint for years but when I have additional tools available I utilize them as well. A static analyzer is an indispensable tool of an embedded software developer and it is critical that one is used.
Tool #4 – Code Metric Analyzers
Monitoring the embedded software that is developed from a metric standpoint is just as important as designing and implementing the software. Tracking the number of lines development and the complexity of the implemented code can be critical to identifying potential bugs. Metric tools can also monitor development progress that can then later be used to help develop models and estimates for the development of similar work. There are many such tools out on the market but one of my favorites that I use throughout the development cycle is the MSquared Resource Standard Metrics (RSM). RSM has a large number of metrics that can be generated and it produces reports in multiple formats that are simple and to the point.
Tool #5 – Logic Analyzer
There are many different communication protocols that developers get to play with such as Uart, I2C, SPI, USB, etc. When problems arise on these communication channels or when drivers are being developed for external IC’s it is critical for the engineer to be able to see what is going on with the bus. For this reason it is imperative to have a really good logic analyzer that can be used to spy on the bus. There are many great logic analyzers out on the market. The logic analyzer that I have been using for years that I have abused and used to the point that I’ve gotten every penny worth out of it is my Saleae Logic analyzer.
Tool #6 – Communication Protocol Tools
The first step that I take when developing a driver with a device outside of the microcontroller is to mock up a development board and connect a communication tool to the device. For example, if there is an EEPROM device, rather than write an EEPROM driver first, I connect my Aardvark from TotalPhase and walk through the different commands that I would want to use. Using the communication tool, I can then send commands, watch the responses and get a feel for how the device works before jumping into the guts of a driver. I’ve found that whenever I develop this way there are fewer mistakes and hurdles to jump through to get the device up and running.
Tool #7 – Application Templates
Developers should be creating templates and processes related to the daily operations of their software development. Creating templates provides a way for developers to solve a problem once and then make it available to themselves and others again in the future. One example of a template that I mention far too often is a Doxygen template that I use for all my header and source modules. Rather than starting from scratch each time, when a new module is developed the template is copied in and modified for the new purpose. There are many different types of templates that can be developed. For example, hardware abstraction layer templates, driver design patterns can be template amongst others.
Tool #8 – Development Kits
Development kits have proven to be a great way for developers to get up to speed quickly and also to test ideas and code before ever having to spend big money. Most general development kits now range from around $10 to $40 dollars. Developers can now purchase not just a single development kit to try out but instead of a large variety on the bench from which to run test code and experiments. I keep a wide range of development kits on the bench ranging from ST Microelectronics STM32 Nucleo boards and Freescale Kinetis Freedom Boards just to name a few. I have a collection of different development kits offered by numerous vendors that allows experimentation and comparison so that the right part can be selected for the application.
Tool #9 – Energy Monitors and Debug Tools
Monitoring the amount of energy that an embedded system consumes has become an important part of the design cycle. There are many ways to go about monitoring the energy consumption such as creating a home brew circuit or using an external tool. One method that I have found to be interesting is to use the IAR I-Jet and/or I-Scope. The tool has the ability to monitor currents and voltages that can then be correlated back to the function that was executing code. Correlating the current draw to the executing code then allows any high-energy consuming functions to be identified and optimized.
Beyond just basic energy monitors the selection of a good debug probe and trace utilities can drastically improve the debugging and development process. I’ve grown attached and nearly inseparable from my Segger J-Link Ultra+ debug probe. The debug probe was not inexpensive, coming in around $650, but it has already more than paid for itself in the first year in the speed and capabilities that it brings to the development environment. I’ve used their SystemView trace utility a fair amount as well but when it comes to tracing my code I’ve found that I really like Percepio Tracealyzer. I’m still learning the tools nuances but the power it provides is unparalleled.
Tool #10 – Professional Compiler / Environment
Compilers tend to get a bad rap from developers. A compiler is probably one of the most important tools that any embedded software developer could have, yet, it is the tool that no one wants to pay for! Professional compilers range on the low end from around $500 up to the typical price of $1500. Professional compilers usually have a free version for development up to around 32K of code space. One commonly overlooked importance of a professional compiler is not just the additional toolsets that are available as part of the IDE but the optimizations. A professional version is capable of applying optimizations that can squeeze the code space and RAM usage down. For a product that is shipping in even moderate volumes, the optimizations could allow for a smaller and cheaper part to be used. What could the potential cost savings be? The potential savings is most likely far more than the $1500 price tag.
I have used dozens of compilers over my 15+ year career as a professional developer and consultant but most recently I’ve standardized on Atollic TrueStudio (which probably could be considered more of an IDE than a compiler since it uses GCC). The free lite version of the toolchain comes with unlimited code space and professional features that are great to have. Developers can even switch between the pro and lite versions easily but there is little need as the development license is very affordable even for an individual developer.
There are many must have tools that every developer needs in order to get the job done in timely manner. I have listed 10 categories of tools that have been indispensable in my embedded system development efforts and that are worth the investment cost. I know that as developers and teams we tend to be cheap when it comes to software tools but in order to meet the demand of todays development environment, these tools easily provide a 10x or 20x return on their monetary investment in labor costs and even developer stress levels.
What development tools have you found to be useful during your own development efforts?