MCPcopy Index your code
hub / github.com/QuantumLeaps/qpc

github.com/QuantumLeaps/qpc @v8.1.4

Chat with this repo
repository ↗ · DeepWiki ↗ · release v8.1.4 ↗ · + Follow
539 symbols 775 edges 118 files 349 documented · 65%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

QP Framework

What's New?

GitHub release (latest by date)

View QP/C Revision History at: https://www.state-machine.com/qpc/history.html

NOTE: If you're interested in the latest QP/C version from GitHub, it is recommended that you clone this repo like that:

git clone https://github.com/QuantumLeaps/qpc --recurse-submodules --depth 1

However, the easiest and most recommended way of getting started with QP/C is to download the QP-bundle, as described below.

About QP/C Real-Time Event Framework

QP/C real-time event framework (RTEF) is a lightweight implementation of the asynchronous, event-driven Active Object (a.k.a. Actor) model of computation specifically designed for real-time embedded systems, such as microcontrollers (MCUs). QP/C is both a software infrastructure for building applications consisting of Active Objects (Actors) and a runtime environment for executing the Active Objects in a deterministic, real-time fashion. Additionally, QP/C Framework supports Hierarchical State Machines with which to specify the behavior of Active Objects [UML 2.5], [Sutter:10], [ROOM:94]. The QP/C Framework can be viewed as a modern, asynchronous, and truly event-driven real-time operating system (RTOS).

State Machines to Code

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 fully automatic code generation using the free graphical QM model-based design (MBD) tool.

Blinky state machine and the code

QP Framework Family

QP/C framework is part of the larger QP family, consisting of the following QP editions (please also see QP Frameworks Feature Comparison ):

QP Edition Language API Safety Functions Certification Artifacts Licensing
QP/C C (C11) same as

SafeQP/C |Selected Assertions |Req/Arch/Design | open-source & commercial | QP/C++ | C++ (C++17) |same as

SafeQP/C++|Selected Assertions |Req/Arch/Design | open-source & commercial | SafeQP/C | C (C11) |same as

QP/C |All Safety Functions|[SafeQP/C

Certification Kit]CERT-KIT| commercial | SafeQP/C++| C++ (C++17) |same as

QP/C++ |All Safety Functions|[SafeQP/C++

Certification Kit]CERT-KIT| commercial

The SafeQP/C and SafeQP/C++ frameworks were originally derived from QP/C and QP/C++, respectively, but were extensively reengineered for the safety market using compliant Software Safety Lifecycle (SSL). In this process, the QP framework functional model has been subjected to a full Hazard and Risk Analysis, which identified all areas of weakness within the functional model and API. These findings led to the creation of Safety Requirements and risk mitigation by Safety Functions, which were subsequently implemented, verified, and validated. The SafeQP frameworks are accompanied by the "SafeQP Certification Kits", which provide developers with ready-to-use artifacts, enabling them to save time, mitigate risk, and reduce costs during application certification for safety-critical devices in the industrial, medical, aerospace, and automotive industries. Please contact Quantum Leaps for more information about the SafeQP frameworks and the "Certification Kits".

NOTE: The SafeQP/C edition remains fully API- and functionally compatible with the corresponding standard QP/C framework. This ensures existing QP/C Applications can transition seamlessly to SafeQP/C without requiring any modifications. SafeQP/C edition retains QP/C Frameworks' hallmark features: a small memory footprint, excellent efficiency, and hard real-time performance.

Getting Started with QP/C

The most recommended way to get started with QP/C is by downloading the QP-bundle, which includes QP/C as well as the QM modeling tool and the QTools collection. The main advantage of obtaining QP/C bundled together is that you get all components, tools, and examples all ready to go.

NOTE: Perhaps the most important fact to remember is that in embedded systems, nothing works until everything works. This means that you should always start with a working system and gradually evolve it, changing one thing at a time and making sure that it keeps working every step of the way.

The provided QP/C example projects, such as the super-simple Blinky, or a bit more advanced Dining Philosophers Problem (DPP), allow you to get started with a working project rather than starting from scratch. You should also always try one of the unmodified examples on one of the very inexpensive evaluation boards (such as STM32 NUCLEO-U545RE) that it was designed for, before attempting to immediately adapt the projects to your specific hardware. Only once an example project is built and runs on the evaluation board, can you use it as a starting point for your specific hardware and software development.

Getting Started Resources

QP/C Extras

The open source GPL distribution of QP/C can be augmented by the "QP/C Extras", which provide more advanced QP/C features, such as: - QS software tracing component (QP Spy) - QXK real-time kernel component - Static-analysis configuration and automation scripts for PC-Lint-Plus (MISRA-C:2025 compliance) - Test suite (based on the QUTest trace-based test harness) that demonstrates 100% lines of code and 100% MC/DC code coverage for QP/C.

NOTE: The "QP/C Extras" are licensed commercially only and available to the commercial licensees with the active Support Term. Please contact Quantum Leaps technical support to get the matching "QP/C Extras" for the public QP/C version.

NOTE: The "QP/C Extras" are also available for evaluation (upon request).

Licensing

The QP/C real-time event framework is licensed under the dual licensing model, with the following licensing options:

  1. Open-source licensing under the GNU General Public License (GPLv3).

NOTE: The GPL requires that all modifications to the original code as well as your application code (Derivative Works as defined in the Copyright Law) must also be released under the terms of the GPL open source license.

  1. Closed-source licensing under one of Quantum Leaps commercial licenses, which are specifically designed for users interested in retaining the proprietary status of their code.

NOTE: If your company has a policy forbidding open source in your product, all QP frameworks can be licensed commercially, in which case you don't use any open source license and you do not violate your policy.

NOTE: The SafeQP frameworks and the accompanying "Certification Kits" are licensed commercially only.

Documentation

The online HTML documentation for the latest version of QP/C is located at: https://www.state-machine.com/qpc

The offline HTML documentation for this particular version of QP/C is located in the sub-folder html (included in the QP/C releases). To view the offline documentation, open the file html/index.html in your web browser.

Support & Contact Information

How to Help this Project?

If you like this project, please give it a star (in the upper-right corner of your browser window):

Core symbols most depended-on inside this repo

QF_gc
called by 21
src/qf/qf_dyn.c
QEvt_refCtr_inc_
called by 18
src/qf/qf_act.c
QF_onCleanup
called by 16
ports/qube/qube.c
QTimeEvt_init
called by 12
src/qf/qf_time.c
QActive_register_
called by 12
src/qf/qf_qact.c
QPSet_remove
called by 11
src/qf/qf_qact.c
QPSet_findMax
called by 10
src/qf/qf_qact.c
QPSet_notEmpty
called by 8
src/qf/qf_qact.c

Shape

Function 477
Class 51
Enum 11

Languages

C95%
C++5%

Modules by API surface

ports/posix-qv/qf_port.c21 symbols
ports/uc-os2/syscalls.c20 symbols
ports/threadx/syscalls.c20 symbols
ports/qube/qube.c20 symbols
ports/posix/qf_port.c20 symbols
ports/freertos/syscalls.c20 symbols
ports/embos/syscalls.c20 symbols
ports/arm-cm/qv/gnu/syscalls.c20 symbols
ports/arm-cm/qk/gnu/syscalls.c20 symbols
ports/freertos/qf_port.c19 symbols
ports/win32/qwin_gui.c17 symbols
ports/win32-qv/qwin_gui.c17 symbols

For agents

$ claude mcp add qpc \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact