/*! @mainpage About QP™/C++ @image html qp_banner.jpg @section ab_new What's new? To check what's new in QP™/C++, please see @ref history "QP/C++ Revision History". You can also get the latest **QP™/C code**, with the recent enhancements and bug fixes, from the GitHub QP/C++ repository.
@section ab_about What is it? @webref{products/qp, QP™/C++ (Quantum Platform in C)} is a lightweight @webref{rtef, Real-Time Embedded Framework (RTEF)} for building modern, responsive and modular real-time embedded applications as systems of asynchronous event-driven @webref{active-object, active objects} (actors). The QP™/C++ RTEF is a member of a @webref{products/qp, larger family of real-time embedded frameworks (RTEFs)} consisting of QP™/C and QP™/C++ frameworks, which are strictly quality controlled, thoroughly documented, and available under @ref licensing "dual licensing model". The behavior of active objects is specified in QP™/C++ by means of @webref{fsm/#HSM, hierarchical state machines} (UML statecharts). The framework supports @ref sm "manual coding of UML state machines in C" as well as automatic code generation by means of the free @webref{products/qm, QM™ model-based design tool}. @attention To use QP™/C++ effectively, you need to understand the @webref{category/concepts, key concepts} that underline the architecture of the framework and your applications based on the framework. @section ab_goals What does it do? The main goals of the QP™/C++ framework are: - to provide a reusable event-driven **architecture** based on @webref{active-object, active objects (actors)}, which is inherently **safer**, more extensible, and easier to understand than the usual *shared-state concurrency* based on a traditional Real-Time Operating System (RTOS). - to provide a simple-to-use coding techniques for @webref{fsm/#HSM, hierarchical state machines}, with which to implement the behavior of active objects. - to provide efficient and thread-safe asynchronous mechanisms for active objects to communicate, such as direct event passing and publish-subscribe. - to provide event-driven timing services (time events). - to provide a selection of built-in real-time kernels to run the QP applications, such as the cooperative @ref qv "QV kernel", the preemptive non-blocking @ref qk "QK kernel", and the preemptive blocking @ref qxk "QXK kernel". - to provide testing support for applications based on software tracing (@ref qs "Q-Spy"). - to provide **unit testing** support for applications based on software tracing (@webref{qtools/qutest.html, QUTest™}). - to provide portability layer and ready-to-use ports to @ref ports_rtos "3rd-party RTOSes" and general purpose operating systems such as @ref posix "Linux" and @ref win32 "Windows". - to provide a target for modeling and automatic code generation from the @webref{products/qm, QM™ modeling tool}. @section ab_special What's special about it? The QP™/C++ Real-Time Embedded Framework (RTEF) is a unique offering on the embedded software market. It provides a modern, reusable **architecture** of embedded applications, which combines object-orientation with the particular model of concurrency, known as @webref{active-object, active objects} (actors). This architecture is generally **safer**, more responsive and easier to understand than "free threading" with a traditional Real-Time Operating System (RTOS). It also provides sufficiently high level of abstraction and the right abstractions to effectively apply modeling and code generation to deeply embedded systems. @subsection oop Object Orientation QP™/C++ is fundamentally an **object-oriented** framework, which means that the framework itself and your applications derived from the framework are fundamentally composed of classes and only classes can have @ref sm "state machines" associated with them. @subsection lightweight Lightweight The most unique characteristic of the QP™/C++ framework is its very small footprint, especially in RAM. In this respect, QP™/C++ requires less resources than even the smallest conventional Real-Time Operating System (RTOS) kernel. At the same time, QP gives you a much higher level of abstraction than a conventional RTOS. With QP, you work at the level of active objects, state machines and events, as opposed to "naked" threads of an RTOS. @subsection hsms Hierarchical State Machines The behavior of active objects is specified in QP™/C++ by means of @webref{fsm/#HSM, hierarchical state machines (UML statecharts)}. The framework supports @ref sm "manual coding of UML state machines in C+++" (or C++ in case of QP™/C++) as well as fully **automatic code generation** by means of the free graphical @webref{products/qm, QM™ model-based design (MBD) tool}. @remarks State machines can be an incredibly powerful technique, but they require an event-driven **infrastructure** (framework) that provides, at a minimum: a run-to-completion (RTC) execution context for each state machine, queuing of events, and event-based timing services. This is really the pivotal point. Without an event-driven framework (like QP™/C++), state machines are like @webref{rtef, cars without an infrastructure of roads}. @subsection kernels Built-in Kernels The QP™/C++ framework can run on @ref exa_native "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 @ref qv "QV kernel", the preemptive non-blocking @ref qk "QK kernel", and the preemptive, dual-mode, blocking @ref qxk "QXK kernel". The QXK kernel provides all the features you might expect from a traditional RTOS kernel and has been specifically designed for mixing event-driven active objects with traditional blocking code, such as commercial middleware (TCP/IP stacks, UDP stacks, embedded file systems, etc.) or legacy software. @ref ports_native "Native QP ports" and ready-to-use @ref exa_native "examples" are provided for major @ref exa_ref_mcu "CPU families". @subsection inter Interoperability QP™/C++ can also work with many traditional @ref exa_rtos "RTOSes" and @ref exa_os "general-purpose OSes" (such as Linux and Windows). @subsection popular Popularity & Maturity With 20 years of continuous development, over @webref{customers#Customers, 350 commercial licensees}, and many times more open source users worldwide, the QP™ frameworks are the most popular such offering on the market. They power countless electronic products ranging from implantable medical devices to complex weapon systems. @subsection use Widespread Use The QP™ real-time embedded frameworks address high-reliability applications across a @webref{customers#Markets, wide variety of markets}, such as medical, consumer, IoT, defense, robotics, industrial, communication, transportation, semiconductor IP, and many others. In each of these application areas, the elegant software architecture and modern design philosophy of QP™ have distinct advantages. @subsection psicc2 Books The two editions of the book, @webref{psicc2, Practical Statecharts in C/C++} provide a detailed design study of the QP™ frameworks and explain the related concepts. [![Practical UML Statecharts in C/C++, 2nd Edition](psicc2.jpg)](https://www.state-machine.com/psicc2)