2017-07-17 17:48:46 -04:00
![QP framework ](https://state-machine.com/img/qp_banner.jpg )
2017-08-07 10:33:37 -04:00
> **NOTE:** If your company has a policy forbidding open source in your
product, all QP frameworks can be
[licensed commercially ](https://state-machine.com/licensing ),
in which case you don't use any open source license and you do not violate
your policy.
2017-07-28 22:54:35 -04:00
2017-07-18 13:00:02 -04:00
# What's New?
2017-07-28 22:54:35 -04:00
View QP/C++ Revision History at: https://state-machine.com/qpcpp/history.html
2017-05-27 10:39:57 -04:00
2017-07-20 13:06:27 -04:00
---------------------------------------------------------------------------
2017-07-18 13:00:02 -04:00
# About QP/C++
2015-06-01 14:25:27 -04:00
QP/C++ (Quantum Platform in C++) is a lightweight, open source software
2018-07-02 13:55:24 -04:00
framework/RTOS for building reactive real-time embedded applications
2017-07-18 13:00:02 -04:00
as systems of cooperating, event-driven active objects (actors). The
2017-07-20 13:06:27 -04:00
QP/C++ framework is a member of a larger [QP] family consisting of
2017-07-18 13:00:02 -04:00
QP/C, QP/C++, and QP-nano frameworks, which are all strictly quality
2017-05-27 10:39:57 -04:00
controlled, thoroughly documented, and commercially licensable.
2017-07-20 13:06:27 -04:00
## Safer Model of Concurrency
The [QP] framework family is based on the [Active Object] (**actor**)
design pattern, which inherently 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 is generally **safer** , more responsive and easier to
understand and maintain than the shared-state concurrency of a conventional
RTOS. It also provides higher level of abstraction and the right
abstractions to effectively apply **modeling** and **code generation** to
deeply embedded real-time systems.
2017-07-18 13:00:02 -04:00
## Hierarchical State Machines
The behavior of active objects is specified in QP/C++ by means of
2017-07-20 13:06:27 -04:00
[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.
2017-07-18 13:00:02 -04:00
## Built-in Real-Time Kernels
2017-07-20 13:06:27 -04:00
The QP/C++ framework can run on bare-metal single-chip microcontrollers,
completely replacing a traditional RTOS. The framework contains a selection
of **built-in real-time kernels** , such as the cooperative QV kernel, the
preemptive non-blocking QK kernel, and the preemptive, blocking 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).
## Traditional RTOS/OS
QP/C++ can also work with a traditional RTOS, such as ThreadX, embOS,
uC/OS-II and TI-RTOS, as well as with (embedded) Linux (POSIX) and Windows.
2017-07-18 13:00:02 -04:00
## Maturity
2017-07-20 13:06:27 -04:00
With 60,000 downloads a year, the [QP] family is the most popular such
solution on the embedded software market. It provides a modern, reusable
architecture for embedded applications, which combines the active-object
2017-07-18 13:00:02 -04:00
model of concurrency with hierarchical state machines.
2017-07-20 13:06:27 -04:00
---------------------------------------------------------------------------
2017-07-18 13:00:02 -04:00
# Getting Started with QP/C++
2017-07-20 13:06:27 -04:00
The following "Getting Started with QP/C++" guide provides step-by-step
instructions on how to download, install, and get started with QP/C++ quickly:
2017-07-18 13:00:02 -04:00
https://state-machine.com/doc/AN_Getting_Started_with_QPCpp.pdf
2017-07-20 13:06:27 -04:00
The guide also contains a tutorial, in which you build a simple "Blinky"
application.
2017-07-28 22:54:35 -04:00
> **NOTE:** QP/C++ can be unzipped anywhere in your file system, but the
2017-07-20 13:06:27 -04:00
recommended location is `C:\qp\qpcpp` on Windows and `~/qp/qpcpp`
2017-07-18 13:00:02 -04:00
on Linux/MacOS.
2017-07-28 22:54:35 -04:00
---------------------------------------------------------------------------
# QP/C++ Licensing
QP/C++ is licensed under the increasingly popular [dual licensing model ](https://state-machine.com/licensing ), in which both the open source software distribution mechanism and traditional closed source software distribution models are combined.
> **NOTE:** If your company has a policy forbidding open source in your product, all QP frameworks can be [licensed commercially](https://state-machine.com/licensing), in which case you don't use any open source license and you do not violate your policy.
2017-07-20 13:06:27 -04:00
---------------------------------------------------------------------------
2017-07-18 13:00:02 -04:00
# QP/C++ Documentation
2017-07-28 22:54:35 -04:00
The **QP/C++ Manual** is located online at: https://state-machine.com/qpcpp
2017-07-18 13:00:02 -04:00
2017-07-20 13:06:27 -04:00
---------------------------------------------------------------------------
# How to get help?
- [Free Support Forum ](https://sourceforge.net/p/qpc/discussion/668726 )
- [Bug Reports ](https://sourceforge.net/p/qpc/bugs/ )
- [Feature Requests ](https://sourceforge.net/p/qpc/feature-requests/ )
- [Quantum Leaps website ](https://state-machine.com )
2017-09-08 10:15:22 -04:00
- [Quantum Leaps licensing ](https://state-machine.com/licensing )
2017-07-18 13:00:02 -04:00
- [info@state-machine.com ](mailto:info@state-machine.com )
[QP]: < https: // state-machine . com / products / #QP >
2017-07-20 13:06:27 -04:00
[QM]: < https: / / state-machine . com / qm >
[Active Object]: < https: // state-machine . com / doc / concepts #Active >
[Hierarchical State Machines]: < https: // state-machine . com / doc / concepts #HSM >