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.
Revision 7:bf92d3a6625e, committed 2011-09-26
- 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" ==============================================================