Home
Seminars
Free Newsletter
Back Issues
Jack's Books
Jack's Articles
Contact Us

 

Tools for Embedded Developers

We're tool makers and tool users. Embedded developers use a wide range of tools, but it can be awfully hard to distinguish the good from the ugly. Here's thoughts from a number of engineers. Feel free to submit your own to info@ganssle.com.

 

Diff/Merge Tools

Fred Hugand sent this link (http://www.scootersoftware.com/ ) to a better diff tool, this one named Beyond Compare. I've only played with it a bit so far, but it looks like a great product and is only $30.

Vlad Pambucol wrote: We use Beyond Compare here in our development and we absolutely love it! It has great diff capabilities (for instance I like that they show you where your diff is on the line not just the line that is different), you can re-sync manually your compare (we had to do this for #ifdef branches of the code that we compared with original no ifdef-ed code), you can compare folders and many, many more useful features.

Andrew Lin said: I like Araxis Merge http://www.araxis.com/. Admittedly, it costs a lot more, but it can do a three-way merge, which is very useful in a multi-developer environment when the VCS diff tool can't figure things out.

Don Peterson wrote: My favorite file diff tool is vimdiff, which is an invocation of the vim editor using the -d option.  I'm a command line weenie, so I still use GNU diff a lot too.  For comparing directories and files, doing merges, and editing, the free WinMerge program is nice (http://winmerge.sourceforge.net/ ); its only disadvantage is that it only runs on Windows.  I haven't looked at their source, but I believe it's in C++.  Perhaps we could encourage some volunteers to help them rewrite the thing using wxWidgets, which means it would be portable to platforms besides Windows.

I wrote a binary file comparison tool bd.c years ago because I frequently had to compare firmware builds and figure out if they differed, in spite of embedded date/time stamps and CRCs.  It's not a GUI tool, but it gets the job done.  You can get it at  http://www.gdssw.com/tools/ .

Rodrigo Flores wrote: KDiff3 is a 3-way diff tool. Originally for KDE, but there's a port for Windows. See http://kdiff3.sourceforge.net/ - Homepage and http://sourceforge.net/projects/kdiff3/ - Project page .

Rod Bartlett likes WinMerge: a great little tool for doing diffs and/or code merges.  Handles folders as well as individual files and has a very intuitive interface.  It's somewhat similar to Microsoft's WinDiff tool though WinMerge appears to be more feature rich.  http://winmerge.sourceforge.net/ .

Sambandam Senapathy likes: http://www.grigsoft.com/wincmp3.htm. This is one of the tool that I'm using for c-source file comparision.  Though most of my problems are solved using WINMERGE tool, there are some occasions where other diff tools may not help.  During those situations, I could see this WINCMP to be of most useful.  Especially if the files to be compared are changed a lot, I found this to be of more useful.

Michael Bulgrien likes Beyond Compare: “http://www.scootersoftware.com/ubbthreads/postlist.php?Cat=0&Board=BC3News - Beyond Compare 3 Professional will be released later this year.  Although BC2 has always been a favorite of mine, BC3 will add great new features including a full-screen edit mode, syntax coloring, 3-way merges, dynamic recompare, superb source control integration, and much more.”
 

David J. Scott likes WinMerge: “WinMerge is simply awesome.  It lets you compare two files side-by-side and do simple editing.  I don't know what I'd do without it. It’s free at http://winmerge.org/
 
“From the website: Visual differencing and merging of text files Flexible editor with syntax highlighting, line numbers and word-wrap Handles DOS, UNIX and MAC text file formats Unicode support Difference pane shows current difference in two vertical panes Location pane shows map of files compared Highlights differences inside the lines File filters in directory pane Moved lines detection in file compare pane Shell Integration Rudimentary Visual SourceSafe and Rational ClearCase integration Archive file support using 7-zip Plugin support Localizable interface via resource DLL HTML-based Manual.”


 

Text Editor Tools

John Johnson contributed: One tool I have been using of late is a text editor: http://www.vim.org/ developed under the GPL (hence free and user supported with one champion, a chap named Bram Moolenaar). vim (or gvim) has color coded code sense for C, C++, HTML, etc. and a difference utility. vim (gvim) is said to support regular expressions, through a user supplied plug-in though I have not yet enabled this capability. vim (gim) users have developed a host of other plug-ins for other purposes.

Jan Pleskac says: Our team uses JEDIT, a Java based open-source editor which is very extendable and very supportive for development. We used it for C, VHDL, latex.... More at www.jedit.org.

Phil Schmidt wrote: Leo (http://webpages.charter.net/edreamleo/front.html ) is a literate programming editor. It is difficult to describe what Leo can do without actually trying it out. I have used it for several different tasks, including code development, code reverse-engineering, a general notebook, and structured document creation. Its single most useful feature is the ability to clone nodes, and again, without trying it out, this concept is hard to describe. I recommend that folks take a look at it.

Rocco Iacchetti contributed: We would like to indicate a tool for C development that we have found very helpful. It is Ristancase Development Assistant for C and eventually for VHDL.

The tool contains an intelligent editor, with the possibility to jump to function definitions and implementations, to find every use of a variable or function and so on. It gives you a lot of syntax checks (similar to lint), also with the integration of MISRA checks.

Finally it gives you the ability to generate the code documentation; in particular, it is able to write flow diagrams of every routine.

It integrates a lot of compilers for different CPUs: we have used the integration to Texas DSP Code Composer Studio and to IAR Systems Compiler for Atmel ATmega family.

The tool is very cheap, even if it is not free. You could have more information on http://www.ristancase.com .

Mark Swayne wrote: I'm an enthusiastic Vim user, and I find this quick reference card very handy: http://tnerual.eriogerg.free.fr/vim.html .

Rodrigo Flores suggests ConText (http://www.context.cx/ ) and (for X Windows) NEdit (http://www.nedit.org ).

Scott Winder wrote: UltraEdit and UEStudio ($39.95 & $99.95; http://www.idmcomp.com/ ). I have been using them (first UE, then UES when it came out) for several years and have found them to be comprehensive, powerful tools for local and remote file editing and software development. They include a basic hex editor and a limited version of IDM's UltraCompare diff tool. They are quite customizable and handle incredibly large files with ease. Things like regular expression search and replace, edit over FTP/SFTP, multi-platform line ending and character encoding support, a built-in macro language, completely configurable menus and keystrokes, and many other perks set them apart from the vast majority of the competition. I've also found their tech support very responsive and eager to please, and they'll entertain any reasonable request for new features in upcoming versions.

Doug Stevens wrote: My single most  useful tool: an edit called (variously) slick-edit or vslick. I started using this back in about 1997-8 at Tektronix, and now use it at Omneon. It  has all the hallmarks of a tool engineered by a group that was required to use the editor in order to develop the editor. There's a huge list of features, but my personal favorites ...

  • Typing completion (the anti-carpal-tunnel feature, my absolute favorite)

  • Very fast file browser. Put the cursor on a variable, typedef, etc, hit  the appropriate hot-key, and you're taken immediately to the file and line that defines it.

  • Macro language (and a significant collection of useful macros)

  • Integrates with revision-control systems. I use it with cvs, and the interface it provides is a significant improvement on the cvs command-line interface.

  • Fully-assignable hot keys. I have to also occasionally use msdev, and vs  allows me to set hot keys so they match msdev's.

  • Built-in hex viewer and hex editor. This allows me to make hex  replacements or insertions in mpeg video streams.

  • Advanced 2- and 3-way diff/merge tools.

  • Reformatter. I occasionally have to deal with code formatted in an  utterly foreign style. It's funny how much this interferes with my ability to grasp what's going on. The reformatter changes the style to match the style I'm used to, so I can grok it quickly.

There are a collection of enthusiasts at  http://www.lazyhacker.com/slickedit/forum who post their favorite features, hints, and newly-developed macros.

 Justin Phillips seconds many who have lauded Ultraedit: www.ultraedit.com - “A fully featured editor with built diff tool and loads of other neat features. And crisp (www.crisp.demon.co.uk) - A sophisticated editor for both Linux and Win32. Too complex for my taste but take a look.”
 

Roland Bennett likes PSPad: “I really appreciate the feedback from users regarding their favorite editors. Having used Visual SlickEdit for many years, I was looking for a free editor when I left the company where I had used it.”

Vlad Zeylikman is using Epsilon from Lugaru, Inc (http://www.lugaru.com ). “It’s not free but whenever someone names a new cool feature, Epsilon had it for years. I find that it's well worth the price: loaded with features, Windows/Linux/DOS in one package.”
 

Jon 'Far' McKamey writes: “Another good choice is MadEdit. (http://madedit.sourceforge.net ). I'm a bit of a nut about finding the right editor, and I'm toggleing between this and Notepad++ at the moment. “
 

IDEs, Debugging and Related Tools

Leland Hamilton wrote: I have used Dev-C++ (http://www.bloodshed.net ), an IDE for C and C++ on Windows. It allows one to build a project with associated files, automates the compile & link functions along with program execution with parameters, and profile analysis. Apparently uses the Mingw compiler suite. Has a search function that can work on the current module, all open files, or all files associated with the project. Includes interactive debugger that uses gdb under the hood. The editor does syntax highlighting (bold keywords, italic blue comments, green preprocessor # statements, purple numbers, and red quoted text. Parses the project file and provides a class view on the side that allows one to jump to the code associated with a function or structure. (Have not used it for C++). Includes CVS integration (but it does not work for :local:", so I use WinCVS instead). Project setup tool includes Windows application, Console application, Static library, DLL, and empty project that select the build and libraries required for the project. I have only used the console application mode as I generally use Dev-C++ to develop embedded applications and frequently do unit and multi-unit testing on the PC platform before moving to the embedded platform, and for quick homebrew utilities.

Dev-C++ allows other tools to be added to a tool dropdown. I use the following:

  • a pretty print (code highlighting, etc) n-up utility (prfile http://www.lerup.com/printfile/ ) configured to print a source listing of the current file,

  • a homebrew utility that prints lines over 80 characters in length with line numbers (One customer does not want any more that 80 characters per line. Even though Dev-C++ displays a right margin line at column 80, it is possible to continue typing beyond that.),

  • a cygwin bash script that to run the program, use less to scroll through the output and diff to see changes in the output, and  - gcov for code coverage analysis using a cygwin bash script to capture the log output that summarizes coverage by function

The bloodshed homepage includes links to other resources including listings of free compilers, learning information, a list of downloadable C/C++ source file and useful links.

My two gripes with Dev-C++ are:
  • only one file is visible at a time, although it is easy to switch between multiple open files
  • this and several other editors use a separate search dropdown menu instead of including the find and replace commands under the edit dropdown menu like MSWord and another tool that I was using. I frequently used the wrong keyboard sequence one or more times after switching between MSWord, Dev-C++ and another tool.

Mark Bereit says: I use Microsoft Visual Studio 6 as my all-purpose IDE, for both desktop and embedded development.  The abilities of this tool are greatly enhanced using Visual Assist from Whole Tomato Software (http://www.wholetomato.com ).  This does better source code coloring, great autocompletion and suggestion, and great source code browsing (that doesn't depend upon Microsoft's browse database, so it works just fine on your cross-platform C/C++).  Works for both Visual Studio 6 and Visual Studio .Net.  I've used several versions over the years and find it to be a great help.

Kevin Light wrote: There is a relatively new open source, cross platform, IDE tool which is moving forward really fast.  http://www.codeblocks.org. While the RC2 release shows off some of the features, the Subversion HEAD really is unbelievable and is usually pretty stable.  The wxSmith plug-in for developing wxWidgets applications is very good for being bleeding-edge.

Marc Verwerft sent this link to ctrace: http://ctrace.sourceforge.net/
From their website: “CTrace is a fast, lightweight trace/debug C library. It was specifically written for use in a multi-threaded application, though it will work just fine in a single threaded C application. A trace/debug library has an interface of macros or functions which outputs the contents of program variables as the application is running. The trace calls may be made at user-defined levels. It may also be required to have trace functions only called on a particular thread or logical unit of the application.

“Isn't that what debuggers are for? Well, yes, though debuggers can be kind of tricky to use when an application is running across multiple threads. Also, once an application is deployed, for example on an embedded system, using debuggers becomes impractical. In this case, a remote protocol could turn tracing on for parts of the application, and the results may be returned either as a stream, or output to a file on the remote system, and collected via ftp.”

 

Source Navigator Tools

Don Peterson wrote: If you use vi and its clones (especially vim), you should be aware of exuberant ctags (http://ctags.sourceforge.net/ ), as it makes navigation in source files much easier.  Use it e.g. to tag all the symbols in all the include files in /usr/include (when I'm on Linux, I have a cron job recreate this file every night).

Wil Blake contributed: If you must use Forth, a source code browser will help. http://www.mtechelectronics.com/pages/downloads/ .

Vinay Patil likes Splint: Here is another very good, and free tool called splint for checking C Syntax, Memory leak, Buffer overflow, Naming conventions checking (even customizable), etc... http://www.splint.org/ .

Mark Swayne wrote: Doxygen ( http://www.doxygen.org/ ) is a great to for automatically extracting comments from your code and creating consistent documentation.  If you combine it with Graphviz ( http://www.research.att.com/sw/tools/graphviz/ ), it will generate immensely useful call diagrams.

Rod Bartlett also likes SourceNavigator - a good tool for familiarizing yourself with large coding projects when documentation is outdated or non-existant.  Allows easy searching within the entire source tree.  Has built-in support for tags and cross reference database.  Sadly the database engine used throws errors when building the project files for very large code projects but this is a handy tool for small to medium projects.  http://sourcenav.sourceforge.net/

My current quest is to find a good search tool to look for strings within one or more file types in a source tree.  I currently alternate between GlobalFind and the XP Search function (which is broken but which has a fix below).  Neither is quite fast enough on very large ClearCase views and both lack features I'd really like to see.  Sadly none of the indexing tools like Google Desktop or Copernic seem to work well with network drives such as those presented by ClearCase.  I'd be very interested to hear about tools other engineers are using to search for strings within files in large source trees.

GlobalFind - A reasonably fast tool for finding files and patterns within files with the ability to walk subdirectories.  http://www.kgpsoftware.com/gfind.htm .

Gergely Budai wrote: “There is yet another tool that needs to be mentioned in my opinion. (Source navigator / Source Documenting).

“In our company we need to maintain pretty much Assembler sources, so we started to look for something that fits for our needs. I stumbled over the tool called ROBODoc (http://robodoc.sf.net) which we started to use and to extend.

“Since it does not know anything about the language it is documenting, it's pretty useful for less structured ones (like assembler) or to document whole projects (various languages and makefiles, etc).

“Some Pros:
- Can be used with any language that supports remarks
- Can be used to document whole projects
- Since one header can have multiple names it is great to document assembler code (subroutines with multiple jump-in points)
- Absolutely free
- Source highlighting
- Multiple outputs (html/xml/latex/rtf/ASCII)
- User defined objects (like functions, variables, etc)

“Some Cons:
- No call graphs or anything like that (since it does not know anything about the language)
- False links if someone uses "bad" names like ‘use’, ‘do’, ‘copy’”

 

 

Hex Viewer/Dump/Calculator Tools

Vlad Pambucol wrote: And speaking of tools (since I like this one a lot too for playing with hex or mot files) there is a software tool called Hexplorer that can open all sort of bin/hex formats and you can look in your files, you can do CRCs and checksums on blocks of bytes, you have ASCII and hex view a of the file ... very useful tool. See http://sourceforge.net/projects/hexplorer/ .

Don Peterson wrote: A good hex dump tool is xxd; you can download it as part of the vim distribution (http://www.vim.org/download.php ).

Wil Blake contributed: Embedded Systems Programming used to have link to a hex editor. This one works well. http://www.hexworkshop.com/

Henk Dijkstra contributed: My tip would be srecord http://srecord.sourceforge.net by Peter Miller, to manipulate target files for embedded systems. It has default support for numerous file formats, and you can easily add new formats to it. By applying filters to the input files, you can also manipulate it if needed (like adding CRC/Checksum or crop/fill/exclude parts and much more).

Cliff Brake has a hex calculator written in Ruby: http://bec-systems.com/web/content/view/42/9/ . 

Tim Dahlin likes xvi32 -->  Free Hex Editor for Windows, http://www.chmaas.handshake.de/ , and Tiny Hexer --> Free Hex Editor for Windows, www.mirkes.de. Also PCalc --> Programmer's Calculator from www.analogx.com .

Rodrigo Flores suggests Calculator.Net, a nice .NET RPN calculator. See http://www.speech.kth.se/calculator/ .

Scott Winder wrote: 010 Editor ($49.95; http://www.sweetscape.com ). This is a very good hex editor. Its most important feature to me (i.e. the one that caused me to shell out the registration fee) is its template-based binary file parsing--you can program templates that let you read and write from and to complex file formats, even when the format is somewhat dynamic (optional or variable-sized headers, etc.). It deals elegantly with mixed endianness (even in the same file), and its scripting language is close enough to C that it is very easy to pick up. Add in other goodies such as process memory and disk editing, and you've got a very underpriced product. That's a good thing.
 

Journaling/Documenting Tools

John Johnson sent: "I think this tip - very, very simple tip - is useful in tracking development and debugging efforts. In the MPLAB IDE one can add a text file to the project file list under "Other" files.

The file is a mouse click away and can be used to collect or capture notes, ideas, and in tracking development and debugging efforts which is a tedious activity that often falls in the cracks. I would like to see this feature in all IDEs.

Steve Litt contributed: Another hierarchy organizer is VimOutliner. VimOutliner's claim to fame is it's set up so that the touch typist can input and organize in real time without losing his train of thought. It has most of the standard outliner features -- expand/collapse, promote/demote, executable lines (execute random commands right from the outline), inter-outline linking (Linux version only), checkboxes, body text. See http://www.vimoutliner.org .

I use it several times a day and even use outlines to create other formats such as web pages. If you look at http://www.troubleshooters.com/linux, that web page is stored as an outline and I run a script to update the HTML.

Mark Swayne wrote: I'd like to mention Tiddlywiki ( http://www.tiddlywiki.com/ ).  Tiddlywiki is a complete wiki-web in one HTML file.  It works with most browsers, including Firefox and IE.  I find it to be a very useful journaling tool.  I keep my development diaries in a Tiddlywiki, the search, tagging and linking functions are very useful.

David Bley wrote: I have a piece of software that I would like to recommend.  It is not free, but I use it everyday.  It is a free-form database (records are note cards and you can define fields or not) and its most powerful feature is the neural search.  It will return every card that contains the list of words that you type in the search field.  I put everything in it that I have trouble remembering and can always quickly access it.  The program is called Info-Select and I have been using it for many years.  Their url is:  http://www.miclog.com/ .

From Don Peterson: Years ago I had an idea for a hierarchically organized information manager.  I then found a number of them on the web (Leo, TreePad, KeyNote).  I tried them and settled on KeyNote (http://www.tranglos.com/free/keynote.html ).  It's a Windows only program.  It's simple and easy to use.  Now you've got a place to stick all those tidbits of knowledge.  It may not be maintained anymore, but the current version is working fine for me.

John Kaasgaard likes Wikis: The hottest word now a days . If you need a wiki and don't know exactly 'what' you need . Well start looking here (http://www.wikimatrix.org/). I think there are about 50-60 various wikis, with a very very nice comprison between them. A better way of organizing our ideas or the projects you work on - or just 'giving away information' ... is hard to find.

 

Pretty Printers

Leland Hamilton contributed: Pretty print (code highlighting) n-up file printing utility (prfile http://www.lerup.com/printfile/): very useful for printing 1 and 2 up source listings with line numbers, code highlighting (bold keywords, italic comments), and long line wrapping. Can select various output formats, such as 131 columns wide landscape text printing, and save the setups with names for recall. You can chose either column width or lines per page, optional pretty printing code highlighting, optional line numbering, specify tab width, heading and footer formats, number of pages per sheet (n-up) horizontal and/or vertical with either landscape or portrait orientation. Also there is support for Postscript file printing using the ghostscript and gsview programs, and a print spooler capability. Also offers a command line mode. I set up prfile as a Windows Explorer right click SendTo with the default to do 2 up line numbered source listings, and a tool in my IDE, Dev-C++, to print the current file.

Scott Winder wrote: While not really a "pretty printer" per se, I've used FinePrint ($49.95; http://www.fineprint.com/products/fineprint/benefits.html) for several years now and have saved (literally) thousands of sheets of paper in the process. It allows you to print multiple sheets on one page, and makes double-sided printing on manual duplex printers fairly painless. I'm especially fond of its booklet feature, but I'd say that its biggest benefit lies in its ability to show you the print job before it goes off to the printer. I use this all the time to combine multiple print jobs (of web pages, for instance), re-order them, and delete unnecessary pages (e.g. the ubiquitous "Page 2 of 2" with nothing but a header and footer on it).

John Kaasgaard wrote: Another important tool is Indent (http://www.gnu.org/software/indent/). Formatting the source code makes the bugs easier to find, it also pleases your mind, since what you see is exact formatted the way you like it. The days where you discuss with your colleges, "..should the parenthesis be on the same line, or on the next line.." ... well its over now. Pre-process your source file with Indent, and you got it exactly as you want it to. It also improves code-walkthrough, and bug-tracking others code ... And the smartest thing is, if your using CVS you can pre/post run it too automatically!

 

Project Management Tools

John Johnson contributed: Another tool I have used, but not recently, is ProjeX, an inexpensive ($US20) project management tool from http://www.waa-inc.com/projex/index.htm. ProjeX is an Excel plug-in, and in my opinion, does most of the work of the other project management tool that people actually need for a fraction of the cost. 

A Google search for PERT brought up the following tutorial (among other references) http://www.mindtools.com/pages/article/newPPM_04.htm

Koushik wrote: I found a tool called OpenWorkbench that claims to do that and more at http://www.openworkbench.org/. This tool is open-source and is hence free. Specifically, the feature listing at http://www.openworkbench.org/index.php?option=com_content&task=view&id=3&Itemid=6 mentions PERT charts etc. I have scarcely begun evaluating it and so far it seems pretty good.

Dennis J. Murray contributed: In your latest email, you mentioned a reader needing a cheap/free project planner tool.  He specifically mentioned PERT charts, although I personally prefer Gantt charts (minor issue). If he CAN find it in his heart to use Gantt charts and can run Linux, there's a FREE project management tool which I use and like called Imendio PLANNER. The homepage is available at http://developer.imendio.com/wiki/Planner .

Frequent contributor Paul Bennett said: I thought I would look around for a Linux one as well. I found this:  http://www.sharedplan.com/linuxproject.html .Seems quite reasonable from reading the manual.

Allen Paul sent this link: http://www.guysoftware.com/planbee.htm .

Mark Swayne wrote: For PERT and Gantt charting, the open-source Gantt-Project is worth checking out.  It does both Gantt and PERT charts and uses an XML file format, so you can easily parse your data files and integrate it with other tools. See http://ganttproject.sourceforge.net/ .

Scott Winder likes this tool for software design: Sparx Systems Enterprise Architect ($135-335; http://www.sparxsystems.com/). I've just recently started using this one, but it competes favorably with several $1000+ UML design tools. The floating license system is easy to use, it will integrate with most common version control systems, and for very large projects, the Corporate Edition can be used against a client-server database back-end (Oracle, MySQL, etc.). There *is* a learning curve associated with this package, but anyone with a solid UML background should find it pretty easy to pick up, and those without a UML background can purchase the $49.95 Zicom Mentor add-on that provides copious amounts of context-sensitive help (among other things). EA is updated quite frequently, and a free 30-day trial is available. Their customer and sales support staff are also quite helpful.

 

Communications Tools

Do check out Ed Sutter's free HyperTerminal replacement at www.microcross.com/html/micromonitor.html (about halfway down the page). To quote Ed: "it provides basic services typically used during embedded system development... TFTP client/server, DHCP server, serial command scripting, and even a terminal server that allows you to access the PC's serial port remotely via telnet."

The page also lists information about Ed's book Firmware Demystified, a worthwhile addition to any developer's library. 

Several people suggested Ethereal. David Hinerman wrote: On the topic of tools: I highly recommend Ethereal (http://www.ethereal.com) for Ethernet packet sniffing. We just got done adding an Ethernet interface to several of our products and this was indispensable. It's also free. It's available for Windows, Linux, and Unix.

Alejandro Weinstein suggests Bray's Terminal (http://bray.velenje.cx/avr/terminal/). From the webpage: "Terminal is a simple serial port (COM) terminal emulation program. It can be used for communication with different devices such as modems, routers, embedded uC systems, GSM phones. It is very useful debugging tool for serial communication applications"

It is not an "Hyperterminal" kind of terminal. It is really oriented toward embedded developing. And it is free.

Tim Dahlin wrote: Tera Term Pro -->  Terminal Program Old Version => http://hp.vector.co.jp/authors/VA002416/teraterm.html . New Version => http://www.ayera.com/teraterm/ .

 

Version Control Systems

Leland Hamilton contributed: I prefer to place software in some sort of VCS system as it is being developed, mostly to keep a backup in case I clobber a file, but it also helps to see the development progression. I once consulted for a small company for a few days to solve a problem they were having with some embedded firmware. Once we got the software working I suggested they update their VCS repository before making any more changes so we could recover the working copy if necessary, but they insisted on making a few small changes first. They ended up with a non-working version and could not reconstruct the working version.

 To start off, I suggest CVS with WinCVS GUI front end. WinCVS provides a graphical tree structure on the left similar to Windows Explorer, and a display on the right of files that are and are not in CVS, whether the CVS tracked files are modified Includes capability for almost every CVS command you can think of, along with the ability to type any command in a command line window.

 CVS files are stored in a central repository that can be on your computer or another computer running a CVS server. Also uses a local subdirectory file structure that identifies the repository and current workspace file information. Tagging specific revision of files, comments for each update, branching (for those cases where you need to continue new product development and perform maintenance updates on a prior release. Commands include creating a repository, importing and exporting a directory tree, tagging and branching, checkout, update working file with repository changes, committing a file to the repository, adding text, binary and Unicode files, difference of working file versus repository and other combinations, annotated listing showing the version number associated with each line,  module status listing, graphical branch structure diagram with ability to select specific tree locations, option for file locking editing, watch notification.

 Subversion and TortoiseSVN (http://tortoisesvn.tigris.org/svn/tortoisesvn): a modern day VCS system that includes integration in Windows Explorer. Prefers to work with directory trees, but using its repo[sitory]-browser, it is possible to create a subfolder and put a single file into Subversion. I found it a little difficult to get right the first time, but once set up it is easy to work with.

 TortoiseSVN is a free open-source client for the Subversion version control system. That is, TortoiseSVN manages files and directories over time. Files are stored in a central repository. The repository is much like an ordinary file server, except that it remembers every change ever made to your files and directories. This allows you to recover older versions of your files and examine the history of how and when your data changed.

 TortoiseSVN adds Shell integration, Icon overlays for file status, explorer context submenu.

 Some of the many Subversion features that may be of particular interest:

 Atomic commits:  A commit either goes into the repository completely, or not at all. This allows developers to construct and commit changes as logical chunks.

 Directory versioning: CVS only tracks the history of individual files, but Subversion implements a virtual versioned file system that tracks changes to whole directory trees over time. Files and directories are versioned. As a result, there are real client-side move and copy commands that operate on files and directories.

 Usable locally and over networks, versioned metadata (properties associated with a file), binary differencing algorithm for both text and binary files.

Also RCS probably deserves mention, although I think CVS and Subversion trump RCS.

 Rodrigo Flores adds that there's a version for CVS: TortoiseCVS. See http://www.tortoisecvs.org/index.shtml and http://sourceforge.net/projects/tortoisecvs .

Gordon Brandly does find a role for RCS: there's one audience for which RCS is much more appropriate: the busy one- or two-programmer shop. He wrote: I've been using ComponentSoftware's RCS (http://www.componentsoftware.com/csrcs/) for years -- it's available free for individual use. It doesn't do project branching or many of the other advanced things the other two do, but it's far easier to learn. If I remember right, I was up and running with CS RCS within about half an hour of downloading it. I've heard comments on the Internet that the other two take days to learn, and I certainly got that impression when I looked at the documentation for both of them. If we ever hire more programmers or starting doing more complicated software projects then we'll probably put in the effort to learn how to operate Subversion or something like it, but until then CS RCS fits our needs almost perfectly.

Dave Kellogg like TrackBack: “A fairly new tool that I find very useful is TrackBack, from Scientific Toolworks  (www.SciTools.com).   TrackBack runs in the background and saves a copy of a file every time it is written to disk.  Thus it provides a sort of poor mans VCS by keeping every version of each file Im working on, prior to committing it to the official Version Control.  TrackBack is very configurable regarding which directories and files to back up, and works with any type of file. 
 
“I find TrackBack to be an extremely powerful enabler, because I am more confident in moving forward rapidly because I know that I can back-track if needed.
 
“A free eval is available, and installation is painless.  Recommended as very worthwhile insurance.”
 
Thor Johnson wrote: “You mentioned SciTools TrackBack in the last Embedded Muse; I found one that is free-as-in-beer that seems to do the same thing: FileHampster http://www.mogware.com/filehamster/ .

“It seems simple enough;  Not as "robust" as SubVersion or a real version control software (no tags/branches/etc), but easy to use to make sure you don't obliterate the wrong file at the wrong time.

“Works OK on WinXP Pro.”


 

Internet Tools

Phil Schmidt wrote: As we all know, web research constitutes a significant part of any development. And information capturing and gathering is a big part of this process. I don't remember how many bookmark managers I tried - with no big success - until I've found the ContentSaver (www.macropool.com). It saves complete web pages or clippings on a fly, edits and annotates, organizes and categorizes, has great search options and many, many more. After I've tried it, I will never go to any bookmark managers. Not free, but it saves so much time that it easily pays for itself. Highly recommend it to anyone who spends any significant time for internet research (and I am not affiliated in any way with Macropool !). It does have a free trial (I used it for one day and decided to buy).

Shaun Kaplan wrote: I too was looking for a similar tool and last week went flipping through the Firefox extensions and found one called Scrapbook (http://amb.vis.ne.jp/mozilla/scrapbook/).  I've only had it a few days and I've never tried ContentSaver so I can't give a comparison but so far I'm very happy with it.

Don Peterson said: Here's an open source web authoring tool that's simple to set up and use: http://www.nvu.com/

He continued: The people at Adobe have forgotten the simple roots that their Acrobat reader used to have.  Now if you want to read PDF files, you have to download 17 MB of junk.  Forget that -- get Foxit reader, a fast PDF viewer.  They didn't screw up the scroll wheel support like Adobe did. http://www.foxitsoftware.com/pdf/rd_intro.php .

Scott Winder's thoughts: Someone already mentioned Copernic Desktop Search (which I use for my files as well as my email--it's incredibly potent and somewhat addictive; http://unforgotten.lethean.us/2004/10/15/copernic-desktop-search/). But I'd like to add that Copernic has had other search-related products on the market for quite some time. I own the professional version of Copernic Agent (http://www.copernic.com/en/products/agent/index.html) and have used its predecessors as well over the years, and I can only describe it as the search tool to use when Google just doesn't cut it. They have a multitude of search categories and features galore--there are even "Programming" searches (which have expanded to cover several different languages since they first added a programming search at my request several years ago). Oh, and the last time I used their customer support (said request), they were quite responsive.
 

Communications Tools

John Kaasgaard wrote: I'm using Docklight (http://www.docklight.de/) for most of my serial
communication. It's great, and holds several nice features, if your doing
embedded work, tracing between to subjects, or just mangeling with the
products' Service interface.

Royce Muchmore weighed in with this on Docklight: I see that Docklight is listed as a useful communication tool in your 'Tools for Embedded Developers' page.  However, I don't think the description gives the tool nearly enough credit. Docklight does provide the standard terminal interface with the ability to transmit and receive characters and log serial communication to a file.  In addition, there are several key features that Docklight provides:

  • The ability to passively monitor serial communication between 2 devices with syntax coloring to differentiate between the devices.
  • Serial port selection.  In order to select the serial port, the serial port number is typed in so you are not limited to a pre-defined list of port numbers.
  • Tabbed display to quickly switch between Hex/ASCII/Decimal/Binary representations.
  • Serial protocol debugging.  The capability to create user-defined sequences of characters that can be transmitted by pushing a button.  The ability to react to a user-defined received sequence of characters. Once constructed, all user-defined sequences can be saved.

I have not found a better program for serial protocol debugging.

  

Applications Tools

From Don Peterson: If you need a database, the open source MySQL (http://www.mysql.com/ ) could be a good choice for you.  On Windows, it hooks up easily with an ODBC driver and lets you connect to its databases with the Open Office programs.

He added: We all have to keep track of lots of logins and passwords these days.  I like to use KeePass (http://keepass.sourceforge.net/ ) for this.  Another good tool is Password Safe (http://passwordsafe.sourceforge.net/ ), but I like KeePass just a little better.

If you're interested in getting off the Microsoft upgrade-every-few-years treadmill, take a look at Open Office (http://www.openoffice.org/ ).  I used MS Word for 20 years, so it took a bit of effort on my part to switch over, since I had numerous macros that helped me in my work.  However, I've become _very_ attached to Open Office and how it works -- so much so that I rarely use MS Office anymore.  The main program I use is Writer, which looks a bit like MS Word.  To be objective, be warned that OO Writer crashes more frequently than Word does.  However, to its credit, there was only one time where I lost any work (its recovery process works very well).  On the other hand, I've had MS Word absolutely trash some documents to where they were unrecoverable -- and this resulted in a lot of lost work.  Even with the crashes, OO is (in my opinion) a better tool than Word.

Tim Dahlin likes VolumeID --> http://www.sysinternals.com/Utilities/VolumeId.html . Let's you modify your hard drive id.

Rodrigo Flores wrote: for those of you using PasswordSafe, Password Gorilla is a format-compatible (you can use either client with the same DAT file) multi-platform (I've used it in Windows, Linux, and Solaris but it supports others including Mac OS X) and stand-alone (Exe for Windows, TclTk kits required for Posix) replacement: http://www.fpx.de/fp/Software/Gorilla/ .

Oliver Bachmann writes: “If you are looking for a good search tool, try InfoRapid Search And Replace. It has one of the fastest search engines I have seen so far, and I use it regularly for searching strings in files even in subdirectories where other search tools do not generate a hit.”

 

CAD Tools

Steve Karg wrote about Kicad: “There is a project called Kicad which is "open source (GPL) software for the creation of electronic schematic diagrams and printed circuit board artwork."  It is cross platform (i.e. Windows/Linux) and free.  The example layouts they include are pretty slick, especially the 3D view. Of course, you have to be able to create the 3D decals/parts to be able to do that, but the concept is sound and the program works.  The home page is at:
http://www.lis.inpg.fr/realise_au_lis/kicad/ . There is a fairly active users group at: http://tech.groups.yahoo.com/group/kicad-users/

Jonathan Harston wrote: “Talking about development tools, and PCB layout in particular, I use Paint Shop Pro. No, really!
 
“I put a grid lock on at 15 pixels, which becomes my 1/20" layout grid. Printing at 300dpi gives a tracking image. I email the layout as a JPEG to a PCB fabricator, they add on a tenner to convert it to their format and send me a little parcel of PCBs a few days later. I wouldn't recommend this method for anything big, but for small jobs it's a breeze.

http://mdfs.net/Info/Comp/BBC/IDE/8bit took about five hours to design from paper to final artwork, with only one error which was fixed at the assembly stage by changing the assembly instructions.”

Static Analysis Tools

Juergen Kemmler wrote: "“Polyspace is used to clean up our safety critical code, it works well. We perform "Module Tests" and project analysis.”


From a reader who wishes to remain anonymous: “In response to your question about static analysis tools, I'd just add that I've been using PolySpace for about 18 months now. The results for C and Ada95 are better than C++ (this is possibly due to the language definition itself not lending itself to analysis).

“We can run 'whole program' analysis in both C and Ada95. Hints:

“1) add loads of memory (4GB)
“2) run on GNU/Linux, not Windows (40% speed improvement). The tool uses Cygwin on Windows and this seems to slow things down.

“But your question was really ‘does it work?’ The short-ish answer is ‘Yes, with some effort and no tool is perfect.’

“The tools understand some constructs better than others, so this is obviously easier to get right on 'blue sky' projects rather than 'legacy'.

“E.g. "Const correctness" is an absolute _must_ in any library routines the unit under test calls. Without this PolySpace must assume the worst, e.g.

“int myLibRoutine(int* i); // no const correctness
“// assume that 'i' can be changed to point to anything and that '*i' can be change to any value.

“Instead:

“int myLibRoutine(const int* const i); // with const correctness
“// the value 'i' can not change and the value '*i' can not change

“Little things like this go a huge way to improving both the speed and quality of results. NB: it is also just 'best practice' coding style!

“Possibly one of the most telling stats is that we find loads more bugs in the C code than the Ada code. I can think of 1 bug that PolySpace uncovered in Ada code in all that time. It arguable that we'd have been a lot cheaper to not bother with C or PolySpace and just write everything in Ada!!”

Jeff Brentlinger is using the static analyzer from Klocwork: “We are early in the use of Klocwork (www.klocwork.com), so I did not reply to your 1st request for people using Static Code Analysis Tools (I was hoping some of the other users would chime in).

“One of the problems we have had is resisting the urge to use this new tool on the current project that is in trouble.  "Project X is late, so let's run this tool over the code...Great now we have 200 critical code issues on top of the 200 bugs reported by the test group (we won't even think about the 70,000 other issues the tool found)."

“Like any quality improvement tool/method/process, static analysis tools need to be use early in the project (built in quality).

“Having address that small part of the cultural issues, what about the tool itself?  We have yet to have Klocwork flag an issue that was not at least "poor coding" (if that code is executed there will be a problem, but is that path ever executed?). 

“One advantage of this type of tool (over lint or just turning on all the compiler warnings) is that the results are "public".  Anyone on our network can log in to the system and see that Project X has 165 Critical Code Issues, far better than the situation where the compiler warnings (or lint report) just stay on the build machine seen by no one.”

 

Vlad Zeylikman wrote: “I had experience with PolySpace about 4 years ago.  The system promised a lot but delivery was another story.  The code it was given was pretty bad: convoluted functions, some 5-6 screenloads long, half a dozen tasks interacting with each other via messages (mostly).  In some cases, they communicated via globals protected by disable/enable interrupt pairs.  The code needed analysis and refactoring as it suffered from unexplained random hangs.  The hope was that PolySpace would pinpoint the problems, we'd fix them, and this would buy us time to do a real refactoring and optimization.

“Well, PolySpace tried.  They gave us a PC on which we ran the analysis and it did not go well.  So, they offered to send our code to their Grenoble headquarters where they have a server farm - it was a matter of pride and they wanted to show that they are up to the task.  Our code sample hung their servers.

“PolySpace rep was a nice and a diligent man and I worked with him and the tech support guy and in the end we decided that it was taking too much time.

“I refactored the code, removed the globals, etc., etc.  The system got better and faster.  And the code became readable.  A year hence, we got a call - they ran our old code through their servers!  The rep realized that it did not matter to us but wanted to show that they are getting better and maybe they should be considered after all.

“My impression after all this is that it can be a useful tool but when the code is bad - high cyclomatic complexity, lots of variables in the scope, and complex interactions - it becomes too taxing for PolySpace.  It might be much better now, I hope it is: they are improving and the hardware is faster now.  But when the major surgery is in order - do it and forget the analyzers.”

From Justin Phillips: “I've used Parasoft’s Insure++ to perform static and dynamic analysis of embedded code in a host environment. It's a good tool which uncovers all of the usual "features" and more besides. The runtime analysis feature also provides code coverage figures which can be helpful(!). 

“My reservations about it were that it had setup costs (time), also code instrumentation degraded runtime performance (expected) and was resource hungry, which affects usability. What would have been useful was a runtime tool usage detection function in the tool’s API, which is a feature Rational's Purify plus. Which is useful for determining which memory allocator to use.


“As far as lint goes, flexelint is lint on steroids.

“With all of the above tools, the biggest pain is ensuring that that they are fully integrated into the software development process that's hopefully followed. Also their continued usage needs evaluation and review i.e. sharper tools are always required.”

A reader who wishes to remain anonymous wrote: “We are using PolySpace here with good end results. However, it is a beast to run reliably on Windows, and the results are often difficult to interpret. Also the analysis is very slow (longer than the time between releases for us), and incredibly the server product cannot be sped up by adding processors. The tool is only able to verify subsections of code, not the whole system (which is apparently too complex for PolySpace to handle). It does not cope well with autogenerated code.

“The key to success is automating the submission of code into the tool, and investing time implementing the many tweaks that PolySpace recommend to improve accuracy. Out of the box, the current version (3.3) produces too much "noise" for many developers to take it seriously. After the tweaks and automation, it all becomes a lot easier to deal with, and it does find real and potential run time bugs!

“So: not happy with the setup pain and quality of the GUI which is too much and too flaky on windows at least. All the obvious errors are found, and so far (2 months, 4 releases) no errors that "should have been found" have crept through.

“Any bug is potentially catastrophic. So I guess they are worth the price if you have the money.”

Tormod Tjaberg commented: “We had a meeting with PolySpace a few months ago where they were showcasing their product.

“The presenters were not very knowledgeable about the product. When it came to the actual licensing and pricing we could not understand why they needed a special server where they uploaded the code to and it performed the analysis.

“We gave them some code and after some hassle they managed to start the analysis. They discovered one trivial bug. But at that point I telnetted into the work environment and ran flexlint which in < 10 seconds found the same bug.

“The product had a hard time coping with a mix of C & C++.

“And we could not get it to analyse anything on our current Linux project. There were bugs in PolySpace itself which choked on the kernel include files.

“I would not say they are selling snake oil but their emphasis is convincing non IT savvy managers that this is "the silver bullet".

“I would use Flexlint, it takes some time to set up but when it's running it's fast. It also does multiple passes and code analysis.”

Matthew MacClary uses these checkers:

“1) gcc -Wall -O3 (sometimes with a -pedantic)

“2) splint (http://www.splint.org/) is designed to be a better lint
   with a security focus, the theory being that broken code is
   insecure code.

“3) valgrind is excellent http://valgrind.org/, it is actually a
   dynamic checker though. I implement the core of my functionality
   for embedded systems as regular Linux programs, and then just pass
   a define variable to the compiler when I want to to pull in the
   microcontroller specific functionality. This systems lets me
   use every tool that is available for Linux development.

“I am happy with these tools. I use gcc with lots of checking turned on all the time, the other tools I just use on hairy problems - though making them part of my standard flow would be great too.

The key errors that aren't checked are asynchronous / interrupt handler type problems.  I rely on coding best practices like reliable debouncing routines, ring buffers, and double buffers as appropriate to design this type of asynchronous code correctly from the start.”

 

Miscellaneous Tools

Don Peterson wrote: For Windows, check out http://www.sysinternals.com/SystemInformationUtilities.html -- especially Process Explorer.  It's a nice replacement for Windows' Task Manager.

Freemind ( http://freemind.sourceforge.net/ ) is a really great tool for brainstorming and quickly building up outlines of hierarchical information.  It's a "mind mapping" tool, a concept I wasn't aware of until I found Freemind.  The best way to understand what it does is to look at the website.

Henk Dijkstra contributed: Another useful item for adding lightweight threads to an (existing) application is: Protothreads by Adam Dunkels: http://www.sics.se/~adam/pt/ . It consists of a few include files defining MACRO's that are used to implement threads as switch/case constructs. I have used it to easily add functionality in existing complex systems with high timing constraints.

From Don Peterson: If you're a UNIX person who has to use a Windows computer, all your favorite and familiar tools can be gotten by installing cygwin (http://www.cygwin.com/ ).  If you want to distribute apps under cygwin, the licensing fees are substantial.  Instead, get the MinGW compiler (http://www.mingw.org/ ) and you can build native Windows apps and distribute them without any fees.  Use wxWidgets (http://www.wxwidgets.org/ ) and you can build C++ cross-platform GUI apps.

Mike Teachman contributed: The mention of InfoSelect made me think of a free tool that I use a few times a day. It's Copernic desktop search.  www.copernic.com  I use it solely to search MS Outlook for emails and contacts.  It indexes all your emails.  It's blazingly fast and has an intuitive interface.  I tried Google desktop search, but, for me Copernic was superior. 

Dave Mazzoni likes Boost, (boost.org) a C++ extension that is being incorporated into the official extension to the language.  Within boost are several very useful tools for writing test driven code. The most impressive thing (in my mind) is that one doesn't have to change the code in order to test it.  Otherwise, you might experience the horror of removing the well placed debug print statements from 'tested code' to find the code then fails!


Tim Dahlin wrote: Advin Programming Tool -->  www.advin.com,  I use it to convert different program file formats.  It does not require an Advin programmer.  The DOS version can be scripted using batch files.

Scott Winder has written about regular expressions: See my blog entry (http://unforgotten.lethean.us/2004/12/09/regular-expressions-are-your-friend/). In particular, RegexBuddy ($29.95; http://www.regexbuddy.com/) is an incredible tool for learning, building, archiving, and debugging complex regular expressions. This is not always directly useful in a deployed system, but it's great for changing large quantities of code in a dynamic manner or finding similar but not identical constructs buried deep in your source files (note that this is not a search tool, but UltraEdit and a few other editors have regex search and JGsoft [RegexBuddy maker] sells one called PowerGREP).

He added: xplorer^2 (19.95 euros) is basically Windows Explorer on steroids. I'm not going to attempt to describe all of its features; it suffices to say that if you spend a lot of time wandering around in the folders on your Windows machine, this tool may do just as well for your heartburn as Rolaids. See http://www.zabkat .

And: CLCL (http://www.nakka.com/soft/clcl/index_eng.html). A free clipboard manager that stores past clipboard entries but also has template capabilities and a versatile plug-in architecture for custom manipulation of copied clips. Once you get used to using this one, it can be very frustrating to work on a computer that doesn't have it installed.

John Kaasgaard wrote: A great tool I use every day for organizing and structuring ideas, requirements database design and lots of other things is a free MindMapping tool called FreeMind http://freemind.sourceforge.net/wiki/index.php/Main_Page examples http://freemind.sourceforge.net/wiki/index.php/Main_Page#Screenshots and here too http://embedded.dk/Projects/requirement_handling.htm

He added: Another tool I often use for making release preparations, sending out .hex and binary files to the production or customers is fsum.exe (http://www.slavasoft.com/fsum/)- calculates the CSUM for the 'deliverables'

Finally, John mentioned: This tool is much more rich and usefull - if you work with audio aspects. In or output!Audio Spectrum Analyzer (http://www.qsl.net/dl4yhf/spectra1.html) .

Roland Bennett wrote: “This might come across as blatant self-advertisement, but I’m very proud of my first open source contribution:
http://ttracker.sourceforge.net/ .
 
“It is to aid timesheets without having to do much, the app will check the active window periodically and list time spent on each. Custom tasks can be added, and with the aid of rules, windows can be associated with these tasks.
 
“So if setup correctly, one would not even have to start/stop manual timers!”

Grant Sargent likes Unison: “For keeping various files in sync (home, work, removable drives etc), I recommend the Unison file sync application ( http://www.cis.upenn.edu/~bcpierce/unison/ ). Great if you don't need the revision control of subversion. Available for Linux and Windows. Open Source, works as advertised.”

 

The Ganssle Group 
PO Box 38346, Baltimore, MD 21231 
Tel: 410-504-6660, Fax: 647-439-1454
Email info@ganssle.com 
© 2008 The Ganssle Group