{"id":13812989,"url":"https://github.com/QuantumLeaps/qpc","last_synced_at":"2025-05-14T22:31:31.117Z","repository":{"id":38420493,"uuid":"61225048","full_name":"QuantumLeaps/qpc","owner":"QuantumLeaps","description":"QP/C Real-Time Event Framework/RTOS is a lightweight implementation of the asynchronous, event-driven Active Object (Actor) model combined with Hierarchical State Machines.","archived":false,"fork":false,"pushed_at":"2025-05-14T18:16:41.000Z","size":69302,"stargazers_count":1087,"open_issues_count":4,"forks_count":259,"subscribers_count":70,"default_branch":"master","last_synced_at":"2025-05-14T19:25:17.868Z","etag":null,"topics":["active-object","actor","actor-model","arm","arm-cortex-m","arm-cortex-m0","arm-cortex-m3","arm-cortex-m4","arm-cortex-m7","embedded","embedded-c","event-driven","framework","hierarchical-state-machine","qp","rtos","samek","state-machine","statechart","uml-state-machine"],"latest_commit_sha":null,"homepage":"https://www.state-machine.com/products/qp","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/QuantumLeaps.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSES/GPL-3.0-or-later.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2016-06-15T16:57:51.000Z","updated_at":"2025-05-14T18:16:44.000Z","dependencies_parsed_at":"2023-02-18T08:46:07.998Z","dependency_job_id":"f0158f7d-1aed-4862-ab3a-e7dfde2c183d","html_url":"https://github.com/QuantumLeaps/qpc","commit_stats":null,"previous_names":[],"tags_count":43,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/QuantumLeaps%2Fqpc","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/QuantumLeaps%2Fqpc/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/QuantumLeaps%2Fqpc/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/QuantumLeaps%2Fqpc/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/QuantumLeaps","download_url":"https://codeload.github.com/QuantumLeaps/qpc/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254239602,"owners_count":22037734,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["active-object","actor","actor-model","arm","arm-cortex-m","arm-cortex-m0","arm-cortex-m3","arm-cortex-m4","arm-cortex-m7","embedded","embedded-c","event-driven","framework","hierarchical-state-machine","qp","rtos","samek","state-machine","statechart","uml-state-machine"],"created_at":"2024-08-04T04:00:59.345Z","updated_at":"2025-05-14T22:31:26.080Z","avatar_url":"https://github.com/QuantumLeaps.png","language":"C","readme":"![QP Framework](https://www.state-machine.com/img/qp_banner.jpg)\n\n# What's New?\n\n[![GitHub release (latest by date)](https://img.shields.io/github/v/release/QuantumLeaps/qpc)](https://github.com/QuantumLeaps/qpc/releases/latest)\n\nView QP/C Revision History at: https://www.state-machine.com/qpc/history.html\n\n\u003e **NOTE:** If you're interested in the latest QP/C version from GitHub,\nit is recommended that you clone this repo like that:\n\n```\ngit clone https://github.com/QuantumLeaps/qpc --recurse-submodules --depth 1\n```\n\nAlternatively, you can also download one of the stable\n[QP/C Releases][QP-Rel].\n\n\n# Getting Started with QP/C\nThe most recommended way of obtaining QP/C is by downloading the\n[QP-bundle](https://www.state-machine.com/#Downloads), which includes QP/C\nas well as the [QM modeling tool][QM] and the [QTools collection][QTools].\nThe main advantage of obtaining QP/C bundled together like that is\nthat you get all components, tools and examples ready to go.\n\n### Getting Started Resources\n- [\"QP/C Tutorial\"][Tutorial]\ndescribes a series of progressively advanced QP/C example applications.\n\n- [Video: \"Getting Started with QP Real-Time Embedded Frameworks\"][Video]\nprovides instructions on how to download, install, and get started with QP.\n\n- [AppNote: \"Getting Started with QP Real-Time Embedded Frameworks\"][AN]\ncontains also a tutorial, in which you build a simple \"Blinky\" application.\n\n## Licensing\nThe QP frameworks (QP/C and QP/C++) are licensed under the\n[dual licensing model](https://www.state-machine.com/licensing), with\nthe following licensing options:\n\n1. [Open-source licensing](https://www.state-machine.com/licensing#Open) under the\n[GNU General Public License (GPLv3)](https://www.gnu.org/licenses/gpl-3.0.en.html).\n\n\u003e NOTE: GPL requires that all modifications to the original code\nas well as your application code (Derivative Works as defined in the\nCopyright Law) must also be released under the terms of the GPL\nopen source license.\n\n2. [Closed-source licensing](https://www.state-machine.com/licensing#Closed) under one of\n[Quantum Leaps commercial licenses](https://www.state-machine.com/licensing#Commercial),\nwhich are specifically designed for users interested in retaining the\nproprietary status of their code.\n\n\u003e NOTE: If your company has a policy forbidding open source in your product,\nall QP frameworks can be licensed commercially, in which case you don't use\nany open source license and you do not violate your policy.\n\n\n# About QP/C\nQP/C (Quantum Platform in C) is a lightweight, open source\n[Real-Time Embedded Framework (RTEF)][RTEF] for building modern embedded\nsoftware as systems of asynchronous, event-driven [Active Objects][Active]\n(actors). The [QP/C] framework is a member of a [QP] family consisting of\n[QP/C] and [QP/C++] frameworks, which are strictly quality controlled,\nthoroughly documented, and [commercially licensable][Lic].\n\n## Safer Model of Concurrency\nThe [QP] framework family implements the\n[Active Object model of computation][AO_model], which is **inherently safer**\nthan the traditional \"shared state concurrency\" based on explicit mutual\nexclusion and managing RTOS threads by blocking. The Active Object model\nsupports and automatically enforces the following best practices\nof concurrent programming:\n\n- Keep data isolated and bound to Active Objects' threads. Threads should\nhide (**encapsulate**) their private data and other resources, and not\nshare them with the rest of the system.\n\n- Communicate among Active Object threads **asynchronously** via [Event\nobjects][Event]. Using asynchronous events keeps the threads running truly\nindependently, **without blocking** on each other.\n\n- Active Object threads should spend their lifetime responding to incoming\nevents, so their mainline should consist of an **event-loop** that handles\nevents one at a time (to completion), thus avoiding any concurrency hazards\nwithin an Active Object thread itself.\n\nThis architecture also provides higher level of abstraction and the *correct*\nabstractions to effectively apply [Hierarchical State Machines][HSM],\n**modeling** and **code generation** to deeply embedded real-time systems.\n\n## Hierarchical State Machines\nThe behavior of Active Objects is specified in QP/C by means of\n[Hierarchical State Machines][HSM] (UML statecharts). The framework\nsupports manual coding of UML state machines in C as well as automatic\n**code generation** by means of the free [QM modeling tool][QM].\n\n## Built-in Real-Time Kernels\nThe QP/C framework can run on standalone on single-chip microcontrollers,\nwithout any traditional RTOS. The framework contains a selection of\n**built-in real-time kernels**, such as the [non-preemptive QV kernel][QV],\nthe [preemptive non-blocking QK kernel][QK], and the preemptive,\n[dual-mode QXK kernel][QXK] that provides all the features you might expect\nfrom a traditional RTOS. Native QP ports and ready-to-use examples are provided\nfor major CPUs, such as ARM Cortex-M (M0/M0+/M3/M4/M7/M23/M33/M85).\n\n## Traditional RTOS/OS\nQP/C can also work with a traditional RTOS, such as ThreadX, embOS, FreeRTOS,\nuC/OS-II and Zephyr, as well as with (embedded) Linux (POSIX) and Windows.\n\n## Popularity and Maturity\nWith 20 years of continuous development, [400+ commercial licensees][Cust],\nand many times more open source users worldwide, the QP frameworks are the\nmost popular such offering on the market. They power countless electronic\nproducts ranging from implantable medical devices to complex weapon systems.\n\n\n# QP/C Documentation\nThe online HTML documentation for the **latest** version of QP/C is located\nat: https://www.state-machine.com/qpc\n\nThe offline HTML documentation for **this** particular version of QP/C\nis located in the sub-folder [html](html) (included in the [QP/C releases][QP-Rel]).\nTo view the offline documentation, open the file [html/index.html](html/index.html)\nin your web browser.\n\n\n# How to Get Help?\n- [Free Support Forum](https://sourceforge.net/p/qpc/discussion/668726)\n- [Bug Reports](https://sourceforge.net/p/qpc/bugs/)\n- [Feature Requests](https://sourceforge.net/p/qpc/feature-requests/)\n- [Quantum Leaps website](https://www.state-machine.com)\n- [Quantum Leaps licensing](https://www.state-machine.com/licensing)\n- [info@state-machine.com](mailto:info@state-machine.com)\n\n\n# How to Help this Project?\nIf you like this project, please give it a star (in the upper-right corner of your browser window):\n\n![GitHub star](https://www.state-machine.com/img/github-star.jpg)\n\n   [RTEF]:   \u003chttps://www.state-machine.com/rtef\u003e\n   [QP]:     \u003chttps://www.state-machine.com/products/qp\u003e\n   [QP/C]:   \u003chttps://github.com/QuantumLeaps/qpc\u003e\n   [QP/C++]: \u003chttps://github.com/QuantumLeaps/qpcpp\u003e\n   [QM]:     \u003chttps://github.com/QuantumLeaps/qm\u003e\n   [QTools]: \u003chttps://github.com/QuantumLeaps/qtools\u003e\n   [QP-Rel]: \u003chttps://github.com/QuantumLeaps/qpc/releases\u003e\n   [Active]: \u003chttps://www.state-machine.com/qpc/srs-qp_ao.html\u003e\n   [AO_model]: \u003chttps://www.state-machine.com/qpc/srs-qp_ao.html#srs-qp_ao-model\u003e\n   [Event]:  \u003chttps://www.state-machine.com/qpc/srs-qp_evt.html\u003e\n   [HSM]:    \u003chttps://www.state-machine.com/qpc/srs-qp_sm.html\u003e\n   [Lic]:    \u003chttps://www.state-machine.com/licensing\u003e\n   [Cust]:   \u003chttps://www.state-machine.com/customers\u003e\n   [AN]:     \u003chttps://www.state-machine.com/doc/AN_Getting_Started_with_QP.pdf\u003e\n   [Tutorial]: \u003chttps://www.state-machine.com/qpc/gs_tut.html\u003e\n   [Video]:  \u003chttps://youtu.be/O7ER6_VqIH0\u003e\n","funding_links":[],"categories":["C","OS"],"sub_categories":["RTOS"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FQuantumLeaps%2Fqpc","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FQuantumLeaps%2Fqpc","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FQuantumLeaps%2Fqpc/lists"}