Without using QP, I don't believe we could have delivered on our given schedule dates with the same level of quality."
Jeff Karau, Sr. Software Engineer, General Dynamics C4 Systems
Practical UML Statecharts in C/C++, Second Edition: Event-Driven Programming for Embedded Systems (PSiCC2) is the most popular book about UML statecharts and event-driven programming for embedded systems. This ultimate resource describes all the related concepts and provides a very detailed design study of the QP™ frameworks.
companion page to PSiCC2
Without using QP, I don't believe we could have delivered on our given schedule dates with the same level of quality."
Jeff Karau, Sr. Software Engineer, General Dynamics C4 Systems
...After trying out a couple of CASE tools we came to the conclusion that expensive round-trip-engineering UML tools were cumbersome and did not fit our way of working. However, the innovative QP way to map UML state machines to C/C++ code was exactly what we were looking for..."
Henrik Bohre, Embedded Systems Consultant, GotCom AB, Göteborg, Sweden
I'm speaking from first-hand experience when I say this is really good stuff. I just hope others will recognize that and we can get past the old main+ISR vs. RTOS dilemma for a large variety of applications."
Michael Barr, President Netrino and former editor-in-chief of the ESP magazine
Practical Statecharts in C/C++ has been an indispensible reference for my embedded systems work. The clear and succinct conceptual and software framework, along with the immediately usable code enabled us to get a working prototype of our control system in a few weeks."
Dr. Haitham Hindi, Palo Alto Research Center (PARC)
...QP has been adopted accross the company and is used in all our products on a variety of OS platforms..."
Dr. Paul Montgomery, Director of Engineering, Novariant, Fremont CA
I recently rewrote a major piece of code to utilise the QP framework and it has worked wonders. My previous code used a more traditional state machine and had quickly evolved into spaghetti code. The hierarchical state machine approach made the new code smaller, more robust, and much easier to maintain and extend."
Bob Bradley, Apple Computer, Inc., from Amazon.com review
Quantum Leaps software has revolutionized not just the way we write our software, but the way we approach our design. It is intuitive, easy to implement and comes in an incredibly small package. If you're in the 8-bit world, you need this software!"
Chad Koster, Software Engineer, Honeywell
Simply put, designing sofware using the QP framework lets you code the way you think..."
Rich Wooley, Sofware Engineer, Nipro Diabetes Systems, Florida
Whenever you build software with the GNU toolchain or any other toolset on Windows, you could benefit from using the GNU make utility. The make utility automatically determines which pieces of a large program need to be recompiled, and issues commands to recompile them. GNU make conforms to section 6.2 of IEEE Standard 1003.2-1992 (POSIX.2).
The following download contains GNU make and other related utilities, such as cp, mkdir, mv, mvdir, rm, rmdir, and touch, which are commonly used in the makefiles. The utilities are compiled to run natively on Win32 without any additional DLLs.
GNU make and related utilities for Win32 (4.1MB)
The code is licensed under the GNU General Public License (GPL), which is included in the file copying.txt. According to the GPL requirements, this distribution contains the source code in the 'source' subdirectory. The utilities have been extracted from the UnixUtils project at SourceForge.net. The "GNU Make" manual (make.pdf) has been copied from the GNU make project.
You can unzip the GNU_make_utils.zip file into any directory. However, for the make files to work correctly you need to add this directory to the PATH environment variable.
One of the main goals of Quantum Leaps is to provide a lightweight alternative to heavyweight and expensive design automation tools. Such tools typically come with a drawing package to create various diagrams. In fact, most of the tools, if they are used at all, end up as overpriced drawing packages. To this end, a good drawing program does as much for you as a fancy CASE tool.
One excellent example of such a simple drawing tool is UMLet. It is an open-source UML tool with a simple user interface: draw UML diagrams fast, export diagrams to eps, pdf, jpg, svg, and clipboard, share diagrams using Eclipse, and create new, custom UML elements. UMLet runs stand-alone or as Eclipse plug-in on Windows, OS X and Linux.
UMLet lets you sketch a surprisingly good looking diagram in a minute. The minimalist text-based property editor and the intuitive way of copying shapes from the palette are tremendous time savers, as you can pre-arrange and pre-fill various palettes to fit exactly the way you use the diagrams. The customizability does not stop here, though, as you can also add your own custom shapes with custom properties and programmable behavior. UMLet lets you work almost as fast as a whiteboard, which is ideal for group design reviews and brainstorming sessions with a laptop and a projector. A very agile tool.
UMLet download
Download sample UML state diagrams (0.02MB)
More UMLet screenshots
Visio™ (now Microsoft Visio™) is a powerful such drawing program that should satisfy even the most sophisticated drawing needs. You can find literally thousands of Visio™ templates and stencils online. A few examples of good Visio™ resources are:
Pavel Hruby offers Visio Stencil and Template for UML 2.0 for various versions of Microsoft Visio™.
Allen Holub offers Visio™ stencils as well as UML Quick Reference in his goody bag.
Visio Cafe lists a lot of resources and links related to Visio™.
Microsoft Most Valuable Professional (MVP) program website has whole section devoted to Visio™.
According to the Quantum Leaps' philosophy, the Visio™ stencil that we offer is minimal, simple, and practical. It is an improved version of the stencil used to generate all diagrams in the book Practical UML Statecharts in C/C++. You can download the stencil by clicking on the following links:
Microsoft Visio™2003 UML Stencil (0.1MB)
Visio™ Technical 5.X UML Stencil (0.9MB)
The stencil contains all the shapes necessary to create the most important UML diagrams: Static-model diagrams, State diagrams, and Sequence diagrams. A few shapes in this stencil (Class, Object, State, Inheritance tree) are hacked-up versions of standard Visio™ shapes. Some other shapes have their origin from Navision Software's UML website (now available from Pavel Hruby's page).
Here is a short description of the shapes in the Quantum Leaps stencil:
| Shape | Description |
|---|---|
![]() |
Note By default, the note has one sticking out pointer that you can attach to any object. If you don't want to point to anything, just drag the pointer back to the center of the note. Also, you can use more than one pointer. Just drag as many pointers as you need from the center of the note. The "Quick UML Reference" below provides many examples of using this shape. |
![]() |
Note (with ball) This note has a "ball" at the end of the pointer, which is useful to attach, for example, snippets of code. You can find an example of this in the "Quick UML Reference" below (top-middle class diagram). |
![]() |
State This state shape is specifically designed for drawing hierarchical states. For example, the main compartment of the shape has no fill to avoid obscuring of the grid and allow easy manipulation of the shapes nested inside. Please note that you can extend the name compartment to the bottom of the shape by dragging all the way down the handle of the name-compartment division line. Some new users have difficulty adding text to the internal-transition compartment. Perhaps the best way to activate this compartment is to first click anywhere on the state to activate the whole shape, and then to click on one of the side lines of the internal transition compartment. As always in Visio, press F2 to start editing the text. |
![]() |
Transition This transition shape aligns itself neatly horizontally or vertically with up to two rounded angles between begin and end. You can arrange the horizontal and vertical segments by dragging the handles. The transition has an opaque label that you can also position by dragging on the label-handle. |
![]() |
Initial Transition The initial transition is just like the regular one, except the beginning point is a black ball. |
![]() |
Final State The shape has four connection points (up, down, left, right) for incoming transitions. |
![]() |
Junction The shape has four connection points (up, down, left, right) for incoming or outgoing transitions. |
![]() |
Dynamic Choice The shape has four connection points (up, down, left, right) for incoming or outgoing transitions. |
![]() |
Label (opaque) Text with white opaque rectangular background to label anything. The shape has two handles: the reference handle, and the text handle. The relative position of these handles can be changed by selecting the text (F2) and changing text justification (left, center, right). |
![]() |
Label (transparent) Transparent text to label anything. The shape has two handles: the reference handle, and the text handle. The relative position of these handles can be changed by selecting the text (F2) and changing text justification (left, center, right). |
![]() |
Class Class shape with name compartment and resizable attribute and method compartments. The size of compartments can be changed by dragging the handles on the compartment division lines. Dragging the lines all the way to the bottom of the shape changes the number of compartments (and you can create more than three compartments). |
![]() |
Object Just like the Class shape, except that the name is underlined. |
![]() |
Generalization Tree Allows to build generalization trees with up to 6 branches, which you drag out of the center of the shape. |
![]() |
Association (inheritance, agregation, ...) This shape has a right-click popup menu to select inheritance, aggregation, composition, and navigability (bidirectional or unidirectional). The shape has also one opaque label that can be useful for denoting cardinality at one end. You can position the label arbitrarily (with the label-handle) relative to the shape. |
![]() |
Angled Association Just like the Association shape, except the shape aligns itself always horizontally or vertically with up to two corners between the beginning and the end. |
![]() |
Design Pattern Similar to the Note shape. You can drag out pointers from the center of the shape. Please see example in the "Quick UML Reference" below (bottom-right class diagram) |
![]() |
Package |
![]() |
Component |
![]() |
Node |
The "Quick UML Reference" has been created with the Visio™ UML Stencil described above. You can download the reference, both in Visio™ and in PDF formats, by clicking on the links below:
Quick UML Reference 2003 (1.7MB)
Quick UML Reference in PDF (0.1MB)