From 9f079e60e73a380962904008ad8d74c5ebdb5889 Mon Sep 17 00:00:00 2001 From: MMS Date: Wed, 12 Jun 2024 16:30:04 -0400 Subject: [PATCH] 7.4.0-rc.2 --- 3rd_party | 2 +- examples | 2 +- include/qpcpp.hpp | 8 ++ include/qsafe.h | 14 +-- ports/embos/qf_port.cpp | 6 +- ports/freertos/qf_port.cpp | 6 +- ports/lint-plus/qpcpp.lnt | 6 +- ports/posix-qutest/qp_port.hpp | 16 ++- ports/posix-qutest/qutest_port.cpp | 36 ++++-- ports/posix-qv/qf_port.cpp | 6 +- ports/posix/qf_port.cpp | 6 +- ports/threadx/qf_port.cpp | 6 +- ports/uc-os2/qf_port.cpp | 6 +- ports/win32-qutest/qp_port.hpp | 17 ++- ports/win32-qutest/qutest_port.cpp | 32 +++-- ports/win32-qv/qf_port.cpp | 6 +- ports/win32-qv/qs_port.cpp | 6 +- ports/win32/qf_port.cpp | 6 +- ports/win32/qs_port.cpp | 6 +- qpcpp.qm | 136 ++++++++++++++-------- src/qf/qep_hsm.cpp | 6 +- src/qf/qep_msm.cpp | 6 +- src/qf/qf_act.cpp | 2 +- src/qf/qf_actq.cpp | 30 ++++- src/qf/qf_defer.cpp | 2 +- src/qf/qf_dyn.cpp | 17 +-- src/qf/qf_mem.cpp | 2 +- src/qf/qf_ps.cpp | 2 +- src/qf/qf_qact.cpp | 2 +- src/qf/qf_qeq.cpp | 14 ++- src/qf/qf_qmact.cpp | 2 +- src/qf/qf_time.cpp | 2 +- src/qk/qk.cpp | 2 +- src/qs/qs.cpp | 2 +- src/qs/qs_rx.cpp | 2 +- src/qs/qutest.cpp | 21 ++-- src/qv/qv.cpp | 2 +- src/qxk/qxk.cpp | 2 +- src/qxk/qxk_mutex.cpp | 2 +- src/qxk/qxk_sema.cpp | 2 +- src/qxk/qxk_xthr.cpp | 2 +- test/qk/test_sched/bsp_efm32pg1b.cpp | 2 +- test/qk/test_sched/bsp_nucleo-c031c6.cpp | 2 +- test/qk/test_sched/bsp_nucleo-h743zi.cpp | 2 +- test/qk/test_sched/bsp_nucleo-l053r8.cpp | 2 +- test/qk/test_sched/test_sched.cpp | 2 +- test/qxk/test_sched/bsp_efm32pg1b.cpp | 2 +- test/qxk/test_sched/bsp_nucleo-c031c6.cpp | 2 +- test/qxk/test_sched/bsp_nucleo-h743zi.cpp | 2 +- test/qxk/test_sched/bsp_nucleo-l053r8.cpp | 2 +- test/qxk/test_sched/test_sched.cpp | 2 +- zephyr/qf_port.cpp | 6 +- zephyr/qutest_port.cpp | 6 +- 53 files changed, 304 insertions(+), 181 deletions(-) diff --git a/3rd_party b/3rd_party index 054cd1ab..a0b274a3 160000 --- a/3rd_party +++ b/3rd_party @@ -1 +1 @@ -Subproject commit 054cd1abe4b4abef5e45f36b1ce8f2aff4575494 +Subproject commit a0b274a334955b78bd837c8c47ee6ccb314b2c35 diff --git a/examples b/examples index 0537a180..aeb634ba 160000 --- a/examples +++ b/examples @@ -1 +1 @@ -Subproject commit 0537a180ce504ab971b26491c9bf945e4b711b4a +Subproject commit aeb634ba4e430d2e69814d80cea0d7cddc568957 diff --git a/include/qpcpp.hpp b/include/qpcpp.hpp index f0f13969..1f890041 100644 --- a/include/qpcpp.hpp +++ b/include/qpcpp.hpp @@ -72,6 +72,14 @@ //! @deprecated plain 'char' is no longer forbidden in MISRA/AUTOSAR-C++ using char_t = char; +//! @deprecated module name definition +//! Use Q_THIS_MODULE(name_) ended with a semicolon ';' +#define Q_DEFINE_THIS_MODULE(name_) Q_THIS_MODULE(name_); + +//! @deprecated file name definition +//! Use Q_THIS_FILE() ended with a semicolon ';' +#define Q_DEFINE_THIS_FILE Q_THIS_FILE(); + //! @deprecated assertion failure handler //! Use Q_onError() instead. #define Q_onAssert(module_, id_) Q_onError(module_, id_) diff --git a/include/qsafe.h b/include/qsafe.h index 43e772ac..48725488 100644 --- a/include/qsafe.h +++ b/include/qsafe.h @@ -64,9 +64,9 @@ extern "C" { //$declare${QP-FuSa::enabled} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv -//${QP-FuSa::enabled::Q_DEFINE_THIS_MODULE} .................................. -#define Q_DEFINE_THIS_MODULE(name_) \ - static char const Q_this_module_[] = name_; +//${QP-FuSa::enabled::Q_THIS_MODULE} ......................................... +#define Q_THIS_MODULE(name_) \ + static char const Q_this_module_[] = name_ //${QP-FuSa::enabled::Q_ASSERT_INCRIT} ....................................... #define Q_ASSERT_INCRIT(id_, expr_) \ @@ -97,8 +97,8 @@ extern "C" { #else //$declare${QP-FuSa::disabled} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv -//${QP-FuSa::disabled::Q_DEFINE_THIS_MODULE} ................................. -#define Q_DEFINE_THIS_MODULE(name_) +//${QP-FuSa::disabled::Q_THIS_MODULE} ........................................ +#define Q_THIS_MODULE(name_) extern char Q_this_module_ //${QP-FuSa::disabled::Q_ASSERT_INCRIT} ...................................... #define Q_ASSERT_INCRIT(id_, expr_) ((void)0) @@ -117,8 +117,8 @@ extern "C" { //============================================================================ //$declare1${QP-FuSa} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv -//${QP-FuSa::Q_DEFINE_THIS_FILE} ............................................. -#define Q_DEFINE_THIS_FILE Q_DEFINE_THIS_MODULE(__FILE__) +//${QP-FuSa::Q_THIS_FILE} .................................................... +#define Q_THIS_FILE() Q_THIS_MODULE(__FILE__) //${QP-FuSa::Q_ASSERT} ....................................................... #define Q_ASSERT(expr_) Q_ASSERT_ID(__LINE__, (expr_)) diff --git a/ports/embos/qf_port.cpp b/ports/embos/qf_port.cpp index 67a9fc86..71570b9c 100644 --- a/ports/embos/qf_port.cpp +++ b/ports/embos/qf_port.cpp @@ -22,8 +22,8 @@ // // //============================================================================ -//! @date Last updated on: 2023-12-04 -//! @version Last updated for: @ref qpcpp_7_3_1 +//! @date Last updated on: 2024-06-11 +//! @version Last updated for: @ref qpcpp_7_4_0 //! //! @file //! @brief QF/C++ port to embOS RTOS kernel, generic C++11 compiler @@ -56,7 +56,7 @@ //============================================================================ namespace { // anonymous namespace with local definitions -Q_DEFINE_THIS_MODULE("qf_port") +Q_THIS_MODULE("qf_port"); //............................................................................ static void thread_function(void *pVoid); // prototype diff --git a/ports/freertos/qf_port.cpp b/ports/freertos/qf_port.cpp index e0049d21..b5561e23 100644 --- a/ports/freertos/qf_port.cpp +++ b/ports/freertos/qf_port.cpp @@ -22,8 +22,8 @@ // // //============================================================================ -//! @date Last updated on: 2023-12-04 -//! @version Last updated for: @ref qpcpp_7_3_1 +//! @date Last updated on: 2024-06-11 +//! @version Last updated for: @ref qpcpp_7_4_0 //! //! @file //! @brief QF/C++ port to FreeRTOS 10.x, generic C++11 compiler @@ -49,7 +49,7 @@ namespace { // unnamed local namespace -Q_DEFINE_THIS_MODULE("qf_port") +Q_THIS_MODULE("qf_port"); // Local objects ------------------------------------------------------------- static void task_function(void *pvParameters) { // FreeRTOS task signature diff --git a/ports/lint-plus/qpcpp.lnt b/ports/lint-plus/qpcpp.lnt index dd1d1eb1..68f61701 100644 --- a/ports/lint-plus/qpcpp.lnt +++ b/ports/lint-plus/qpcpp.lnt @@ -47,7 +47,8 @@ // AC++M16-3-2 function-like macro -esym(9026, - Q_DEFINE_THIS_MODULE, + Q_THIS_MODULE, + Q_THIS_FILE, Q_ASSERT_STATIC, Q_ASSERT, Q_ASSERT_ID, @@ -77,8 +78,7 @@ // MC++R10-0-6 unparenthesized macro parameter in definition of macro -esym(9022, - Q_DEFINE_THIS_FILE, - Q_DEFINE_THIS_MODULE) + Q_THIS_MODULE) // definition of macro ends in semi-colon -esym(823, diff --git a/ports/posix-qutest/qp_port.hpp b/ports/posix-qutest/qp_port.hpp index d23077de..00d88b91 100644 --- a/ports/posix-qutest/qp_port.hpp +++ b/ports/posix-qutest/qp_port.hpp @@ -27,11 +27,11 @@ // // //============================================================================ -//! @date Last updated on: 2023-09-07 -//! @version Last updated for: @ref qpcpp_7_3_0 +//! @date Last updated on: 2024-06-10 +//! @version Last updated for: @ref qpc_7_4_0 //! //! @file -//! @brief QF/C++ port for QUTEST Windows/Linux/macOS, GNU or Visual C++ +//! @brief QP/C++ port for QUTEST Windows, generic C++11 #ifndef QP_PORT_HPP_ #define QP_PORT_HPP_ @@ -49,8 +49,8 @@ #define QACTIVE_EQUEUE_TYPE QEQueue // QF interrupt disable/enable -#define QF_INT_DISABLE() (++QP::QS::tstPriv_.intLock) -#define QF_INT_ENABLE() (--QP::QS::tstPriv_.intLock) +#define QF_INT_DISABLE() (QP::QS::onIntDisable()) +#define QF_INT_ENABLE() (QP::QS::onIntEnable()) // QF critical section #define QF_CRIT_STAT @@ -64,6 +64,12 @@ #include "qmpool.hpp" // QUTest port uses QMPool memory-pool #include "qp.hpp" // QP platform-independent public interface +namespace QP { +namespace QS { +void onIntDisable(); +void onIntEnable(); +} +} //============================================================================ // interface used only inside QF implementation, but not in applications diff --git a/ports/posix-qutest/qutest_port.cpp b/ports/posix-qutest/qutest_port.cpp index 17cf3de0..cbf801c9 100644 --- a/ports/posix-qutest/qutest_port.cpp +++ b/ports/posix-qutest/qutest_port.cpp @@ -22,8 +22,8 @@ // // //============================================================================ -//! @date Last updated on: 2024-02-16 -//! @version Last updated for: @ref qpcpp_7_3_3 +//! @date Last updated on: 2024-06-11 +//! @version Last updated for: @ref qpc_7_4_0 //! //! @file //! @brief QS/C++ "port" to QUTest with POSIX @@ -63,7 +63,7 @@ namespace { // unnamed local namespace -//Q_DEFINE_THIS_MODULE("qutest_port") +Q_THIS_MODULE("qutest_port"); // local variables ........................................................... static int l_sock = INVALID_SOCKET; @@ -118,6 +118,8 @@ bool QS::onStartup(void const *arg) { if (*src == ':') { serviceName = src + 1; } + //printf(" Connecting to QSPY on Host=%s:%s...\n", + // hostName, serviceName); memset(&hints, 0, sizeof(hints)); hints.ai_family = AF_INET; @@ -208,8 +210,8 @@ void QS::onReset() { //............................................................................ void QS::onFlush() { // NOTE: - // No critical section in QS_onFlush() to avoid nesting of critical sections - // in case QS_onFlush() is called from Q_onError(). + // No critical section in QS::onFlush() to avoid nesting of critical sections + // in case QS::onFlush() is called from Q_onError(). if (l_sock == INVALID_SOCKET) { // socket NOT initialized? FPRINTF_S(stderr, " ERROR %s\n", "invalid TCP socket"); @@ -249,19 +251,20 @@ void QS::onFlush() { nBytes = QS_TX_CHUNK; } } + //............................................................................ void QS::onTestLoop() { fd_set readSet; FD_ZERO(&readSet); - struct timeval timeout = { - (long)0, (long)(QS_TIMEOUT_MS * 1000) - }; - rxPriv_.inTestLoop = true; while (rxPriv_.inTestLoop) { FD_SET(l_sock, &readSet); + struct timeval timeout = { + (long)0, (long)(QS_TIMEOUT_MS * 1000) + }; + // selective, timed blocking on the TCP/IP socket... timeout.tv_usec = (long)(QS_TIMEOUT_MS * 1000); int status = select(l_sock + 1, &readSet, @@ -288,5 +291,20 @@ void QS::onTestLoop() { rxPriv_.inTestLoop = true; } +//............................................................................ +void QS::onIntDisable(void) { + if (tstPriv_.intLock != 0U) { + Q_onError(&Q_this_module_[0], 998); + } + ++tstPriv_.intLock; +} +//............................................................................ +void QS::onIntEnable(void) { + --tstPriv_.intLock; + if (tstPriv_.intLock != 0U) { + Q_onError(&Q_this_module_[0], 999); + } +} + } // namespace QP diff --git a/ports/posix-qv/qf_port.cpp b/ports/posix-qv/qf_port.cpp index 5f9db270..7c8a88dc 100644 --- a/ports/posix-qv/qf_port.cpp +++ b/ports/posix-qv/qf_port.cpp @@ -22,8 +22,8 @@ // // //============================================================================ -//! @date Last updated on: 2024-02-16 -//! @version Last updated for: @ref qpcpp_7_3_3 +//! @date Last updated on: 2024-06-11 +//! @version Last updated for: @ref qpcpp_7_4_0 //! //! @file //! @brief QF/C++ port to POSIX-QV (single-threaded) @@ -54,7 +54,7 @@ namespace { // unnamed local namespace -Q_DEFINE_THIS_MODULE("qf_port") +Q_THIS_MODULE("qf_port"); // Local objects ============================================================= diff --git a/ports/posix/qf_port.cpp b/ports/posix/qf_port.cpp index 03e93b09..18d248b2 100644 --- a/ports/posix/qf_port.cpp +++ b/ports/posix/qf_port.cpp @@ -22,8 +22,8 @@ // // //============================================================================ -//! @date Last updated on: 2024-02-16 -//! @version Last updated for: @ref qpcpp_7_3_3 +//! @date Last updated on: 2024-06-11 +//! @version Last updated for: @ref qpcpp_7_4_0 //! //! @file //! @brief QF/C++ port to POSIX (multithreaded with P-threads) @@ -54,7 +54,7 @@ namespace { // unnamed local namespace -Q_DEFINE_THIS_MODULE("qf_port") +Q_THIS_MODULE("qf_port"); // Local objects ============================================================= // initialize the startup mutex with default non-recursive initializer diff --git a/ports/threadx/qf_port.cpp b/ports/threadx/qf_port.cpp index 476e0feb..a7628459 100644 --- a/ports/threadx/qf_port.cpp +++ b/ports/threadx/qf_port.cpp @@ -22,8 +22,8 @@ // // //============================================================================ -//! @date Last updated on: 2023-12-04 -//! @version Last updated for: @ref qpcpp_7_3_1 +//! @date Last updated on: 2024-06-11 +//! @version Last updated for: @ref qpcpp_7_4_0 //! //! @file //! @brief QF/C++ port to ThreadX (a.k.a. Azure RTOS), generic C++11 compiler @@ -42,7 +42,7 @@ //============================================================================ namespace { // anonymous namespace with local definitions -Q_DEFINE_THIS_MODULE("qf_port") +Q_THIS_MODULE("qf_port"); static void thread_function(ULONG thread_input); // prototype static void thread_function(ULONG thread_input) { // ThreadX signature diff --git a/ports/uc-os2/qf_port.cpp b/ports/uc-os2/qf_port.cpp index 296254d6..ef8cea32 100644 --- a/ports/uc-os2/qf_port.cpp +++ b/ports/uc-os2/qf_port.cpp @@ -22,8 +22,8 @@ // // //============================================================================ -//! @date Last updated on: 2023-12-04 -//! @version Last updated for: @ref qpcpp_7_3_1 +//! @date Last updated on: 2024-06-11 +//! @version Last updated for: @ref qpcpp_7_4_0 //! //! @file //! @brief QF/C++ port to uC-OS2 RTOS, generic C++11 compiler @@ -42,7 +42,7 @@ //============================================================================ namespace { // anonymous namespace with local definitions -Q_DEFINE_THIS_MODULE("qf_port") +Q_THIS_MODULE("qf_port"); //............................................................................ static void task_function(void *pdata); // prototype diff --git a/ports/win32-qutest/qp_port.hpp b/ports/win32-qutest/qp_port.hpp index ccdd1cea..00d88b91 100644 --- a/ports/win32-qutest/qp_port.hpp +++ b/ports/win32-qutest/qp_port.hpp @@ -27,11 +27,11 @@ // // //============================================================================ -//! @date Last updated on: 2023-09-07 -//! @version Last updated for: @ref qpcpp_7_3_0 +//! @date Last updated on: 2024-06-10 +//! @version Last updated for: @ref qpc_7_4_0 //! //! @file -//! @brief QF/C++ port for QUTEST Windows, generic C++11 +//! @brief QP/C++ port for QUTEST Windows, generic C++11 #ifndef QP_PORT_HPP_ #define QP_PORT_HPP_ @@ -45,13 +45,12 @@ // no-return function specifier (C++11 Standard) #define Q_NORETURN [[ noreturn ]] void - // QActive event queue type #define QACTIVE_EQUEUE_TYPE QEQueue // QF interrupt disable/enable -#define QF_INT_DISABLE() (++QP::QS::tstPriv_.intLock) -#define QF_INT_ENABLE() (--QP::QS::tstPriv_.intLock) +#define QF_INT_DISABLE() (QP::QS::onIntDisable()) +#define QF_INT_ENABLE() (QP::QS::onIntEnable()) // QF critical section #define QF_CRIT_STAT @@ -65,6 +64,12 @@ #include "qmpool.hpp" // QUTest port uses QMPool memory-pool #include "qp.hpp" // QP platform-independent public interface +namespace QP { +namespace QS { +void onIntDisable(); +void onIntEnable(); +} +} //============================================================================ // interface used only inside QF implementation, but not in applications diff --git a/ports/win32-qutest/qutest_port.cpp b/ports/win32-qutest/qutest_port.cpp index 7041102b..a287a0f7 100644 --- a/ports/win32-qutest/qutest_port.cpp +++ b/ports/win32-qutest/qutest_port.cpp @@ -22,8 +22,8 @@ // // //============================================================================ -//! @date Last updated on: 2023-11-30 -//! @version Last updated for: @ref qpcpp_7_3_3 +//! @date Last updated on: 2024-06-11 +//! @version Last updated for: @ref qpc_7_4_0 //! //! @file //! @brief QUTEST port for Windows, GNU or Visual C++ @@ -57,11 +57,11 @@ #define QS_TX_SIZE (8*1024) #define QS_RX_SIZE (2*1024) #define QS_TX_CHUNK QS_TX_SIZE -#define QS_TIMEOUT_MS 10 +#define QS_TIMEOUT_MS 10U namespace { // unnamed local namespace -//Q_DEFINE_THIS_MODULE("qutest_port") +Q_THIS_MODULE("qutest_port"); // local variables ........................................................... static SOCKET l_sock = INVALID_SOCKET; @@ -171,7 +171,6 @@ bool QS::onStartup(void const *arg) { sockopt_bool = TRUE; setsockopt(l_sock, SOL_SOCKET, SO_DONTLINGER, (const char *)&sockopt_bool, sizeof(sockopt_bool)); - //PRINTF_S(" Connected to QSPY at Host=%s:%d\n", // hostName, port_remote); onFlush(); @@ -198,10 +197,10 @@ void QS::onReset() { exit(0); } //............................................................................ -// NOTE: -// No critical section in QS::onFlush() to avoid nesting of critical sections -// in case QS::onFlush() is called from Q_onError(). void QS::onFlush() { + // NOTE: + // No critical section in QS::onFlush() to avoid nesting of critical sections + // in case QS::onFlush() is called from Q_onError(). if (l_sock == INVALID_SOCKET) { // socket NOT initialized? FPRINTF_S(stderr, " ERROR %s\n", "invalid TCP socket"); @@ -230,7 +229,6 @@ void QS::onFlush() { } else if (nSent < (int)nBytes) { // sent fewer than requested? Sleep(QS_TIMEOUT_MS); // sleep for the timeout - // adjust the data and loop back to send() the rest data += nSent; nBytes -= (uint16_t)nSent; @@ -243,6 +241,7 @@ void QS::onFlush() { nBytes = QS_TX_CHUNK; } } + //............................................................................ void QS::onTestLoop() { fd_set readSet; @@ -281,5 +280,20 @@ void QS::onTestLoop() { rxPriv_.inTestLoop = true; } +//............................................................................ +void QS::onIntDisable(void) { + if (tstPriv_.intLock != 0U) { + Q_onError(&Q_this_module_[0], 998); + } + ++tstPriv_.intLock; +} +//............................................................................ +void QS::onIntEnable(void) { + --tstPriv_.intLock; + if (tstPriv_.intLock != 0U) { + Q_onError(&Q_this_module_[0], 999); + } +} + } // namespace QP diff --git a/ports/win32-qv/qf_port.cpp b/ports/win32-qv/qf_port.cpp index 3399e074..86127909 100644 --- a/ports/win32-qv/qf_port.cpp +++ b/ports/win32-qv/qf_port.cpp @@ -22,8 +22,8 @@ // // //============================================================================ -//! @date Last updated on: 2024-02-16 -//! @version Last updated for: @ref qpcpp_7_3_3 +//! @date Last updated on: 2024-06-11 +//! @version Last updated for: @ref qpcpp_7_4_0 //! //! @file //! @brief QF/C++ port to Win32 (single-threaded, like the QV kernel) @@ -44,7 +44,7 @@ namespace { // unnamed local namespace -Q_DEFINE_THIS_MODULE("qf_port") +Q_THIS_MODULE("qf_port"); // Local objects ============================================================= static DWORD l_tickMsec = 10U; // clock tick in msec (argument for Sleep()) diff --git a/ports/win32-qv/qs_port.cpp b/ports/win32-qv/qs_port.cpp index e72a6b4c..23b03a3a 100644 --- a/ports/win32-qv/qs_port.cpp +++ b/ports/win32-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-06-11 +//! @version Last updated for: @ref qpcpp_7_4_0 //! //! @file //! @brief QS/C++ port to Win32 API @@ -63,7 +63,7 @@ namespace { // unnamed local namespace -//Q_DEFINE_THIS_MODULE("qs_port") +//Q_THIS_MODULE("qs_port"); // local variables ........................................................... static SOCKET l_sock = INVALID_SOCKET; diff --git a/ports/win32/qf_port.cpp b/ports/win32/qf_port.cpp index 2247122f..68e826bb 100644 --- a/ports/win32/qf_port.cpp +++ b/ports/win32/qf_port.cpp @@ -22,8 +22,8 @@ // // //============================================================================ -//! @date Last updated on: 2024-02-16 -//! @version Last updated for: @ref qpcpp_7_3_3 +//! @date Last updated on: 2024-06-11 +//! @version Last updated for: @ref qpcpp_7_4_0 //! //! @file //! @brief QF/C++ port to Win32 (multithreaded) @@ -44,7 +44,7 @@ namespace { // unnamed local namespace -Q_DEFINE_THIS_MODULE("qf_port") +Q_THIS_MODULE("qf_port"); // Local objects ============================================================= static CRITICAL_SECTION l_startupCritSect; diff --git a/ports/win32/qs_port.cpp b/ports/win32/qs_port.cpp index e72a6b4c..23b03a3a 100644 --- a/ports/win32/qs_port.cpp +++ b/ports/win32/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-06-11 +//! @version Last updated for: @ref qpcpp_7_4_0 //! //! @file //! @brief QS/C++ port to Win32 API @@ -63,7 +63,7 @@ namespace { // unnamed local namespace -//Q_DEFINE_THIS_MODULE("qs_port") +//Q_THIS_MODULE("qs_port"); // local variables ........................................................... static SOCKET l_sock = INVALID_SOCKET; diff --git a/qpcpp.qm b/qpcpp.qm index 4df6df8a..ba6d69ac 100644 --- a/qpcpp.qm +++ b/qpcpp.qm @@ -567,9 +567,9 @@ QStateHandler t = s; QF_CRIT_STAT QF_CRIT_ENTRY(); +Q_REQUIRE_INCRIT(300, QEvt::verify_(e)); Q_INVARIANT_INCRIT(302, (s != Q_STATE_CAST(0)) && (m_state.uint == static_cast<std::uintptr_t>(~m_temp.uint))); -Q_INVARIANT_INCRIT(303, QEvt::verify_(e)); QS_MEM_SYS(); QS_BEGIN_PRE_(QS_QEP_DISPATCH, qsId) @@ -823,6 +823,8 @@ do { #ifndef Q_UNSAFE m_temp.uint = ~m_state.uint; +#else +Q_UNUSED_PAR(isFound); #endif QF_CRIT_STAT @@ -1094,9 +1096,9 @@ QMState const *t = s; QF_CRIT_STAT QF_CRIT_ENTRY(); -Q_INVARIANT_INCRIT(300, (s != nullptr) +Q_REQUIRE_INCRIT(300, QEvt::verify_(e)); +Q_INVARIANT_INCRIT(302, (s != nullptr) && (m_state.uint == static_cast<std::uintptr_t>(~m_temp.uint))); -Q_INVARIANT_INCRIT(302, QEvt::verify_(e)); QS_MEM_SYS(); QS_BEGIN_PRE_(QS_QEP_DISPATCH, qsId) @@ -2170,8 +2172,10 @@ QF_CRIT_ENTRY(); QF_MEM_SYS(); #ifndef Q_UNSAFE +Q_REQUIRE_INCRIT(100, QEvt::verify_(e)); + std::uint8_t const pcopy = static_cast<std::uint8_t>(~m_prio_dis); -Q_INVARIANT_INCRIT(102, (QEvt::verify_(e)) && (m_prio == pcopy)); +Q_INVARIANT_INCRIT(102, m_prio == pcopy); #endif QEQueueCtr nFree = m_eQueue.m_nFree; // get volatile into temporary @@ -2227,7 +2231,13 @@ if (status) { // can post the event? // as producing the #QS_QF_ACTIVE_POST trace record, which are: // the local filter for this AO ('m_prio') is set if (QS_LOC_CHECK_(m_prio)) { + QF_MEM_APP(); + QF_CRIT_EXIT(); + QS::onTestPost(sender, this, e, status); + + QF_CRIT_ENTRY(); + QF_MEM_SYS(); } #endif @@ -2276,7 +2286,13 @@ else { // cannot post the event // as producing the #QS_QF_ACTIVE_POST trace record, which are: // the local filter for this AO ('m_prio') is set if (QS_LOC_CHECK_(m_prio)) { + QF_MEM_APP(); + QF_CRIT_EXIT(); + QS::onTestPost(sender, this, e, status); + + QF_CRIT_ENTRY(); + QF_MEM_SYS(); } #endif @@ -2309,8 +2325,10 @@ QF_CRIT_ENTRY(); QF_MEM_SYS(); #ifndef Q_UNSAFE +Q_REQUIRE_INCRIT(200, QEvt::verify_(e)); + std::uint8_t const pcopy = static_cast<std::uint8_t>(~m_prio_dis); -Q_INVARIANT_INCRIT(202, (QEvt::verify_(e)) && (m_prio == pcopy)); +Q_INVARIANT_INCRIT(202, m_prio == pcopy); #endif #ifdef QXK_HPP_ @@ -2351,7 +2369,13 @@ QS_END_PRE_() // as producing the #QS_QF_ACTIVE_POST trace record, which are: // the local filter for this AO ('m_prio') is set if (QS_LOC_CHECK_(m_prio)) { + QF_MEM_APP(); + QF_CRIT_EXIT(); + QS::onTestPost(nullptr, this, e, true); + + QF_CRIT_ENTRY(); + QF_MEM_SYS(); } #endif @@ -2384,6 +2408,8 @@ QACTIVE_EQUEUE_WAIT_(this); // wait for event to arrive directly // always remove evt from the front QEvt const * const e = m_eQueue.m_frontEvt; +Q_INVARIANT_INCRIT(312, QEvt::verify_(e)); + QEQueueCtr const nFree = m_eQueue.m_nFree + 1U; // get volatile into tmp m_eQueue.m_nFree = nFree; // update the # free @@ -3542,7 +3568,7 @@ QF_CRIT_STAT QF_CRIT_ENTRY(); QF_MEM_SYS(); -Q_REQUIRE_INCRIT(200, e != nullptr); +Q_REQUIRE_INCRIT(200, QEvt::verify_(e)); QEQueueCtr nFree = m_nFree; // get volatile into temporary @@ -3622,9 +3648,10 @@ QF_CRIT_STAT QF_CRIT_ENTRY(); QF_MEM_SYS(); -QEQueueCtr nFree = m_nFree; // get volatile into temporary +Q_REQUIRE_INCRIT(300, QEvt::verify_(e)); -Q_REQUIRE_INCRIT(300, nFree != 0U); +QEQueueCtr nFree = m_nFree; // get volatile into temporary +Q_REQUIRE_INCRIT(301, nFree != 0U); if (e->getPoolNum_() != 0U) { // is it a mutable event? QEvt_refCtr_inc_(e); // increment the reference counter @@ -3675,6 +3702,9 @@ QF_MEM_SYS(); QEvt const * const e = m_frontEvt; // always remove evt from the front if (e != nullptr) { // was the queue not empty? + Q_INVARIANT_INCRIT(412, QEvt::verify_(e)); + + // use a temporary variable to increment m_nFree QEQueueCtr const nFree = m_nFree + 1U; m_nFree = nFree; // update the # free @@ -3698,7 +3728,7 @@ if (e != nullptr) { // was the queue not empty? m_frontEvt = nullptr; // queue becomes empty // all entries in the queue must be free (+1 for fronEvt) - Q_ASSERT_INCRIT(410, nFree == (m_end + 1U)); + Q_INVARIANT_INCRIT(420, nFree == (m_end + 1U)); QS_BEGIN_PRE_(QS_QF_EQUEUE_GET_LAST, qsId) QS_TIME_PRE_(); // timestamp @@ -4256,7 +4286,7 @@ return e; QF_CRIT_STAT QF_CRIT_ENTRY(); -Q_INVARIANT_INCRIT(402, QEvt::verify_(e)); +Q_REQUIRE_INCRIT(400, QEvt::verify_(e)); std::uint_fast8_t const poolNum = e->getPoolNum_(); @@ -4321,11 +4351,12 @@ Q_UNUSED_PAR(evtRef); QF_CRIT_STAT QF_CRIT_ENTRY(); -Q_INVARIANT_INCRIT(502, QEvt::verify_(e)); +Q_REQUIRE_INCRIT(500, QEvt::verify_(e)); std::uint_fast8_t const poolNum = e->getPoolNum_(); +Q_UNUSED_PAR(poolNum); // might be unused -Q_REQUIRE_INCRIT(500, (poolNum != 0U) +Q_REQUIRE_INCRIT(501, (poolNum != 0U) && (evtRef == nullptr)); QEvt_refCtr_inc_(e); // increments the ref counter @@ -4348,11 +4379,11 @@ return e; noexcept - QEvt const * const e = evtRef; - -QF_CRIT_STAT + QF_CRIT_STAT QF_CRIT_ENTRY(); -Q_INVARIANT_INCRIT(602, QEvt::verify_(e)); + +QEvt const * const e = evtRef; +Q_REQUIRE_INCRIT(600, QEvt::verify_(e)); #ifdef Q_SPY std::uint_fast8_t const poolNum = e->getPoolNum_(); @@ -4370,7 +4401,7 @@ QS_MEM_APP(); QF_CRIT_EXIT(); #if (QF_MAX_EPOOL > 0U) -gc(evtRef); // recycle the referenced event +gc(e); // recycle the referenced event #endif @@ -7698,15 +7729,15 @@ QS::tstPriv_.readySet.update_(&QS::tstPriv_.readySet_dis); - QS_CRIT_STAT -QS_CRIT_ENTRY(); -QS_MEM_SYS(); - -// function dictionaries for the standard API + // function dictionaries for the standard API QS_FUN_DICTIONARY(&QActive::post_); QS_FUN_DICTIONARY(&QActive::postLIFO); QS_FUN_DICTIONARY(&QS::processTestEvts_); +QS_CRIT_STAT +QS_CRIT_ENTRY(); +QS_MEM_SYS(); + // produce the QS_QF_RUN trace record QS_BEGIN_PRE_(QS_QF_RUN, 0U) QS_END_PRE_() @@ -8016,14 +8047,15 @@ QS_BEGIN_PRE_(rec, m_prio) QS_EQC_PRE_(margin); // margin requested QS_END_PRE_() +QF_MEM_APP(); +QF_CRIT_EXIT(); + // callback to examine the posted event under the same conditions // as producing the #QS_QF_ACTIVE_POST trace record, which are: // the local filter for this AO ('m_prio') is set if (QS_LOC_CHECK_(m_prio)) { QS::onTestPost(sender, this, e, status); } -QF_MEM_APP(); -QF_CRIT_EXIT(); // recycle the event immediately, because it was not really posted #if (QF_MAX_EPOOL > 0U) @@ -8063,15 +8095,15 @@ QS_BEGIN_PRE_(QS_QF_ACTIVE_POST_LIFO, m_prio) QS_EQC_PRE_(0U); // min # free entries QS_END_PRE_() +QF_MEM_APP(); +QF_CRIT_EXIT(); + // callback to examine the posted event under the same conditions // as producing the #QS_QF_ACTIVE_POST trace record, which are: // the local filter for this AO ('m_prio') is set if (QS_LOC_CHECK_(m_prio)) { QS::onTestPost(nullptr, this, e, true); } -QF_MEM_APP(); -QF_CRIT_EXIT(); - // recycle the event immediately, because it was not really posted #if (QF_MAX_EPOOL > 0U) QF::gc(e); @@ -9383,6 +9415,14 @@ extern char const BUILD_TIME[9]; //! @deprecated plain 'char' is no longer forbidden in MISRA/AUTOSAR-C++ using char_t = char; +//! @deprecated module name definition +//! Use Q_THIS_MODULE(name_) ended with a semicolon ';' +#define Q_DEFINE_THIS_MODULE(name_) Q_THIS_MODULE(name_); + +//! @deprecated file name definition +//! Use Q_THIS_FILE() ended with a semicolon ';' +#define Q_DEFINE_THIS_FILE Q_THIS_FILE(); + //! @deprecated assertion failure handler //! Use Q_onError() instead. #define Q_onAssert(module_, id_) Q_onError(module_, id_) @@ -9589,7 +9629,7 @@ using char_t = char; // unnamed namespace for local definitions with internal linkage namespace { -Q_DEFINE_THIS_MODULE("qep_hsm") +Q_THIS_MODULE("qep_hsm"); // immutable events corresponding to the reserved signals. static QP::QEvt const l_reservedEvt_[4] { @@ -9653,7 +9693,7 @@ $define ${QEP::QHsm} // unnamed namespace for local definitions with internal linkage namespace { -Q_DEFINE_THIS_MODULE("qep_msm") +Q_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}; @@ -9695,7 +9735,7 @@ $define ${QEP::QMsm} // unnamed namespace for local definitions with internal linkage namespace { -//Q_DEFINE_THIS_MODULE("qf_act") +//Q_THIS_MODULE("qf_act"); } // unnamed namespace $define ${QF::QActive::registry_[QF_MAX_ACTIVE + 1U]} @@ -9720,7 +9760,7 @@ $define ${QF::types::QF_LOG2} //============================================================================ // unnamed namespace for local definitions with internal linkage namespace { -Q_DEFINE_THIS_MODULE("qf_actq") +Q_THIS_MODULE("qf_actq"); } // unnamed namespace $define ${QF::QActive::post_} @@ -9746,7 +9786,7 @@ $define ${QF::QTicker} // unnamed namespace for local definitions with internal linkage namespace { -Q_DEFINE_THIS_MODULE("qf_defer") +Q_THIS_MODULE("qf_defer"); } // unnamed namespace $define ${QF::QActive::defer} @@ -9772,7 +9812,7 @@ $define ${QF::QActive::flushDeferred} // unnamed namespace for local definitions with internal linkage namespace { -Q_DEFINE_THIS_MODULE("qf_dyn") +Q_THIS_MODULE("qf_dyn"); } // unnamed namespace $define ${QF::QF-dyn} @@ -9794,7 +9834,7 @@ $define ${QF::QF-dyn} // unnamed namespace for local definitions with internal linkage namespace { -Q_DEFINE_THIS_MODULE("qf_mem") +Q_THIS_MODULE("qf_mem"); } // unnamed namespace $define ${QF::QMPool} @@ -9814,7 +9854,7 @@ $define ${QF::QMPool} // unnamed namespace for local definitions with internal linkage namespace { -Q_DEFINE_THIS_MODULE("qf_qact") +Q_THIS_MODULE("qf_qact"); } // unnamed namespace $define ${QF::QActive::QActive} @@ -9838,7 +9878,7 @@ $define ${QF::QActive::unregister_} // unnamed namespace for local definitions with internal linkage namespace { -//Q_DEFINE_THIS_MODULE("qf_qmact") +//Q_THIS_MODULE("qf_qmact"); } // unnamed namespace $define ${QF::QMActive} @@ -9858,7 +9898,7 @@ $define ${QF::QMActive} // unnamed namespace for local definitions with internal linkage namespace { -Q_DEFINE_THIS_MODULE("qf_qeq") +Q_THIS_MODULE("qf_qeq"); } // unnamed namespace $define ${QF::QEQueue} @@ -9878,7 +9918,7 @@ $define ${QF::QEQueue} // unnamed namespace for local definitions with internal linkage namespace { -Q_DEFINE_THIS_MODULE("qf_ps") +Q_THIS_MODULE("qf_ps"); } // unnamed namespace $define ${QF::QActive::subscrList_} @@ -9910,7 +9950,7 @@ $define ${QF::QActive::unsubscribeAll} // unnamed namespace for local definitions with internal linkage namespace { -Q_DEFINE_THIS_MODULE("qf_time") +Q_THIS_MODULE("qf_time"); } // unnamed namespace $define ${QF::QTimeEvt} @@ -9938,7 +9978,7 @@ $define ${QF::QTimeEvt} // unnamed namespace for local definitions with internal linkage namespace { -Q_DEFINE_THIS_MODULE("qv") +Q_THIS_MODULE("qv"); } // unnamed namespace $define ${QV::QV-base} @@ -9970,7 +10010,7 @@ $define ${QV::QActive} // unnamed namespace for local definitions with internal linkage namespace { -Q_DEFINE_THIS_MODULE("qk") +Q_THIS_MODULE("qk"); } // unnamed namespace $define ${QK::QK-base} @@ -10006,7 +10046,7 @@ $define ${QK::QActive} // unnamed namespace for local definitions with internal linkage namespace { -Q_DEFINE_THIS_MODULE("qxk") +Q_THIS_MODULE("qxk"); } // unnamed namespace $define ${QXK::QXK-base} @@ -10039,7 +10079,7 @@ $define ${QXK::QActive} // unnamed namespace for local definitions with internal linkage namespace { -Q_DEFINE_THIS_MODULE("qxk_mutex") +Q_THIS_MODULE("qxk_mutex"); } // unnamed namespace $define ${QXK::QXMutex} @@ -10064,7 +10104,7 @@ $define ${QXK::QXMutex} // unnamed namespace for local definitions with internal linkage namespace { -Q_DEFINE_THIS_MODULE("qxk_sema") +Q_THIS_MODULE("qxk_sema"); } // unnamed namespace $define ${QXK::QXSemaphore} @@ -10089,7 +10129,7 @@ $define ${QXK::QXSemaphore} // unnamed namespace for local definitions with internal linkage namespace { -Q_DEFINE_THIS_MODULE("qxk_xthr") +Q_THIS_MODULE("qxk_xthr"); } // unnamed namespace $define ${QXK::QXThread} @@ -10107,7 +10147,7 @@ $define ${QXK::QXThread} // unnamed namespace for local definitions with internal linkage namespace { -Q_DEFINE_THIS_MODULE("qs") +Q_THIS_MODULE("qs"); } // unnamed namespace $define ${QS::QS-TX} @@ -11187,7 +11227,7 @@ void f64_fmt_( namespace { // unnamed local namespace -Q_DEFINE_THIS_MODULE("qs_rx") +Q_THIS_MODULE("qs_rx"); enum RxStateEnum : std::uint8_t { ERROR_STATE, @@ -12355,7 +12395,7 @@ Q_NORETURN Q_onError( // unnamed namespace for local definitions with internal linkage namespace { -Q_DEFINE_THIS_MODULE("qutest") +Q_THIS_MODULE("qutest"); } // unnamed namespace namespace QP { diff --git a/src/qf/qep_hsm.cpp b/src/qf/qep_hsm.cpp index 908ef622..70a9e182 100644 --- a/src/qf/qep_hsm.cpp +++ b/src/qf/qep_hsm.cpp @@ -56,7 +56,7 @@ // unnamed namespace for local definitions with internal linkage namespace { -Q_DEFINE_THIS_MODULE("qep_hsm") +Q_THIS_MODULE("qep_hsm"); // immutable events corresponding to the reserved signals. static QP::QEvt const l_reservedEvt_[4] { @@ -254,9 +254,9 @@ void QHsm::dispatch( QF_CRIT_STAT QF_CRIT_ENTRY(); + Q_REQUIRE_INCRIT(300, QEvt::verify_(e)); Q_INVARIANT_INCRIT(302, (s != Q_STATE_CAST(0)) && (m_state.uint == static_cast(~m_temp.uint))); - Q_INVARIANT_INCRIT(303, QEvt::verify_(e)); QS_MEM_SYS(); QS_BEGIN_PRE_(QS_QEP_DISPATCH, qsId) @@ -506,6 +506,8 @@ QStateHandler QHsm::childState(QStateHandler const parent) noexcept { #ifndef Q_UNSAFE m_temp.uint = ~m_state.uint; + #else + Q_UNUSED_PAR(isFound); #endif QF_CRIT_STAT diff --git a/src/qf/qep_msm.cpp b/src/qf/qep_msm.cpp index 9c786699..2ad9fa7e 100644 --- a/src/qf/qep_msm.cpp +++ b/src/qf/qep_msm.cpp @@ -57,7 +57,7 @@ // unnamed namespace for local definitions with internal linkage namespace { -Q_DEFINE_THIS_MODULE("qep_msm") +Q_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}; @@ -177,9 +177,9 @@ void QMsm::dispatch( QF_CRIT_STAT QF_CRIT_ENTRY(); - Q_INVARIANT_INCRIT(300, (s != nullptr) + Q_REQUIRE_INCRIT(300, QEvt::verify_(e)); + Q_INVARIANT_INCRIT(302, (s != nullptr) && (m_state.uint == static_cast(~m_temp.uint))); - Q_INVARIANT_INCRIT(302, QEvt::verify_(e)); QS_MEM_SYS(); QS_BEGIN_PRE_(QS_QEP_DISPATCH, qsId) diff --git a/src/qf/qf_act.cpp b/src/qf/qf_act.cpp index 970ebead..53b7bfe5 100644 --- a/src/qf/qf_act.cpp +++ b/src/qf/qf_act.cpp @@ -53,7 +53,7 @@ // unnamed namespace for local definitions with internal linkage namespace { -//Q_DEFINE_THIS_MODULE("qf_act") +//Q_THIS_MODULE("qf_act"); } // unnamed namespace //$skip${QP_VERSION} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv diff --git a/src/qf/qf_actq.cpp b/src/qf/qf_actq.cpp index 3a2f6295..2e447b9d 100644 --- a/src/qf/qf_actq.cpp +++ b/src/qf/qf_actq.cpp @@ -54,7 +54,7 @@ //============================================================================ // unnamed namespace for local definitions with internal linkage namespace { -Q_DEFINE_THIS_MODULE("qf_actq") +Q_THIS_MODULE("qf_actq"); } // unnamed namespace //$skip${QP_VERSION} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv @@ -90,8 +90,10 @@ bool QActive::post_( QF_MEM_SYS(); #ifndef Q_UNSAFE + Q_REQUIRE_INCRIT(100, QEvt::verify_(e)); + std::uint8_t const pcopy = static_cast(~m_prio_dis); - Q_INVARIANT_INCRIT(102, (QEvt::verify_(e)) && (m_prio == pcopy)); + Q_INVARIANT_INCRIT(102, m_prio == pcopy); #endif QEQueueCtr nFree = m_eQueue.m_nFree; // get volatile into temporary @@ -147,7 +149,13 @@ bool QActive::post_( // as producing the #QS_QF_ACTIVE_POST trace record, which are: // the local filter for this AO ('m_prio') is set if (QS_LOC_CHECK_(m_prio)) { + QF_MEM_APP(); + QF_CRIT_EXIT(); + QS::onTestPost(sender, this, e, status); + + QF_CRIT_ENTRY(); + QF_MEM_SYS(); } #endif @@ -196,7 +204,13 @@ bool QActive::post_( // as producing the #QS_QF_ACTIVE_POST trace record, which are: // the local filter for this AO ('m_prio') is set if (QS_LOC_CHECK_(m_prio)) { + QF_MEM_APP(); + QF_CRIT_EXIT(); + QS::onTestPost(sender, this, e, status); + + QF_CRIT_ENTRY(); + QF_MEM_SYS(); } #endif @@ -233,8 +247,10 @@ void QActive::postLIFO(QEvt const * const e) noexcept { QF_MEM_SYS(); #ifndef Q_UNSAFE + Q_REQUIRE_INCRIT(200, QEvt::verify_(e)); + std::uint8_t const pcopy = static_cast(~m_prio_dis); - Q_INVARIANT_INCRIT(202, (QEvt::verify_(e)) && (m_prio == pcopy)); + Q_INVARIANT_INCRIT(202, m_prio == pcopy); #endif #ifdef QXK_HPP_ @@ -275,7 +291,13 @@ void QActive::postLIFO(QEvt const * const e) noexcept { // as producing the #QS_QF_ACTIVE_POST trace record, which are: // the local filter for this AO ('m_prio') is set if (QS_LOC_CHECK_(m_prio)) { + QF_MEM_APP(); + QF_CRIT_EXIT(); + QS::onTestPost(nullptr, this, e, true); + + QF_CRIT_ENTRY(); + QF_MEM_SYS(); } #endif @@ -314,6 +336,8 @@ QEvt const * QActive::get_() noexcept { // always remove evt from the front QEvt const * const e = m_eQueue.m_frontEvt; + Q_INVARIANT_INCRIT(312, QEvt::verify_(e)); + QEQueueCtr const nFree = m_eQueue.m_nFree + 1U; // get volatile into tmp m_eQueue.m_nFree = nFree; // update the # free diff --git a/src/qf/qf_defer.cpp b/src/qf/qf_defer.cpp index 9d97b2c8..17a3e171 100644 --- a/src/qf/qf_defer.cpp +++ b/src/qf/qf_defer.cpp @@ -53,7 +53,7 @@ // unnamed namespace for local definitions with internal linkage namespace { -Q_DEFINE_THIS_MODULE("qf_defer") +Q_THIS_MODULE("qf_defer"); } // unnamed namespace //$skip${QP_VERSION} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv diff --git a/src/qf/qf_dyn.cpp b/src/qf/qf_dyn.cpp index 6ed3aa20..f6931ac8 100644 --- a/src/qf/qf_dyn.cpp +++ b/src/qf/qf_dyn.cpp @@ -55,7 +55,7 @@ // unnamed namespace for local definitions with internal linkage namespace { -Q_DEFINE_THIS_MODULE("qf_dyn") +Q_THIS_MODULE("qf_dyn"); } // unnamed namespace //$skip${QP_VERSION} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv @@ -222,7 +222,7 @@ QEvt * newX_( void gc(QEvt const * const e) noexcept { QF_CRIT_STAT QF_CRIT_ENTRY(); - Q_INVARIANT_INCRIT(402, QEvt::verify_(e)); + Q_REQUIRE_INCRIT(400, QEvt::verify_(e)); std::uint_fast8_t const poolNum = e->getPoolNum_(); @@ -286,11 +286,12 @@ QEvt const * newRef_( QF_CRIT_STAT QF_CRIT_ENTRY(); - Q_INVARIANT_INCRIT(502, QEvt::verify_(e)); + Q_REQUIRE_INCRIT(500, QEvt::verify_(e)); std::uint_fast8_t const poolNum = e->getPoolNum_(); + Q_UNUSED_PAR(poolNum); // might be unused - Q_REQUIRE_INCRIT(500, (poolNum != 0U) + Q_REQUIRE_INCRIT(501, (poolNum != 0U) && (evtRef == nullptr)); QEvt_refCtr_inc_(e); // increments the ref counter @@ -311,11 +312,11 @@ QEvt const * newRef_( //${QF::QF-dyn::deleteRef_} .................................................. void deleteRef_(QEvt const * const evtRef) noexcept { - QEvt const * const e = evtRef; - QF_CRIT_STAT QF_CRIT_ENTRY(); - Q_INVARIANT_INCRIT(602, QEvt::verify_(e)); + + QEvt const * const e = evtRef; + Q_REQUIRE_INCRIT(600, QEvt::verify_(e)); #ifdef Q_SPY std::uint_fast8_t const poolNum = e->getPoolNum_(); @@ -333,7 +334,7 @@ void deleteRef_(QEvt const * const evtRef) noexcept { QF_CRIT_EXIT(); #if (QF_MAX_EPOOL > 0U) - gc(evtRef); // recycle the referenced event + gc(e); // recycle the referenced event #endif } diff --git a/src/qf/qf_mem.cpp b/src/qf/qf_mem.cpp index a5d51079..a9701f1a 100644 --- a/src/qf/qf_mem.cpp +++ b/src/qf/qf_mem.cpp @@ -53,7 +53,7 @@ // unnamed namespace for local definitions with internal linkage namespace { -Q_DEFINE_THIS_MODULE("qf_mem") +Q_THIS_MODULE("qf_mem"); } // unnamed namespace //$skip${QP_VERSION} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv diff --git a/src/qf/qf_ps.cpp b/src/qf/qf_ps.cpp index 6b85156c..16c4e5b6 100644 --- a/src/qf/qf_ps.cpp +++ b/src/qf/qf_ps.cpp @@ -53,7 +53,7 @@ // unnamed namespace for local definitions with internal linkage namespace { -Q_DEFINE_THIS_MODULE("qf_ps") +Q_THIS_MODULE("qf_ps"); } // unnamed namespace //$skip${QP_VERSION} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv diff --git a/src/qf/qf_qact.cpp b/src/qf/qf_qact.cpp index b9a103db..92532bf2 100644 --- a/src/qf/qf_qact.cpp +++ b/src/qf/qf_qact.cpp @@ -53,7 +53,7 @@ // unnamed namespace for local definitions with internal linkage namespace { -Q_DEFINE_THIS_MODULE("qf_qact") +Q_THIS_MODULE("qf_qact"); } // unnamed namespace //$skip${QP_VERSION} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv diff --git a/src/qf/qf_qeq.cpp b/src/qf/qf_qeq.cpp index 2231c023..6d7b7b51 100644 --- a/src/qf/qf_qeq.cpp +++ b/src/qf/qf_qeq.cpp @@ -53,7 +53,7 @@ // unnamed namespace for local definitions with internal linkage namespace { -Q_DEFINE_THIS_MODULE("qf_qeq") +Q_THIS_MODULE("qf_qeq"); } // unnamed namespace //$skip${QP_VERSION} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv @@ -109,7 +109,7 @@ bool QEQueue::post( QF_CRIT_ENTRY(); QF_MEM_SYS(); - Q_REQUIRE_INCRIT(200, e != nullptr); + Q_REQUIRE_INCRIT(200, QEvt::verify_(e)); QEQueueCtr nFree = m_nFree; // get volatile into temporary @@ -188,9 +188,10 @@ void QEQueue::postLIFO( QF_CRIT_ENTRY(); QF_MEM_SYS(); - QEQueueCtr nFree = m_nFree; // get volatile into temporary + Q_REQUIRE_INCRIT(300, QEvt::verify_(e)); - Q_REQUIRE_INCRIT(300, nFree != 0U); + QEQueueCtr nFree = m_nFree; // get volatile into temporary + Q_REQUIRE_INCRIT(301, nFree != 0U); if (e->getPoolNum_() != 0U) { // is it a mutable event? QEvt_refCtr_inc_(e); // increment the reference counter @@ -239,6 +240,9 @@ QEvt const * QEQueue::get(std::uint_fast8_t const qsId) noexcept { QEvt const * const e = m_frontEvt; // always remove evt from the front if (e != nullptr) { // was the queue not empty? + Q_INVARIANT_INCRIT(412, QEvt::verify_(e)); + + // use a temporary variable to increment m_nFree QEQueueCtr const nFree = m_nFree + 1U; m_nFree = nFree; // update the # free @@ -262,7 +266,7 @@ QEvt const * QEQueue::get(std::uint_fast8_t const qsId) noexcept { m_frontEvt = nullptr; // queue becomes empty // all entries in the queue must be free (+1 for fronEvt) - Q_ASSERT_INCRIT(410, nFree == (m_end + 1U)); + Q_INVARIANT_INCRIT(420, nFree == (m_end + 1U)); QS_BEGIN_PRE_(QS_QF_EQUEUE_GET_LAST, qsId) QS_TIME_PRE_(); // timestamp diff --git a/src/qf/qf_qmact.cpp b/src/qf/qf_qmact.cpp index 1fb6bde1..7aa62f58 100644 --- a/src/qf/qf_qmact.cpp +++ b/src/qf/qf_qmact.cpp @@ -53,7 +53,7 @@ // unnamed namespace for local definitions with internal linkage namespace { -//Q_DEFINE_THIS_MODULE("qf_qmact") +//Q_THIS_MODULE("qf_qmact"); } // unnamed namespace //$skip${QP_VERSION} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv diff --git a/src/qf/qf_time.cpp b/src/qf/qf_time.cpp index 711f70a5..7f20f511 100644 --- a/src/qf/qf_time.cpp +++ b/src/qf/qf_time.cpp @@ -53,7 +53,7 @@ // unnamed namespace for local definitions with internal linkage namespace { -Q_DEFINE_THIS_MODULE("qf_time") +Q_THIS_MODULE("qf_time"); } // unnamed namespace //$skip${QP_VERSION} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv diff --git a/src/qk/qk.cpp b/src/qk/qk.cpp index 1dc7e9a7..68d51d82 100644 --- a/src/qk/qk.cpp +++ b/src/qk/qk.cpp @@ -58,7 +58,7 @@ // unnamed namespace for local definitions with internal linkage namespace { -Q_DEFINE_THIS_MODULE("qk") +Q_THIS_MODULE("qk"); } // unnamed namespace //$skip${QP_VERSION} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv diff --git a/src/qs/qs.cpp b/src/qs/qs.cpp index 71d131aa..1a89e74e 100644 --- a/src/qs/qs.cpp +++ b/src/qs/qs.cpp @@ -48,7 +48,7 @@ // unnamed namespace for local definitions with internal linkage namespace { -Q_DEFINE_THIS_MODULE("qs") +Q_THIS_MODULE("qs"); } // unnamed namespace //$skip${QP_VERSION} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv diff --git a/src/qs/qs_rx.cpp b/src/qs/qs_rx.cpp index b01a6c35..ce2823c3 100644 --- a/src/qs/qs_rx.cpp +++ b/src/qs/qs_rx.cpp @@ -51,7 +51,7 @@ namespace { // unnamed local namespace -Q_DEFINE_THIS_MODULE("qs_rx") +Q_THIS_MODULE("qs_rx"); enum RxStateEnum : std::uint8_t { ERROR_STATE, diff --git a/src/qs/qutest.cpp b/src/qs/qutest.cpp index 6da123a6..088d9454 100644 --- a/src/qs/qutest.cpp +++ b/src/qs/qutest.cpp @@ -154,7 +154,7 @@ Q_NORETURN Q_onError( // unnamed namespace for local definitions with internal linkage namespace { -Q_DEFINE_THIS_MODULE("qutest") +Q_THIS_MODULE("qutest"); } // unnamed namespace namespace QP { @@ -212,15 +212,15 @@ void stop() { //${QS::QUTest-stub::QF::run} ................................................ int_t run() { - QS_CRIT_STAT - QS_CRIT_ENTRY(); - QS_MEM_SYS(); - // function dictionaries for the standard API QS_FUN_DICTIONARY(&QActive::post_); QS_FUN_DICTIONARY(&QActive::postLIFO); QS_FUN_DICTIONARY(&QS::processTestEvts_); + QS_CRIT_STAT + QS_CRIT_ENTRY(); + QS_MEM_SYS(); + // produce the QS_QF_RUN trace record QS_BEGIN_PRE_(QS_QF_RUN, 0U) QS_END_PRE_() @@ -522,14 +522,15 @@ bool QActiveDummy::fakePost( QS_EQC_PRE_(margin); // margin requested QS_END_PRE_() + QF_MEM_APP(); + QF_CRIT_EXIT(); + // callback to examine the posted event under the same conditions // as producing the #QS_QF_ACTIVE_POST trace record, which are: // the local filter for this AO ('m_prio') is set if (QS_LOC_CHECK_(m_prio)) { QS::onTestPost(sender, this, e, status); } - QF_MEM_APP(); - QF_CRIT_EXIT(); // recycle the event immediately, because it was not really posted #if (QF_MAX_EPOOL > 0U) @@ -567,15 +568,15 @@ void QActiveDummy::fakePostLIFO(QEvt const * const e) noexcept { QS_EQC_PRE_(0U); // min # free entries QS_END_PRE_() + QF_MEM_APP(); + QF_CRIT_EXIT(); + // callback to examine the posted event under the same conditions // as producing the #QS_QF_ACTIVE_POST trace record, which are: // the local filter for this AO ('m_prio') is set if (QS_LOC_CHECK_(m_prio)) { QS::onTestPost(nullptr, this, e, true); } - QF_MEM_APP(); - QF_CRIT_EXIT(); - // recycle the event immediately, because it was not really posted #if (QF_MAX_EPOOL > 0U) QF::gc(e); diff --git a/src/qv/qv.cpp b/src/qv/qv.cpp index f7a0116c..06d7dda7 100644 --- a/src/qv/qv.cpp +++ b/src/qv/qv.cpp @@ -58,7 +58,7 @@ // unnamed namespace for local definitions with internal linkage namespace { -Q_DEFINE_THIS_MODULE("qv") +Q_THIS_MODULE("qv"); } // unnamed namespace //$skip${QP_VERSION} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv diff --git a/src/qxk/qxk.cpp b/src/qxk/qxk.cpp index d52d078d..c64d98d5 100644 --- a/src/qxk/qxk.cpp +++ b/src/qxk/qxk.cpp @@ -58,7 +58,7 @@ // unnamed namespace for local definitions with internal linkage namespace { -Q_DEFINE_THIS_MODULE("qxk") +Q_THIS_MODULE("qxk"); } // unnamed namespace //$skip${QP_VERSION} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv diff --git a/src/qxk/qxk_mutex.cpp b/src/qxk/qxk_mutex.cpp index 52f23c74..d12a460f 100644 --- a/src/qxk/qxk_mutex.cpp +++ b/src/qxk/qxk_mutex.cpp @@ -58,7 +58,7 @@ // unnamed namespace for local definitions with internal linkage namespace { -Q_DEFINE_THIS_MODULE("qxk_mutex") +Q_THIS_MODULE("qxk_mutex"); } // unnamed namespace //$skip${QP_VERSION} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv diff --git a/src/qxk/qxk_sema.cpp b/src/qxk/qxk_sema.cpp index e9740610..1d1faec7 100644 --- a/src/qxk/qxk_sema.cpp +++ b/src/qxk/qxk_sema.cpp @@ -58,7 +58,7 @@ // unnamed namespace for local definitions with internal linkage namespace { -Q_DEFINE_THIS_MODULE("qxk_sema") +Q_THIS_MODULE("qxk_sema"); } // unnamed namespace //$skip${QP_VERSION} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv diff --git a/src/qxk/qxk_xthr.cpp b/src/qxk/qxk_xthr.cpp index b37ca886..5e353fae 100644 --- a/src/qxk/qxk_xthr.cpp +++ b/src/qxk/qxk_xthr.cpp @@ -58,7 +58,7 @@ // unnamed namespace for local definitions with internal linkage namespace { -Q_DEFINE_THIS_MODULE("qxk_xthr") +Q_THIS_MODULE("qxk_xthr"); } // unnamed namespace //$skip${QP_VERSION} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv diff --git a/test/qk/test_sched/bsp_efm32pg1b.cpp b/test/qk/test_sched/bsp_efm32pg1b.cpp index 412d6dc7..505254d8 100644 --- a/test/qk/test_sched/bsp_efm32pg1b.cpp +++ b/test/qk/test_sched/bsp_efm32pg1b.cpp @@ -42,7 +42,7 @@ namespace { -Q_DEFINE_THIS_FILE +Q_THIS_FILE(); // Local-scope objects ------------------------------------------------------- #define LED_PORT gpioPortF diff --git a/test/qk/test_sched/bsp_nucleo-c031c6.cpp b/test/qk/test_sched/bsp_nucleo-c031c6.cpp index 97449198..b656cc17 100644 --- a/test/qk/test_sched/bsp_nucleo-c031c6.cpp +++ b/test/qk/test_sched/bsp_nucleo-c031c6.cpp @@ -39,7 +39,7 @@ namespace { -Q_DEFINE_THIS_FILE +Q_THIS_FILE(); // Local-scope objects ----------------------------------------------------- // LED pins available on the board (just one user LED LD4--Green on PA.5) diff --git a/test/qk/test_sched/bsp_nucleo-h743zi.cpp b/test/qk/test_sched/bsp_nucleo-h743zi.cpp index cb555ed3..7114d4b3 100644 --- a/test/qk/test_sched/bsp_nucleo-h743zi.cpp +++ b/test/qk/test_sched/bsp_nucleo-h743zi.cpp @@ -41,7 +41,7 @@ namespace { -Q_DEFINE_THIS_FILE +Q_THIS_FILE(); #ifdef Q_SPY diff --git a/test/qk/test_sched/bsp_nucleo-l053r8.cpp b/test/qk/test_sched/bsp_nucleo-l053r8.cpp index bc5c4cb0..40b129b7 100644 --- a/test/qk/test_sched/bsp_nucleo-l053r8.cpp +++ b/test/qk/test_sched/bsp_nucleo-l053r8.cpp @@ -39,7 +39,7 @@ namespace { -Q_DEFINE_THIS_FILE +Q_THIS_FILE(); // Local-scope objects ------------------------------------------------------- // LED pins available on the board (just one user LED LD2--Green on PA.5) diff --git a/test/qk/test_sched/test_sched.cpp b/test/qk/test_sched/test_sched.cpp index a57181c5..302d59e9 100644 --- a/test/qk/test_sched/test_sched.cpp +++ b/test/qk/test_sched/test_sched.cpp @@ -34,7 +34,7 @@ #include "qpcpp.hpp" #include "bsp.hpp" -Q_DEFINE_THIS_FILE +Q_THIS_FILE(); namespace { //============================================================================ diff --git a/test/qxk/test_sched/bsp_efm32pg1b.cpp b/test/qxk/test_sched/bsp_efm32pg1b.cpp index af883f76..dca4f691 100644 --- a/test/qxk/test_sched/bsp_efm32pg1b.cpp +++ b/test/qxk/test_sched/bsp_efm32pg1b.cpp @@ -42,7 +42,7 @@ namespace { -Q_DEFINE_THIS_FILE +Q_THIS_FILE(); // Local-scope objects ------------------------------------------------------- #define LED_PORT gpioPortF diff --git a/test/qxk/test_sched/bsp_nucleo-c031c6.cpp b/test/qxk/test_sched/bsp_nucleo-c031c6.cpp index 478a8673..ab1fad58 100644 --- a/test/qxk/test_sched/bsp_nucleo-c031c6.cpp +++ b/test/qxk/test_sched/bsp_nucleo-c031c6.cpp @@ -39,7 +39,7 @@ namespace { -Q_DEFINE_THIS_FILE +Q_THIS_FILE(); // Local-scope objects ----------------------------------------------------- // LED pins available on the board (just one user LED LD4--Green on PA.5) diff --git a/test/qxk/test_sched/bsp_nucleo-h743zi.cpp b/test/qxk/test_sched/bsp_nucleo-h743zi.cpp index 9426907e..90a09fb2 100644 --- a/test/qxk/test_sched/bsp_nucleo-h743zi.cpp +++ b/test/qxk/test_sched/bsp_nucleo-h743zi.cpp @@ -41,7 +41,7 @@ namespace { -Q_DEFINE_THIS_FILE +Q_THIS_FILE(); #ifdef Q_SPY diff --git a/test/qxk/test_sched/bsp_nucleo-l053r8.cpp b/test/qxk/test_sched/bsp_nucleo-l053r8.cpp index 1449b32e..43629c08 100644 --- a/test/qxk/test_sched/bsp_nucleo-l053r8.cpp +++ b/test/qxk/test_sched/bsp_nucleo-l053r8.cpp @@ -39,7 +39,7 @@ namespace { -Q_DEFINE_THIS_FILE +Q_THIS_FILE(); // Local-scope objects ------------------------------------------------------- // LED pins available on the board (just one user LED LD2--Green on PA.5) diff --git a/test/qxk/test_sched/test_sched.cpp b/test/qxk/test_sched/test_sched.cpp index 656ba51e..966d3624 100644 --- a/test/qxk/test_sched/test_sched.cpp +++ b/test/qxk/test_sched/test_sched.cpp @@ -34,7 +34,7 @@ #include "qpcpp.hpp" #include "bsp.hpp" -Q_DEFINE_THIS_FILE +Q_THIS_FILE(); namespace { //============================================================================ diff --git a/zephyr/qf_port.cpp b/zephyr/qf_port.cpp index 0b463d27..99a0e9ae 100644 --- a/zephyr/qf_port.cpp +++ b/zephyr/qf_port.cpp @@ -22,8 +22,8 @@ // // //============================================================================ -//! @date Last updated on: 2024-01-03 -//! @version Last updated for: @ref qpc_7_3_2 +//! @date Last updated on: 2024-06-11 +//! @version Last updated for: @ref qpc_7_4_0 //! //! @file //! @brief QF/C++ port to Zephyr RTOS kernel, all supported compilers @@ -41,7 +41,7 @@ namespace { // unnamed namespace -Q_DEFINE_THIS_MODULE("qf_port") +Q_THIS_MODULE("qf_port"); //............................................................................ static void thread_entry(void *p1, void *p2, void *p3) { // Zephyr signature diff --git a/zephyr/qutest_port.cpp b/zephyr/qutest_port.cpp index ddf8c4d6..b667412b 100644 --- a/zephyr/qutest_port.cpp +++ b/zephyr/qutest_port.cpp @@ -1,7 +1,7 @@ //============================================================================ // Product: QUTEST port for Zephyr RTOS -// Last updated for version 7.3.2 -// Last updated on 2023-12-13 +// Last updated for version 7.4.0 +// Last updated on 2024-06-11 // // Q u a n t u m L e a P s // ------------------------ @@ -46,7 +46,7 @@ namespace { -//Q_DEFINE_THIS_MODULE("qutest_port") +//Q_THIS_MODULE("qutest_port"); // select the Zephyr shell UART // NOTE: you can change this to other UART peripheral if desired