 |
For hints, tricks and ideas about better ways to build embedded systems, subscribe to The Embedded Muse, a free biweekly e-newsletter. No hype, just down to earth embedded talk. 23,000 other engineers subscribe. It takes just a few seconds (all we need is your email address, which is shared with absolutely no one) to subscribe to the Embedded Muse. |
Tools for Embedded Systems
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 reviews to jack@ganssle.com.
Good Web Sites
C/C++ coding standards: http://www.sourceformat.com/coding-standard.htm .
Tim Peterson wrote: I wanted to pass along information about a potentially useful podcast. Though it's not embedded or even engineering specific, I felt that the information would be valuable to many. The podcasts Manager Tools and Career Tools can be found at: http://www.manager-tools.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.
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.
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/ .
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/
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 more useful. 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.
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 .
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 .
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.
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.
Stephen Pelc sent these comments: I have to second the comments about UltraEdit and BeyondCompare. They do what they say they do. But the kicker is in the technical support - both companies provide good and fast support. Now that BC3 is available on Linux and UEX is in beta for Linux, I can actually use Linux for development these days. The comments about the Foxit PDF reader are also right. What they should also say is that it's really small and really fast - so much so that we use it for on-line help systems using our DocGen literate programming tool and LaTeX to generate the PDF and an easily parsed index file.
However, the tool that saves me most time is paper and pencil. The good old double-ended word processor is still king! It's truly multi-user.
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.
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.
Bryan Murdock wrote: I am shocked and dismayed that your tools page doesn't mention Emacs. Normally I'd think that it goes without saying, but since vim is called out on there (one of the Two Great Editors, but don't tell either side that I have praise for them both), maybe Emacs should be mentioned too. It's trivial to get on a Linux workstation. For windows I suggest this distribution:
http://ourcomments.org/Emacs/EmacsW32.html.
Like is pointed out on your tools page about Vim, Emacs has color coding and indentation support for a multitude of languages, it can do code browsing with ctags and cscope, it has a nice side-by-side diff/merge tool called ediff, powerful search and replace, macros, and it doesn't beep at you when you open a new text document and simply start typing (OK, I get some vim digs in occasionally).
Tim McDonough likes Geany: I recently learned about an open source programmer's editor called "Geany" that I like very much so far. It has pre-compiled versions for both Windows and Linux environments and has a lot of nice features for managing software projects, build tools, etc. http://www.geany.org/.
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.
Cristina Ionescu likes Eclipse: The Eclipse IDE for C/C++ developers, currently at Galileo version, has been quite useful for the team I am part of. It offers a huge amount of plugins for various uses. Just with the CDT (C/C++ Development Tools) environment you have a great tool. In parallel, installing Cygwin on the computer allows setting the Eclipse C project toolchain to Cygwin (others may be used as well). One other part of our own made tools and scripting is in Python, and the PyDev plug-in is perfect for having both editor and interpreter through the IDE. SVN subclipse plug-in allows direct SVN connection for the projects. Workspaces can be created where several project contents can be compiled for different targets. Make targets are associated to projects. Etc. etc... a simple download and look at the IDE will show a lot of what it can do. Using this and Doxygen has taken a huge strain off developers in my team because before they used to have several tools. The Eclipse IDE has several versions for Java, PHP, C and other types of projects (being written in JAVA itself). http://www.eclipse.org/downloads/ .
That's about all I can say without getting into details for everything. I have used Dev C++ and Microsoft Visual C++ in the past, but I really like Eclipse. It is indeed more complex and for simple projects it's obviously to complex, but for a large development team, it relieves the number of actions to take to create a target once the whole environment has been installed as desired.
From Don Peterson:
My sister turned me on to Zotero, a bibliographic plugin for Firefox. It lets you capture web page content and save it on your computer and later create a bibliography from the things you found. You can choose from a variety of bibliography formats. An important subtlety is that you have the web page's content on the day you saved it -- important for sites that have dynamic content. I used the Scrapbook Firefox plugin for a few years, but found Zotero a better tool in most ways.
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).
Then there's this from Christopher Svec: For your list of tools, I suggest checking out cscope: it's like ctags on steroids. You can find where any C symbol is defined, called, used, called-by, etc. It works *pretty well* with C++, and passingly well with other C-like languages. It has its own curses based interface, plus it interfaces very well with vim and emacs. It's open source, and can be found here: http://cscope.sourceforge.net .
Wil Blake contributed: If you must use Forth, a source code browser will help. http://www.mtechelectronics.com/pages/downloads/ .
Rod Bartlett 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. 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 .
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).
Scott Finneran agreed: Peter Miller's srecord tool is interesting (http://srecord.sourceforge.net/). I've got to second this one. srecord is an incredibly useful tool.
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.
Ed Sutter wrote: "One other tool, by the way, that I find quite useful for viewing and/or modifying binary files is "frhed" (free hex editor). It's available at: http://www.kibria.de/frhed.html .
"It does have the disadvantage of being Windows-only (as far as I know); but if you're in that space, then this is a nice one to add to the arsenal."
Scott Finneran suggested Peter Miller's srecord tool (http://srecord.sourceforge.net/). This isn't just a file format conversion tool and it certainly works with more file types than just Motorola S-Records. It is and incredibly powerful tool for manipulating binary files (ie firmware images). Just a few of the things it can do:
- Splice/Merge/Split binary files
- Convert file formats (with 32 formats currently supported)
- Calculate and insert CRCs/Checksums
- Chop/Crop/Filter/Move sections of files
- Correct malformed files generated by buggy toolchains
- And many many more.
Because it is driven from the commandline, it can be included in Makefiles (or IDE batch/script files) to automate the building of target images. It's used by Motorola and Intel for manipulating Motorola S-Record and Intel Hex format files. It runs under Linux/Unix/OSX/Windows. Best of all, it's Free/Open Source Software.
Journaling/Documenting Tools
Gergely Budai wrote: There is yet another tool that needs to be mentioned in my opinion.
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"
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.
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.
Kalpak wrote: Just tried out the demo/ trial version of Crystal revs from http://www.sgvsarc.com/ a tool for generating flowchart from C/ C++ code. It a great tool, as they advertise, for understanding legacy code. And some versions also have a MISRA checker. It is also great for review or QC, to see if the design has been followed in coding.
So I was hoping that it would also allow forward flowcharting, that is, I can use the same for creating flowcharts instead of a regular flowcharting only tool . But it cannot be used like that.
Another interesting aspect; now this tool can be "rented", that is any version can be bought for a limited period of time ( in multiples of 1 month). This will be handy for team leads who are unable to convince the management of the value of the product.
Pretty Printers
Leland Hamilton contributed: Pretty print (code highlighting) n-up file printing utility (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!
David Strip suggests:
Highlight Code Converter from www.andre-simon.de . Syntax and keyword color highlighting, indenting, etc. Supports 140 languages, 40 pre-defined color schemes. Supports user defined color schemes and language definition files. Output in TeX/LaTeX, RTF, HTML, XML, SVG, XHTML. Windows and Linux versions. The price? FREE.
Don Peterson wrote: I used to use the GNU indent tool constantly on C code, but it didn't work well on C++. Then I found artistic style: http://astyle.sourceforge.net/ which works on C/C++/C# and Java.
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 SharedPlan: http://www.sharedplan.com/linuxproject.html .Seems quite reasonable from reading the manual.
Allen Paul sent this link to PlanBee: 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 called uCon. Found at: http://www.umonfw.com/ucon, it provides powerful scripting capabilities, plenty of function keys, as well as most of the network
facilities typically used in embedded systems (TFTP client/server, FTP, DHCP & Syslog servers) and even a terminal server mode that allows you to access the PC's serial port remotely via telnet. Also see the FAQ.
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.
However, Ethereal is no longer under development, so check out Wireshark (www.wireshark.org) which can inspect hundreds of protocols.
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/ .
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 you're 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.
Ken Smith recommends two tools: My favorite productivity tool of all time is GNU screen. At a minimum, it gives you tabs in your xterm or other terminal emulator so you can have multiple virtual xterms in a single window. You can detach a screen and the processes that are running in it will remain running. For example, you can detach your screen at the end of the day, drive home, and reattach and you'll see the exact same window that you were looking at before. This is great for checking on long running processes. It can also connect to serial ports. Eg `screen /dev/ttyUSB0 115200` will open a screen window on your serial port USB0.
The second tool I can't live without is tcpdump for debugging network issues. It's like wireshark or ethereal but it is strictly a command line tool. It links with libpcap and can exchange files with other tools that support that format.
Version Control Systems
There's a good summary of the differences between decentralized and centralized version control systems in Queue magazine: http://queue.acm.org/detail.cfm?id=1595636 .
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.
Louis Russ wrote: "I was reading http://www.ganssle.com/tools.htm which looks like a very useful page and was surprised to not find Perforce in the list of version control tools. So I thought I'd offer it for submission to the list.
"I've used this on a couple of projects and like it. I particularly like their support which IME has been outstanding. I wish other vendors were so easy to deal with and so helpful.
"For small projects they have a free non-expiring two user license. Lots of integration with other tools. See http://www.perforce.com/index.html ."
Philippe Cau likes darcs: I'm using darcs (url: http://darcs.net/, it exists on many OS). My company is working with something close to CVS, but on my workstation I'm versioning all my work many times a day with darcs. It is very easy to install, and it really helps me to follow all my
code updates. It saves me many hours a week. Instead of wondering what I have broken during an update, I can follow many records I have done. Plus, I discovered an other point of view of versioning, a global point of view instead of a file point of view.
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 - NVU: 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.
Charlie Wallace likes Putty: Putty is also good for lightweight serial/ssh/telnet /scp/ftp etc. http://www.chiark.greenend.org.uk/~sgtatham/putty/ .
Various PC Desktop 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.
Dave Kellogg writes about several tools: One of my favorite utilities is FileLocator Pro (www.mythicsoft.com, $40). This is WAY more powerful than your fathers GREP. It can even GREP on file names and paths. It knows how to search inside of Word, Excel, PDF, and ZIP files (and many others). It can do searches (with exclusions) that combine date, size, attributes, contents (including RegEx), and file name (including RegEx). Like any good tool, it is scriptable. Highly recommended. It is the best search tool that I have found.
Dave also sent: Until I got Snagit (www.TechSmith.com, $50) it, I did not realize how handy having a full-featured screen capture and mark-up tool would be. If all you have ever used is Windows Screen Print, you are in for an amazing surprise. Being able to clip and add mark-up to a screen shot is a huge enabler. It is very helpful for interacting with tool venders, when resolving problems. Again, highly recommended.
Carl VanWormer sent this: Your mention of Snagit ($50) prompts me to suggest my new favorite, Picpick (http://picpick.wiziple.net/), which is free, and has more features than my previous favorite of the last 10 years. My preferred default is to capture a mouse defined rectangle after hitting the print-screen key. The resultant rectangle pops into an image editor for any pretty arrows and notes, with that result able to be printed or saved as a graphics file. This file was brought to my attention by Gizmo (www.techsupportalert.com), where I have found most of my current favorite programs and utilities. Check out their reviews.
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.
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.
From Scott Winder: 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.
Archis Bhave recommends Launchy: www.launchy.net is a keystroke launcher with
catalog facility. No more hassles to find where one stored the files, may they
be images or data sheets. Runs on Linux (with a source build) and windows both.
Can launch installed applications as well.
Well-known author Jam Axelson suggested three tools: OpenWide
(http://lingo.atspace.com/openwide.html) customizes the File > Open dialog in
applications (not just Windows Explorer) to default to the size, position, and
view (List, Details, etc.) that you prefer.
Clipmate Clipboard Extender (http://www.thornsoft.com) remembers and manages up
to thousands of clipboard items. The PowerPaste feature will easily paste a
series of clips in sequence.
Ultramon (http://www.realtimesoft.com/ultramon) helps manage multiple monitors,
including easy moving of maximized windows and optional custom taskbars for each
monitor.
David Bley likes MWSnap - http://www.mirekw.com/ - This is a screen capture tool. It lets you capture a part or all of the screen and put the image into your word document. Great for manuals, procedures and instructions.
Eric Smith writes: MWSnap - http://www.mirekw.com/ - This is a screen capture tool. I haven't tried MWSnsap, and it's hard to argue with the price (free), but I've been very happy with CaptureWizPro by PixelMetrics.
Disclaimer: the author is one of my friends, but I don't have any interest in it other than as a satisfied user.
Don Peterson wrote: Sometimes it's handy to turn something into a PDF. If your company won't spring for an overpriced Adobe tool, you can get free tools like PDFCreator for Windows which will insert itself in the printing stream and convert the output to a PDF file. Frankly, though, I don't use it anymore, since I switched from MS Office to Open Office a number of years ago. There's a button on the OO toolbar to convert the file you have open (word processing document, spreadsheet, presentation, drawing, etc.) to a PDF -- I use it constantly. I also do a lot of equation writing and Open Office's equation writing tools are excellent and much faster to use than Word's. If you know LaTeX or TeX, the OO equation writer should look pretty familiar. Here's a cheatsheet I use: http://www.gdssw.com/tools/math_cheatsheet.pdf
He also said: I don't have a copy of Adobe Acrobat, but I sometimes need to make simple changes to a PDF file. The stapler.py script from http://github.com/hellerbarde/stapler is capable of concatenating, splitting, selecting, or deleting pages from PDF files. You need python and a PDF python library. Very handy (and free) when you need it.
Philippe Cau says: I'm using PtrScr program to make screenshot under Windows. It is very useful when you must write some documentation or make a presentation too. Here is the URL: http://www.fiastarta.com/PrtScr/.
And for viewing PDFs he writes: PDF viewer, I' using sumatra, a light windows PDF reader (url: http://blog.kowalczyk.info/software/sumatrapdf/index.html).
Jack Ganssle likes Second Copy: Without a reasonable backup strategy you might as well junk the computer. I find Centered Systems' $29.95 Second Copy (www.secondcopy.com) keeps the data safe. As a certified old-timer I have never caved into Microsoft's evil My Documents default directory structure, and save all important files in c:\docs. Second Copy lets you create various backup profiles, and one of those automatically copies that directory to an external hard drive every evening. But first I have it run a DOS script that backs up the other machines here into a subdirectory under c:\docs, so everything important in this office is mirrored to a Western Digital Passport drive. Automatically. I keep the same directory structure on the laptop, and use Second Copy to keep c:\docs identical on both machines. And another profile copies everything to a Thumb drive.
The program only copies files that have changed, and you can have it keep as many old copies of files as you'd like in an archive directory. Highly recommended.
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/
Clyde Shappee concurred: Another very capable schematic tool and PCB package, all in one is Kicad.
“It is a nicely integrated tool that keeps getting better!
I have a colleague who uses it now exclusively (start-up == no money) and has done 5 designs with it with very few complaints or "Gotchya"s.
Archis Bhave likes KiCAD: kicad.sourceforge.net is an open source and feature rich
schematic editor and PCB lay-outing tool. Nice for the schematics, good for
designing quick prototypes.
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.
Scott Rosenthal cued me in to free schematic capture and PCB layout sites: Pad2Pad (www.pad2pad.com) and DesignWorks Express (http://www.capilano.com/html/dwwx.html). I've used the latter's DesignWorks package for some years. But the two together lets one get a small PCB design, plus a manufacturing quote, in a jiffy. Board prices are, to this old guy who used to spend thousands on PCBs, really cheap.
David Bley suggested EasyCAD - This is a 2D cad package that is very powerful, easy to use, 1/10th the cost of AutoCAD and imports and exports DWG and DXF files. I use it for front panel layouts, PC Board outlines, sheet metal drawings, etc.
Mark Misiewicz likes Sketchup: I have a suggestion for mechanical CAD package. About two years ago I discovered Google Sketchup. What a great piece of 3D modeling software! And it is FREE too. We use it for modeling and designing enclosures, front panels, fitting circuit boards, garage shelves, mechanical parts etc.
VHDL/Verilog Tools
Evgeni Stavinov has some free web apps that will generate Verilog or VHDL code to create CRC generators, linear feedback shift registers, and scramblers. See http://outputlogic.com .
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 changed
// 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!!
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.
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.
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.
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.
Matthew MacClary uses these checkers:
- gcc -Wall -O3 (sometimes with a -pedantic)
- 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.
- 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.
Dave Kellogg sent this: Understand (www.scitools.com) is a powerful IDE plus Static Analyzer. It parses your code (C, C++, Java, Ada, VHDL, and several others) at a syntactic level, and builds a database. It can then show you textual and graphical tree views of calls to, called by, included by, read or write references to variables, dozens of metrics (including McCabes Complexity, comment density, line counts, and coupling), and much more. It has a scriptable API, multiple monitor support, and all the typical functionality of an IDE. It can generate flow charts from your code. It has an architecture feature for grouping a bunch of source files together as a unit, and then doing analysis on that unit. I'm extremely impressed with the support offered by Sci Tools. If you write code, you need to check out this tool. If you maintain code written by others, then you MUST check out this tool. The price ($500) may seem high if this were just an IDE/Editor. But with its huge range of analysis features, it is a fantastic bargain. Very highly recommended.
Vlad Zeylikman votes for Understand, too: (http://www.scitools.com/products/understand/). It's not cheap. the lowest priced version supports C, C++, C#, and Java. Other variants support more languages, including VHDL. It can generate code metrics, call and called trees, cross-references, etc. The code navigation within a project is very easy. Search can be done on project files or outside. There are Windows, Linux, and Solaris versions. For a large project on which you need to come up to speed quickly, it is an invaluable tool. It is way above SourceNavigator’s capabilities but then SourceNavigator is free and Understand is not.
Dave Kellogg also likes: PC-Lint (www.gimpel.com) is the most capable lint available. For $390, you get automatic detection of hundreds of questionable C or C++ constructs, coupled with extremely flexible false positive suppression. It supports dimensional analysis (detects operations on variables with incompatible units) and MISRA compliance checking. The manual is 500+ pages. Strongly recommended.
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/ .
Reverse Engineering/Disassembling Tools
Charlie Wallace suggested: I didn't see IDA on the list, if you're not an engineer but instead a reverse engineer. It's about the most useful tool out there. http://www.hex-rays.com/idapro/ .
Miscellaneous Tools
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.
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 .
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 (Time Tracker): 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.
|