QP enables building well-structured embedded applications as a set of concurrently executing hierarchical state machines (UML statecharts) directly in C or C++ without big tools. QP is described in great detail in the book “Practical UML Statecharts in C/C++, Second Edition” (Newnes, 2008).
QP consists of a universal UML-compliant event processor (QEP), a portable real-time framework (QF), a tiny run-to-completion kernel (QK), and software tracing instrumentation (QS). Current versions of QP include: QP/C™ and QP/C++™, which require about 4KB of code and a few hundred bytes of RAM, and the ultra-lightweight QP-nano, which requires only 1-2KB of code and just several bytes of RAM.
QP can work with or without a traditional RTOS or OS. In the simplest configuration, QP can completely replace a traditional RTOS. QP includes a simple cooperative scheduler and a fully preemptive kernel (QK). QK is smaller and faster than most traditional preemptive kernels or RTOS, yet offers fully deterministic, preemptive execution of embedded applications. QP can manage up to 63 concurrently executing tasks structured as state machines.
QP/C and QP/C++ can also work with a traditional OS/RTOS to take advantage of existing device drivers, communication stacks, and other middleware. QP has been ported to Linux/BSD, Windows, VxWorks, MicroC/OS-II, FreeRTOS, and other popular OS/RTOS. QP is available for immediate download under the GPL version 2 open source license. Alternatively, QP can be also licensed under the terms of traditional closed-source licenses, which expressly supersede the GPL and are specifically designed for licensees interested in retaining the proprietary status of their code.