QP/C++ version 5.4.1 changes the active object class hierarchy so that QMActive is now more fundamental and is the base class for QActive. (Previously QMActive was a subclass of QActive). The newly added documentation section about QP/C++ Design shows the current class hierarchy.
NOTE: Because the types QMActive and QActive are equivalent in QP/C++, this change has minimal impact on the applications, but it is now more correct to use QMActive as the base class for all "opaque" active object pointers.
***... read more
The QM 3.3.0 release updates the internal models of the QP frameworks to match the recent QP 5.4.x. Specific changes include:
Updated class hierarchy such that QMActive is the superclass of QActive.
The QFsm class and state machine implementation strategy is now deprecated. Any existing models that use QFsm will still load correctly, but the code generated witll be in QHsm-style.
Implemented the following feature requests:... read more
The QP/C++ 5.4.0 release changes the basic philosophy of distributing the QP frameworks by combining the "QP/C++ Baseline Code" with all currently available "QP/C++ Development Kits" (QDK/C++). This is done to eliminate any potential mistakes in downloading and installing separate pieces of code.
Additionally, this release changes the basic philosophy of building your embedded applications with the QP/C++ framework. Starting with this release, all examples for embedded boards include the QP/C++ framework as source code within the projects, instead of statically linking with a QP/C++ library. (NOTE: It is still possible to use QP/C++ as a library, but you need to build such libraries yourself, as they are no longer provided in the QP/C++ distribution.)... read more
The QP/C 5.4.1 release changes the active object class hierarchy so that QMActive is now more fundamental and is the base class for QActive. (Previously QMActive was a subclass of QActive). The newly added documentation section about QP/C Design shows the current class hierarchy.
NOTE: Because the types QMActive and QActive are equivalent in QP/C,
this change has minimal impact on the applications, but it is now more
correct to use QMActive as the base class for all "opaque" active object
pointers.... read more
The new QP/C 5.4.0 brings several new ports, tons of new examples, and is easier to use than ever.
The release changes the basic philosophy of distributing the QP frameworks by combining the "QP/C Baseline Code" with all currently available "QP/C Development Kits" (QDK/C). This is done to eliminate any potential mistakes in downloading and intallating separate pieces of code.
Additionally, this release changes the basic philosophy of building your embedded applications with the QP/C framework. Starting with this release, all examples for embedded boards include the QP/C framework as source code within the projects, instead of statically linking with a QP/C library. (NOTE: It is still possible to use QP/C as a library, but you need to build such libraries yourself, as they are no longer provided in the QP/C distribution.)... read more
In Lesson 15 you initialize the custom vector table. You also develop fault-handler code and test it. Finally, you add all interrupt handlers and learn how to alias them such that you can override only the ones that you actually use.
In the next lesson, you will start learning about interrupts.
YouTube playlist of the course:
http://www.youtube.com/playlist?list=PLPW8O6W-1chwyTzI3BHwBLbGQoPFxPAPM... read more
The objective of this lesson is to replace the default vector table from the IAR library with your own.
To achieve this, you first need to understand the embedded software build process. You will look inside the object files (ELF format) to see what "relocatable code" really means. You will also see how the linker resolves the cross-module references and how the rules are different for objects included directly and object libraries.... read more
New version 3.2.1 of the QM modeling and automatic code generation tool has just been released and is available for download from:
This release implements the feature request #100 "Conditional compilation for state machine elements" (see https://sourceforge.net/p/qpc/feature-requests/100/ ) The feature description and usage are available in the QM Help at the following URL:... read more
The QP Development Kits (QDKs) for the FreeRTOS real-time kernel have been just released. The QP-FreeRTOS integration has been designed to use the FreeRTOS hardware abstraction layer, but this port does not eliminate all dependencies on the CPU architecture. Specifically, this port has been designed for the ARM Cortex-M cores (ARM Cortex-M0/M3/M4F) and might need some changes to
work with other CPU architectures. The source code of the QP-FreeRTOS ports (for QP/C and QP/C++) should compile cleanly with all compilers for ARM Cortex-M, not just with IAR EWAR used here.... read more
The QP-Arduino integration has been completely re-done to match the new Arduino-1.5.7. Among others, the TCL build script and the code upload utility, both callable from QM, have been adapted for the new Arduino-1.5.7 code structure and requirements (such as the use of CYGWIN dynamic libraries.)
The new QP Development Kit (QDK) for the latest QP/C++ 5.3.0 and Arduino-1.5.x has been posted for download here:... read more
The QP/C framework has been ported to ERIKA Enterprise OSEK/VDX RTOS.
ERIKA is an open-source OSEK/VDX kernel started in year 2000 mainly used in automotive.
ERIKA Enterprise in its architecture is very similar to the single stack QK kernel implementation. The concepts of the FP (Fixed Priority) conformance class implementation in OSEK/VDX are really the same (run to completion, no blocking, single stack, ...). Also, ERIKA is an OSEK/VDX kernel, which makes it interesting for the Automotive Market. It has in fact been chosen by a few Tier 1, including Magneti Marelli for Powertrain controls.... read more
The QM version 3.2.0 switches from using Qt4 to the latest Qt5 toolkit. Also,
the the Qt5 toolkit is now used under the terms of the LGPL 2.1 license.
For compliance with LGPL 2.1, the QM distributions contain the LGPL
Compliance Package, which provides information how to obtain, install,
and build the Qt toolkit from sources.
In response to user requests and to ease downloading of QP and QM software, all latest Windows .EXE files available for download from
have been digitally signed by Quantum Leaps, LLC.
The newly signed files are:
qm_3.1.3-win32.exe qpc_5.3.0.exe qpcpp_5.3.0.exe qpn_5.3.0.exe qtools_win32_5.3.1.exe
If you are concerned about security, the digitally signed Windows .EXEs are the recommended format to dowload. The equivalent .ZIP files are not signed, so there is no guarantee that they have not been tampered with. ... read more
New QP Development Kits for the embOS RTOS have been created. Please see: http://www.state-machine.com/embos
NOTE: Even though the QDKs use the specific embOS demo (embOS for ARM Cortex-M with IAR), the QDKs have been designed generically to rely exclusively on the embOS API. In other words, the QDKs should not require any changed to run on any CPU/Compiler supported by embOS.
Mr. Wanqiang Xia has contributed a QP active object framework implementation in Java (jqf). This is a complete framework, with the hierarchical event processor (QEP) and the event-driven framework (QF). This means that you can build systems of QP-like active objects in Java!
This QP/Java implementation is licensed under the very permissive 2-clause BSD open source license. The code is hosted on GitHub at the following URL:... read more
The QDK/C-ThreadX (see http://www.state-machine.com/threadx ) has been updated for QP/C 5.3.0.
The QDK/C++-ThreadX (see http://www.state-machine.com/threadx ) has been updated for QP/C++ 5.3.0.
The QDKs have been improved with respect to the previous version. Also QS output has been fixed so it actually works. The updated Manual is provided as well.
NOTE: Even though the QDKs use the specific ThreadX port (Win32 demo in this case), the QDKs have been designed generically to rely exclusively on the ThreadX API. In other words, the QDKs should not require any changed to run on any CPU/Compiler supported by ThreadX.
#95 "Resizing of state with history generates "Assertion failed" error." #96 "Incoming transitions to a history connector stretch incorrectly when the state is moved" #97 "Newly added history connector not moving when the state is resized."... [read more](/p/qpc/news/2014/05/qm-313-released/)
The new QP/C++ Development Kit for Qt (https://sourceforge.net/projects/qpc/files/QDK-Cpp_Qt ) allows you to build highly modular, well structured, multithreaded desktop, embedded, or mobile Qt5 applications with dazzling GUI based on the concept of active objects (a.k.a. actors).
QP/C++ complements Qt by providing the high-level structure, while Qt renders the GUI and provides various services. The active object computing model underlying QP raises the level of abstraction and provides a more productive architecture, which is safer to use, more efficient, and easier to understand than the programming with the low-level QThread and QWaitCondition classes of Qt, which are just thin wrappers around the POSIX-threads API.... read more
QM 3 brings new type of code generation for the new state machine implementation added in QP5. This new type of state machine implementation in QP5 is based on the new QMsm class, which takes advantage of the QM tool as an advanced "state machine compiler". QM can perform optimizations that were not possible with the C pre-processor alone. Specifically, the QM can easily determine the LCA (Least-Common-Ancestor) state for every transition and it can generate the complete transition-sequences (sequences of exit/entry/initial actions) at code-generation time. The resulting code is still highly human-readable, but it is no longer human-maintainable. The lab tests indicate that the new "housekeeping" code for executing hierarchical state machines is about twice as fast as the code based on the QHsm class. Additionally, the new code requires less run-time support (smaller event processor) and uses 70% less of stack space in the call to the QMsm::dispatch() operation than QHsm::dispatch().... read more
The new milestone release 5.x of QP/C and QP/C++ is available for download. The release notes provide a quick summary of new features. You can also find a slightly more detailed presentation "New Features in QP5" in PDF at: http://www.state-machine.com/qp/QP5.pdf
New QDKs for ARM Cortex-M with ARM-KEIL ARMCC and Keil uVision have been just released (see http://www.state-machine.com/arm/). All QP framework types are supported.
Two new QP Development Kits (QDKs) for Microchip PIC32MX microcontrollers with MPLABX and the XC32 compiler have been just released (see http://www.state-machine.com/pic ). Both QP/C and QP/C++ are supported. (Yes, you can program a PIC in C++!).
As usual, the QDKs come with an extensive QDK Manual (see http://www.state-machine.com/pic/QDK_PIC32-XC32.pdf).
QM 2.3.1 introduces a number of features and fixes most of the reported bugs in QM (see feature requests and bug reports. The most important new features include model-wide search and replace, storing/restoring the current QM session, several improvements to the code editor, improved code generation, generation of comments from documentation, improved window-tabs, and many many more.
The just released QP 4.5.04 contains the support for ARM Cortex-M4F (FPU). The updated AppNotes "QP and ARM Cortex-M with IAR" and "QP and ARM Cortex-M with GNU" describe all the details of the port and the support for the FPU.
The QP ports to Cortex-M4F, both the cooperative and preemptive QK kernel, fully support the very interesting hardware feature called "lazy stacking" [ARM AN298], which is the default once the FPU is enabled. This feature avoids an increase of interrupt latency by skipping the stacking of floating-point registers, if not required. This feature is described in the ARM Application Note 298
“Cortex-M4(F) Lazy Stacking and Context Switching”, available at:
http://infocenter.arm.com/help/topic/com.arm.doc.dai0298a/DAI0298A_cortex_m4f_lazy_stacking_and_context_switching.pdf... read more