10 must-have development tools that (mostly) won't strain the budget
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.
In forming this list, I have chosen tools that are relatively inexpensive but have made all the difference in my ability to produce value efficiently. The tools mentioned also 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.
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, though, 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 lets the tool perform 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 had times, though, when these basic tools just don’t fit the bill. For example, on occasion I have updated source from a client or third-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 from a metric standpoint the embedded software that is developed is just as important as designing and implementing the software. Tracking the number of lines developed 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 ICs, 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 and driver design patterns can be templated 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 afford purchase not just a single development kit to try out but instead have a large variety on the bench from which to run test code and experiments. I keep a wide range of development kits on my bench, ranging from ST Microelectronics STM32 Nucleo boards to 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
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 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. These tools have 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.
Tool #10 – Professional Compiler
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, and usually have a free version for development up to around 32K of code space.
One commonly overlooked benefit of a professional compiler, beyond just the additional toolsets that are available as part of the IDE, are the optimizations. A professional compiler 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, such 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 compiler's $1500 price tag.
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.
What development tools have you found to be useful during your own development efforts?
Jacob Beningo is a Certified Software Development Professional (CSDP) whose expertise is in embedded software. He works with companies to decrease costs and time to market while maintaining a quality and robust product. 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 here.
Join over 2,000 technical professionals and embedded systems hardware, software, and firmware developers at ESC Silicon Valley July 20-22, 2015 and learn about the latest techniques and tips for reducing time, cost, and complexity in the embedded development process.
Passes for the ESC Silicon Valley 2015 Technical Conference are available at the conference’s official site with discounted advance pricing until July 17, 2015. The Embedded Systems Conference and EDN are owned by UBM Canon.