mirror of
https://github.com/QuantumLeaps/qpcpp.git
synced 2025-01-28 06:02:56 +08:00
7.4.0-rc.3
This commit is contained in:
parent
950ab31089
commit
447007864e
2
.gitignore
vendored
2
.gitignore
vendored
@ -1,3 +1,4 @@
|
||||
*.qms
|
||||
*.obj
|
||||
*.o
|
||||
*.d
|
||||
@ -33,7 +34,6 @@
|
||||
*.Debug
|
||||
*.Release
|
||||
*.bak
|
||||
.qpcpp
|
||||
version-*
|
||||
JLink*.*
|
||||
|
||||
|
@ -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
|
@ -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)
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
2
examples
2
examples
@ -1 +1 @@
|
||||
Subproject commit 5f1b007ea70dd8ed5f7a727e7e83402c75f69146
|
||||
Subproject commit 1d4093e9c95bbb3ec438d57fbc06c36361599ea4
|
@ -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>.
|
||||
|
@ -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>.
|
||||
|
@ -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>.
|
||||
|
@ -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
|
||||
|
||||
|
@ -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>.
|
||||
|
@ -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>.
|
||||
|
@ -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
|
||||
|
@ -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>.
|
||||
|
@ -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>.
|
||||
|
@ -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>.
|
||||
|
@ -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>.
|
||||
|
@ -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>.
|
||||
|
@ -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() {
|
||||
|
@ -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);
|
||||
|
@ -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() {
|
||||
|
@ -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
181
qpcpp.md5
@ -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
148
qpcpp.qm
@ -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:
|
||||
<www.state-machine.com/licensing>
|
||||
<info@state-machine.com></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 <state-machine.com>.
|
||||
|
||||
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: <www.gnu.org/licenses/gpl-3.0>
|
||||
|
||||
The terms of the closed source Quantum Leaps commercial licenses
|
||||
can be found at: <www.state-machine.com/licensing>
|
||||
|
||||
Redistributions in source code must retain this top-level comment block.
|
||||
Plagiarizing this software to sidestep the license obligations is illegal.
|
||||
|
||||
Contact information:
|
||||
<www.state-machine.com/licensing>
|
||||
<info@state-machine.com>
|
||||
#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<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];
|
||||
@ -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 > 0);
|
||||
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) {
|
||||
@ -683,7 +710,7 @@ if (r >= Q_RET_TRAN) { // regular tran. taken?
|
||||
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
|
||||
@ -692,7 +719,7 @@ if (r >= Q_RET_TRAN) { // regular tran. taken?
|
||||
}
|
||||
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];
|
||||
@ -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) && (lbound > 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="(&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)
|
||||
&& (ip < (MAX_NEST_DEPTH_ - 1)))
|
||||
&& (ip < (QHSM_MAX_NEST_DEPTH_ - 1)))
|
||||
{
|
||||
++ip;
|
||||
path[ip] = m_temp.fun; // store the entry path
|
||||
@ -956,7 +983,7 @@ else {
|
||||
// (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)
|
||||
@ -984,7 +1011,7 @@ else {
|
||||
--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();
|
||||
}
|
||||
}
|
||||
@ -993,7 +1020,7 @@ else {
|
||||
}
|
||||
}
|
||||
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;</code>
|
||||
</operation>
|
||||
@ -1049,7 +1076,7 @@ QF_CRIT_EXIT();
|
||||
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);
|
||||
@ -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->stateHandler)(this, e); // call state handler function
|
||||
|
||||
@ -1149,7 +1176,7 @@ do {
|
||||
--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?
|
||||
@ -1158,11 +1185,11 @@ if (r >= 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 >= 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 < Q_RET_TRAN);
|
||||
QF_CRIT_EXIT();
|
||||
}
|
||||
@ -1233,7 +1260,7 @@ if (r >= Q_RET_TRAN) { // any kind of tran. taken?
|
||||
} 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)
|
||||
@ -1253,7 +1280,7 @@ if (r >= 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) && (lbound > 0); --lbound) {
|
||||
if (s->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) && (lbound > 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) && (lbound > 0);
|
||||
s = s->superstate)
|
||||
@ -1371,11 +1401,11 @@ for (s = m_state.obj;
|
||||
}
|
||||
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)
|
||||
@ -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 = &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();
|
||||
@ -1461,9 +1492,10 @@ for (; (*a != nullptr) && (lbound > 0); ++a) {
|
||||
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();
|
||||
|
||||
@ -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) && (lbound > 0); --lbound) {
|
||||
// exit action provided in state 's'?
|
||||
if (s->exitAction != nullptr) {
|
||||
@ -1510,7 +1542,7 @@ for (; (s != ts) && (lbound > 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) && (i < MAX_ENTRY_DEPTH_)) {
|
||||
while ((s != ts) && (i < QMSM_MAX_ENTRY_DEPTH_)) {
|
||||
if (s->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 > static_cast<QEQueueCtr>(margin)) {
|
||||
@ -7200,9 +7232,9 @@ QF_CRIT_EXIT();</code>
|
||||
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
|
||||
@ -8560,7 +8592,7 @@ if (QS_GLB_CHECK_(rec_) && QS_LOC_CHECK_(qsId_)) { \
|
||||
#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
|
||||
|
||||
@ -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 >= 3
|
||||
static constexpr std::int_fast8_t QHSM_MAX_NEST_DEPTH_ {6};
|
||||
//============================================================================
|
||||
|
||||
$define ${QEP::versionStr[]}
|
||||
@ -9687,15 +9723,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,
|
||||
@ -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
174
qpcpp.sha1
Normal 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
|
@ -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
|
@ -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;
|
||||
}
|
||||
|
@ -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;
|
||||
|
@ -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];
|
||||
|
@ -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)) {
|
||||
|
@ -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 {
|
||||
|
||||
|
@ -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 {
|
||||
|
@ -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 {
|
||||
|
||||
|
@ -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_;
|
||||
|
@ -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 {
|
||||
|
||||
|
@ -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 {
|
||||
|
||||
|
@ -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 {
|
||||
|
||||
|
@ -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 {
|
||||
|
||||
|
@ -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 {
|
||||
|
@ -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 {
|
||||
|
@ -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>.
|
||||
|
@ -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>.
|
||||
|
@ -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 {
|
||||
|
@ -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>.
|
||||
|
@ -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 {
|
||||
|
@ -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 {
|
||||
|
@ -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 {
|
||||
|
@ -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 {
|
||||
|
||||
|
@ -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 {
|
||||
|
||||
|
@ -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 {
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user