diff --git a/.gitignore b/.gitignore index e6fd086ae..37875d82f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ +*.qms *.obj *.o *.d @@ -33,7 +34,6 @@ *.Debug *.Release *.bak -.qpcpp version-* JLink*.* diff --git a/LICENSES/LicenseRef-QL-dual.qlc b/LICENSES/LicenseRef-QL-dual.qlc index d5def7707..0a88f5088 100644 --- a/LICENSES/LicenseRef-QL-dual.qlc +++ b/LICENSES/LicenseRef-QL-dual.qlc @@ -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 . @@ -27,4 +27,4 @@ Plagiarizing this software to sidestep the license obligations is illegal. Contact information: -#10EBA9166330240A6EE04F770591C48BE4545919 \ No newline at end of file +#CEF384A62BD9270573AA82386A5BE6F6E36AD848 \ No newline at end of file diff --git a/LICENSES/QP-Arduino_GPL_Exception.txt b/LICENSES/QP-Arduino_GPL_Exception.txt index 18112ea32..9dd81ddd9 100644 --- a/LICENSES/QP-Arduino_GPL_Exception.txt +++ b/LICENSES/QP-Arduino_GPL_Exception.txt @@ -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) diff --git a/LICENSES/QP-RasPi_GPL_Exception.txt b/LICENSES/QP-RasPi_GPL_Exception.txt index 998744ea8..30aa33bb3 100644 --- a/LICENSES/QP-RasPi_GPL_Exception.txt +++ b/LICENSES/QP-RasPi_GPL_Exception.txt @@ -7,11 +7,10 @@ Copyright (c) 2005-2021 Quantum Leaps, LLC. 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: and -"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: . -"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 diff --git a/LICENSES/QP-mbed_GPL_Exception.txt b/LICENSES/QP-mbed_GPL_Exception.txt index 3ba91f329..c3e9fb4e6 100644 --- a/LICENSES/QP-mbed_GPL_Exception.txt +++ b/LICENSES/QP-mbed_GPL_Exception.txt @@ -7,11 +7,10 @@ Copyright (c) 2005-2014 Quantum Leaps, LLC. 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: and -"mbed-Enabled Board" means any board with an ARM Cortex-M CPU that is -listed on the official "mbed platforms" website -. +"mbed-Enabled Board" means any board with an ARM Cortex-M CPU that is listed +on the official "mbed platforms" website . 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 diff --git a/examples b/examples index 5f1b007ea..1d4093e9c 160000 --- a/examples +++ b/examples @@ -1 +1 @@ -Subproject commit 5f1b007ea70dd8ed5f7a727e7e83402c75f69146 +Subproject commit 1d4093e9c95bbb3ec438d57fbc06c36361599ea4 diff --git a/include/qequeue.hpp b/include/qequeue.hpp index 177231fe1..6fb240b10 100644 --- a/include/qequeue.hpp +++ b/include/qequeue.hpp @@ -3,14 +3,14 @@ // Model: qpcpp.qm // File: ${include::qequeue.hpp} // -// This code has been generated by QM 6.1.1 . +// This code has been generated by QM 6.2.0 . // 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 . diff --git a/include/qk.hpp b/include/qk.hpp index a13fc2e90..741185ac2 100644 --- a/include/qk.hpp +++ b/include/qk.hpp @@ -3,14 +3,14 @@ // Model: qpcpp.qm // File: ${include::qk.hpp} // -// This code has been generated by QM 6.1.1 . +// This code has been generated by QM 6.2.0 . // 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 . diff --git a/include/qmpool.hpp b/include/qmpool.hpp index a05aa78e0..6c6306e73 100644 --- a/include/qmpool.hpp +++ b/include/qmpool.hpp @@ -3,14 +3,14 @@ // Model: qpcpp.qm // File: ${include::qmpool.hpp} // -// This code has been generated by QM 6.1.1 . +// This code has been generated by QM 6.2.0 . // 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 . diff --git a/include/qp.hpp b/include/qp.hpp index 8355e2d59..a5615ba33 100644 --- a/include/qp.hpp +++ b/include/qp.hpp @@ -3,14 +3,14 @@ // Model: qpcpp.qm // File: ${include::qp.hpp} // -// This code has been generated by QM 6.1.1 . +// This code has been generated by QM 6.2.0 . // 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 . @@ -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 @@ class QAsm { //${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 @@ class QHsm : public QP::QAsm { private: std::int_fast8_t hsm_tran( - QStateHandler (&path)[MAX_NEST_DEPTH_], + QStateHandler * const path, std::uint_fast8_t const qsId); }; // class QHsm diff --git a/include/qp_pkg.hpp b/include/qp_pkg.hpp index a34d1dd58..4bfc0da96 100644 --- a/include/qp_pkg.hpp +++ b/include/qp_pkg.hpp @@ -3,14 +3,14 @@ // Model: qpcpp.qm // File: ${include::qp_pkg.hpp} // -// This code has been generated by QM 6.1.1 . +// This code has been generated by QM 6.2.0 . // 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 . diff --git a/include/qpcpp.hpp b/include/qpcpp.hpp index f0f139694..89918efe3 100644 --- a/include/qpcpp.hpp +++ b/include/qpcpp.hpp @@ -3,14 +3,14 @@ // Model: qpcpp.qm // File: ${include::qpcpp.hpp} // -// This code has been generated by QM 6.1.1 . +// This code has been generated by QM 6.2.0 . // 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 . diff --git a/include/qs.hpp b/include/qs.hpp index f6466051a..85cf8d443 100644 --- a/include/qs.hpp +++ b/include/qs.hpp @@ -3,14 +3,14 @@ // Model: qpcpp.qm // File: ${include::qs.hpp} // -// This code has been generated by QM 6.1.1 . +// This code has been generated by QM 6.2.0 . // 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 . @@ -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 diff --git a/include/qs_dummy.hpp b/include/qs_dummy.hpp index 27ba09bcd..9d112bdbd 100644 --- a/include/qs_dummy.hpp +++ b/include/qs_dummy.hpp @@ -3,14 +3,14 @@ // Model: qpcpp.qm // File: ${include::qs_dummy.hpp} // -// This code has been generated by QM 6.1.1 . +// This code has been generated by QM 6.2.0 . // 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 . diff --git a/include/qs_pkg.hpp b/include/qs_pkg.hpp index 09b22cbde..889df7809 100644 --- a/include/qs_pkg.hpp +++ b/include/qs_pkg.hpp @@ -3,14 +3,14 @@ // Model: qpcpp.qm // File: ${include::qs_pkg.hpp} // -// This code has been generated by QM 6.1.1 . +// This code has been generated by QM 6.2.0 . // 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 . diff --git a/include/qstamp.hpp b/include/qstamp.hpp index 82dadd771..d78bcb23d 100644 --- a/include/qstamp.hpp +++ b/include/qstamp.hpp @@ -3,14 +3,14 @@ // Model: qpcpp.qm // File: ${include::qstamp.hpp} // -// This code has been generated by QM 6.1.1 . +// This code has been generated by QM 6.2.0 . // 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 . diff --git a/include/qv.hpp b/include/qv.hpp index ba6ac10c7..3f83fe50e 100644 --- a/include/qv.hpp +++ b/include/qv.hpp @@ -3,14 +3,14 @@ // Model: qpcpp.qm // File: ${include::qv.hpp} // -// This code has been generated by QM 6.1.1 . +// This code has been generated by QM 6.2.0 . // 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 . diff --git a/include/qxk.hpp b/include/qxk.hpp index 8f2ed9885..dc4b1e9a7 100644 --- a/include/qxk.hpp +++ b/include/qxk.hpp @@ -3,14 +3,14 @@ // Model: qpcpp.qm // File: ${include::qxk.hpp} // -// This code has been generated by QM 6.1.1 . +// This code has been generated by QM 6.2.0 . // 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 . diff --git a/ports/posix-qv/qf_port.cpp b/ports/posix-qv/qf_port.cpp index 8ba44b12c..620f07bda 100644 --- a/ports/posix-qv/qf_port.cpp +++ b/ports/posix-qv/qf_port.cpp @@ -22,7 +22,7 @@ // // //============================================================================ -//! @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() { diff --git a/ports/posix-qv/qs_port.cpp b/ports/posix-qv/qs_port.cpp index 0f06e8df6..d9a88ea60 100644 --- a/ports/posix-qv/qs_port.cpp +++ b/ports/posix-qv/qs_port.cpp @@ -22,8 +22,8 @@ // // //============================================================================ -//! @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); diff --git a/ports/posix/qf_port.cpp b/ports/posix/qf_port.cpp index 32ac32a02..7a00bbc15 100644 --- a/ports/posix/qf_port.cpp +++ b/ports/posix/qf_port.cpp @@ -22,7 +22,7 @@ // // //============================================================================ -//! @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() { diff --git a/ports/posix/qs_port.cpp b/ports/posix/qs_port.cpp index 0f06e8df6..d9a88ea60 100644 --- a/ports/posix/qs_port.cpp +++ b/ports/posix/qs_port.cpp @@ -22,8 +22,8 @@ // // //============================================================================ -//! @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); diff --git a/qpcpp.md5 b/qpcpp.md5 deleted file mode 100644 index 2e0c798fc..000000000 --- a/qpcpp.md5 +++ /dev/null @@ -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 diff --git a/qpcpp.qm b/qpcpp.qm index 10ef6af83..1c4831eec 100644 --- a/qpcpp.qm +++ b/qpcpp.qm @@ -1,5 +1,5 @@ - + 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> - + + 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 + @@ -412,10 +443,6 @@ return Q_RET_SUPER_SUB; Human-generated State Machine - - - {6}; - noexcept @@ -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; - - + + #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; @@ -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; 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; 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; 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(); 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} diff --git a/qpcpp.sha1 b/qpcpp.sha1 new file mode 100644 index 000000000..55184e002 --- /dev/null +++ b/qpcpp.sha1 @@ -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 diff --git a/qpcpp_md5.bat b/qpcpp_sha1.bat similarity index 62% rename from qpcpp_md5.bat rename to qpcpp_sha1.bat index f72185532..e2aeff377 100644 --- a/qpcpp_md5.bat +++ b/qpcpp_sha1.bat @@ -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 diff --git a/src/qf/qep_hsm.cpp b/src/qf/qep_hsm.cpp index 010c0f3b9..d7fc96630 100644 --- a/src/qf/qep_hsm.cpp +++ b/src/qf/qep_hsm.cpp @@ -3,14 +3,14 @@ // Model: qpcpp.qm // File: ${src::qf::qep_hsm.cpp} // -// This code has been generated by QM 6.1.1 . +// This code has been generated by QM 6.2.0 . // 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 . @@ -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(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(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(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; } diff --git a/src/qf/qep_msm.cpp b/src/qf/qep_msm.cpp index a83c89585..700baa135 100644 --- a/src/qf/qep_msm.cpp +++ b/src/qf/qep_msm.cpp @@ -3,14 +3,14 @@ // Model: qpcpp.qm // File: ${src::qf::qep_msm.cpp} // -// This code has been generated by QM 6.1.1 . +// This code has been generated by QM 6.2.0 . // 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 . @@ -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; diff --git a/src/qf/qf_act.cpp b/src/qf/qf_act.cpp index 970ebead9..909ab7bda 100644 --- a/src/qf/qf_act.cpp +++ b/src/qf/qf_act.cpp @@ -3,14 +3,14 @@ // Model: qpcpp.qm // File: ${src::qf::qf_act.cpp} // -// This code has been generated by QM 6.1.1 . +// This code has been generated by QM 6.2.0 . // 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 . @@ -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]; diff --git a/src/qf/qf_actq.cpp b/src/qf/qf_actq.cpp index a5234e2da..35889ed2d 100644 --- a/src/qf/qf_actq.cpp +++ b/src/qf/qf_actq.cpp @@ -3,14 +3,14 @@ // Model: qpcpp.qm // File: ${src::qf::qf_actq.cpp} // -// This code has been generated by QM 6.1.1 . +// This code has been generated by QM 6.2.0 . // 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 . @@ -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(margin)) { diff --git a/src/qf/qf_defer.cpp b/src/qf/qf_defer.cpp index 9d97b2c83..4a00f8ec5 100644 --- a/src/qf/qf_defer.cpp +++ b/src/qf/qf_defer.cpp @@ -3,14 +3,14 @@ // Model: qpcpp.qm // File: ${src::qf::qf_defer.cpp} // -// This code has been generated by QM 6.1.1 . +// This code has been generated by QM 6.2.0 . // 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 . @@ -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 { diff --git a/src/qf/qf_dyn.cpp b/src/qf/qf_dyn.cpp index 18b5db75a..1f06fe432 100644 --- a/src/qf/qf_dyn.cpp +++ b/src/qf/qf_dyn.cpp @@ -3,14 +3,14 @@ // Model: qpcpp.qm // File: ${src::qf::qf_dyn.cpp} // -// This code has been generated by QM 6.1.1 . +// This code has been generated by QM 6.2.0 . // 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 . @@ -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 { diff --git a/src/qf/qf_mem.cpp b/src/qf/qf_mem.cpp index a5d510791..abe3f3823 100644 --- a/src/qf/qf_mem.cpp +++ b/src/qf/qf_mem.cpp @@ -3,14 +3,14 @@ // Model: qpcpp.qm // File: ${src::qf::qf_mem.cpp} // -// This code has been generated by QM 6.1.1 . +// This code has been generated by QM 6.2.0 . // 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 . @@ -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 { diff --git a/src/qf/qf_ps.cpp b/src/qf/qf_ps.cpp index 6b85156c2..db13977de 100644 --- a/src/qf/qf_ps.cpp +++ b/src/qf/qf_ps.cpp @@ -3,14 +3,14 @@ // Model: qpcpp.qm // File: ${src::qf::qf_ps.cpp} // -// This code has been generated by QM 6.1.1 . +// This code has been generated by QM 6.2.0 . // 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 . @@ -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_; diff --git a/src/qf/qf_qact.cpp b/src/qf/qf_qact.cpp index b9a103db8..a09d72847 100644 --- a/src/qf/qf_qact.cpp +++ b/src/qf/qf_qact.cpp @@ -3,14 +3,14 @@ // Model: qpcpp.qm // File: ${src::qf::qf_qact.cpp} // -// This code has been generated by QM 6.1.1 . +// This code has been generated by QM 6.2.0 . // 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 . @@ -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 { diff --git a/src/qf/qf_qeq.cpp b/src/qf/qf_qeq.cpp index d1d867752..18473f967 100644 --- a/src/qf/qf_qeq.cpp +++ b/src/qf/qf_qeq.cpp @@ -3,14 +3,14 @@ // Model: qpcpp.qm // File: ${src::qf::qf_qeq.cpp} // -// This code has been generated by QM 6.1.1 . +// This code has been generated by QM 6.2.0 . // 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 . @@ -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 { diff --git a/src/qf/qf_qmact.cpp b/src/qf/qf_qmact.cpp index 1fb6bde1a..b1cfed55c 100644 --- a/src/qf/qf_qmact.cpp +++ b/src/qf/qf_qmact.cpp @@ -3,14 +3,14 @@ // Model: qpcpp.qm // File: ${src::qf::qf_qmact.cpp} // -// This code has been generated by QM 6.1.1 . +// This code has been generated by QM 6.2.0 . // 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 . @@ -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 { diff --git a/src/qf/qf_time.cpp b/src/qf/qf_time.cpp index 711f70a57..5e14cb013 100644 --- a/src/qf/qf_time.cpp +++ b/src/qf/qf_time.cpp @@ -3,14 +3,14 @@ // Model: qpcpp.qm // File: ${src::qf::qf_time.cpp} // -// This code has been generated by QM 6.1.1 . +// This code has been generated by QM 6.2.0 . // 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 . @@ -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 { diff --git a/src/qk/qk.cpp b/src/qk/qk.cpp index 1dc7e9a75..444efddaf 100644 --- a/src/qk/qk.cpp +++ b/src/qk/qk.cpp @@ -3,14 +3,14 @@ // Model: qpcpp.qm // File: ${src::qk::qk.cpp} // -// This code has been generated by QM 6.1.1 . +// This code has been generated by QM 6.2.0 . // 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 . @@ -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 { diff --git a/src/qs/qs.cpp b/src/qs/qs.cpp index 71d131aa8..45be15e31 100644 --- a/src/qs/qs.cpp +++ b/src/qs/qs.cpp @@ -3,14 +3,14 @@ // Model: qpcpp.qm // File: ${src::qs::qs.cpp} // -// This code has been generated by QM 6.1.1 . +// This code has been generated by QM 6.2.0 . // 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 . @@ -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 { diff --git a/src/qs/qs_64bit.cpp b/src/qs/qs_64bit.cpp index fabaaf9c6..be957c817 100644 --- a/src/qs/qs_64bit.cpp +++ b/src/qs/qs_64bit.cpp @@ -3,14 +3,14 @@ // Model: qpcpp.qm // File: ${src::qs::qs_64bit.cpp} // -// This code has been generated by QM 6.1.1 . +// This code has been generated by QM 6.2.0 . // 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 . diff --git a/src/qs/qs_fp.cpp b/src/qs/qs_fp.cpp index db4bb64a2..a013aed59 100644 --- a/src/qs/qs_fp.cpp +++ b/src/qs/qs_fp.cpp @@ -3,14 +3,14 @@ // Model: qpcpp.qm // File: ${src::qs::qs_fp.cpp} // -// This code has been generated by QM 6.1.1 . +// This code has been generated by QM 6.2.0 . // 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 . diff --git a/src/qs/qs_rx.cpp b/src/qs/qs_rx.cpp index b01a6c35b..387933903 100644 --- a/src/qs/qs_rx.cpp +++ b/src/qs/qs_rx.cpp @@ -3,14 +3,14 @@ // Model: qpcpp.qm // File: ${src::qs::qs_rx.cpp} // -// This code has been generated by QM 6.1.1 . +// This code has been generated by QM 6.2.0 . // 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 . @@ -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 { diff --git a/src/qs/qstamp.cpp b/src/qs/qstamp.cpp index 21cba4e29..6e6d73ded 100644 --- a/src/qs/qstamp.cpp +++ b/src/qs/qstamp.cpp @@ -3,14 +3,14 @@ // Model: qpcpp.qm // File: ${src::qs::qstamp.cpp} // -// This code has been generated by QM 6.1.1 . +// This code has been generated by QM 6.2.0 . // 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 . diff --git a/src/qs/qutest.cpp b/src/qs/qutest.cpp index fc00fede3..c934c6078 100644 --- a/src/qs/qutest.cpp +++ b/src/qs/qutest.cpp @@ -3,14 +3,14 @@ // Model: qpcpp.qm // File: ${src::qs::qutest.cpp} // -// This code has been generated by QM 6.1.1 . +// This code has been generated by QM 6.2.0 . // 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 . @@ -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 { diff --git a/src/qv/qv.cpp b/src/qv/qv.cpp index f7a0116cb..8c2506813 100644 --- a/src/qv/qv.cpp +++ b/src/qv/qv.cpp @@ -3,14 +3,14 @@ // Model: qpcpp.qm // File: ${src::qv::qv.cpp} // -// This code has been generated by QM 6.1.1 . +// This code has been generated by QM 6.2.0 . // 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 . @@ -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 { diff --git a/src/qxk/qxk.cpp b/src/qxk/qxk.cpp index d52d078d1..8d8dc5a22 100644 --- a/src/qxk/qxk.cpp +++ b/src/qxk/qxk.cpp @@ -3,14 +3,14 @@ // Model: qpcpp.qm // File: ${src::qxk::qxk.cpp} // -// This code has been generated by QM 6.1.1 . +// This code has been generated by QM 6.2.0 . // 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 . @@ -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 { diff --git a/src/qxk/qxk_mutex.cpp b/src/qxk/qxk_mutex.cpp index 52f23c749..219e04f8a 100644 --- a/src/qxk/qxk_mutex.cpp +++ b/src/qxk/qxk_mutex.cpp @@ -3,14 +3,14 @@ // Model: qpcpp.qm // File: ${src::qxk::qxk_mutex.cpp} // -// This code has been generated by QM 6.1.1 . +// This code has been generated by QM 6.2.0 . // 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 . @@ -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 { diff --git a/src/qxk/qxk_sema.cpp b/src/qxk/qxk_sema.cpp index e97406109..94641b41e 100644 --- a/src/qxk/qxk_sema.cpp +++ b/src/qxk/qxk_sema.cpp @@ -3,14 +3,14 @@ // Model: qpcpp.qm // File: ${src::qxk::qxk_sema.cpp} // -// This code has been generated by QM 6.1.1 . +// This code has been generated by QM 6.2.0 . // 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 . @@ -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 { diff --git a/src/qxk/qxk_xthr.cpp b/src/qxk/qxk_xthr.cpp index b37ca8863..a8e0a5336 100644 --- a/src/qxk/qxk_xthr.cpp +++ b/src/qxk/qxk_xthr.cpp @@ -3,14 +3,14 @@ // Model: qpcpp.qm // File: ${src::qxk::qxk_xthr.cpp} // -// This code has been generated by QM 6.1.1 . +// This code has been generated by QM 6.2.0 . // 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 . @@ -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 {