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:
0:064c79e7311a
Child:
1:379cf3202ba2
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qp_port.h	Wed Feb 09 14:46:03 2011 +0000
@@ -0,0 +1,80 @@
+//////////////////////////////////////////////////////////////////////////////
+// Product: QP/C++ port to ARM Cortex, selectable Vanilla/QK, mbed compiler
+// Last Updated for QP ver: 4.1.06 (modified to fit in one file)
+// Date of the Last Update: Feb 08, 2011
+//
+//                    Q u a n t u m     L e a P s
+//                    ---------------------------
+//                    innovating embedded systems
+//
+// Copyright (C) 2002-2011 Quantum Leaps, LLC. All rights reserved.
+//
+// This software may be distributed and modified under the terms of the GNU
+// General Public License version 2 (GPL) as published by the Free Software
+// Foundation and appearing in the file GPL.TXT included in the packaging of
+// this file. Please note that GPL Section 2[b] requires that all works based
+// on this software must also be made publicly available under the terms of
+// the GPL ("Copyleft").
+//
+// Alternatively, this software may be distributed and modified under the
+// terms of Quantum Leaps commercial licenses, which expressly supersede
+// the GPL and are specifically designed for licensees interested in
+// retaining the proprietary status of their code.
+//
+// Contact information:
+// Quantum Leaps Web site:  http://www.quantum-leaps.com
+// e-mail:                  info@quantum-leaps.com
+//////////////////////////////////////////////////////////////////////////////
+#ifndef qp_port_h
+#define qp_port_h
+
+// enable the Q-SPY software tracing instrumentation
+#define Q_SPY
+
+// enable preemptive QK kernel
+#define QK_PREEMPTIVE
+
+// The maximum number of active objects in the application (could be up to 63)
+#define QF_MAX_ACTIVE      16
+
+// The signal size (1, 2, 4 bytes)
+#define Q_SIGNAL_SIZE      2
+
+//............................................................................
+                                             // QF critical section entry/exit
+// QF_INT_KEY_TYPE not defined
+#define QF_INT_LOCK(dummy)      __disable_irq()
+#define QF_INT_UNLOCK(dummy)    __enable_irq()
+
+#ifdef QK_PREEMPTIVE
+                                                // QK interrupt entry and exit
+    #define QK_ISR_ENTRY() do { \
+        __disable_irq(); \
+        ++QK_intNest_; \
+        QF_QS_ISR_ENTRY(QK_intNest_, QK_currPrio_); \
+        __enable_irq(); \
+    } while (0)
+
+    #define QK_ISR_EXIT()  do { \
+        __disable_irq(); \
+        QF_QS_ISR_EXIT(QK_intNest_, QK_currPrio_); \
+        --QK_intNest_; \
+        *((uint32_t volatile *)0xE000ED04) = 0x10000000; \
+        __enable_irq(); \
+    } while (0)
+#else
+    #define QK_ISR_ENTRY() ((void)0)
+    #define QK_ISR_EXIT()  ((void)0)
+#endif
+
+#ifdef Q_SPY
+    #define QS_TIME_SIZE        4
+    #define QS_OBJ_PTR_SIZE     4
+    #define QS_FUN_PTR_SIZE     4
+#endif
+
+#include <stdint.h>    // mbed compiler supports standard exact-width integers
+
+#include "qp.h"                           // QP platform-independent interface
+
+#endif                                                            // qp_port_h