QP is an event-driven, RTOS-like, active object framework for microcontrollers, such as mbed. The QP framework provides thread-safe execution of active objects (concurrent state machines) and support both manual and automatic coding of UML statecharts in readable, production-quality C or C++. Automatic code generation of QP code is supported by the free QM modeling tool.

Dependents:   qp_hangman qp_dpp qp_blinky

QP/C++ (Quantum Platform in C++) is a lightweight, open source active object (actor) framework for building responsive and modular real-time embedded applications as systems of asynchronous event-driven active objects (actors). The QP/C++ framework is a member of a larger family consisting of QP/C++, QP/C, and QP-nano frameworks, which are all strictly quality controlled, thoroughly documented, and available under GPLv3 with a special Exception for mbed (see http://www.state-machine.com/licensing/QP-mbed_GPL_Exception.txt).

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 (http://www.state-machine.com/qm).

Please see the "QP/C++ Reference Manual" (http://www.state-machine.com/qpcpp) for more information.

Files at this revision

API Documentation at this revision

Comitter:
QL
Date:
Mon Sep 26 02:18:08 2011 +0000
Parent:
6:01d57c81e96a
Child:
8:934bb9eea80b
Commit message:
4.2.04

Changed in this revision

qp.cpp Show annotated file Show diff for this revision Revisions of this file
qp.h Show annotated file Show diff for this revision Revisions of this file
--- a/qp.cpp	Mon Sep 26 01:42:32 2011 +0000
+++ b/qp.cpp	Mon Sep 26 02:18:08 2011 +0000
@@ -1476,12 +1476,8 @@
 #endif
 
 // "qk.cpp" ==================================================================
-#ifdef Q_USE_NAMESPACE
-}                                                              // namespace QP
-#endif
 
 // Public-scope objects ------------------------------------------------------
-extern "C" {
 #if (QF_MAX_ACTIVE <= 8U)
 #ifdef Q_USE_NAMESPACE
     QP::QPSet8  volatile QK_readySet_;                      // ready set of QK
@@ -1495,7 +1491,13 @@
     QPSet64 volatile QK_readySet_;                          // ready set of QK
 #endif
 #endif
+
+#ifdef Q_USE_NAMESPACE
+}                                                              // namespace QP
+#endif
                                          // start with the QK scheduler locked
+extern "C" {
+
 uint8_t volatile QK_currPrio_ = (uint8_t)(QF_MAX_ACTIVE + 1);
 uint8_t volatile QK_intNest_;                 // start with nesting level of 0
 
@@ -2191,3 +2193,4 @@
 #ifdef Q_USE_NAMESPACE
 }                                                              // namespace QP
 #endif
+
--- a/qp.h	Mon Sep 26 01:42:32 2011 +0000
+++ b/qp.h	Mon Sep 26 02:18:08 2011 +0000
@@ -898,9 +898,21 @@
     extern QPSet64 volatile QK_readySet_;                 ///< ready set of QK
 #endif
 
+#ifdef Q_USE_NAMESPACE
+}                                                              // namespace QP
+#endif
+
+extern "C" {
+
 extern uint8_t volatile QK_currPrio_;     ///< current task/interrupt priority
 extern uint8_t volatile QK_intNest_;              ///< interrupt nesting level
 
+}                                                                // extern "C"
+
+#ifdef Q_USE_NAMESPACE
+namespace QP {
+#endif
+
 // QK active object queue implementation .....................................
 
 /// \brief Platform-dependent macro defining how QF should block the calling
@@ -1068,6 +1080,10 @@
 
 };
 
+#ifdef Q_USE_NAMESPACE
+}                                                              // namespace QP
+#endif
+
 extern "C" {
 
 /// \brief QK initialization
@@ -1126,6 +1142,10 @@
 #endif
 }                                                                // extern "C"
 
+#ifdef Q_USE_NAMESPACE
+namespace QP {
+#endif
+
 #else                                                         // QK_PREEMPTIVE
 
 // "qvanilla.h" ==============================================================