7.4.0-rc.3

This commit is contained in:
MMS 2024-07-19 19:23:03 -04:00
parent 950ab31089
commit 447007864e
50 changed files with 551 additions and 468 deletions

2
.gitignore vendored
View File

@ -1,3 +1,4 @@
*.qms
*.obj
*.o
*.d
@ -33,7 +34,6 @@
*.Debug
*.Release
*.bak
.qpcpp
version-*
JLink*.*

View File

@ -1,6 +1,6 @@
Any user of the QP/C++ real-time embedded framework
qpcpp
2024-12-31
2025-12-31
Copyright (C) 2005 Quantum Leaps, LLC <state-machine.com>.
@ -27,4 +27,4 @@ Plagiarizing this software to sidestep the license obligations is illegal.
Contact information:
<www.state-machine.com/licensing>
<info@state-machine.com>
#10EBA9166330240A6EE04F770591C48BE4545919
#CEF384A62BD9270573AA82386A5BE6F6E36AD848

View File

@ -13,10 +13,10 @@ License, version 3 ("GPLv3"). It applies to the QP/C++ and QP-nano
source code (the "QP Frameworks") that is distributed as part of the
QP-Arduino Support Package.
When you use QP Frameworks inside your program, the QP Frameworks' code
is combined with your code of the program. The purpose of this Exception
is to allow non-GPL (including proprietary) programs to use, in this way,
the QP Frameworks' code covered by this Exception.
When you use QP/C++ or QP-nano Frameworks inside your program, the frameworks'
code is combined with your code of the program. The purpose of this Exception
is to allow non-GPL (including proprietary) programs to use, in this way, the
QP Frameworks' code covered by this Exception.
0. Definitions.
"QP Frameworks" are lightweight real-time embedded frameworks (RTEFs)

View File

@ -7,11 +7,10 @@ Copyright (c) 2005-2021 Quantum Leaps, LLC. <https://www.state-machine.com/>
Everyone is permitted to copy and distribute verbatim copies of this
license document, but changing it is not allowed.
This QP/C++ and QP-nano Framework Exception for Arduino ("Exception")
This QP/C and QP/C++ Framework Exception for Raspberry Pi ("Exception")
is an additional permission under section 7 of the GNU General Public
License, version 3 ("GPLv3"). It applies to the QP/C++ and QP-nano
source code (the "QP Frameworks") that is distributed as part of the
QP-Arduino Support Package.
License, version 3 ("GPLv3"). It applies to the QP/C and QP/C++ source
code (the "QP Frameworks").
When you use QP Frameworks inside your program, the QP Frameworks' code
is combined with your code of the program. The purpose of this Exception
@ -24,23 +23,23 @@ as well as all supporting ports and examples, as distributed from:
<https://www.state-machine.com> and
<https://github.com/QuantumLeaps>
"Raspberry Pi" is a low cost, credit-card sized computer that is
designed by the Raspberry Pi Foundation based in the UK and registered
as UK educational charity under the number 1129409. For the purpose of
this license, Raspberry Pi means only genuine Raspberry Pi computer
bearing the Raspberry Pi logo, as described at
"Raspberry Pi" is a low cost, credit-card sized computer that is designed
by the Raspberry Pi Foundation based in the UK and registered as UK
educational charity under the number 1129409. For the purpose of this
license, Raspberry Pi means only genuine Raspberry Pi computer bearing
the Raspberry Pi logo, as described at:
<https://www.raspberrypi.com/trademark-rules>.
"Target Code" refers to output from any compiler and linker in
executable form suitable for execution by Raspberry Pi.
"Target Code" refers to output from any compiler and linker in executable
form suitable for execution by Raspberry Pi.
1. Grant of Additional Permission
As a special Exception, the copyright holder of QP Frameworks gives you
permission to propagate a work of Target Code formed by combining the QP
Frameworks with your own source code without the requirement to expose
your proprietary source code, provided that all Target Code will execute
on a genuine Raspberry Pi computer(s).
permission to propagate a work of Target Code formed by combining the
QP/C or QP/C++ Frameworks with your own source code without the requirement
to expose your propriatory source code, provided that all Target Code will
execute on a genuine Raspberry Pi computer(s).
2. No Weakening of GPL
The availability of this Exception does not imply any general

View File

@ -7,11 +7,10 @@ Copyright (c) 2005-2014 Quantum Leaps, LLC. <https://www.state-machine.com/>
Everyone is permitted to copy and distribute verbatim copies of this
license document, but changing it is not allowed.
This QP/C++ and QP-nano Framework Exception for Arduino ("Exception")
This QP/C and QP/C++ Framework Exception for ARM mbed ("Exception")
is an additional permission under section 7 of the GNU General Public
License, version 3 ("GPLv3"). It applies to the QP/C++ and QP-nano
source code (the "QP Frameworks") that is distributed as part of the
QP-Arduino Support Package.
License, version 3 ("GPLv3"). It applies to the QP/C and QP/C++ source
code (the "QP Frameworks").
When you use QP Frameworks inside your program, the QP Frameworks' code
is combined with your code of the program. The purpose of this Exception
@ -24,16 +23,15 @@ as well as all supporting ports and examples, as distributed from:
<https://www.state-machine.com> and
<https://github.com/QuantumLeaps>
"mbed-Enabled Board" means any board with an ARM Cortex-M CPU that is
listed on the official "mbed platforms" website
<https://os.mbed.com/platforms>.
"mbed-Enabled Board" means any board with an ARM Cortex-M CPU that is listed
on the official "mbed platforms" website <https://os.mbed.com/platforms>.
1. Grant of Additional Permission
As a special Exception, the copyright holder of QP Frameworks gives you
permission to propagate a work of Target Code formed by combining
the QP Frameworks with your own source code without the requirement
to expose your proprietary source code, provided that all Target Code will
permission to propagate a work of Target Code formed by combining the
QP/C or QP/C++ Frameworks with your own source code without the requirement
to expose your propriatory source code, provided that all Target Code will
execute on an "mbed-Enabled Board".
2. No Weakening of GPL

@ -1 +1 @@
Subproject commit 5f1b007ea70dd8ed5f7a727e7e83402c75f69146
Subproject commit 1d4093e9c95bbb3ec438d57fbc06c36361599ea4

View File

@ -3,14 +3,14 @@
// Model: qpcpp.qm
// File: ${include::qequeue.hpp}
//
// This code has been generated by QM 6.1.1 <www.state-machine.com/qm>.
// This code has been generated by QM 6.2.0 <www.state-machine.com/qm>.
// DO NOT EDIT THIS FILE MANUALLY. All your changes will be lost.
//
// This code is covered by the following QP license:
// License # : LicenseRef-QL-dual
// Issued to : Any user of the QP/C++ real-time embedded framework
// Framework(s) : qpcpp
// Support ends : 2024-12-31
// Support ends : 2025-12-31
// License scope:
//
// Copyright (C) 2005 Quantum Leaps, LLC <state-machine.com>.

View File

@ -3,14 +3,14 @@
// Model: qpcpp.qm
// File: ${include::qk.hpp}
//
// This code has been generated by QM 6.1.1 <www.state-machine.com/qm>.
// This code has been generated by QM 6.2.0 <www.state-machine.com/qm>.
// DO NOT EDIT THIS FILE MANUALLY. All your changes will be lost.
//
// This code is covered by the following QP license:
// License # : LicenseRef-QL-dual
// Issued to : Any user of the QP/C++ real-time embedded framework
// Framework(s) : qpcpp
// Support ends : 2024-12-31
// Support ends : 2025-12-31
// License scope:
//
// Copyright (C) 2005 Quantum Leaps, LLC <state-machine.com>.

View File

@ -3,14 +3,14 @@
// Model: qpcpp.qm
// File: ${include::qmpool.hpp}
//
// This code has been generated by QM 6.1.1 <www.state-machine.com/qm>.
// This code has been generated by QM 6.2.0 <www.state-machine.com/qm>.
// DO NOT EDIT THIS FILE MANUALLY. All your changes will be lost.
//
// This code is covered by the following QP license:
// License # : LicenseRef-QL-dual
// Issued to : Any user of the QP/C++ real-time embedded framework
// Framework(s) : qpcpp
// Support ends : 2024-12-31
// Support ends : 2025-12-31
// License scope:
//
// Copyright (C) 2005 Quantum Leaps, LLC <state-machine.com>.

View File

@ -3,14 +3,14 @@
// Model: qpcpp.qm
// File: ${include::qp.hpp}
//
// This code has been generated by QM 6.1.1 <www.state-machine.com/qm>.
// This code has been generated by QM 6.2.0 <www.state-machine.com/qm>.
// DO NOT EDIT THIS FILE MANUALLY. All your changes will be lost.
//
// This code is covered by the following QP license:
// License # : LicenseRef-QL-dual
// Issued to : Any user of the QP/C++ real-time embedded framework
// Framework(s) : qpcpp
// Support ends : 2024-12-31
// Support ends : 2025-12-31
// License scope:
//
// Copyright (C) 2005 Quantum Leaps, LLC <state-machine.com>.
@ -44,7 +44,7 @@
#define QP_HPP_
//============================================================================
#define QP_VERSION_STR "7.4.0-rc.1"
#define QP_VERSION_STR "7.4.0-rc.3"
#define QP_VERSION 740U
#define QP_RELEASE 0x7092C3BBU
@ -388,9 +388,6 @@ protected:
//${QEP::QHsm} ...............................................................
class QHsm : public QP::QAsm {
public:
static constexpr std::int_fast8_t MAX_NEST_DEPTH_{6};
protected:
explicit QHsm(QStateHandler const initial) noexcept;
@ -415,7 +412,7 @@ public:
private:
std::int_fast8_t hsm_tran(
QStateHandler (&path)[MAX_NEST_DEPTH_],
QStateHandler * const path,
std::uint_fast8_t const qsId);
}; // class QHsm

View File

@ -3,14 +3,14 @@
// Model: qpcpp.qm
// File: ${include::qp_pkg.hpp}
//
// This code has been generated by QM 6.1.1 <www.state-machine.com/qm>.
// This code has been generated by QM 6.2.0 <www.state-machine.com/qm>.
// DO NOT EDIT THIS FILE MANUALLY. All your changes will be lost.
//
// This code is covered by the following QP license:
// License # : LicenseRef-QL-dual
// Issued to : Any user of the QP/C++ real-time embedded framework
// Framework(s) : qpcpp
// Support ends : 2024-12-31
// Support ends : 2025-12-31
// License scope:
//
// Copyright (C) 2005 Quantum Leaps, LLC <state-machine.com>.

View File

@ -3,14 +3,14 @@
// Model: qpcpp.qm
// File: ${include::qpcpp.hpp}
//
// This code has been generated by QM 6.1.1 <www.state-machine.com/qm>.
// This code has been generated by QM 6.2.0 <www.state-machine.com/qm>.
// DO NOT EDIT THIS FILE MANUALLY. All your changes will be lost.
//
// This code is covered by the following QP license:
// License # : LicenseRef-QL-dual
// Issued to : Any user of the QP/C++ real-time embedded framework
// Framework(s) : qpcpp
// Support ends : 2024-12-31
// Support ends : 2025-12-31
// License scope:
//
// Copyright (C) 2005 Quantum Leaps, LLC <state-machine.com>.

View File

@ -3,14 +3,14 @@
// Model: qpcpp.qm
// File: ${include::qs.hpp}
//
// This code has been generated by QM 6.1.1 <www.state-machine.com/qm>.
// This code has been generated by QM 6.2.0 <www.state-machine.com/qm>.
// DO NOT EDIT THIS FILE MANUALLY. All your changes will be lost.
//
// This code is covered by the following QP license:
// License # : LicenseRef-QL-dual
// Issued to : Any user of the QP/C++ real-time embedded framework
// Framework(s) : qpcpp
// Support ends : 2024-12-31
// Support ends : 2025-12-31
// License scope:
//
// Copyright (C) 2005 Quantum Leaps, LLC <state-machine.com>.
@ -151,9 +151,9 @@ enum QSpyPre : std::int8_t {
QS_ENUM_DICT, //!< enumeration dictionary entry
// [55] Additional QEP records
QS_QEP_TRAN_HIST, //!< a tran to history was taken
QS_QEP_TRAN_EP, //!< a tran to entry point into a submachine
QS_QEP_TRAN_XP, //!< a tran to exit point out of a submachine
QS_QEP_TRAN_HIST, //!< a tran. to history was taken
QS_QEP_TRAN_EP, //!< a tran. to entry point into a submachine
QS_QEP_TRAN_XP, //!< a tran. to exit point out of a submachine
// [58] Miscellaneous QS records (not maskable)
QS_TEST_PAUSED, //!< test has been paused

View File

@ -3,14 +3,14 @@
// Model: qpcpp.qm
// File: ${include::qs_dummy.hpp}
//
// This code has been generated by QM 6.1.1 <www.state-machine.com/qm>.
// This code has been generated by QM 6.2.0 <www.state-machine.com/qm>.
// DO NOT EDIT THIS FILE MANUALLY. All your changes will be lost.
//
// This code is covered by the following QP license:
// License # : LicenseRef-QL-dual
// Issued to : Any user of the QP/C++ real-time embedded framework
// Framework(s) : qpcpp
// Support ends : 2024-12-31
// Support ends : 2025-12-31
// License scope:
//
// Copyright (C) 2005 Quantum Leaps, LLC <state-machine.com>.

View File

@ -3,14 +3,14 @@
// Model: qpcpp.qm
// File: ${include::qs_pkg.hpp}
//
// This code has been generated by QM 6.1.1 <www.state-machine.com/qm>.
// This code has been generated by QM 6.2.0 <www.state-machine.com/qm>.
// DO NOT EDIT THIS FILE MANUALLY. All your changes will be lost.
//
// This code is covered by the following QP license:
// License # : LicenseRef-QL-dual
// Issued to : Any user of the QP/C++ real-time embedded framework
// Framework(s) : qpcpp
// Support ends : 2024-12-31
// Support ends : 2025-12-31
// License scope:
//
// Copyright (C) 2005 Quantum Leaps, LLC <state-machine.com>.

View File

@ -3,14 +3,14 @@
// Model: qpcpp.qm
// File: ${include::qstamp.hpp}
//
// This code has been generated by QM 6.1.1 <www.state-machine.com/qm>.
// This code has been generated by QM 6.2.0 <www.state-machine.com/qm>.
// DO NOT EDIT THIS FILE MANUALLY. All your changes will be lost.
//
// This code is covered by the following QP license:
// License # : LicenseRef-QL-dual
// Issued to : Any user of the QP/C++ real-time embedded framework
// Framework(s) : qpcpp
// Support ends : 2024-12-31
// Support ends : 2025-12-31
// License scope:
//
// Copyright (C) 2005 Quantum Leaps, LLC <state-machine.com>.

View File

@ -3,14 +3,14 @@
// Model: qpcpp.qm
// File: ${include::qv.hpp}
//
// This code has been generated by QM 6.1.1 <www.state-machine.com/qm>.
// This code has been generated by QM 6.2.0 <www.state-machine.com/qm>.
// DO NOT EDIT THIS FILE MANUALLY. All your changes will be lost.
//
// This code is covered by the following QP license:
// License # : LicenseRef-QL-dual
// Issued to : Any user of the QP/C++ real-time embedded framework
// Framework(s) : qpcpp
// Support ends : 2024-12-31
// Support ends : 2025-12-31
// License scope:
//
// Copyright (C) 2005 Quantum Leaps, LLC <state-machine.com>.

View File

@ -3,14 +3,14 @@
// Model: qpcpp.qm
// File: ${include::qxk.hpp}
//
// This code has been generated by QM 6.1.1 <www.state-machine.com/qm>.
// This code has been generated by QM 6.2.0 <www.state-machine.com/qm>.
// DO NOT EDIT THIS FILE MANUALLY. All your changes will be lost.
//
// This code is covered by the following QP license:
// License # : LicenseRef-QL-dual
// Issued to : Any user of the QP/C++ real-time embedded framework
// Framework(s) : qpcpp
// Support ends : 2024-12-31
// Support ends : 2025-12-31
// License scope:
//
// Copyright (C) 2005 Quantum Leaps, LLC <state-machine.com>.

View File

@ -22,7 +22,7 @@
// <www.state-machine.com/licensing>
// <info@state-machine.com>
//============================================================================
//! @date Last updated on: 2024-06-11
//! @date Last updated on: 2024-07-18
//! @version Last updated for: @ref qpcpp_7_4_0
//!
//! @file
@ -65,7 +65,45 @@ static int_t l_tickPrio; // priority of the ticker thread
constexpr long NSEC_PER_SEC {1000000000L};
constexpr long DEFAULT_TICKS_PER_SEC {100L};
//============================================================================
//----------------------------------------------------------------------------
#ifdef __APPLE__
constexpr int TIMER_ABSTIME {0};
// emulate clock_nanosleep() for CLOCK_MONOTONIC and TIMER_ABSTIME
static inline int clock_nanosleep(clockid_t clockid, int flags,
const struct timespec* t,
struct timespec* remain)
{
Q_UNUSED_PAR(clockid);
Q_UNUSED_PAR(flags);
Q_UNUSED_PAR(remain);
struct timespec ts_delta;
clock_gettime(CLOCK_MONOTONIC, &ts_delta);
ts_delta.tv_sec = t->tv_sec - ts_delta.tv_sec;
ts_delta.tv_nsec = t->tv_nsec - ts_delta.tv_nsec;
if (ts_delta.tv_sec < 0) {
ts_delta.tv_sec = 0;
ts_delta.tv_nsec = 0;
}
else if (ts_delta.tv_nsec < 0) {
if (ts_delta.tv_sec == 0) {
ts_delta.tv_sec = 0;
ts_delta.tv_nsec = 0;
}
else {
ts_delta.tv_sec = ts_delta.tv_sec - 1;
ts_delta.tv_nsec = ts_delta.tv_nsec + NSEC_PER_SEC;
}
}
return nanosleep(&ts_delta, NULL);
}
#endif
//----------------------------------------------------------------------------
static void *ticker_thread(void *arg); // prototype
static void *ticker_thread(void *arg) { // for pthread_create()
Q_UNUSED_PAR(arg);
@ -130,14 +168,14 @@ static int_t l_critSectNest; // critical section nesting up-down counter
void enterCriticalSection_() {
if (l_isRunning) {
pthread_mutex_lock(&l_critSectMutex_);
Q_ASSERT_INCRIT(100, l_critSectNest == 0); // NO nesting of crit.sect!
Q_ASSERT_INCRIT(101, l_critSectNest == 0); // NO nesting of crit.sect!
++l_critSectNest;
}
}
//............................................................................
void leaveCriticalSection_() {
if (l_isRunning) {
Q_ASSERT_INCRIT(200, l_critSectNest == 1); // crit.sect. must ballace!
Q_ASSERT_INCRIT(102, l_critSectNest == 1); // crit.sect. must balance!
if ((--l_critSectNest) == 0) {
pthread_mutex_unlock(&l_critSectMutex_);
}
@ -359,7 +397,6 @@ void QActive::start(QPrioSpec const prioSpec,
this->init(par, m_prio);
QS_FLUSH(); // flush the trace buffer to the host
}
//............................................................................
#ifdef QACTIVE_CAN_STOP
void QActive::stop() {

View File

@ -22,8 +22,8 @@
// <www.state-machine.com>
// <info@state-machine.com>
//============================================================================
//! @date Last updated on: 2023-12-13
//! @version Last updated for: @ref qpcpp_7_3_2
//! @date Last updated on: 2024-07-18
//! @version Last updated for: @ref qpcpp_7_4_0
//!
//! @file
//! @brief QS/C++ port to POSIX
@ -237,7 +237,7 @@ void QS::onFlush() {
//............................................................................
QSTimeCtr QS::onGetTime() {
struct timespec tspec;
clock_gettime(CLOCK_MONOTONIC_RAW, &tspec);
clock_gettime(CLOCK_MONOTONIC, &tspec);
// convert to units of 0.1 microsecond
QSTimeCtr time = (QSTimeCtr)(tspec.tv_sec * 10000000 + tspec.tv_nsec / 100);

View File

@ -22,7 +22,7 @@
// <www.state-machine.com/licensing>
// <info@state-machine.com>
//============================================================================
//! @date Last updated on: 2024-06-11
//! @date Last updated on: 2024-07-18
//! @version Last updated for: @ref qpcpp_7_4_0
//!
//! @file
@ -80,6 +80,44 @@ static void *ao_thread(void *arg) { // thread routine for all AOs
return nullptr; // return success
}
//----------------------------------------------------------------------------
#ifdef __APPLE__
constexpr int TIMER_ABSTIME {0};
// emulate clock_nanosleep() for CLOCK_MONOTONIC and TIMER_ABSTIME
static inline int clock_nanosleep(clockid_t clockid, int flags,
const struct timespec* t,
struct timespec* remain)
{
Q_UNUSED_PAR(clockid);
Q_UNUSED_PAR(flags);
Q_UNUSED_PAR(remain);
struct timespec ts_delta;
clock_gettime(CLOCK_MONOTONIC, &ts_delta);
ts_delta.tv_sec = t->tv_sec - ts_delta.tv_sec;
ts_delta.tv_nsec = t->tv_nsec - ts_delta.tv_nsec;
if (ts_delta.tv_sec < 0) {
ts_delta.tv_sec = 0;
ts_delta.tv_nsec = 0;
}
else if (ts_delta.tv_nsec < 0) {
if (ts_delta.tv_sec == 0) {
ts_delta.tv_sec = 0;
ts_delta.tv_nsec = 0;
}
else {
ts_delta.tv_sec = ts_delta.tv_sec - 1;
ts_delta.tv_nsec = ts_delta.tv_nsec + NSEC_PER_SEC;
}
}
return nanosleep(&ts_delta, NULL);
}
#endif
} // unnamed local namespace
//============================================================================
@ -95,12 +133,12 @@ int_t critSectNest_;
//............................................................................
void enterCriticalSection_() {
pthread_mutex_lock(&critSectMutex_);
Q_ASSERT_INCRIT(100, critSectNest_ == 0); // NO nesting of crit.sect!
Q_ASSERT_INCRIT(101, critSectNest_ == 0); // NO nesting of crit.sect!
++critSectNest_;
}
//............................................................................
void leaveCriticalSection_() {
Q_ASSERT_INCRIT(200, critSectNest_ == 1); // crit.sect. must ballace!
Q_ASSERT_INCRIT(102, critSectNest_ == 1); // crit.sect. must balance!
if ((--critSectNest_) == 0) {
pthread_mutex_unlock(&critSectMutex_);
}
@ -252,7 +290,7 @@ int consoleWaitForKey() {
} // namespace QF
//============================================================================
// QActive functions =========================================================
void QActive::evtLoop_(QActive *act) {
// block this thread until the startup mutex is unlocked from QF::run()
pthread_mutex_lock(&l_startupMutex);
@ -338,7 +376,6 @@ void QActive::start(QPrioSpec const prioSpec,
pthread_attr_destroy(&attr);
}
//............................................................................
#ifdef QACTIVE_CAN_STOP
void QActive::stop() {

View File

@ -22,8 +22,8 @@
// <www.state-machine.com>
// <info@state-machine.com>
//============================================================================
//! @date Last updated on: 2023-12-13
//! @version Last updated for: @ref qpcpp_7_3_2
//! @date Last updated on: 2024-07-18
//! @version Last updated for: @ref qpcpp_7_4_0
//!
//! @file
//! @brief QS/C++ port to POSIX
@ -237,7 +237,7 @@ void QS::onFlush() {
//............................................................................
QSTimeCtr QS::onGetTime() {
struct timespec tspec;
clock_gettime(CLOCK_MONOTONIC_RAW, &tspec);
clock_gettime(CLOCK_MONOTONIC, &tspec);
// convert to units of 0.1 microsecond
QSTimeCtr time = (QSTimeCtr)(tspec.tv_sec * 10000000 + tspec.tv_nsec / 100);

181
qpcpp.md5
View File

@ -1,181 +0,0 @@
67279dff151fd1c78ec44fcbf7d38a83 *qpcpp.qm
2c7717f261e842ae0449a321d3c50f3e *include/qequeue.hpp
fe1ff6084ff592ca8d14a6efffec296c *include/qk.hpp
0cf7c36bbbca2e0ebfe61347e9e572e5 *include/qmpool.hpp
c53660e6bdc9a4a449b67238a3cab402 *include/qp.hpp
61c7a3aa8cb265f478915f39b7fae9cc *include/qp_pkg.hpp
5fd2515efbc5c06e02bb1a4200490b58 *include/qpcpp.hpp
be2da5d56117fd172f12c8b6589f6402 *include/qs.hpp
d59808009be96849963572ffcbf9dceb *include/qs_dummy.hpp
db4013ceefb33498f5d38e15d0cb9323 *include/qs_pkg.hpp
f59bf88705afe5b0acc999f8b47a6745 *include/qsafe.h
e66cf5dd191fb0e7c1f8660fb477b860 *include/qstamp.hpp
d42a19307ba3c0c5b890431767f35b42 *include/qv.hpp
c0bc33e3823dde00803a301c4b85637d *include/qxk.hpp
ccc88dc7734a312ee0e33c437db7f3eb *src/qf/CMakeLists.txt
3818b4ab7f65c89aa625026cb2239d64 *src/qf/qep_hsm.cpp
ef8a65f8e71d162b23847fdac5d25a77 *src/qf/qep_msm.cpp
8b5c1ece58069ed5582864fd2dc58167 *src/qf/qf_act.cpp
919a274413898e2e929e44eba29a4712 *src/qf/qf_actq.cpp
39b02b596faa57abfa96b0f7c3f7fb82 *src/qf/qf_defer.cpp
fb9824985c3657f8016f3cf339b1f6e1 *src/qf/qf_dyn.cpp
83d38b1377e52db75950f1a4d4b47e8a *src/qf/qf_mem.cpp
37cfa5b9419f1e00608267ff29fbc1a8 *src/qf/qf_ps.cpp
19cf8976578a43e93bfbb51dbe932b6c *src/qf/qf_qact.cpp
c412dc07bc76eadbfb9d9d54e3206ed7 *src/qf/qf_qeq.cpp
816dc7182f4014539f6f5304782ddb7b *src/qf/qf_qmact.cpp
c551aafbf9ecba93cfdb12f81fbfba61 *src/qf/qf_time.cpp
4dc7ca60248f4c13034e6f2481c7663d *src/qk/CMakeLists.txt
1a314e2a9fba927f6648772121790c5f *src/qk/qk.cpp
2557d617414f8cbdcbfeaab619d296bb *src/qs/CMakeLists.txt
bd1870c2a952b47ef613cc67406aca80 *src/qs/qs.cpp
a2ca20b2332d025067645839e4b25711 *src/qs/qs_64bit.cpp
8f6551c7786fdbb106c3d1bc7824c060 *src/qs/qs_fp.cpp
4af89f114491668f7a26af694ff11993 *src/qs/qs_rx.cpp
2655cd10d009075b71a84368fb6bf4d4 *src/qs/qstamp.cpp
f94d98e4b0ce47d5c2e3b99f3eba0ad1 *src/qs/qutest.cpp
cf2fae9b29aab50c5cd69d7d519cb0db *src/qv/CMakeLists.txt
abfb725ec432f1f56b72e2be4c62e9d3 *src/qv/qv.cpp
3c916b7d6a6ce58963153f51801858df *src/qxk/CMakeLists.txt
7fed39c66ef913b79b82116b54af21de *src/qxk/qxk.cpp
309a3f6772f0cadfa8e50b545852b995 *src/qxk/qxk_mutex.cpp
ce5ff1926bd91dd8683e0232d3e1d471 *src/qxk/qxk_sema.cpp
78ec1d0d6aa9efbdc8b3d09e6deea40e *src/qxk/qxk_xthr.cpp
bf56a383eb7dafafa408d6219b585b40 *ports/lint-plus/au-autosar.lnt
e3e3f3000f9a80a446255ef52f3a6299 *ports/lint-plus/au-autosar19.lnt
2a8fea61bccbe5e8c7536a29f2ec8e98 *ports/lint-plus/au-ds.lnt
ede719cdbc201d14586a3f11e77ced26 *ports/lint-plus/au-ql-cpp11.lnt
3935c8cc585d08999ba9fb9055cc3705 *ports/lint-plus/options.lnt
1b5e00e26e585610472a2a9d93a69a86 *ports/lint-plus/qpcpp.lnt
5f789348dba099c2055f737ba756faac *ports/lint-plus/std.lnt
1f3d9dfbf71077abbdb9f27c96879101 *ports/arm-cm/qk/armclang/qk_port.cpp
aba379ac6a39b1f21057bed8156f0516 *ports/arm-cm/qk/armclang/qp_port.hpp
41482d0d440eee366e7b4814c6d10235 *ports/arm-cm/qk/armclang/qs_port.hpp
da7e124adad7bbfb1f2f970d13a5d5f1 *ports/arm-cm/qk/config/qp_config.hpp
ef801586265ec37c619a8fe9868220d8 *ports/arm-cm/qk/gnu/qk_port.cpp
c6227ba01b71184c9e03ee6c8137ffc2 *ports/arm-cm/qk/gnu/qp_port.hpp
41482d0d440eee366e7b4814c6d10235 *ports/arm-cm/qk/gnu/qs_port.hpp
01fd92d735fe42035f26eccc0ba83d4b *ports/arm-cm/qk/iar/qk_port.cpp
98e1649f0c8fb4efc200767a32514ea4 *ports/arm-cm/qk/iar/qp_port.hpp
41482d0d440eee366e7b4814c6d10235 *ports/arm-cm/qk/iar/qs_port.hpp
1b7ab4c3d54bd187f07b7f24527f95d8 *ports/arm-cm/qv/armclang/qp_port.hpp
41482d0d440eee366e7b4814c6d10235 *ports/arm-cm/qv/armclang/qs_port.hpp
2edb1e42edf2d7fce80120a780396f5a *ports/arm-cm/qv/armclang/qv_port.cpp
2ac68f3f51ff26608df023c17c6c3265 *ports/arm-cm/qv/config/qp_config.hpp
03aa01a02561593169bfb4b563c7fc29 *ports/arm-cm/qv/gnu/qp_port.hpp
41482d0d440eee366e7b4814c6d10235 *ports/arm-cm/qv/gnu/qs_port.hpp
57ae9990dab9cbab2b2c4234fdab42d0 *ports/arm-cm/qv/gnu/qv_port.cpp
342f4a28c22e1d092b135636456b6400 *ports/arm-cm/qv/iar/qp_port.hpp
41482d0d440eee366e7b4814c6d10235 *ports/arm-cm/qv/iar/qs_port.hpp
fed596b153b928c8631e2712361049af *ports/arm-cm/qv/iar/qv_port.cpp
fbab3cb88a019df3a12ee56a4a6f90b2 *ports/arm-cm/qxk/armclang/qp_port.hpp
41482d0d440eee366e7b4814c6d10235 *ports/arm-cm/qxk/armclang/qs_port.hpp
3e6878ba5e8df9ed733edf9f2da2ae9e *ports/arm-cm/qxk/armclang/qxk_port.cpp
f96ba44c9c5d16e5a12c70f4b9a91228 *ports/arm-cm/qxk/config/qp_config.hpp
246d7b72e2f0c1e3ba6e699740dbe390 *ports/arm-cm/qxk/gnu/qp_port.hpp
41482d0d440eee366e7b4814c6d10235 *ports/arm-cm/qxk/gnu/qs_port.hpp
f12841a5d59075aa3e1e9cfb683c4b98 *ports/arm-cm/qxk/gnu/qxk_port.cpp
55b897c657e225d775cf6121d6278585 *ports/arm-cm/qxk/iar/qp_port.hpp
41482d0d440eee366e7b4814c6d10235 *ports/arm-cm/qxk/iar/qs_port.hpp
bcb7406483cc9280c2b05113f6078cb6 *ports/arm-cm/qxk/iar/qxk_port.cpp
0f3ac7def7c330e85912d95527c94ebc *ports/arm-cm/qutest/qp_port.hpp
41482d0d440eee366e7b4814c6d10235 *ports/arm-cm/qutest/qs_port.hpp
0b1aa9a3a51511f60cb9c94fd467d42a *ports/arm-cr/qk/config/qp_config.hpp
0d2162273e16e4d6ad3e71b19ec7ca45 *ports/arm-cr/qk/gnu/qp_port.hpp
41482d0d440eee366e7b4814c6d10235 *ports/arm-cr/qk/gnu/qs_port.hpp
b752ce288855bf410176fa39a6dffb27 *ports/arm-cr/qk/iar/qp_port.hpp
41482d0d440eee366e7b4814c6d10235 *ports/arm-cr/qk/iar/qs_port.hpp
8dc7c7e3e4c9d65299030b2769381f1a *ports/arm-cr/qk/ti/qp_port.hpp
41482d0d440eee366e7b4814c6d10235 *ports/arm-cr/qk/ti/qs_port.hpp
a2b9a032a510488006b8ad612e061fc6 *ports/arm-cr/qv/gnu/qp_port.hpp
41482d0d440eee366e7b4814c6d10235 *ports/arm-cr/qv/gnu/qs_port.hpp
526e806ca856fef6f16e44a58ab3d89d *ports/arm-cr/qv/iar/qp_port.hpp
41482d0d440eee366e7b4814c6d10235 *ports/arm-cr/qv/iar/qs_port.hpp
0b426a92acaee631bad6c87e6623612a *ports/arm-cr/qv/ti/qp_port.hpp
41482d0d440eee366e7b4814c6d10235 *ports/arm-cr/qv/ti/qs_port.hpp
3dc3f0903feca56ec1075f412a33ce93 *ports/msp430/qk/qp_port.hpp
9fe0bc88c876080155359beef966d20e *ports/msp430/qk/qs_port.hpp
4bbd4f9996670ccabb7da4a47bad6c20 *ports/msp430/qv/qp_port.hpp
9fe0bc88c876080155359beef966d20e *ports/msp430/qv/qs_port.hpp
e263c1dff4c90e29da7250e9581872bc *ports/msp430/qutest/qp_port.hpp
9fe0bc88c876080155359beef966d20e *ports/msp430/qutest/qs_port.hpp
93766c6a0c4b71d4ab3325448f2123c1 *ports/pic32/qk/xc32/qk_port.cpp
77dc85dd965856b92713b053a9e5456c *ports/pic32/qk/xc32/qp_port.hpp
41482d0d440eee366e7b4814c6d10235 *ports/pic32/qk/xc32/qs_port.hpp
c40714b55d55e955163ba501bc76486b *ports/pic32/qv/xc32/qp_port.hpp
41482d0d440eee366e7b4814c6d10235 *ports/pic32/qv/xc32/qs_port.hpp
f06c0d53c5c9918f08e99e01e20af046 *ports/pic32/qutest/xc32/qp_port.hpp
41482d0d440eee366e7b4814c6d10235 *ports/pic32/qutest/xc32/qs_port.hpp
bbfb2c7c7901538009f523b4837501cd *ports/config/qp_config.hpp
906dd67f13bf4cdfb83afc1c59c57ed2 *ports/embos/CMakeLists.txt
ea7316a161f815978b90d97060e58fcb *ports/embos/qf_port.cpp
0d7461d523df40ff7e33b0be5ae47048 *ports/embos/qp_port.hpp
41482d0d440eee366e7b4814c6d10235 *ports/embos/qs_port.hpp
bb18f0378bf49ece5551b7631efc3229 *ports/freertos/CMakeLists.txt
4160d8c1a4d8b68911d114e307e94d0e *ports/freertos/qf_port.cpp
0c444889e3db0ba221db1421d7a48d64 *ports/freertos/qp_port.hpp
41482d0d440eee366e7b4814c6d10235 *ports/freertos/qs_port.hpp
75e3906b6c068c7b59cf0c9a7a3c7454 *ports/threadx/CMakeLists.txt
5f101ee6196059ca3c75e021bfe1cee9 *ports/threadx/qf_port.cpp
50f5bd76fc61e90edb546f2e11fc39e8 *ports/threadx/qp_port.hpp
41482d0d440eee366e7b4814c6d10235 *ports/threadx/qs_port.hpp
23b496a982c574af2a47d01eb79e47f2 *ports/threadx/README.md
ae8b2f8b0649c8dfacbf6495fa560ad8 *ports/uc-os2/CMakeLists.txt
fb01e64494ac92398662cbbedfdd1cbf *ports/uc-os2/qf_port.cpp
f3c0b50eb1d3db891235d862dc398c18 *ports/uc-os2/qp_port.hpp
41482d0d440eee366e7b4814c6d10235 *ports/uc-os2/qs_port.hpp
bb83d2a07ba0eb25a09bd64da602e3fa *ports/qep-only/CMakeLists.txt
ec8563c61bcb8cb4682b7bc4ffc67d0a *ports/qep-only/qp_port.hpp
7955fc33c291eb6b8ebabaae0d6bd0da *ports/qep-only/safe_std.h
a29450c971859f6191f37c937b012eae *ports/posix/CMakeLists.txt
48df897b919e1dce4d1bb557c0a86b17 *ports/posix/qf_port.cpp
52e4d5e5d1113a3a0831aac6a44a3d21 *ports/posix/qp_port.hpp
ae25ce9cf24260ec8affa08170f9d15a *ports/posix/qs_port.cpp
91e88a47256436209fc651881283230d *ports/posix/qs_port.hpp
f45c6f63edac95fd0b5d9cbeaa1f3926 *ports/posix/README.md
7955fc33c291eb6b8ebabaae0d6bd0da *ports/posix/safe_std.h
bbfb6bd8a58a8d5591f61b05b460cec5 *ports/posix-qv/CMakeLists.txt
0db2a5dbadf8d3163ccd1d65b5783c0f *ports/posix-qv/qf_port.cpp
221db06f9b4381533c738f1ca177f8cf *ports/posix-qv/qp_port.hpp
ae25ce9cf24260ec8affa08170f9d15a *ports/posix-qv/qs_port.cpp
91e88a47256436209fc651881283230d *ports/posix-qv/qs_port.hpp
72ee0355e2e9b6bd2a1e4c32480f361a *ports/posix-qv/README.md
7955fc33c291eb6b8ebabaae0d6bd0da *ports/posix-qv/safe_std.h
2171085568a15c190c72b106ea3c11b6 *ports/posix-qutest/CMakeLists.txt
384bfe4407650c5c3131331cf842897e *ports/posix-qutest/qp_port.hpp
91e88a47256436209fc651881283230d *ports/posix-qutest/qs_port.hpp
5db99668a338817320a34b9a7297bcd8 *ports/posix-qutest/qutest_port.cpp
0ac7e3d28e684d07baacdcd0d3e65c4a *ports/posix-qutest/README.md
7955fc33c291eb6b8ebabaae0d6bd0da *ports/posix-qutest/safe_std.h
84541985a09da4e23055531452d74a02 *ports/win32/CMakeLists.txt
10a6569ae463ce7f8a158aec7f3f9b8c *ports/win32/qf_port.cpp
fc5a9085222501f994b6d517d6624a52 *ports/win32/qp_port.hpp
f1502789b885b14d05b6e162e0e39d00 *ports/win32/qs_port.cpp
91e88a47256436209fc651881283230d *ports/win32/qs_port.hpp
a1c6143aa627599750360c58f4740129 *ports/win32/qwin_gui.c
64172552524a5e6449168adedfd858b0 *ports/win32/qwin_gui.h
84d25d92b6521b22736719d3ed33c289 *ports/win32/README.md
7955fc33c291eb6b8ebabaae0d6bd0da *ports/win32/safe_std.h
1f5c35a874db6752d1ec17f4b8ee4c19 *ports/win32-qv/CMakeLists.txt
77375dc31716e07afe9fa1b4d890d00b *ports/win32-qv/qf_port.cpp
38fbe14322593c37bdfe39c121e058fb *ports/win32-qv/qp_port.hpp
f1502789b885b14d05b6e162e0e39d00 *ports/win32-qv/qs_port.cpp
91e88a47256436209fc651881283230d *ports/win32-qv/qs_port.hpp
a1c6143aa627599750360c58f4740129 *ports/win32-qv/qwin_gui.c
64172552524a5e6449168adedfd858b0 *ports/win32-qv/qwin_gui.h
4b910f53af0a91e12da39391840e396d *ports/win32-qv/README.md
7955fc33c291eb6b8ebabaae0d6bd0da *ports/win32-qv/safe_std.h
3d3f6d71f8afe29ec99b50b17fa84b65 *ports/win32-qutest/CMakeLists.txt
384bfe4407650c5c3131331cf842897e *ports/win32-qutest/qp_port.hpp
91e88a47256436209fc651881283230d *ports/win32-qutest/qs_port.hpp
2a4e8cad19f0f30686ca79154fc5ecf8 *ports/win32-qutest/qutest_port.cpp
7955fc33c291eb6b8ebabaae0d6bd0da *ports/win32-qutest/safe_std.h
1595522f609b1198a88aff4523334557 *zephyr/CMakeLists.txt
34e76b00e1368216110b5d52d4f11a25 *zephyr/Kconfig
2140500a5b230057a2a6ed4b613f6353 *zephyr/module.yml
7aa7d1eca97fe53b0a35c2141f293425 *zephyr/qf_port.cpp
0076e0da63938ff838dd5736b6a309da *zephyr/qp-zephyr.jpg
d9954ecb81ec8113083097b342a6d97e *zephyr/qp_port.hpp
0c3ef4ec33d22d9d35913de60f500852 *zephyr/qs_port.hpp
78f9eb187a30758d7d9b002473d900fc *zephyr/qutest_port.cpp
90e5de20bfd5c83026f0c94085668e6d *zephyr/README.md

148
qpcpp.qm
View File

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<model version="6.1.1" links="1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://www.state-machine.com/qm/qm.xsd">
<model version="6.2.0" links="1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://www.state-machine.com/qm/qm.xsd">
<documentation>QP/C++ Real-Time Embedded Framework (RTEF)
The model is used to generate the whole QP/C++ source code.
@ -25,7 +25,38 @@ Contact information:
&lt;www.state-machine.com/licensing&gt;
&lt;info@state-machine.com&gt;</documentation>
<!--${qpcpp}-->
<framework name="qpcpp" license="LICENSES/LicenseRef-QL-dual.qlc"/>
<framework name="qpcpp">
<license name="LicenseRef-QL-dual">Any user of the QP/C++ real-time embedded framework
qpcpp
2025-12-31
Copyright (C) 2005 Quantum Leaps, LLC &lt;state-machine.com&gt;.
Q u a n t u m L e a P s
------------------------
Modern Embedded Software
SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-QL-commercial
This software is dual-licensed under the terms of the open source GNU
General Public License version 3 (or any later version), or alternatively,
under the terms of one of the closed source Quantum Leaps commercial
licenses.
The terms of the open source GNU General Public License version 3
can be found at: &lt;www.gnu.org/licenses/gpl-3.0&gt;
The terms of the closed source Quantum Leaps commercial licenses
can be found at: &lt;www.state-machine.com/licensing&gt;
Redistributions in source code must retain this top-level comment block.
Plagiarizing this software to sidestep the license obligations is illegal.
Contact information:
&lt;www.state-machine.com/licensing&gt;
&lt;info@state-machine.com&gt;
#CEF384A62BD9270573AA82386A5BE6F6E36AD848</license>
</framework>
<!--${glob-types}-->
<package name="glob-types" stereotype="0x00">
<!--${glob-types::int_t}-->
@ -412,10 +443,6 @@ return Q_RET_SUPER_SUB;</code>
<!--${QEP::QHsm}-->
<class name="QHsm" superclass="QEP::QAsm">
<documentation>Human-generated State Machine</documentation>
<!--${QEP::QHsm::MAX_NEST_DEPTH_}-->
<attribute name="MAX_NEST_DEPTH_" type="static constexpr std::int_fast8_t" visibility="0x04" properties="0x01">
<code>{6};</code>
</attribute>
<!--${QEP::QHsm::QHsm}-->
<operation name="QHsm" type="explicit" visibility="0x01" properties="0x00">
<specifiers>noexcept</specifiers>
@ -478,20 +505,20 @@ QF_CRIT_EXIT();
// drill down into the state hierarchy with initial transitions...
do {
QStateHandler path[MAX_NEST_DEPTH_]; // tran entry path array
std::int_fast8_t ip = 0; // tran entry path index
QStateHandler path[QHSM_MAX_NEST_DEPTH_]; // tran. entry path array
std::int_fast8_t ip = 0; // tran. entry path index
path[0] = m_temp.fun;
static_cast&lt;void&gt;(QHSM_RESERVED_EVT_(m_temp.fun, Q_EMPTY_SIG));
// note: ip is here the fixed upper loop bound
while ((m_temp.fun != t) &amp;&amp; (ip &lt; (MAX_NEST_DEPTH_ - 1))) {
while ((m_temp.fun != t) &amp;&amp; (ip &lt; (QHSM_MAX_NEST_DEPTH_ - 1))) {
++ip;
path[ip] = m_temp.fun;
static_cast&lt;void&gt;(QHSM_RESERVED_EVT_(m_temp.fun, Q_EMPTY_SIG));
}
QF_CRIT_ENTRY();
// too many state nesting levels or &quot;malformed&quot; HSM
Q_ENSURE_INCRIT(220, ip &lt; MAX_NEST_DEPTH_);
Q_ENSURE_INCRIT(220, ip &lt; QHSM_MAX_NEST_DEPTH_);
QF_CRIT_EXIT();
m_temp.fun = path[0];
@ -585,7 +612,7 @@ QF_CRIT_EXIT();
// process the event hierarchically...
QState r;
m_temp.fun = s;
std::int_fast8_t ip = MAX_NEST_DEPTH_; // fixed upper loop bound
std::int_fast8_t ip = QHSM_MAX_NEST_DEPTH_; // fixed upper loop bound
do {
s = m_temp.fun;
r = (*s)(this, e); // invoke state handler s
@ -613,14 +640,14 @@ Q_ENSURE_INCRIT(310, ip &gt; 0);
QF_CRIT_EXIT();
if (r &gt;= Q_RET_TRAN) { // regular tran. taken?
QStateHandler path[MAX_NEST_DEPTH_];
QStateHandler path[QHSM_MAX_NEST_DEPTH_];
path[0] = m_temp.fun; // tran. target
path[1] = t; // current state
path[2] = s; // tran. source
// exit current state to tran. source s...
ip = MAX_NEST_DEPTH_; // fixed upper loop bound
ip = QHSM_MAX_NEST_DEPTH_; // fixed upper loop bound
for (; (t != s) &amp;&amp; (ip &gt; 0); t = m_temp.fun) {
// exit from t
if (QHSM_RESERVED_EVT_(t, Q_EXIT_SIG) == Q_RET_HANDLED) {
@ -683,7 +710,7 @@ if (r &gt;= Q_RET_TRAN) { // regular tran. taken?
static_cast&lt;void&gt;(QHSM_RESERVED_EVT_(m_temp.fun, Q_EMPTY_SIG));
// note: ip is the fixed upper loop bound
while ((m_temp.fun != t) &amp;&amp; (ip &lt; (MAX_NEST_DEPTH_ - 1))) {
while ((m_temp.fun != t) &amp;&amp; (ip &lt; (QHSM_MAX_NEST_DEPTH_ - 1))) {
++ip;
path[ip] = m_temp.fun;
// find superstate
@ -692,7 +719,7 @@ if (r &gt;= Q_RET_TRAN) { // regular tran. taken?
}
QF_CRIT_ENTRY();
// too many state nesting levels or &quot;malformed&quot; HSM
Q_ENSURE_INCRIT(330, ip &lt; MAX_NEST_DEPTH_);
Q_ENSURE_INCRIT(330, ip &lt; QHSM_MAX_NEST_DEPTH_);
QF_CRIT_EXIT();
m_temp.fun = path[0];
@ -772,7 +799,7 @@ bool inState = false; // assume that this HSM is not in 'state'
// scan the state hierarchy bottom-up
QStateHandler s = m_state.fun;
std::int_fast8_t lbound = MAX_NEST_DEPTH_ + 1; // fixed upper loop bound
std::int_fast8_t lbound = QHSM_MAX_NEST_DEPTH_ + 1; // fixed upper loop bound
QState r = Q_RET_SUPER;
for (; (r != Q_RET_IGNORED) &amp;&amp; (lbound &gt; 0); --lbound) {
if (s == state) { // do the states match?
@ -806,7 +833,7 @@ bool isFound = false; // start with the child not found
// establish stable state configuration
m_temp.fun = child;
QState r;
std::int_fast8_t lbound = MAX_NEST_DEPTH_; // fixed upper loop bound
std::int_fast8_t lbound = QHSM_MAX_NEST_DEPTH_; // fixed upper loop bound
do {
// is this the parent of the current child?
if (m_temp.fun == parent) {
@ -843,8 +870,8 @@ return child;</code>
</operation>
<!--${QEP::QHsm::hsm_tran}-->
<operation name="hsm_tran" type="std::int_fast8_t" visibility="0x02" properties="0x00">
<!--${QEP::QHsm::hsm_tran::(&path)[MAX_NEST_DEPTH_]}-->
<parameter name="(&amp;path)[MAX_NEST_DEPTH_]" type="QStateHandler"/>
<!--${QEP::QHsm::hsm_tran::path}-->
<parameter name="path" type="QStateHandler * const"/>
<!--${QEP::QHsm::hsm_tran::qsId}-->
<parameter name="qsId" type="std::uint_fast8_t const"/>
<code>#ifndef Q_SPY
@ -906,7 +933,7 @@ else {
// note: ip is the fixed upper loop bound
QState r = QHSM_RESERVED_EVT_(path[1], Q_EMPTY_SIG);
while ((r == Q_RET_SUPER)
&amp;&amp; (ip &lt; (MAX_NEST_DEPTH_ - 1)))
&amp;&amp; (ip &lt; (QHSM_MAX_NEST_DEPTH_ - 1)))
{
++ip;
path[ip] = m_temp.fun; // store the entry path
@ -956,7 +983,7 @@ else {
// (g) check each source-&gt;super-&gt;...
// for each target-&gt;super...
r = Q_RET_IGNORED; // keep looping
std::int_fast8_t lbound = MAX_NEST_DEPTH_;
std::int_fast8_t lbound = QHSM_MAX_NEST_DEPTH_;
do {
// exit from t
if (QHSM_RESERVED_EVT_(t, Q_EXIT_SIG)
@ -984,7 +1011,7 @@ else {
--lbound;
} while ((r != Q_RET_HANDLED) &amp;&amp; (lbound &gt; 0));
QF_CRIT_ENTRY();
Q_ASSERT_INCRIT(530, lbound &gt; 0);
Q_ENSURE_INCRIT(530, lbound &gt; 0);
QF_CRIT_EXIT();
}
}
@ -993,7 +1020,7 @@ else {
}
}
QF_CRIT_ENTRY();
Q_ENSURE_INCRIT(590, ip &lt; MAX_NEST_DEPTH_);
Q_ENSURE_INCRIT(590, ip &lt; QHSM_MAX_NEST_DEPTH_);
QF_CRIT_EXIT();
return ip;</code>
</operation>
@ -1049,7 +1076,7 @@ QF_CRIT_EXIT();
m_state.obj = m_temp.tatbl-&gt;target;
// drill down into the state hierarchy with initial transitions...
std::int_fast8_t lbound = MAX_NEST_DEPTH_; // fixed upper loop bound
std::int_fast8_t lbound = QMSM_MAX_NEST_DEPTH_; // fixed upper loop bound
do {
// execute the tran. table
r = execTatbl_(m_temp.tatbl, qsId);
@ -1113,7 +1140,7 @@ QF_CRIT_EXIT();
// scan the state hierarchy up to the top state...
QState r;
std::int_fast8_t lbound = MAX_NEST_DEPTH_; // fixed upper loop bound
std::int_fast8_t lbound = QMSM_MAX_NEST_DEPTH_; // fixed upper loop bound
do {
r = (*t-&gt;stateHandler)(this, e); // call state handler function
@ -1149,7 +1176,7 @@ do {
--lbound;
} while ((t != nullptr) &amp;&amp; (lbound &gt; 0));
QF_CRIT_ENTRY();
Q_ASSERT_INCRIT(310, lbound &gt; 0);
Q_ENSURE_INCRIT(320, lbound &gt; 0);
QF_CRIT_EXIT();
if (r &gt;= Q_RET_TRAN) { // any kind of tran. taken?
@ -1158,11 +1185,11 @@ if (r &gt;= Q_RET_TRAN) { // any kind of tran. taken?
QF_CRIT_ENTRY();
// the tran. source state must not be nullptr
Q_ASSERT_INCRIT(320, ts != nullptr);
Q_ASSERT_INCRIT(330, ts != nullptr);
QF_CRIT_EXIT();
#endif // Q_SPY
lbound = MAX_NEST_DEPTH_; // fixed upper loop bound
lbound = QMSM_MAX_NEST_DEPTH_; // fixed upper loop bound
do {
// save the tran-action table before it gets clobbered
QMTranActTable const * const tatbl = m_temp.tatbl;
@ -1222,7 +1249,7 @@ if (r &gt;= Q_RET_TRAN) { // any kind of tran. taken?
}
else {
QF_CRIT_ENTRY();
// TRAN_XP must NOT be followed by any other tran type
// TRAN_XP must NOT be followed by any other tran. type
Q_ASSERT_INCRIT(330, r &lt; Q_RET_TRAN);
QF_CRIT_EXIT();
}
@ -1233,7 +1260,7 @@ if (r &gt;= Q_RET_TRAN) { // any kind of tran. taken?
} while ((r &gt;= Q_RET_TRAN) &amp;&amp; (lbound &gt; 0));
QF_CRIT_ENTRY();
Q_ASSERT_INCRIT(320, lbound &gt; 0);
Q_ASSERT_INCRIT(350, lbound &gt; 0);
QS_MEM_SYS();
QS_BEGIN_PRE_(QS_QEP_TRAN, qsId)
@ -1253,7 +1280,7 @@ if (r &gt;= Q_RET_TRAN) { // any kind of tran. taken?
else if (r == Q_RET_HANDLED) {
QF_CRIT_ENTRY();
// internal tran. source can't be nullptr
Q_ASSERT_INCRIT(340, t != nullptr);
Q_ASSERT_INCRIT(380, t != nullptr);
QS_MEM_SYS();
QS_BEGIN_PRE_(QS_QEP_INTERN_TRAN, qsId)
@ -1269,6 +1296,9 @@ else if (r == Q_RET_HANDLED) {
// event bubbled to the 'top' state?
else if (t == nullptr) {
QS_CRIT_ENTRY();
// current state can't be nullptr
Q_ASSERT_INCRIT(390, s != nullptr);
QS_MEM_SYS();
QS_BEGIN_PRE_(QS_QEP_IGNORED, qsId)
QS_TIME_PRE_(); // time stamp
@ -1301,7 +1331,7 @@ m_temp.uint = ~m_state.uint;
<code>bool inState = false; // assume that this SM is not in 'state'
QMState const *s = m_state.obj;
std::int_fast8_t lbound = MAX_NEST_DEPTH_; // fixed upper loop bound
std::int_fast8_t lbound = QMSM_MAX_NEST_DEPTH_; // fixed upper loop bound
for (; (s != nullptr) &amp;&amp; (lbound &gt; 0); --lbound) {
if (s-&gt;stateHandler == state) { // match found?
inState = true;
@ -1328,7 +1358,7 @@ return inState;</code>
<code>bool inState = false; // assume that this SM is not in 'state'
QMState const *s = m_state.obj;
std::int_fast8_t lbound = MAX_NEST_DEPTH_; // fixed upper loop bound
std::int_fast8_t lbound = QMSM_MAX_NEST_DEPTH_; // fixed upper loop bound
for (; (s != nullptr) &amp;&amp; (lbound &gt; 0); --lbound) {
if (s == stateObj) { // match found?
inState = true;
@ -1355,7 +1385,7 @@ return inState;</code>
bool isFound = false; // start with the child not found
QMState const *s;
std::int_fast8_t lbound = MAX_NEST_DEPTH_; // fixed upper loop bound
std::int_fast8_t lbound = QMSM_MAX_NEST_DEPTH_; // fixed upper loop bound
for (s = m_state.obj;
(s != nullptr) &amp;&amp; (lbound &gt; 0);
s = s-&gt;superstate)
@ -1371,11 +1401,11 @@ for (s = m_state.obj;
}
QF_CRIT_STAT
QF_CRIT_ENTRY();
Q_ASSERT_INCRIT(610, lbound &gt; 0);
Q_ENSURE_INCRIT(680, lbound &gt; 0);
QF_CRIT_EXIT();
if (!isFound) { // still not found?
lbound = MAX_NEST_DEPTH_; // fixed upper loop bound
lbound = QMSM_MAX_NEST_DEPTH_; // fixed upper loop bound
for (s = m_temp.obj;
(s != nullptr) &amp;&amp; (lbound &gt; 0);
s = s-&gt;superstate)
@ -1415,10 +1445,11 @@ Q_REQUIRE_INCRIT(700, tatbl != nullptr);
QF_CRIT_EXIT();
QState r = Q_RET_NULL;
std::int_fast8_t lbound = MAX_TRAN_LENGTH_; // fixed upper loop bound
std::int_fast8_t lbound = QMSM_MAX_TRAN_LENGTH_; // fixed upper loop bound
QActionHandler const *a = &amp;tatbl-&gt;act[0];
for (; (*a != nullptr) &amp;&amp; (lbound &gt; 0); ++a) {
r = (*(*a))(this); // call the action through the 'a' pointer
--lbound;
#ifdef Q_SPY
QS_CRIT_ENTRY();
QS_MEM_SYS();
@ -1461,9 +1492,10 @@ for (; (*a != nullptr) &amp;&amp; (lbound &gt; 0); ++a) {
QS_MEM_APP();
QS_CRIT_EXIT();
#endif // Q_SPY
--lbound;
}
QF_CRIT_ENTRY();
// NOTE: the following postcondition can only succeed when
// (lbound &gt; 0), so no extra check is necessary.
Q_ENSURE_INCRIT(790, *a == nullptr);
QF_CRIT_EXIT();
@ -1488,7 +1520,7 @@ QF_CRIT_STAT
// exit states from the current state to the tran. source state
QMState const *s = cs;
std::int_fast8_t lbound = MAX_NEST_DEPTH_; // fixed upper loop bound
std::int_fast8_t lbound = QMSM_MAX_NEST_DEPTH_; // fixed upper loop bound
for (; (s != ts) &amp;&amp; (lbound &gt; 0); --lbound) {
// exit action provided in state 's'?
if (s-&gt;exitAction != nullptr) {
@ -1510,7 +1542,7 @@ for (; (s != ts) &amp;&amp; (lbound &gt; 0); --lbound) {
if (s == nullptr) { // reached the top of a submachine?
s = m_temp.obj; // the superstate from QM_SM_EXIT()
QF_CRIT_ENTRY();
Q_ASSERT_INCRIT(810, s != nullptr); // must be valid
Q_ASSERT_INCRIT(880, s != nullptr); // must be valid
QF_CRIT_EXIT();
}
}
@ -1530,7 +1562,7 @@ Q_UNUSED_PAR(qsId);
QMState const *s = hist;
QMState const *ts = m_state.obj; // tran. source
QMState const *epath[MAX_ENTRY_DEPTH_];
QMState const *epath[QMSM_MAX_ENTRY_DEPTH_];
QF_CRIT_STAT
@ -1545,7 +1577,7 @@ QS_MEM_APP();
QS_CRIT_EXIT();
std::int_fast8_t i = 0; // tran. entry path index
while ((s != ts) &amp;&amp; (i &lt; MAX_ENTRY_DEPTH_)) {
while ((s != ts) &amp;&amp; (i &lt; QMSM_MAX_ENTRY_DEPTH_)) {
if (s-&gt;entryAction != nullptr) {
epath[i] = s;
++i;
@ -2193,7 +2225,7 @@ if (margin == QF::NO_MARGIN) {
}
else {
status = false; // cannot post
Q_ERROR_INCRIT(190); // must be able to post the event
Q_ERROR_INCRIT(110); // must be able to post the event
}
}
else if (nFree &gt; static_cast&lt;QEQueueCtr&gt;(margin)) {
@ -7200,9 +7232,9 @@ QF_CRIT_EXIT();</code>
QS_ENUM_DICT, //!&lt; enumeration dictionary entry
// [55] Additional QEP records
QS_QEP_TRAN_HIST, //!&lt; a tran to history was taken
QS_QEP_TRAN_EP, //!&lt; a tran to entry point into a submachine
QS_QEP_TRAN_XP, //!&lt; a tran to exit point out of a submachine
QS_QEP_TRAN_HIST, //!&lt; a tran. to history was taken
QS_QEP_TRAN_EP, //!&lt; a tran. to entry point into a submachine
QS_QEP_TRAN_XP, //!&lt; a tran. to exit point out of a submachine
// [58] Miscellaneous QS records (not maskable)
QS_TEST_PAUSED, //!&lt; test has been paused
@ -8560,7 +8592,7 @@ if (QS_GLB_CHECK_(rec_) &amp;&amp; QS_LOC_CHECK_(qsId_)) { \
#define QP_HPP_
//============================================================================
#define QP_VERSION_STR &quot;7.4.0-rc.1&quot;
#define QP_VERSION_STR &quot;7.4.0-rc.3&quot;
#define QP_VERSION 740U
#define QP_RELEASE 0x7092C3BBU
@ -9660,6 +9692,10 @@ static QP::QEvt const l_reservedEvt_[4] {
QS_CRIT_EXIT()
//! @endcond
// maximum depth of state nesting in a QHsm (including the top level)
// must be &gt;= 3
static constexpr std::int_fast8_t QHSM_MAX_NEST_DEPTH_ {6};
//============================================================================
$define ${QEP::versionStr[]}
@ -9687,15 +9723,6 @@ namespace {
Q_DEFINE_THIS_MODULE(&quot;qep_msm&quot;)
// maximum depth of state nesting in a QMsm (including the top level)
static constexpr std::int_fast8_t MAX_NEST_DEPTH_ {6};
// maximum length of transition-action array
static constexpr std::int_fast8_t MAX_TRAN_LENGTH_ {3*MAX_NEST_DEPTH_};
// maximum depth of entry levels in a MSM for tran. to history.
static constexpr std::int_fast8_t MAX_ENTRY_DEPTH_ {4};
// top-state object for QMsm-style state machines
QP::QMState const l_msm_top_s = {
nullptr,
@ -9708,6 +9735,15 @@ QP::QMState const l_msm_top_s = {
} // unnamed namespace
//! @endcond
// maximum depth of state nesting in a QMsm (including the top level)
static constexpr std::int_fast8_t QMSM_MAX_NEST_DEPTH_ {8};
// maximum length of transition-action array
static constexpr std::int_fast8_t QMSM_MAX_TRAN_LENGTH_ {2*QMSM_MAX_NEST_DEPTH_};
// maximum depth of entry levels in a MSM for tran. to history.
static constexpr std::int_fast8_t QMSM_MAX_ENTRY_DEPTH_ {4};
//============================================================================
$define ${QEP::QMsm}</text>

174
qpcpp.sha1 Normal file
View File

@ -0,0 +1,174 @@
b741762e30f27d4c7ab5c8ead0c70d675113c1f7 *qpcpp.qm
2e6071600db5ae5eace4cc524f9ed4f5310056ce *include/qequeue.hpp
2ae88474c60e5ae739bafc1131f54ce9f1bba25b *include/qk.hpp
8c49c0fb49ede99f2277e70e9340709a65d15f85 *include/qmpool.hpp
89cb103f9c4ef181b02e5937682538b6efd2803a *include/qp.hpp
c25d74292c78eb2af68fe8c39e854141d739fba1 *include/qp_pkg.hpp
eef6f6b93ce2066f02be0217d4953045ce102878 *include/qpcpp.hpp
9bf9ae3586f8828c372ab79771839bd3c76e5b5e *include/qs.hpp
b6b1f1c52727bec4c6a50b030ad9277f93ac0eee *include/qs_dummy.hpp
5930fa07c97bec69b4a453b794fb3fe38b113c54 *include/qs_pkg.hpp
49d2620b0afa9e74d73680495c3e8a931e5d8f73 *include/qsafe.h
9c528d4b4df88afc07bf67423ca3e79fb4918bb8 *include/qstamp.hpp
0b08c2aabdc19b71f943cf7a7dd33250f22c2945 *include/qv.hpp
0648d5e24f1954beef908b7fc57e344b01643d14 *include/qxk.hpp
71899ce74eeb04f333ed00d53f87719f722a39ab *src/qf/CMakeLists.txt
55c2256457431d6b7c2024ec934a52a33cc4e5ce *src/qf/qep_hsm.cpp
ae443cd0da18d7cd14598a6e6646d86000a2591a *src/qf/qep_msm.cpp
20e2a785f80fc9839b7f2774e64ec5414929e918 *src/qf/qf_act.cpp
23569b7f1e7ec95d32b13288be4793d303ad2a73 *src/qf/qf_actq.cpp
3a916b17accb3aea38ec52832e69646173ccd742 *src/qf/qf_defer.cpp
ba3fce3be3b54181a4c26150c85f97f96202205e *src/qf/qf_dyn.cpp
9673b82c3fcfacaa4a8cc7114788aefb533ae48c *src/qf/qf_mem.cpp
28afacb4cc1b7203de98bab206035211c0f5b6f7 *src/qf/qf_ps.cpp
285c65565add1d4aa184158462f0d835671b22eb *src/qf/qf_qact.cpp
cb7c3aa7c650a299b4175c857817acf804664857 *src/qf/qf_qeq.cpp
68e63e88041f8e23b0c92564bd633ba25388be81 *src/qf/qf_qmact.cpp
80073e0d6617065e2cafcd620dbded07dbc4384b *src/qf/qf_time.cpp
7cdab433e81612862fd27f0cf792d38e1197d064 *src/qk/CMakeLists.txt
322f669b6c31379ee234141c2b1253d981c830b7 *src/qk/qk.cpp
deacd749f11cd2037eca58b373771926542043dc *src/qs/CMakeLists.txt
421f1ce59e46b133d8c7856cf075dcbe8b9d9556 *src/qs/qs.cpp
187b926c741f464b35a407b2ff2981ec369ef021 *src/qs/qs_64bit.cpp
ed5a372e9e2e3afb9f461eea98b8186c5961750a *src/qs/qs_fp.cpp
e1d617212d16e22cd5d4a8f8f865a085b651f5f9 *src/qs/qs_rx.cpp
2d78c7f2a02d6502d3e60c2821aaa89e27298196 *src/qs/qstamp.cpp
c8b80e5e03da6e634805b50e33c507bd80cd743b *src/qs/qutest.cpp
b6d93a16f5b176d3da4888a7efb265730337f46d *src/qv/CMakeLists.txt
443611940cc593d0ae99d5830fa248de5012aa00 *src/qv/qv.cpp
3aaa8b6ad54430fbaffc05ff8db9599a93fe937b *src/qxk/CMakeLists.txt
1490ee94697d3a926001a839217b796bc9fb5faa *src/qxk/qxk.cpp
2a81fac57cd1ac12ecbe122025dd73b5072d5244 *src/qxk/qxk_mutex.cpp
348325d168c70a911d0cdc11b119f4ef9cdc90ef *src/qxk/qxk_sema.cpp
966ebe4f01f474848620baa8cfd1254a7ce989c1 *src/qxk/qxk_xthr.cpp
3f351bb2031113a81c1620194f6fe0fc2917c76a *ports/lint-plus/au-autosar.lnt
e6d522114c96ede0cfbde013b36d3581e7df5627 *ports/lint-plus/au-autosar19.lnt
4558a0e1e95b69c7de9820bca7df5344fde67008 *ports/lint-plus/au-ds.lnt
9b67d35df023e44c615ac4d7ee1874d270b70a72 *ports/lint-plus/au-ql-cpp11.lnt
321437ad9c561173bf25ce169ab32d7bd01fda76 *ports/lint-plus/options.lnt
8380f483db36126a1b3795951652a9a8ec79f59d *ports/lint-plus/qpcpp.lnt
e34234a143dd399e89cb6bc11d6e92c685dfa263 *ports/lint-plus/std.lnt
b565376c4d6ae4c4fc4958e7ee5331fa6b6750a0 *ports/arm-cm/qk/armclang/qk_port.cpp
4e98e600b710f77aa7f32bec53b7a0259312b456 *ports/arm-cm/qk/armclang/qp_port.hpp
cfe1a9761c511b20d3d150838676d45b205c7250 *ports/arm-cm/qk/armclang/qs_port.hpp
6f6eeb15b1a4a66134caa4e6cd4032da1da19994 *ports/arm-cm/qk/config/qp_config.hpp
3347687dc2c2dc4f2a48bdc561ee044878b24d3a *ports/arm-cm/qk/gnu/qk_port.cpp
33ddbc5ec98e157dec00fd11feb0344bce27e6c7 *ports/arm-cm/qk/gnu/qp_port.hpp
cfe1a9761c511b20d3d150838676d45b205c7250 *ports/arm-cm/qk/gnu/qs_port.hpp
793d2cec036ab48dc97a397edd1478422a785a76 *ports/arm-cm/qk/iar/qk_port.cpp
9e4df6a7a8a9129c4d5f172c3a7d03bce5e411fc *ports/arm-cm/qk/iar/qp_port.hpp
cfe1a9761c511b20d3d150838676d45b205c7250 *ports/arm-cm/qk/iar/qs_port.hpp
09d2b947160e2ff16c100d70836a7be87d4b0db1 *ports/arm-cm/qv/armclang/qp_port.hpp
cfe1a9761c511b20d3d150838676d45b205c7250 *ports/arm-cm/qv/armclang/qs_port.hpp
8d99fb5c034a07d7f46b1cb360c0f82e97a2641c *ports/arm-cm/qv/armclang/qv_port.cpp
dbf368108461876f08366cd1053e0e63dbfc48a6 *ports/arm-cm/qv/config/qp_config.hpp
e6041df9484089f042fc25ad6a1d702668b0ceee *ports/arm-cm/qv/gnu/qp_port.hpp
cfe1a9761c511b20d3d150838676d45b205c7250 *ports/arm-cm/qv/gnu/qs_port.hpp
3ccc1c58ca526756a6beda2bd4e4e0f3caf14c92 *ports/arm-cm/qv/gnu/qv_port.cpp
2d2ece614aa774b1150d6ce70f8bf1724e37737e *ports/arm-cm/qv/iar/qp_port.hpp
cfe1a9761c511b20d3d150838676d45b205c7250 *ports/arm-cm/qv/iar/qs_port.hpp
78ae3caf4c57487a1db9cb97688afffca58ca766 *ports/arm-cm/qv/iar/qv_port.cpp
37f45a5dbd4e6bf6066b486e9383bb5cdbabfe61 *ports/arm-cm/qxk/armclang/qp_port.hpp
cfe1a9761c511b20d3d150838676d45b205c7250 *ports/arm-cm/qxk/armclang/qs_port.hpp
48bc2fc055cf02be83397932a747dbb90d62364c *ports/arm-cm/qxk/armclang/qxk_port.cpp
cd549016afb588697c02221ab8744b21204de8ca *ports/arm-cm/qxk/config/qp_config.hpp
8bd351b5cf9812e360ee59847fa29e9ed3b1ebd8 *ports/arm-cm/qxk/gnu/qp_port.hpp
cfe1a9761c511b20d3d150838676d45b205c7250 *ports/arm-cm/qxk/gnu/qs_port.hpp
e1fdfe215b948a5eb6d738fc64f224b0e26cf35e *ports/arm-cm/qxk/gnu/qxk_port.cpp
2434762e98492bfc63772f2e007084ccd91ab736 *ports/arm-cm/qxk/iar/qp_port.hpp
cfe1a9761c511b20d3d150838676d45b205c7250 *ports/arm-cm/qxk/iar/qs_port.hpp
c9e7c3b12ef3ac5f0d69f3662ca180c25b80e400 *ports/arm-cm/qxk/iar/qxk_port.cpp
00668f089ea2ef1ab4fc55282ce7da1b15e7d52a *ports/arm-cm/qutest/qp_port.hpp
cfe1a9761c511b20d3d150838676d45b205c7250 *ports/arm-cm/qutest/qs_port.hpp
65525e2121b0ebcac2e6704941d5b5d853175f72 *ports/arm-cr/qk/config/qp_config.hpp
f3d55e2065ce75b4574b696ab8256437565c0ca6 *ports/arm-cr/qk/gnu/qp_port.hpp
cfe1a9761c511b20d3d150838676d45b205c7250 *ports/arm-cr/qk/gnu/qs_port.hpp
87f58f713b57cdae93d4f7c19ef6fd304e135e5e *ports/arm-cr/qk/iar/qp_port.hpp
cfe1a9761c511b20d3d150838676d45b205c7250 *ports/arm-cr/qk/iar/qs_port.hpp
f82d516d0d164ace1734ab51ba1c416ca9c94913 *ports/arm-cr/qk/ti/qp_port.hpp
cfe1a9761c511b20d3d150838676d45b205c7250 *ports/arm-cr/qk/ti/qs_port.hpp
a3f7369a4415abd06b6f590849c4e26637caab45 *ports/arm-cr/qv/gnu/qp_port.hpp
cfe1a9761c511b20d3d150838676d45b205c7250 *ports/arm-cr/qv/gnu/qs_port.hpp
1aaf2e12dffc15336f0e634705cf1215e2bc2f5d *ports/arm-cr/qv/iar/qp_port.hpp
cfe1a9761c511b20d3d150838676d45b205c7250 *ports/arm-cr/qv/iar/qs_port.hpp
73f6b8ad6ce3c90dfe57275863bc7fdf2ccec475 *ports/arm-cr/qv/ti/qp_port.hpp
cfe1a9761c511b20d3d150838676d45b205c7250 *ports/arm-cr/qv/ti/qs_port.hpp
b0921eaced95677e51cf95a723f070e8ac959db3 *ports/msp430/qk/qp_port.hpp
6f79670155f0a351e863b9eb3418784d93f2bee6 *ports/msp430/qk/qs_port.hpp
120d367708bca0c57283dce82903cc9086cedf69 *ports/msp430/qv/qp_port.hpp
6f79670155f0a351e863b9eb3418784d93f2bee6 *ports/msp430/qv/qs_port.hpp
89e524cfe36f094ce0be2dce0591ebcc8df21c1a *ports/msp430/qutest/qp_port.hpp
6f79670155f0a351e863b9eb3418784d93f2bee6 *ports/msp430/qutest/qs_port.hpp
ad510a3ba925e8d70c379e789eaae2600a13c713 *ports/config/qp_config.hpp
b6b5d23c618976a6fbed51dc5a13e227928e1d4b *ports/embos/CMakeLists.txt
9f3bb4cf50397f734bc5740b055eec077bccc357 *ports/embos/qf_port.cpp
37096dbc6315825e267bf5a34be812073aa90cd8 *ports/embos/qp_port.hpp
cfe1a9761c511b20d3d150838676d45b205c7250 *ports/embos/qs_port.hpp
e4f00894f86806af6d88d38e831a8fc0ad36059e *ports/freertos/CMakeLists.txt
ee42541a957ccd8b0b2f01659f64dba84e04754c *ports/freertos/qf_port.cpp
7120c7e5041012b16ab0531275024bf17c4ce618 *ports/freertos/qp_port.hpp
cfe1a9761c511b20d3d150838676d45b205c7250 *ports/freertos/qs_port.hpp
18df978f665338c757f1a2a284c2acc779bd59d3 *ports/threadx/CMakeLists.txt
e0dc43a58ea3615da2978b4ea0a99e90d845b9b7 *ports/threadx/qf_port.cpp
4e4a9f2affa7efc00340d112258289fa7fc0cc27 *ports/threadx/qp_port.hpp
cfe1a9761c511b20d3d150838676d45b205c7250 *ports/threadx/qs_port.hpp
46699d3c8ad92f9c98ea5e03e72d4190a7794aa4 *ports/threadx/README.md
0ab8b95f50fa767b951c6f56efe86789623b7127 *ports/uc-os2/CMakeLists.txt
f412a6f5052b46f51b4f09fd8e3a3ca9de602618 *ports/uc-os2/qf_port.cpp
26d2bd9adcc0a8acb6170e61ab8d96470c5275f2 *ports/uc-os2/qp_port.hpp
cfe1a9761c511b20d3d150838676d45b205c7250 *ports/uc-os2/qs_port.hpp
227dedab24f1e20440103a0cabc210b4b5adedef *ports/qep-only/CMakeLists.txt
ac6a491b0a46d98d9ac71650b8a8d7c2928966ef *ports/qep-only/qp_port.hpp
7235457eb9529f9fe2459ce869e63294ec5c5df6 *ports/qep-only/safe_std.h
12255313ebcf963d29d91bee4c917bb6ab2f9e1d *ports/posix/CMakeLists.txt
53f52015c5004c8c0b11153a8e0805c98062ce1e *ports/posix/qf_port.cpp
16ec40a97c24a62810f3c0e68c1d67de3eb35789 *ports/posix/qp_port.hpp
843c109ccdfbde8e17e5feb02c7496fff6e5487d *ports/posix/qs_port.cpp
fb77ed4a0eee6f8646175015cfec3118daa4e628 *ports/posix/qs_port.hpp
e6a5523e16619370638f6305687cd480d1e3744b *ports/posix/README.md
7235457eb9529f9fe2459ce869e63294ec5c5df6 *ports/posix/safe_std.h
493900b9aa5475785c65458332995a184690d43f *ports/posix-qv/CMakeLists.txt
54a0330e57b4264a5ace751d60e297293678eaca *ports/posix-qv/qf_port.cpp
68169dc5881bae6225e90b19a0ae046d70dac1e8 *ports/posix-qv/qp_port.hpp
843c109ccdfbde8e17e5feb02c7496fff6e5487d *ports/posix-qv/qs_port.cpp
fb77ed4a0eee6f8646175015cfec3118daa4e628 *ports/posix-qv/qs_port.hpp
e2e295c371bc14f0089a888b07d98c657dea07bf *ports/posix-qv/README.md
7235457eb9529f9fe2459ce869e63294ec5c5df6 *ports/posix-qv/safe_std.h
c9969a454b540a3b1abd3dd5cc46fb211663310e *ports/posix-qutest/CMakeLists.txt
14da384ceb62638144284b967a0b7676bcb52342 *ports/posix-qutest/qp_port.hpp
fb77ed4a0eee6f8646175015cfec3118daa4e628 *ports/posix-qutest/qs_port.hpp
b69c5ff6ec8991799d39fdfd59e2bbf9e43b05bd *ports/posix-qutest/qutest_port.cpp
301e58e2d6ccd284cfdcf6e141f47bd062197b43 *ports/posix-qutest/README.md
7235457eb9529f9fe2459ce869e63294ec5c5df6 *ports/posix-qutest/safe_std.h
06b76c6c30ea880876b47ee27115178ff62ea66b *ports/win32/CMakeLists.txt
3745b1372e47dc83a8edf0cd2d8119a32287b020 *ports/win32/qf_port.cpp
6f89d4e61a8c8fcfc011a6249cfff7ac1f9ea5d1 *ports/win32/qp_port.hpp
1c90a44ac27d3c8160701079b3836bc62062a579 *ports/win32/qs_port.cpp
fb77ed4a0eee6f8646175015cfec3118daa4e628 *ports/win32/qs_port.hpp
40f18295a0013cbba3c6b270d1d70748ec1d325a *ports/win32/qwin_gui.c
ddc62932b46bbc0ad147193d0dd7efa28127c6c4 *ports/win32/qwin_gui.h
ad6de94157c477eacb61f321870b5f8c1a09a5cd *ports/win32/README.md
7235457eb9529f9fe2459ce869e63294ec5c5df6 *ports/win32/safe_std.h
dd5b9a8736e1a1171f7d8565e29e1acb6f7a9691 *ports/win32-qv/CMakeLists.txt
b260fc1f47aa10623382322875663551ae16b7f1 *ports/win32-qv/qf_port.cpp
c6e39540639997556ddb6858cf85829537494b48 *ports/win32-qv/qp_port.hpp
1c90a44ac27d3c8160701079b3836bc62062a579 *ports/win32-qv/qs_port.cpp
fb77ed4a0eee6f8646175015cfec3118daa4e628 *ports/win32-qv/qs_port.hpp
40f18295a0013cbba3c6b270d1d70748ec1d325a *ports/win32-qv/qwin_gui.c
ddc62932b46bbc0ad147193d0dd7efa28127c6c4 *ports/win32-qv/qwin_gui.h
ddd27415c3d1df6d8c210966e8915c407b15bf58 *ports/win32-qv/README.md
7235457eb9529f9fe2459ce869e63294ec5c5df6 *ports/win32-qv/safe_std.h
3c23c06f425a8d8dbb18d1f191ac6cab483a8e51 *ports/win32-qutest/CMakeLists.txt
14da384ceb62638144284b967a0b7676bcb52342 *ports/win32-qutest/qp_port.hpp
fb77ed4a0eee6f8646175015cfec3118daa4e628 *ports/win32-qutest/qs_port.hpp
6418e967242f6d8a808862807b4f60ddd2579e86 *ports/win32-qutest/qutest_port.cpp
7235457eb9529f9fe2459ce869e63294ec5c5df6 *ports/win32-qutest/safe_std.h
76dd9078dc4311d53d3862d44177a8660258da6d *zephyr/CMakeLists.txt
36a0252cf0bfd6be0d345c48c00b2300f8917f05 *zephyr/Kconfig
2eb2a922e18b4760a68151ebee1b6282d20b4692 *zephyr/module.yml
9c6ebea7bb82578de1c53f86f5127d228a132e11 *zephyr/qf_port.cpp
109c291df50110f185adc17bcdf8becc0a79346c *zephyr/qp-zephyr.jpg
805a18d9b2da84ba6ba43ed6160c956a867b4ce1 *zephyr/qp_port.hpp
d414f620c05844bbad1988f0951509856acc63db *zephyr/qs_port.hpp
5a3a6e2b5b6c845428191b15b72679a26bf8cb79 *zephyr/qutest_port.cpp
791248d57ce8dfa6497728c7c2d0734c2c581625 *zephyr/README.md

View File

@ -1,16 +1,19 @@
@setlocal
:: usage
@echo Usage: qppcp_md5 [gen]
@echo Usage: qppcp_sha1 [gen]
@echo examples:
@echo qppcp_md5 : check the md5 sums in the file qpcpp.md5
@echo qpcpp_md5 gen : generate the md5 file qpcpp.md5
@echo qppcp_sha1 : check the sha1 sums in the file qpcpp.sha1
@echo qpcpp_sha1 gen : generate the sha1 file qpcpp.sha1
@echo.
@if NOT "%1"=="gen" goto check
@if NOT "%1"=="gen" (
sha1sum --check --warn qpcpp.sha1
goto end
)
@echo generating qpcpp.md5...
@md5sum qpcpp.qm ^
@echo generating qpcpp.sha1...
@sha1sum qpcpp.qm ^
include/* ^
src/qf/* src/qk/* src/qs/* src/qv/* src/qxk/* ^
ports/lint-plus/*.lnt ^
@ -22,22 +25,17 @@
ports/arm-cr/qk/gnu/* ports/arm-cr/qk/iar/* ports/arm-cr/qk/ti/* ^
ports/arm-cr/qv/gnu/* ports/arm-cr/qv/iar/* ports/arm-cr/qv/ti/* ^
ports/msp430/qk/* ports/msp430/qv/* ports/msp430/qutest/* ^
ports/pic32/qk/xc32/* ports/pic32/qv/xc32/* ports/pic32/qutest/xc32/* ^
ports/config/* ^
ports/embos/* ^
ports/freertos/* ^
ports/threadx/* ^
ports/uc-os2/* ^
ports/qep-only/* ^
ports/posix/* ports/posix-qv/* ports/posix-qutest/* ^
ports/win32/* ports/win32-qv/* ports/win32-qutest/* ^
ports/qep-only/* ^
ports/posix/* ports/posix-qv/* ports/posix-qutest/* ^
ports/win32/* ports/win32-qv/* ports/win32-qutest/* ^
zephyr/* ^
> qpcpp.md5
> qpcpp.sha1
@echo done
@goto end
:check
md5sum --check --warn qpcpp.md5
:end
@endlocal

View File

@ -3,14 +3,14 @@
// Model: qpcpp.qm
// File: ${src::qf::qep_hsm.cpp}
//
// This code has been generated by QM 6.1.1 <www.state-machine.com/qm>.
// This code has been generated by QM 6.2.0 <www.state-machine.com/qm>.
// DO NOT EDIT THIS FILE MANUALLY. All your changes will be lost.
//
// This code is covered by the following QP license:
// License # : LicenseRef-QL-dual
// Issued to : Any user of the QP/C++ real-time embedded framework
// Framework(s) : qpcpp
// Support ends : 2024-12-31
// Support ends : 2025-12-31
// License scope:
//
// Copyright (C) 2005 Quantum Leaps, LLC <state-machine.com>.
@ -95,15 +95,18 @@ static QP::QEvt const l_reservedEvt_[4] {
QS_CRIT_EXIT()
//! @endcond
// maximum depth of state nesting in a QHsm (including the top level)
// must be >= 3
static constexpr std::int_fast8_t QHSM_MAX_NEST_DEPTH_ {6};
//============================================================================
//$skip${QP_VERSION} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
// Check for the minimum required QP version
#if (QP_VERSION < 730U) || (QP_VERSION != ((QP_RELEASE^4294967295U) % 0x3E8U))
#if (QP_VERSION < 730U) || (QP_VERSION != ((QP_RELEASE^4294967295U)%0x2710U))
#error qpcpp version 7.3.0 or higher required
#endif
//$endskip${QP_VERSION} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//$define${QEP::versionStr[]} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
namespace QP {
@ -173,20 +176,20 @@ void QHsm::init(
// drill down into the state hierarchy with initial transitions...
do {
QStateHandler path[MAX_NEST_DEPTH_]; // tran entry path array
std::int_fast8_t ip = 0; // tran entry path index
QStateHandler path[QHSM_MAX_NEST_DEPTH_]; // tran. entry path array
std::int_fast8_t ip = 0; // tran. entry path index
path[0] = m_temp.fun;
static_cast<void>(QHSM_RESERVED_EVT_(m_temp.fun, Q_EMPTY_SIG));
// note: ip is here the fixed upper loop bound
while ((m_temp.fun != t) && (ip < (MAX_NEST_DEPTH_ - 1))) {
while ((m_temp.fun != t) && (ip < (QHSM_MAX_NEST_DEPTH_ - 1))) {
++ip;
path[ip] = m_temp.fun;
static_cast<void>(QHSM_RESERVED_EVT_(m_temp.fun, Q_EMPTY_SIG));
}
QF_CRIT_ENTRY();
// too many state nesting levels or "malformed" HSM
Q_ENSURE_INCRIT(220, ip < MAX_NEST_DEPTH_);
Q_ENSURE_INCRIT(220, ip < QHSM_MAX_NEST_DEPTH_);
QF_CRIT_EXIT();
m_temp.fun = path[0];
@ -272,7 +275,7 @@ void QHsm::dispatch(
// process the event hierarchically...
QState r;
m_temp.fun = s;
std::int_fast8_t ip = MAX_NEST_DEPTH_; // fixed upper loop bound
std::int_fast8_t ip = QHSM_MAX_NEST_DEPTH_; // fixed upper loop bound
do {
s = m_temp.fun;
r = (*s)(this, e); // invoke state handler s
@ -300,14 +303,14 @@ void QHsm::dispatch(
QF_CRIT_EXIT();
if (r >= Q_RET_TRAN) { // regular tran. taken?
QStateHandler path[MAX_NEST_DEPTH_];
QStateHandler path[QHSM_MAX_NEST_DEPTH_];
path[0] = m_temp.fun; // tran. target
path[1] = t; // current state
path[2] = s; // tran. source
// exit current state to tran. source s...
ip = MAX_NEST_DEPTH_; // fixed upper loop bound
ip = QHSM_MAX_NEST_DEPTH_; // fixed upper loop bound
for (; (t != s) && (ip > 0); t = m_temp.fun) {
// exit from t
if (QHSM_RESERVED_EVT_(t, Q_EXIT_SIG) == Q_RET_HANDLED) {
@ -370,7 +373,7 @@ void QHsm::dispatch(
static_cast<void>(QHSM_RESERVED_EVT_(m_temp.fun, Q_EMPTY_SIG));
// note: ip is the fixed upper loop bound
while ((m_temp.fun != t) && (ip < (MAX_NEST_DEPTH_ - 1))) {
while ((m_temp.fun != t) && (ip < (QHSM_MAX_NEST_DEPTH_ - 1))) {
++ip;
path[ip] = m_temp.fun;
// find superstate
@ -379,7 +382,7 @@ void QHsm::dispatch(
}
QF_CRIT_ENTRY();
// too many state nesting levels or "malformed" HSM
Q_ENSURE_INCRIT(330, ip < MAX_NEST_DEPTH_);
Q_ENSURE_INCRIT(330, ip < QHSM_MAX_NEST_DEPTH_);
QF_CRIT_EXIT();
m_temp.fun = path[0];
@ -457,7 +460,7 @@ bool QHsm::isIn(QStateHandler const state) noexcept {
// scan the state hierarchy bottom-up
QStateHandler s = m_state.fun;
std::int_fast8_t lbound = MAX_NEST_DEPTH_ + 1; // fixed upper loop bound
std::int_fast8_t lbound = QHSM_MAX_NEST_DEPTH_ + 1; // fixed upper loop bound
QState r = Q_RET_SUPER;
for (; (r != Q_RET_IGNORED) && (lbound > 0); --lbound) {
if (s == state) { // do the states match?
@ -489,7 +492,7 @@ QStateHandler QHsm::childState(QStateHandler const parent) noexcept {
// establish stable state configuration
m_temp.fun = child;
QState r;
std::int_fast8_t lbound = MAX_NEST_DEPTH_; // fixed upper loop bound
std::int_fast8_t lbound = QHSM_MAX_NEST_DEPTH_; // fixed upper loop bound
do {
// is this the parent of the current child?
if (m_temp.fun == parent) {
@ -522,7 +525,7 @@ QStateHandler QHsm::childState(QStateHandler const parent) noexcept {
//${QEP::QHsm::hsm_tran} .....................................................
std::int_fast8_t QHsm::hsm_tran(
QStateHandler (&path)[MAX_NEST_DEPTH_],
QStateHandler * const path,
std::uint_fast8_t const qsId)
{
#ifndef Q_SPY
@ -584,7 +587,7 @@ std::int_fast8_t QHsm::hsm_tran(
// note: ip is the fixed upper loop bound
QState r = QHSM_RESERVED_EVT_(path[1], Q_EMPTY_SIG);
while ((r == Q_RET_SUPER)
&& (ip < (MAX_NEST_DEPTH_ - 1)))
&& (ip < (QHSM_MAX_NEST_DEPTH_ - 1)))
{
++ip;
path[ip] = m_temp.fun; // store the entry path
@ -634,7 +637,7 @@ std::int_fast8_t QHsm::hsm_tran(
// (g) check each source->super->...
// for each target->super...
r = Q_RET_IGNORED; // keep looping
std::int_fast8_t lbound = MAX_NEST_DEPTH_;
std::int_fast8_t lbound = QHSM_MAX_NEST_DEPTH_;
do {
// exit from t
if (QHSM_RESERVED_EVT_(t, Q_EXIT_SIG)
@ -662,7 +665,7 @@ std::int_fast8_t QHsm::hsm_tran(
--lbound;
} while ((r != Q_RET_HANDLED) && (lbound > 0));
QF_CRIT_ENTRY();
Q_ASSERT_INCRIT(530, lbound > 0);
Q_ENSURE_INCRIT(530, lbound > 0);
QF_CRIT_EXIT();
}
}
@ -671,7 +674,7 @@ std::int_fast8_t QHsm::hsm_tran(
}
}
QF_CRIT_ENTRY();
Q_ENSURE_INCRIT(590, ip < MAX_NEST_DEPTH_);
Q_ENSURE_INCRIT(590, ip < QHSM_MAX_NEST_DEPTH_);
QF_CRIT_EXIT();
return ip;
}

View File

@ -3,14 +3,14 @@
// Model: qpcpp.qm
// File: ${src::qf::qep_msm.cpp}
//
// This code has been generated by QM 6.1.1 <www.state-machine.com/qm>.
// This code has been generated by QM 6.2.0 <www.state-machine.com/qm>.
// DO NOT EDIT THIS FILE MANUALLY. All your changes will be lost.
//
// This code is covered by the following QP license:
// License # : LicenseRef-QL-dual
// Issued to : Any user of the QP/C++ real-time embedded framework
// Framework(s) : qpcpp
// Support ends : 2024-12-31
// Support ends : 2025-12-31
// License scope:
//
// Copyright (C) 2005 Quantum Leaps, LLC <state-machine.com>.
@ -59,15 +59,6 @@ namespace {
Q_DEFINE_THIS_MODULE("qep_msm")
// maximum depth of state nesting in a QMsm (including the top level)
static constexpr std::int_fast8_t MAX_NEST_DEPTH_ {6};
// maximum length of transition-action array
static constexpr std::int_fast8_t MAX_TRAN_LENGTH_ {3*MAX_NEST_DEPTH_};
// maximum depth of entry levels in a MSM for tran. to history.
static constexpr std::int_fast8_t MAX_ENTRY_DEPTH_ {4};
// top-state object for QMsm-style state machines
QP::QMState const l_msm_top_s = {
nullptr,
@ -80,15 +71,23 @@ QP::QMState const l_msm_top_s = {
} // unnamed namespace
//! @endcond
// maximum depth of state nesting in a QMsm (including the top level)
static constexpr std::int_fast8_t QMSM_MAX_NEST_DEPTH_ {8};
// maximum length of transition-action array
static constexpr std::int_fast8_t QMSM_MAX_TRAN_LENGTH_ {2*QMSM_MAX_NEST_DEPTH_};
// maximum depth of entry levels in a MSM for tran. to history.
static constexpr std::int_fast8_t QMSM_MAX_ENTRY_DEPTH_ {4};
//============================================================================
//$skip${QP_VERSION} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
// Check for the minimum required QP version
#if (QP_VERSION < 730U) || (QP_VERSION != ((QP_RELEASE^4294967295U) % 0x3E8U))
#if (QP_VERSION < 730U) || (QP_VERSION != ((QP_RELEASE^4294967295U)%0x2710U))
#error qpcpp version 7.3.0 or higher required
#endif
//$endskip${QP_VERSION} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//$define${QEP::QMsm} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
namespace QP {
@ -138,7 +137,7 @@ void QMsm::init(
m_state.obj = m_temp.tatbl->target;
// drill down into the state hierarchy with initial transitions...
std::int_fast8_t lbound = MAX_NEST_DEPTH_; // fixed upper loop bound
std::int_fast8_t lbound = QMSM_MAX_NEST_DEPTH_; // fixed upper loop bound
do {
// execute the tran. table
r = execTatbl_(m_temp.tatbl, qsId);
@ -194,7 +193,7 @@ void QMsm::dispatch(
// scan the state hierarchy up to the top state...
QState r;
std::int_fast8_t lbound = MAX_NEST_DEPTH_; // fixed upper loop bound
std::int_fast8_t lbound = QMSM_MAX_NEST_DEPTH_; // fixed upper loop bound
do {
r = (*t->stateHandler)(this, e); // call state handler function
@ -230,7 +229,7 @@ void QMsm::dispatch(
--lbound;
} while ((t != nullptr) && (lbound > 0));
QF_CRIT_ENTRY();
Q_ASSERT_INCRIT(310, lbound > 0);
Q_ENSURE_INCRIT(320, lbound > 0);
QF_CRIT_EXIT();
if (r >= Q_RET_TRAN) { // any kind of tran. taken?
@ -239,11 +238,11 @@ void QMsm::dispatch(
QF_CRIT_ENTRY();
// the tran. source state must not be nullptr
Q_ASSERT_INCRIT(320, ts != nullptr);
Q_ASSERT_INCRIT(330, ts != nullptr);
QF_CRIT_EXIT();
#endif // Q_SPY
lbound = MAX_NEST_DEPTH_; // fixed upper loop bound
lbound = QMSM_MAX_NEST_DEPTH_; // fixed upper loop bound
do {
// save the tran-action table before it gets clobbered
QMTranActTable const * const tatbl = m_temp.tatbl;
@ -303,7 +302,7 @@ void QMsm::dispatch(
}
else {
QF_CRIT_ENTRY();
// TRAN_XP must NOT be followed by any other tran type
// TRAN_XP must NOT be followed by any other tran. type
Q_ASSERT_INCRIT(330, r < Q_RET_TRAN);
QF_CRIT_EXIT();
}
@ -314,7 +313,7 @@ void QMsm::dispatch(
} while ((r >= Q_RET_TRAN) && (lbound > 0));
QF_CRIT_ENTRY();
Q_ASSERT_INCRIT(320, lbound > 0);
Q_ASSERT_INCRIT(350, lbound > 0);
QS_MEM_SYS();
QS_BEGIN_PRE_(QS_QEP_TRAN, qsId)
@ -334,7 +333,7 @@ void QMsm::dispatch(
else if (r == Q_RET_HANDLED) {
QF_CRIT_ENTRY();
// internal tran. source can't be nullptr
Q_ASSERT_INCRIT(340, t != nullptr);
Q_ASSERT_INCRIT(380, t != nullptr);
QS_MEM_SYS();
QS_BEGIN_PRE_(QS_QEP_INTERN_TRAN, qsId)
@ -350,6 +349,9 @@ void QMsm::dispatch(
// event bubbled to the 'top' state?
else if (t == nullptr) {
QS_CRIT_ENTRY();
// current state can't be nullptr
Q_ASSERT_INCRIT(390, s != nullptr);
QS_MEM_SYS();
QS_BEGIN_PRE_(QS_QEP_IGNORED, qsId)
QS_TIME_PRE_(); // time stamp
@ -375,7 +377,7 @@ bool QMsm::isIn(QStateHandler const state) noexcept {
bool inState = false; // assume that this SM is not in 'state'
QMState const *s = m_state.obj;
std::int_fast8_t lbound = MAX_NEST_DEPTH_; // fixed upper loop bound
std::int_fast8_t lbound = QMSM_MAX_NEST_DEPTH_; // fixed upper loop bound
for (; (s != nullptr) && (lbound > 0); --lbound) {
if (s->stateHandler == state) { // match found?
inState = true;
@ -399,7 +401,7 @@ bool QMsm::isInState(QMState const * const stateObj) const noexcept {
bool inState = false; // assume that this SM is not in 'state'
QMState const *s = m_state.obj;
std::int_fast8_t lbound = MAX_NEST_DEPTH_; // fixed upper loop bound
std::int_fast8_t lbound = QMSM_MAX_NEST_DEPTH_; // fixed upper loop bound
for (; (s != nullptr) && (lbound > 0); --lbound) {
if (s == stateObj) { // match found?
inState = true;
@ -424,7 +426,7 @@ QMState const * QMsm::childStateObj(QMState const * const parent) const noexcept
bool isFound = false; // start with the child not found
QMState const *s;
std::int_fast8_t lbound = MAX_NEST_DEPTH_; // fixed upper loop bound
std::int_fast8_t lbound = QMSM_MAX_NEST_DEPTH_; // fixed upper loop bound
for (s = m_state.obj;
(s != nullptr) && (lbound > 0);
s = s->superstate)
@ -440,11 +442,11 @@ QMState const * QMsm::childStateObj(QMState const * const parent) const noexcept
}
QF_CRIT_STAT
QF_CRIT_ENTRY();
Q_ASSERT_INCRIT(610, lbound > 0);
Q_ENSURE_INCRIT(680, lbound > 0);
QF_CRIT_EXIT();
if (!isFound) { // still not found?
lbound = MAX_NEST_DEPTH_; // fixed upper loop bound
lbound = QMSM_MAX_NEST_DEPTH_; // fixed upper loop bound
for (s = m_temp.obj;
(s != nullptr) && (lbound > 0);
s = s->superstate)
@ -484,10 +486,11 @@ QState QMsm::execTatbl_(
QF_CRIT_EXIT();
QState r = Q_RET_NULL;
std::int_fast8_t lbound = MAX_TRAN_LENGTH_; // fixed upper loop bound
std::int_fast8_t lbound = QMSM_MAX_TRAN_LENGTH_; // fixed upper loop bound
QActionHandler const *a = &tatbl->act[0];
for (; (*a != nullptr) && (lbound > 0); ++a) {
r = (*(*a))(this); // call the action through the 'a' pointer
--lbound;
#ifdef Q_SPY
QS_CRIT_ENTRY();
QS_MEM_SYS();
@ -530,9 +533,10 @@ QState QMsm::execTatbl_(
QS_MEM_APP();
QS_CRIT_EXIT();
#endif // Q_SPY
--lbound;
}
QF_CRIT_ENTRY();
// NOTE: the following postcondition can only succeed when
// (lbound > 0), so no extra check is necessary.
Q_ENSURE_INCRIT(790, *a == nullptr);
QF_CRIT_EXIT();
@ -556,7 +560,7 @@ void QMsm::exitToTranSource_(
// exit states from the current state to the tran. source state
QMState const *s = cs;
std::int_fast8_t lbound = MAX_NEST_DEPTH_; // fixed upper loop bound
std::int_fast8_t lbound = QMSM_MAX_NEST_DEPTH_; // fixed upper loop bound
for (; (s != ts) && (lbound > 0); --lbound) {
// exit action provided in state 's'?
if (s->exitAction != nullptr) {
@ -578,7 +582,7 @@ void QMsm::exitToTranSource_(
if (s == nullptr) { // reached the top of a submachine?
s = m_temp.obj; // the superstate from QM_SM_EXIT()
QF_CRIT_ENTRY();
Q_ASSERT_INCRIT(810, s != nullptr); // must be valid
Q_ASSERT_INCRIT(880, s != nullptr); // must be valid
QF_CRIT_EXIT();
}
}
@ -598,7 +602,7 @@ QState QMsm::enterHistory_(
QMState const *s = hist;
QMState const *ts = m_state.obj; // tran. source
QMState const *epath[MAX_ENTRY_DEPTH_];
QMState const *epath[QMSM_MAX_ENTRY_DEPTH_];
QF_CRIT_STAT
@ -613,7 +617,7 @@ QState QMsm::enterHistory_(
QS_CRIT_EXIT();
std::int_fast8_t i = 0; // tran. entry path index
while ((s != ts) && (i < MAX_ENTRY_DEPTH_)) {
while ((s != ts) && (i < QMSM_MAX_ENTRY_DEPTH_)) {
if (s->entryAction != nullptr) {
epath[i] = s;
++i;

View File

@ -3,14 +3,14 @@
// Model: qpcpp.qm
// File: ${src::qf::qf_act.cpp}
//
// This code has been generated by QM 6.1.1 <www.state-machine.com/qm>.
// This code has been generated by QM 6.2.0 <www.state-machine.com/qm>.
// DO NOT EDIT THIS FILE MANUALLY. All your changes will be lost.
//
// This code is covered by the following QP license:
// License # : LicenseRef-QL-dual
// Issued to : Any user of the QP/C++ real-time embedded framework
// Framework(s) : qpcpp
// Support ends : 2024-12-31
// Support ends : 2025-12-31
// License scope:
//
// Copyright (C) 2005 Quantum Leaps, LLC <state-machine.com>.
@ -58,11 +58,10 @@ namespace {
//$skip${QP_VERSION} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
// Check for the minimum required QP version
#if (QP_VERSION < 730U) || (QP_VERSION != ((QP_RELEASE^4294967295U) % 0x3E8U))
#if (QP_VERSION < 730U) || (QP_VERSION != ((QP_RELEASE^4294967295U)%0x2710U))
#error qpcpp version 7.3.0 or higher required
#endif
//$endskip${QP_VERSION} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//$define${QF::QActive::registry_[QF_MAX_ACTIVE + 1U]} vvvvvvvvvvvvvvvvvvvvvvv
namespace QP {
QActive * QActive::registry_[QF_MAX_ACTIVE + 1U];

View File

@ -3,14 +3,14 @@
// Model: qpcpp.qm
// File: ${src::qf::qf_actq.cpp}
//
// This code has been generated by QM 6.1.1 <www.state-machine.com/qm>.
// This code has been generated by QM 6.2.0 <www.state-machine.com/qm>.
// DO NOT EDIT THIS FILE MANUALLY. All your changes will be lost.
//
// This code is covered by the following QP license:
// License # : LicenseRef-QL-dual
// Issued to : Any user of the QP/C++ real-time embedded framework
// Framework(s) : qpcpp
// Support ends : 2024-12-31
// Support ends : 2025-12-31
// License scope:
//
// Copyright (C) 2005 Quantum Leaps, LLC <state-machine.com>.
@ -59,11 +59,10 @@ Q_DEFINE_THIS_MODULE("qf_actq")
//$skip${QP_VERSION} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
// Check for the minimum required QP version
#if (QP_VERSION < 730U) || (QP_VERSION != ((QP_RELEASE^4294967295U) % 0x3E8U))
#if (QP_VERSION < 730U) || (QP_VERSION != ((QP_RELEASE^4294967295U)%0x2710U))
#error qpcpp version 7.3.0 or higher required
#endif
//$endskip${QP_VERSION} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//$define${QF::QActive::post_} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
namespace QP {
@ -111,7 +110,7 @@ bool QActive::post_(
}
else {
status = false; // cannot post
Q_ERROR_INCRIT(190); // must be able to post the event
Q_ERROR_INCRIT(110); // must be able to post the event
}
}
else if (nFree > static_cast<QEQueueCtr>(margin)) {

View File

@ -3,14 +3,14 @@
// Model: qpcpp.qm
// File: ${src::qf::qf_defer.cpp}
//
// This code has been generated by QM 6.1.1 <www.state-machine.com/qm>.
// This code has been generated by QM 6.2.0 <www.state-machine.com/qm>.
// DO NOT EDIT THIS FILE MANUALLY. All your changes will be lost.
//
// This code is covered by the following QP license:
// License # : LicenseRef-QL-dual
// Issued to : Any user of the QP/C++ real-time embedded framework
// Framework(s) : qpcpp
// Support ends : 2024-12-31
// Support ends : 2025-12-31
// License scope:
//
// Copyright (C) 2005 Quantum Leaps, LLC <state-machine.com>.
@ -58,11 +58,10 @@ Q_DEFINE_THIS_MODULE("qf_defer")
//$skip${QP_VERSION} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
// Check for the minimum required QP version
#if (QP_VERSION < 730U) || (QP_VERSION != ((QP_RELEASE^4294967295U) % 0x3E8U))
#if (QP_VERSION < 730U) || (QP_VERSION != ((QP_RELEASE^4294967295U)%0x2710U))
#error qpcpp version 7.3.0 or higher required
#endif
//$endskip${QP_VERSION} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//$define${QF::QActive::defer} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
namespace QP {

View File

@ -3,14 +3,14 @@
// Model: qpcpp.qm
// File: ${src::qf::qf_dyn.cpp}
//
// This code has been generated by QM 6.1.1 <www.state-machine.com/qm>.
// This code has been generated by QM 6.2.0 <www.state-machine.com/qm>.
// DO NOT EDIT THIS FILE MANUALLY. All your changes will be lost.
//
// This code is covered by the following QP license:
// License # : LicenseRef-QL-dual
// Issued to : Any user of the QP/C++ real-time embedded framework
// Framework(s) : qpcpp
// Support ends : 2024-12-31
// Support ends : 2025-12-31
// License scope:
//
// Copyright (C) 2005 Quantum Leaps, LLC <state-machine.com>.
@ -60,11 +60,10 @@ Q_DEFINE_THIS_MODULE("qf_dyn")
//$skip${QP_VERSION} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
// Check for the minimum required QP version
#if (QP_VERSION < 730U) || (QP_VERSION != ((QP_RELEASE^4294967295U) % 0x3E8U))
#if (QP_VERSION < 730U) || (QP_VERSION != ((QP_RELEASE^4294967295U)%0x2710U))
#error qpcpp version 7.3.0 or higher required
#endif
//$endskip${QP_VERSION} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//$define${QF::QF-dyn} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
namespace QP {
namespace QF {

View File

@ -3,14 +3,14 @@
// Model: qpcpp.qm
// File: ${src::qf::qf_mem.cpp}
//
// This code has been generated by QM 6.1.1 <www.state-machine.com/qm>.
// This code has been generated by QM 6.2.0 <www.state-machine.com/qm>.
// DO NOT EDIT THIS FILE MANUALLY. All your changes will be lost.
//
// This code is covered by the following QP license:
// License # : LicenseRef-QL-dual
// Issued to : Any user of the QP/C++ real-time embedded framework
// Framework(s) : qpcpp
// Support ends : 2024-12-31
// Support ends : 2025-12-31
// License scope:
//
// Copyright (C) 2005 Quantum Leaps, LLC <state-machine.com>.
@ -58,11 +58,10 @@ Q_DEFINE_THIS_MODULE("qf_mem")
//$skip${QP_VERSION} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
// Check for the minimum required QP version
#if (QP_VERSION < 730U) || (QP_VERSION != ((QP_RELEASE^4294967295U) % 0x3E8U))
#if (QP_VERSION < 730U) || (QP_VERSION != ((QP_RELEASE^4294967295U)%0x2710U))
#error qpcpp version 7.3.0 or higher required
#endif
//$endskip${QP_VERSION} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//$define${QF::QMPool} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
namespace QP {

View File

@ -3,14 +3,14 @@
// Model: qpcpp.qm
// File: ${src::qf::qf_ps.cpp}
//
// This code has been generated by QM 6.1.1 <www.state-machine.com/qm>.
// This code has been generated by QM 6.2.0 <www.state-machine.com/qm>.
// DO NOT EDIT THIS FILE MANUALLY. All your changes will be lost.
//
// This code is covered by the following QP license:
// License # : LicenseRef-QL-dual
// Issued to : Any user of the QP/C++ real-time embedded framework
// Framework(s) : qpcpp
// Support ends : 2024-12-31
// Support ends : 2025-12-31
// License scope:
//
// Copyright (C) 2005 Quantum Leaps, LLC <state-machine.com>.
@ -58,11 +58,10 @@ Q_DEFINE_THIS_MODULE("qf_ps")
//$skip${QP_VERSION} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
// Check for the minimum required QP version
#if (QP_VERSION < 730U) || (QP_VERSION != ((QP_RELEASE^4294967295U) % 0x3E8U))
#if (QP_VERSION < 730U) || (QP_VERSION != ((QP_RELEASE^4294967295U)%0x2710U))
#error qpcpp version 7.3.0 or higher required
#endif
//$endskip${QP_VERSION} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//$define${QF::QActive::subscrList_} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
namespace QP {
QSubscrList * QActive::subscrList_;

View File

@ -3,14 +3,14 @@
// Model: qpcpp.qm
// File: ${src::qf::qf_qact.cpp}
//
// This code has been generated by QM 6.1.1 <www.state-machine.com/qm>.
// This code has been generated by QM 6.2.0 <www.state-machine.com/qm>.
// DO NOT EDIT THIS FILE MANUALLY. All your changes will be lost.
//
// This code is covered by the following QP license:
// License # : LicenseRef-QL-dual
// Issued to : Any user of the QP/C++ real-time embedded framework
// Framework(s) : qpcpp
// Support ends : 2024-12-31
// Support ends : 2025-12-31
// License scope:
//
// Copyright (C) 2005 Quantum Leaps, LLC <state-machine.com>.
@ -58,11 +58,10 @@ Q_DEFINE_THIS_MODULE("qf_qact")
//$skip${QP_VERSION} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
// Check for the minimum required QP version
#if (QP_VERSION < 730U) || (QP_VERSION != ((QP_RELEASE^4294967295U) % 0x3E8U))
#if (QP_VERSION < 730U) || (QP_VERSION != ((QP_RELEASE^4294967295U)%0x2710U))
#error qpcpp version 7.3.0 or higher required
#endif
//$endskip${QP_VERSION} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//$define${QF::QActive::QActive} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
namespace QP {

View File

@ -3,14 +3,14 @@
// Model: qpcpp.qm
// File: ${src::qf::qf_qeq.cpp}
//
// This code has been generated by QM 6.1.1 <www.state-machine.com/qm>.
// This code has been generated by QM 6.2.0 <www.state-machine.com/qm>.
// DO NOT EDIT THIS FILE MANUALLY. All your changes will be lost.
//
// This code is covered by the following QP license:
// License # : LicenseRef-QL-dual
// Issued to : Any user of the QP/C++ real-time embedded framework
// Framework(s) : qpcpp
// Support ends : 2024-12-31
// Support ends : 2025-12-31
// License scope:
//
// Copyright (C) 2005 Quantum Leaps, LLC <state-machine.com>.
@ -58,11 +58,10 @@ Q_DEFINE_THIS_MODULE("qf_qeq")
//$skip${QP_VERSION} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
// Check for the minimum required QP version
#if (QP_VERSION < 730U) || (QP_VERSION != ((QP_RELEASE^4294967295U) % 0x3E8U))
#if (QP_VERSION < 730U) || (QP_VERSION != ((QP_RELEASE^4294967295U)%0x2710U))
#error qpcpp version 7.3.0 or higher required
#endif
//$endskip${QP_VERSION} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//$define${QF::QEQueue} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
namespace QP {

View File

@ -3,14 +3,14 @@
// Model: qpcpp.qm
// File: ${src::qf::qf_qmact.cpp}
//
// This code has been generated by QM 6.1.1 <www.state-machine.com/qm>.
// This code has been generated by QM 6.2.0 <www.state-machine.com/qm>.
// DO NOT EDIT THIS FILE MANUALLY. All your changes will be lost.
//
// This code is covered by the following QP license:
// License # : LicenseRef-QL-dual
// Issued to : Any user of the QP/C++ real-time embedded framework
// Framework(s) : qpcpp
// Support ends : 2024-12-31
// Support ends : 2025-12-31
// License scope:
//
// Copyright (C) 2005 Quantum Leaps, LLC <state-machine.com>.
@ -58,11 +58,10 @@ namespace {
//$skip${QP_VERSION} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
// Check for the minimum required QP version
#if (QP_VERSION < 730U) || (QP_VERSION != ((QP_RELEASE^4294967295U) % 0x3E8U))
#if (QP_VERSION < 730U) || (QP_VERSION != ((QP_RELEASE^4294967295U)%0x2710U))
#error qpcpp version 7.3.0 or higher required
#endif
//$endskip${QP_VERSION} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//$define${QF::QMActive} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
namespace QP {

View File

@ -3,14 +3,14 @@
// Model: qpcpp.qm
// File: ${src::qf::qf_time.cpp}
//
// This code has been generated by QM 6.1.1 <www.state-machine.com/qm>.
// This code has been generated by QM 6.2.0 <www.state-machine.com/qm>.
// DO NOT EDIT THIS FILE MANUALLY. All your changes will be lost.
//
// This code is covered by the following QP license:
// License # : LicenseRef-QL-dual
// Issued to : Any user of the QP/C++ real-time embedded framework
// Framework(s) : qpcpp
// Support ends : 2024-12-31
// Support ends : 2025-12-31
// License scope:
//
// Copyright (C) 2005 Quantum Leaps, LLC <state-machine.com>.
@ -58,11 +58,10 @@ Q_DEFINE_THIS_MODULE("qf_time")
//$skip${QP_VERSION} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
// Check for the minimum required QP version
#if (QP_VERSION < 730U) || (QP_VERSION != ((QP_RELEASE^4294967295U) % 0x3E8U))
#if (QP_VERSION < 730U) || (QP_VERSION != ((QP_RELEASE^4294967295U)%0x2710U))
#error qpcpp version 7.3.0 or higher required
#endif
//$endskip${QP_VERSION} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//$define${QF::QTimeEvt} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
namespace QP {

View File

@ -3,14 +3,14 @@
// Model: qpcpp.qm
// File: ${src::qk::qk.cpp}
//
// This code has been generated by QM 6.1.1 <www.state-machine.com/qm>.
// This code has been generated by QM 6.2.0 <www.state-machine.com/qm>.
// DO NOT EDIT THIS FILE MANUALLY. All your changes will be lost.
//
// This code is covered by the following QP license:
// License # : LicenseRef-QL-dual
// Issued to : Any user of the QP/C++ real-time embedded framework
// Framework(s) : qpcpp
// Support ends : 2024-12-31
// Support ends : 2025-12-31
// License scope:
//
// Copyright (C) 2005 Quantum Leaps, LLC <state-machine.com>.
@ -63,11 +63,10 @@ Q_DEFINE_THIS_MODULE("qk")
//$skip${QP_VERSION} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
// Check for the minimum required QP version
#if (QP_VERSION < 730U) || (QP_VERSION != ((QP_RELEASE^4294967295U) % 0x3E8U))
#if (QP_VERSION < 730U) || (QP_VERSION != ((QP_RELEASE^4294967295U)%0x2710U))
#error qpcpp version 7.3.0 or higher required
#endif
//$endskip${QP_VERSION} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//$define${QK::QK-base} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
namespace QP {
namespace QK {

View File

@ -3,14 +3,14 @@
// Model: qpcpp.qm
// File: ${src::qs::qs.cpp}
//
// This code has been generated by QM 6.1.1 <www.state-machine.com/qm>.
// This code has been generated by QM 6.2.0 <www.state-machine.com/qm>.
// DO NOT EDIT THIS FILE MANUALLY. All your changes will be lost.
//
// This code is covered by the following QP license:
// License # : LicenseRef-QL-dual
// Issued to : Any user of the QP/C++ real-time embedded framework
// Framework(s) : qpcpp
// Support ends : 2024-12-31
// Support ends : 2025-12-31
// License scope:
//
// Copyright (C) 2005 Quantum Leaps, LLC <state-machine.com>.
@ -53,11 +53,10 @@ Q_DEFINE_THIS_MODULE("qs")
//$skip${QP_VERSION} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
// Check for the minimum required QP version
#if (QP_VERSION < 730U) || (QP_VERSION != ((QP_RELEASE^4294967295U) % 0x3E8U))
#if (QP_VERSION < 730U) || (QP_VERSION != ((QP_RELEASE^4294967295U)%0x2710U))
#error qpcpp version 7.3.0 or higher required
#endif
//$endskip${QP_VERSION} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//$define${QS::QS-TX} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
namespace QP {
namespace QS {

View File

@ -3,14 +3,14 @@
// Model: qpcpp.qm
// File: ${src::qs::qs_64bit.cpp}
//
// This code has been generated by QM 6.1.1 <www.state-machine.com/qm>.
// This code has been generated by QM 6.2.0 <www.state-machine.com/qm>.
// DO NOT EDIT THIS FILE MANUALLY. All your changes will be lost.
//
// This code is covered by the following QP license:
// License # : LicenseRef-QL-dual
// Issued to : Any user of the QP/C++ real-time embedded framework
// Framework(s) : qpcpp
// Support ends : 2024-12-31
// Support ends : 2025-12-31
// License scope:
//
// Copyright (C) 2005 Quantum Leaps, LLC <state-machine.com>.

View File

@ -3,14 +3,14 @@
// Model: qpcpp.qm
// File: ${src::qs::qs_fp.cpp}
//
// This code has been generated by QM 6.1.1 <www.state-machine.com/qm>.
// This code has been generated by QM 6.2.0 <www.state-machine.com/qm>.
// DO NOT EDIT THIS FILE MANUALLY. All your changes will be lost.
//
// This code is covered by the following QP license:
// License # : LicenseRef-QL-dual
// Issued to : Any user of the QP/C++ real-time embedded framework
// Framework(s) : qpcpp
// Support ends : 2024-12-31
// Support ends : 2025-12-31
// License scope:
//
// Copyright (C) 2005 Quantum Leaps, LLC <state-machine.com>.

View File

@ -3,14 +3,14 @@
// Model: qpcpp.qm
// File: ${src::qs::qs_rx.cpp}
//
// This code has been generated by QM 6.1.1 <www.state-machine.com/qm>.
// This code has been generated by QM 6.2.0 <www.state-machine.com/qm>.
// DO NOT EDIT THIS FILE MANUALLY. All your changes will be lost.
//
// This code is covered by the following QP license:
// License # : LicenseRef-QL-dual
// Issued to : Any user of the QP/C++ real-time embedded framework
// Framework(s) : qpcpp
// Support ends : 2024-12-31
// Support ends : 2025-12-31
// License scope:
//
// Copyright (C) 2005 Quantum Leaps, LLC <state-machine.com>.
@ -132,11 +132,10 @@ RxAttr rxPriv_;
//$skip${QP_VERSION} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
// Check for the minimum required QP version
#if (QP_VERSION < 730U) || (QP_VERSION != ((QP_RELEASE^4294967295U) % 0x3E8U))
#if (QP_VERSION < 730U) || (QP_VERSION != ((QP_RELEASE^4294967295U)%0x2710U))
#error qpcpp version 7.3.0 or higher required
#endif
//$endskip${QP_VERSION} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//$define${QS::QS-RX} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
namespace QP {
namespace QS {

View File

@ -3,14 +3,14 @@
// Model: qpcpp.qm
// File: ${src::qs::qstamp.cpp}
//
// This code has been generated by QM 6.1.1 <www.state-machine.com/qm>.
// This code has been generated by QM 6.2.0 <www.state-machine.com/qm>.
// DO NOT EDIT THIS FILE MANUALLY. All your changes will be lost.
//
// This code is covered by the following QP license:
// License # : LicenseRef-QL-dual
// Issued to : Any user of the QP/C++ real-time embedded framework
// Framework(s) : qpcpp
// Support ends : 2024-12-31
// Support ends : 2025-12-31
// License scope:
//
// Copyright (C) 2005 Quantum Leaps, LLC <state-machine.com>.

View File

@ -3,14 +3,14 @@
// Model: qpcpp.qm
// File: ${src::qs::qutest.cpp}
//
// This code has been generated by QM 6.1.1 <www.state-machine.com/qm>.
// This code has been generated by QM 6.2.0 <www.state-machine.com/qm>.
// DO NOT EDIT THIS FILE MANUALLY. All your changes will be lost.
//
// This code is covered by the following QP license:
// License # : LicenseRef-QL-dual
// Issued to : Any user of the QP/C++ real-time embedded framework
// Framework(s) : qpcpp
// Support ends : 2024-12-31
// Support ends : 2025-12-31
// License scope:
//
// Copyright (C) 2005 Quantum Leaps, LLC <state-machine.com>.
@ -52,11 +52,10 @@
//$skip${QP_VERSION} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
// Check for the minimum required QP version
#if (QP_VERSION < 730U) || (QP_VERSION != ((QP_RELEASE^4294967295U) % 0x3E8U))
#if (QP_VERSION < 730U) || (QP_VERSION != ((QP_RELEASE^4294967295U)%0x2710U))
#error qpcpp version 7.3.0 or higher required
#endif
//$endskip${QP_VERSION} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//$define${QS::QUTest} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
namespace QP {
namespace QS {

View File

@ -3,14 +3,14 @@
// Model: qpcpp.qm
// File: ${src::qv::qv.cpp}
//
// This code has been generated by QM 6.1.1 <www.state-machine.com/qm>.
// This code has been generated by QM 6.2.0 <www.state-machine.com/qm>.
// DO NOT EDIT THIS FILE MANUALLY. All your changes will be lost.
//
// This code is covered by the following QP license:
// License # : LicenseRef-QL-dual
// Issued to : Any user of the QP/C++ real-time embedded framework
// Framework(s) : qpcpp
// Support ends : 2024-12-31
// Support ends : 2025-12-31
// License scope:
//
// Copyright (C) 2005 Quantum Leaps, LLC <state-machine.com>.
@ -63,11 +63,10 @@ Q_DEFINE_THIS_MODULE("qv")
//$skip${QP_VERSION} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
// Check for the minimum required QP version
#if (QP_VERSION < 730U) || (QP_VERSION != ((QP_RELEASE^4294967295U) % 0x3E8U))
#if (QP_VERSION < 730U) || (QP_VERSION != ((QP_RELEASE^4294967295U)%0x2710U))
#error qpcpp version 7.3.0 or higher required
#endif
//$endskip${QP_VERSION} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//$define${QV::QV-base} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
namespace QP {
namespace QV {

View File

@ -3,14 +3,14 @@
// Model: qpcpp.qm
// File: ${src::qxk::qxk.cpp}
//
// This code has been generated by QM 6.1.1 <www.state-machine.com/qm>.
// This code has been generated by QM 6.2.0 <www.state-machine.com/qm>.
// DO NOT EDIT THIS FILE MANUALLY. All your changes will be lost.
//
// This code is covered by the following QP license:
// License # : LicenseRef-QL-dual
// Issued to : Any user of the QP/C++ real-time embedded framework
// Framework(s) : qpcpp
// Support ends : 2024-12-31
// Support ends : 2025-12-31
// License scope:
//
// Copyright (C) 2005 Quantum Leaps, LLC <state-machine.com>.
@ -63,11 +63,10 @@ Q_DEFINE_THIS_MODULE("qxk")
//$skip${QP_VERSION} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
// Check for the minimum required QP version
#if (QP_VERSION < 730U) || (QP_VERSION != ((QP_RELEASE^4294967295U) % 0x3E8U))
#if (QP_VERSION < 730U) || (QP_VERSION != ((QP_RELEASE^4294967295U)%0x2710U))
#error qpcpp version 7.3.0 or higher required
#endif
//$endskip${QP_VERSION} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//$define${QXK::QXK-base} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
namespace QP {
namespace QXK {

View File

@ -3,14 +3,14 @@
// Model: qpcpp.qm
// File: ${src::qxk::qxk_mutex.cpp}
//
// This code has been generated by QM 6.1.1 <www.state-machine.com/qm>.
// This code has been generated by QM 6.2.0 <www.state-machine.com/qm>.
// DO NOT EDIT THIS FILE MANUALLY. All your changes will be lost.
//
// This code is covered by the following QP license:
// License # : LicenseRef-QL-dual
// Issued to : Any user of the QP/C++ real-time embedded framework
// Framework(s) : qpcpp
// Support ends : 2024-12-31
// Support ends : 2025-12-31
// License scope:
//
// Copyright (C) 2005 Quantum Leaps, LLC <state-machine.com>.
@ -63,11 +63,10 @@ Q_DEFINE_THIS_MODULE("qxk_mutex")
//$skip${QP_VERSION} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
// Check for the minimum required QP version
#if (QP_VERSION < 730U) || (QP_VERSION != ((QP_RELEASE^4294967295U) % 0x3E8U))
#if (QP_VERSION < 730U) || (QP_VERSION != ((QP_RELEASE^4294967295U)%0x2710U))
#error qpcpp version 7.3.0 or higher required
#endif
//$endskip${QP_VERSION} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//$define${QXK::QXMutex} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
namespace QP {

View File

@ -3,14 +3,14 @@
// Model: qpcpp.qm
// File: ${src::qxk::qxk_sema.cpp}
//
// This code has been generated by QM 6.1.1 <www.state-machine.com/qm>.
// This code has been generated by QM 6.2.0 <www.state-machine.com/qm>.
// DO NOT EDIT THIS FILE MANUALLY. All your changes will be lost.
//
// This code is covered by the following QP license:
// License # : LicenseRef-QL-dual
// Issued to : Any user of the QP/C++ real-time embedded framework
// Framework(s) : qpcpp
// Support ends : 2024-12-31
// Support ends : 2025-12-31
// License scope:
//
// Copyright (C) 2005 Quantum Leaps, LLC <state-machine.com>.
@ -63,11 +63,10 @@ Q_DEFINE_THIS_MODULE("qxk_sema")
//$skip${QP_VERSION} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
// Check for the minimum required QP version
#if (QP_VERSION < 730U) || (QP_VERSION != ((QP_RELEASE^4294967295U) % 0x3E8U))
#if (QP_VERSION < 730U) || (QP_VERSION != ((QP_RELEASE^4294967295U)%0x2710U))
#error qpcpp version 7.3.0 or higher required
#endif
//$endskip${QP_VERSION} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//$define${QXK::QXSemaphore} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
namespace QP {

View File

@ -3,14 +3,14 @@
// Model: qpcpp.qm
// File: ${src::qxk::qxk_xthr.cpp}
//
// This code has been generated by QM 6.1.1 <www.state-machine.com/qm>.
// This code has been generated by QM 6.2.0 <www.state-machine.com/qm>.
// DO NOT EDIT THIS FILE MANUALLY. All your changes will be lost.
//
// This code is covered by the following QP license:
// License # : LicenseRef-QL-dual
// Issued to : Any user of the QP/C++ real-time embedded framework
// Framework(s) : qpcpp
// Support ends : 2024-12-31
// Support ends : 2025-12-31
// License scope:
//
// Copyright (C) 2005 Quantum Leaps, LLC <state-machine.com>.
@ -63,11 +63,10 @@ Q_DEFINE_THIS_MODULE("qxk_xthr")
//$skip${QP_VERSION} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
// Check for the minimum required QP version
#if (QP_VERSION < 730U) || (QP_VERSION != ((QP_RELEASE^4294967295U) % 0x3E8U))
#if (QP_VERSION < 730U) || (QP_VERSION != ((QP_RELEASE^4294967295U)%0x2710U))
#error qpcpp version 7.3.0 or higher required
#endif
//$endskip${QP_VERSION} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//$define${QXK::QXThread} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
namespace QP {