View QP/C++ Revision History at: https://www.state-machine.com/qpcpp/history.html
NOTE: If you're interested in the latest QP/C++ version from GitHub, it is recommended that you clone this repo like that:
git clone https://github.com/QuantumLeaps/qpcpp --recurse-submodules --depth 1
Alternatively, you can also download one of the stable QP/C++ Releases.
The most recommended way of obtaining QP/C++ is by downloading the QP-bundle, which includes QP/C++ as well as the QM modeling tool and the QTools collection. The main advantage of obtaining QP/C++ bundled together like that is that you get all components, tools and examples ready to go.
"QP/C++ Tutorial" describes a series of progressively advanced QP/C++ example applications.
Video: "Getting Started with QP Real-Time Embedded Frameworks" provides instructions on how to download, install, and get started with QP.
AppNote: "Getting Started with QP Real-Time Embedded Frameworks" contains also a tutorial, in which you build a simple "Blinky" application.
The QP/C++ real-time embedded framework is licensed under the dual licensing model, with the following licensing options:
NOTE: The GPL requires that all modifications to the original code as well as your application code (Derivative Works as defined in the Copyright Law) must also be released under the terms of the GPL open source license.
NOTE: If your company has a policy forbidding open source in your product, all QP frameworks can be licensed commercially, in which case you don't use any open source license and you do not violate your policy.
Due to the widespread non-compliance with the GPL, as well as infringement on the dual-licensing model of QP frameworks, the following QP/C++ components have been removed from the open-source GPL distribution:
NOTE: These components are available to the commercial licensees with the active Support Term. Please contact Quantum Leaps technical support to get the complete QP/C++ framework distribution.
NOTE: To request evaluation of the complete QP/C++ framework, please contact Quantum Leaps at: https://www.state-machine.com/contact
QP/C++ (Quantum Platform in C++) is a lightweight, open source Real-Time Embedded Framework (RTEF) for building modern embedded software as systems of asynchronous, event-driven Active Objects (actors). The QP/C++ framework is a member of a QP family consisting of QP/C++ and QP/C frameworks, which are strictly quality controlled, thoroughly documented, and commercially licensable.
The QP framework family implements the Active Object model of computation, which is inherently safer than the traditional "shared state concurrency" based on explicit mutual exclusion and managing RTOS threads by blocking. The Active Object model supports and automatically enforces the following best practices of concurrent programming:
Keep data isolated and bound to Active Objects' threads. Threads should hide (encapsulate) their private data and other resources, and not share them with the rest of the system.
Communicate among Active Object threads asynchronously via Event objects. Using asynchronous events keeps the threads running truly independently, without blocking on each other.
Active Object threads should spend their lifetime responding to incoming events, so their mainline should consist of an event-loop that handles events one at a time (to completion), thus avoiding any concurrency hazards within an Active Object thread itself.
This architecture also provides higher level of abstraction and the correct abstractions to effectively apply Hierarchical State Machines, modeling and code generation to deeply embedded real-time systems.
The behavior of Active Objects is specified in QP/C++ by means of Hierarchical State Machines (UML statecharts). The framework supports manual coding of UML state machines in C as well as automatic code generation by means of the free QM modeling tool.
The QP/C++ framework can run on standalone on single-chip microcontrollers, without any traditional RTOS. The framework contains a selection of built-in real-time kernels, such as the non-preemptive QV kernel, the preemptive non-blocking QK kernel, and the preemptive, dual-mode QXK kernel that provides all the features you might expect from a traditional RTOS. Native QP ports and ready-to-use examples are provided for major CPUs, such as ARM Cortex-M (M0/M0+/M3/M4/M7/M23/M33/...).
QP/C++ can also work with a traditional RTOS, such as ThreadX, embOS, FreeRTOS, uC/OS-II and Zephyr, as well as with (embedded) Linux (POSIX) and Windows.
With 20 years of continuous development, 400+ commercial licensees, and many times more open source users worldwide, the QP frameworks are the most popular such offering on the market. They power countless electronic products ranging from implantable medical devices to complex weapon systems.
The online HTML documentation for the latest version of QP/C++ is located at: https://www.state-machine.com/qpcpp
The offline HTML documentation for this particular version of QP/C++ is located in the sub-folder html (included in the QP/C++ releases). To view the offline documentation, open the file html/index.html in your web browser.
If you like this project, please give it a star (in the upper-right corner of your browser window):