From 6c01385ebadee5dec21c9bf76d6845ae38074faa Mon Sep 17 00:00:00 2001 From: MMS Date: Tue, 30 Jan 2024 20:48:12 -0500 Subject: [PATCH] 7.3.3 codespell, examples --- 3rd_party | 2 +- LICENSES/LicenseRef-QL-commercial.txt | 18 +- LICENSES/QP-RasPi_GPL_Exception.txt | 2 +- README.md | 4 +- examples/arm-cm/README.md | 4 +- .../arm-cm/blinky_ek-tm4c123gxl/README.md | 4 +- examples/arm-cm/blinky_ek-tm4c123gxl/qk/bsp.c | 2 +- .../blinky_ek-tm4c123gxl/qk/gnu/.ccsproject | 17 - .../blinky_ek-tm4c123gxl/qk/gnu/.cproject | 277 ---------- .../blinky_ek-tm4c123gxl/qk/gnu/.project | 114 ---- .../blinky_ek-tm4c123gxl/qk/gnu/Makefile | 4 +- .../blinky_ek-tm4c123gxl/qk/gnu/README.txt | 2 +- examples/arm-cm/blinky_ek-tm4c123gxl/qv/bsp.c | 2 +- .../blinky_ek-tm4c123gxl/qv/gnu/.ccsproject | 17 - .../blinky_ek-tm4c123gxl/qv/gnu/.cproject | 277 ---------- .../blinky_ek-tm4c123gxl/qv/gnu/.project | 114 ---- .../blinky_ek-tm4c123gxl/qv/gnu/Makefile | 4 +- .../blinky_ek-tm4c123gxl/qv/gnu/README.txt | 2 +- .../arm-cm/blinky_nucleo-c031c6/README.md | 80 +++ .../blinky_nucleo-c031c6/qk/gnu/Makefile | 4 +- .../blinky_nucleo-c031c6/qk/gnu/README.txt | 2 +- .../blinky_nucleo-c031c6/qv/gnu/Makefile | 4 +- .../blinky_nucleo-c031c6/qv/gnu/README.txt | 92 ++++ .../arm-cm/dpp_efm32-slstk3401a/README.md | 2 +- examples/arm-cm/dpp_efm32-slstk3401a/dpp.qm | 2 +- examples/arm-cm/dpp_efm32-slstk3401a/qk/bsp.c | 2 +- .../dpp_efm32-slstk3401a/qk/gnu/Makefile | 4 +- .../dpp_efm32-slstk3401a/qk/gnu/README.txt | 2 +- examples/arm-cm/dpp_efm32-slstk3401a/qv/bsp.c | 2 +- .../dpp_efm32-slstk3401a/qv/gnu/Makefile | 4 +- .../dpp_efm32-slstk3401a/qv/gnu/README.txt | 2 +- .../arm-cm/dpp_efm32-slstk3401a/qxk/bsp.c | 2 +- .../dpp_efm32-slstk3401a/qxk/gnu/Makefile | 4 +- .../dpp_efm32-slstk3401a/qxk/gnu/README.txt | 2 +- examples/arm-cm/dpp_ek-tm4c123gxl/README.md | 2 +- examples/arm-cm/dpp_ek-tm4c123gxl/dpp.qm | 2 +- .../dpp_ek-tm4c123gxl/lint-plus/README.txt | 2 +- .../dpp_ek-tm4c123gxl/qk/gnu/.ccsproject | 10 - .../arm-cm/dpp_ek-tm4c123gxl/qk/gnu/.cproject | 316 ++++++----- .../arm-cm/dpp_ek-tm4c123gxl/qk/gnu/.project | 16 +- .../arm-cm/dpp_ek-tm4c123gxl/qk/gnu/Makefile | 26 +- .../dpp_ek-tm4c123gxl/qk/gnu/README.txt | 16 +- examples/arm-cm/dpp_ek-tm4c123gxl/qp_config.h | 2 +- .../dpp_ek-tm4c123gxl/qv/gnu/.ccsproject | 10 - .../arm-cm/dpp_ek-tm4c123gxl/qv/gnu/.cproject | 395 +++++++------- .../arm-cm/dpp_ek-tm4c123gxl/qv/gnu/.project | 30 +- .../arm-cm/dpp_ek-tm4c123gxl/qv/gnu/Makefile | 4 +- .../dpp_ek-tm4c123gxl/qv/gnu/README.txt | 16 +- .../dpp_ek-tm4c123gxl/qxk/gnu/.ccsproject | 10 - .../dpp_ek-tm4c123gxl/qxk/gnu/.cproject | 320 ++++++----- .../arm-cm/dpp_ek-tm4c123gxl/qxk/gnu/.project | 25 +- .../arm-cm/dpp_ek-tm4c123gxl/qxk/gnu/Makefile | 4 +- .../dpp_ek-tm4c123gxl/qxk/gnu/Makefile-UNSAFE | 4 +- .../dpp_ek-tm4c123gxl/qxk/gnu/README.txt | 16 +- .../arm-cm/dpp_ek-tm4c123gxl_mpu/dpp_mpu.qm | 2 +- .../dpp_ek-tm4c123gxl_mpu/qk/gnu/Makefile | 4 +- .../dpp_ek-tm4c123gxl_mpu/qv/gnu/Makefile | 4 +- .../dpp_ek-tm4c123gxl_mpu/qxk/gnu/Makefile | 4 +- examples/arm-cm/dpp_mbed-lpc1768/dpp.qm | 2 +- examples/arm-cm/dpp_mbed-lpc1768/qk/bsp.c | 4 +- .../arm-cm/dpp_mbed-lpc1768/qk/gnu/Makefile | 4 +- examples/arm-cm/dpp_mbed-lpc1768/qv/bsp.c | 2 +- .../arm-cm/dpp_mbed-lpc1768/qv/gnu/Makefile | 4 +- examples/arm-cm/dpp_mbed-lpc1768/qxk/bsp.c | 2 +- .../arm-cm/dpp_mbed-lpc1768/qxk/gnu/Makefile | 4 +- examples/arm-cm/dpp_nucleo-c031c6/dpp.qm | 2 +- .../dpp_nucleo-c031c6/qk/armclang/README.txt | 2 +- examples/arm-cm/dpp_nucleo-c031c6/qk/bsp.c | 26 +- .../arm-cm/dpp_nucleo-c031c6/qk/gnu/Makefile | 4 +- .../dpp_nucleo-c031c6/qk/gnu/README.txt | 2 +- examples/arm-cm/dpp_nucleo-c031c6/qv/bsp.c | 13 +- .../dpp_nucleo-c031c6/qv/gnu-pack/Makefile | 4 +- .../qv/gnu-pack/RTE/RTEF/qp_config.h | 2 +- ...ig.h.base@7.3.0 => qp_config.h.base@7.3.2} | 0 .../qv/gnu-pack/RTE/_dpp-dbg/RTE_Components.h | 6 + .../qv/gnu-pack/RTE/_dpp-rel/RTE_Components.h | 21 - .../qv/gnu-pack/RTE/_dpp-spy/RTE_Components.h | 21 - .../qv/gnu-pack/dpp-qv.uvoptx | 2 +- .../qv/gnu-pack/dpp-qv.uvprojx | 22 +- .../arm-cm/dpp_nucleo-c031c6/qv/gnu/Makefile | 4 +- .../qxk/arm-pack/RTE/RTEF/qp_config.h | 22 +- ...ig.h.base@7.3.0 => qp_config.h.base@7.3.2} | 14 +- .../arm-pack/RTE/_dpp-dbg/RTE_Components.h | 6 +- .../arm-pack/RTE/_dpp-rel/RTE_Components.h | 6 +- .../arm-pack/RTE/_dpp-spy/RTE_Components.h | 8 +- .../qxk/arm-pack/dpp-qxk.uvoptx | 4 +- .../qxk/arm-pack/dpp-qxk.uvprojx | 28 +- examples/arm-cm/dpp_nucleo-c031c6/qxk/bsp.c | 55 +- .../arm-cm/dpp_nucleo-c031c6/qxk/gnu/Makefile | 4 +- .../dpp_nucleo-c031c6/qxk/gnu/README.txt | 2 +- .../arm-cm/dpp_nucleo-c031c6_mpu/dpp_mpu.qm | 2 +- .../qk/armclang/README.txt | 2 +- .../arm-cm/dpp_nucleo-c031c6_mpu/qk/bsp.c | 2 +- .../dpp_nucleo-c031c6_mpu/qk/gnu/Makefile | 4 +- .../arm-cm/dpp_nucleo-c031c6_mpu/qv/bsp.c | 2 +- .../dpp_nucleo-c031c6_mpu/qv/gnu/Makefile | 4 +- .../qxk/armclang/dpp-qxk.uvoptx | 4 +- .../qxk/armclang/dpp-qxk.uvprojx | 4 +- .../arm-cm/dpp_nucleo-c031c6_mpu/qxk/bsp.c | 2 +- .../dpp_nucleo-c031c6_mpu/qxk/gnu/Makefile | 4 +- .../dpp_nucleo-c031c6_mpu/qxk/gnu/README.txt | 2 +- examples/arm-cm/dpp_nucleo-h743zi/dpp.qm | 2 +- examples/arm-cm/dpp_nucleo-h743zi/qk/bsp.c | 2 +- .../arm-cm/dpp_nucleo-h743zi/qk/gnu/Makefile | 4 +- .../dpp_nucleo-h743zi/qk/gnu/README.txt | 4 +- examples/arm-cm/dpp_nucleo-h743zi/qv/bsp.c | 4 +- .../arm-cm/dpp_nucleo-h743zi/qv/gnu/Makefile | 4 +- .../dpp_nucleo-h743zi/qv/gnu/README.txt | 4 +- examples/arm-cm/dpp_nucleo-h743zi/qxk/bsp.c | 2 +- .../arm-cm/dpp_nucleo-h743zi/qxk/gnu/Makefile | 4 +- .../dpp_nucleo-h743zi/qxk/gnu/README.txt | 4 +- .../dpp_nucleo-h743zi/stm32h7xx_hal_msp.c | 8 +- examples/arm-cm/dpp_nucleo-l053r8/dpp.qm | 2 +- .../dpp_nucleo-l053r8/qk/armclang/README.txt | 4 +- examples/arm-cm/dpp_nucleo-l053r8/qk/bsp.c | 2 +- .../arm-cm/dpp_nucleo-l053r8/qk/gnu/Makefile | 4 +- .../dpp_nucleo-l053r8/qk/gnu/README.txt | 4 +- .../dpp_nucleo-l053r8/qv/armclang/README.txt | 4 +- examples/arm-cm/dpp_nucleo-l053r8/qv/bsp.c | 2 +- .../arm-cm/dpp_nucleo-l053r8/qv/gnu/Makefile | 4 +- .../dpp_nucleo-l053r8/qv/gnu/README.txt | 4 +- .../dpp_nucleo-l053r8/qxk/armclang/README.txt | 4 +- examples/arm-cm/dpp_nucleo-l053r8/qxk/bsp.c | 2 +- .../arm-cm/dpp_nucleo-l053r8/qxk/gnu/Makefile | 4 +- .../dpp_nucleo-l053r8/qxk/gnu/README.txt | 4 +- examples/arm-cm/dpp_nucleo-l152re/dpp.qm | 2 +- .../dpp_nucleo-l152re/qk/armclang/README.txt | 4 +- examples/arm-cm/dpp_nucleo-l152re/qk/bsp.c | 2 +- .../arm-cm/dpp_nucleo-l152re/qk/gnu/Makefile | 4 +- .../dpp_nucleo-l152re/qk/gnu/README.txt | 4 +- .../dpp_nucleo-l152re/qv/armclang/README.txt | 4 +- examples/arm-cm/dpp_nucleo-l152re/qv/bsp.c | 2 +- .../arm-cm/dpp_nucleo-l152re/qv/gnu/Makefile | 4 +- .../dpp_nucleo-l152re/qv/gnu/README.txt | 4 +- .../dpp_nucleo-l152re/qxk/armclang/README.txt | 4 +- examples/arm-cm/dpp_nucleo-l152re/qxk/bsp.c | 2 +- .../arm-cm/dpp_nucleo-l152re/qxk/gnu/Makefile | 4 +- .../dpp_nucleo-l152re/qxk/gnu/README.txt | 4 +- examples/arm-cm/dpp_nucleo-l552ze/dpp.qm | 2 +- examples/arm-cm/dpp_nucleo-l552ze/qk/bsp.c | 2 +- .../arm-cm/dpp_nucleo-l552ze/qk/gnu/Makefile | 4 +- examples/arm-cm/dpp_nucleo-l552ze/qv/bsp.c | 2 +- .../arm-cm/dpp_nucleo-l552ze/qv/gnu/Makefile | 4 +- examples/arm-cm/dpp_nucleo-l552ze/qxk/bsp.c | 2 +- .../arm-cm/dpp_nucleo-l552ze/qxk/gnu/Makefile | 4 +- .../dpp_nucleo-l552ze/stm32l5xx_hal_msp.c | 6 +- examples/arm-cm/dpp_stm32f4-discovery/dpp.qm | 2 +- .../qk/armclang/README.txt | 2 +- .../arm-cm/dpp_stm32f4-discovery/qk/bsp.c | 2 +- .../dpp_stm32f4-discovery/qk/gnu/Makefile | 4 +- .../dpp_stm32f4-discovery/qk/gnu/README.txt | 2 +- .../dpp_stm32f4-discovery/qk/gnu/flash.bat | 2 +- .../qv/armclang/README.txt | 2 +- .../arm-cm/dpp_stm32f4-discovery/qv/bsp.c | 2 +- .../dpp_stm32f4-discovery/qv/gnu/Makefile | 4 +- .../dpp_stm32f4-discovery/qv/gnu/README.txt | 2 +- .../dpp_stm32f4-discovery/qv/gnu/flash.bat | 2 +- .../qxk/armclang/README.txt | 2 +- .../arm-cm/dpp_stm32f4-discovery/qxk/bsp.c | 2 +- .../dpp_stm32f4-discovery/qxk/gnu/Makefile | 4 +- .../dpp_stm32f4-discovery/qxk/gnu/README.txt | 2 +- .../dpp_stm32f4-discovery/qxk/gnu/flash.bat | 2 +- .../arm-cm/game_efm32-slstk3401a/README.md | 4 +- examples/arm-cm/game_efm32-slstk3401a/game.qm | 10 +- examples/arm-cm/game_efm32-slstk3401a/mine1.c | 2 +- examples/arm-cm/game_efm32-slstk3401a/mine2.c | 2 +- .../arm-cm/game_efm32-slstk3401a/qk/bsp.c | 36 +- .../game_efm32-slstk3401a/qk/gnu/Makefile | 4 +- .../game_efm32-slstk3401a/qk/gnu/README.txt | 2 +- .../arm-cm/game_efm32-slstk3401a/qv/bsp.c | 36 +- .../game_efm32-slstk3401a/qv/gnu/Makefile | 4 +- .../game_efm32-slstk3401a/qv/gnu/README.txt | 2 +- examples/arm-cm/game_efm32-slstk3401a/ship.c | 4 +- .../arm-cm/game_efm32-slstk3401a/tunnel.c | 2 +- .../low-power_ek-tm4c123gxl/qk/gnu/Makefile | 4 +- .../low-power_ek-tm4c123gxl/qk/gnu/README.txt | 2 +- .../low-power_ek-tm4c123gxl/qv/gnu/Makefile | 4 +- .../low-power_ek-tm4c123gxl/qv/gnu/README.txt | 2 +- .../low-power_ek-tm4c123gxl/qxk/gnu/Makefile | 4 +- .../qxk/gnu/README.txt | 2 +- .../arm-cm/real-time_nucleo-l053r8/README.md | 4 +- .../blinky_launchxl2-tms57012/README.md | 62 ++- .../launchxl2-tms57012.png | Bin 0 -> 136290 bytes .../arm-cr/blinky_launchxl2-tms57012/qk/bsp.c | 2 +- .../blinky_launchxl2-tms57012/qk/ti/.cproject | 143 ++--- .../blinky_launchxl2-tms57012/qk/ti/.project | 1 - .../arm-cr/blinky_launchxl2-tms57012/qv/bsp.c | 2 +- .../arm-cr/dpp_launchxl2-tms57012/README.md | 89 ++- examples/arm-cr/dpp_launchxl2-tms57012/dpp.qm | 2 +- .../launchxl2-tms57012.png | Bin 0 -> 136290 bytes .../dpp_launchxl2-tms57012/qk/Readme.txt | 6 +- .../arm-cr/dpp_launchxl2-tms57012/qk/bsp.c | 2 +- .../dpp_launchxl2-tms57012/qk/ti/.cproject | 102 ++-- .../dpp_launchxl2-tms57012/qk/ti/.project | 1 - .../dpp_launchxl2-tms57012/qspy-output.png | Bin 0 -> 30404 bytes .../arm-cr/dpp_launchxl2-tms57012/qv/bsp.c | 2 +- examples/embos/arm-cm/dpp_nucleo-h743zi/bsp.c | 4 +- .../embos/arm-cm/dpp_nucleo-h743zi/dpp.qm | 2 +- .../arm-cm/dpp_nucleo-h743zi/gnu/Makefile | 4 +- .../dpp_nucleo-h743zi/stm32h7xx_hal_msp.c | 8 +- examples/esp-idf/dpp-esp32devkitc/main/dpp.h | 2 +- examples/esp-idf/dpp-esp32devkitc/main/dpp.qm | 2 +- .../freertos/arm-cm/dpp_ek-tm4c123gxl/bsp.c | 2 +- .../freertos/arm-cm/dpp_ek-tm4c123gxl/dpp.qm | 2 +- .../arm-cm/dpp_ek-tm4c123gxl/gnu/Makefile | 6 +- .../arm-cm/dpp_ek-tm4c123gxl/gnu/README.txt | 2 +- .../freertos/arm-cm/dpp_nucleo-h743zi/bsp.c | 4 +- .../freertos/arm-cm/dpp_nucleo-h743zi/dpp.qm | 2 +- .../arm-cm/dpp_nucleo-h743zi/gnu/Makefile | 6 +- .../arm-cm/dpp_nucleo-h743zi/gnu/README.txt | 2 +- .../dpp_nucleo-h743zi/stm32h7xx_hal_msp.c | 8 +- .../lwip/arm-cm/lwip_ek-lm3s6965/README.txt | 2 +- examples/lwip/arm-cm/lwip_ek-lm3s6965/dpp.h | 4 +- examples/lwip/arm-cm/lwip_ek-lm3s6965/lwip.c | 6 +- .../lwip/arm-cm/lwip_ek-lm3s6965/qk/bsp.c | 6 +- .../arm-cm/lwip_ek-lm3s6965/qk/gnu/Makefile | 4 +- .../lwip/arm-cm/lwip_ek-lm3s6965/qv/bsp.c | 8 +- .../arm-cm/lwip_ek-lm3s6965/qv/gnu/Makefile | 4 +- .../arm-cm/lwip_ek-lm3s6965/website/index.htm | 2 +- .../lwip_ek-lm3s6965/website/udp_demo.htm | 2 +- .../msp430/blinky_msp-exp430f5529lp/qk/bsp.c | 2 +- .../msp430/blinky_msp-exp430f5529lp/qv/bsp.c | 4 +- examples/msp430/blinky_msp-exp430g2/README.md | 2 +- examples/msp430/blinky_msp-exp430g2/qv/bsp.c | 2 +- examples/msp430/dpp_msp-exp430f5529lp/dpp.qm | 2 +- .../msp430/dpp_msp-exp430f5529lp/qk/bsp.c | 4 +- .../msp430/dpp_msp-exp430f5529lp/qv/bsp.c | 6 +- examples/pic32/dpp_microstick2-pic32/dpp.qm | 2 +- .../dpp_microstick2-pic32/qk/xc32/Makefile | 2 +- .../dpp_microstick2-pic32/qv/xc32/Makefile | 2 +- examples/posix-win32/calc/calc.qm | 4 +- examples/posix-win32/calc2/calc2.qm | 4 +- examples/posix-win32/calc_sub/calc_sub.qm | 4 +- .../posix-win32/calc_sub/lint-plus/README.txt | 2 +- .../calc_sub/lint-plus/options.lnt | 2 +- examples/posix-win32/dpp-posix/Makefile | 2 +- examples/posix-win32/dpp-posix/dpp.qm | 2 +- examples/posix-win32/dpp/dpp.qm | 2 +- examples/posix-win32/dpp/qview/dpp.py | 4 +- examples/posix-win32/dpp/qview/dpp1.py | 4 +- examples/posix-win32/dpp_comp/dpp-comp.qm | 4 +- examples/posix-win32/reminder2/reminder2.qm | 4 +- examples/qutest/blinky/test/make_efm32 | 2 +- .../qutest/blinky/test/make_nucleo-h743zi | 4 +- .../qutest/blinky/test/make_nucleo-l053r8 | 4 +- examples/qutest/blinky/test/make_tm4c123 | 2 +- examples/qutest/dpp-comp/src/dpp-comp.qm | 4 +- examples/qutest/dpp-comp/test_dpp/make_efm32 | 2 +- .../dpp-comp/test_dpp/make_nucleo-l053r8 | 4 +- .../qutest/dpp-comp/test_dpp/make_tm4c123 | 2 +- .../qutest/dpp-comp/test_table/make_tm4c123 | 2 +- examples/qutest/dpp/src/dpp.qm | 2 +- examples/qutest/dpp/test_dpp/make_efm32 | 2 +- .../qutest/dpp/test_dpp/make_nucleo-l053r8 | 4 +- examples/qutest/dpp/test_dpp/make_tm4c123 | 2 +- examples/qutest/dpp/test_philo/make_tm4c123 | 2 +- examples/qutest/dpp/test_table/make_efm32 | 2 +- examples/qutest/dpp/test_table/make_tm4c123 | 2 +- examples/qutest/evt_par/test/make_tm4c123 | 2 +- examples/qutest/qhsmtst/test/make_efm32 | 2 +- .../qutest/qhsmtst/test/make_nucleo-l053r8 | 4 +- examples/qutest/qhsmtst/test/make_tm4c123 | 2 +- examples/qutest/qmsmtst/test/make_efm32 | 2 +- .../qutest/qmsmtst/test/make_nucleo-l053r8 | 4 +- examples/qutest/qmsmtst/test/make_tm4c123 | 2 +- examples/qutest/self_test/test/make_efm32 | 2 +- .../qutest/self_test/test/make_nucleo-l053r8 | 4 +- examples/qutest/self_test/test/make_tm4c123 | 2 +- examples/qutest/start_seq/test/test_fixture.c | 2 +- .../qutest/start_seq/test/test_start_seq.py | 4 +- examples/qutest/unity_basic/test/make_efm32 | 2 +- examples/qutest/unity_basic/test/make_tm4c123 | 2 +- .../qutest/unity_basic/test_unity/Makefile | 2 +- examples/qutest/unity_ledbar/printf/Makefile | 2 +- examples/qutest/unity_ledbar/printf/spy_Led.c | 2 +- .../qutest/unity_ledbar/qutest/make_efm32 | 2 +- .../unity_ledbar/qutest/make_nucleo-l053r8 | 4 +- .../qutest/unity_ledbar/qutest/make_tm4c123 | 2 +- examples/qutest/unity_ledbar/qutest/spy_led.c | 2 +- examples/qutest/unity_ledbar/src/Led.h | 2 +- examples/qutest/unity_ledbar/test/Makefile | 2 +- examples/qutest/unity_ledbar/trace/spy_Led.c | 2 +- .../unity_ledbar2/qutest/make_nucleo-l053r8 | 4 +- .../qutest/unity_ledbar2/qutest/spy_led.c | 2 +- examples/qutest/unity_ledbar2/src/Led.h | 2 +- examples/qutest/unity_ledbar2/test/Makefile | 2 +- examples/qutest/unity_mock/src/Led.h | 2 +- examples/qutest/unity_mock/test/make_efm32 | 2 +- examples/qutest/unity_mock/test/make_tm4c123 | 2 +- examples/qutest/unity_mock/test/spy_Led.c | 2 +- .../qutest/unity_mock/test_unity/Makefile | 2 +- .../qutest/unity_strlen/qutest/make_efm32 | 2 +- .../unity_strlen/qutest/make_nucleo-l053r8 | 4 +- .../qutest/unity_strlen/qutest/make_tm4c123 | 2 +- examples/qutest/unity_strlen/test/Makefile | 2 +- examples/qwin-gui/dpp-gui/bsp.c | 4 +- examples/qwin-gui/dpp-gui/dpp.qm | 2 +- examples/qwin-gui/game-gui/bsp.c | 34 +- examples/qwin-gui/game-gui/game.qm | 10 +- examples/qwin-gui/game-gui/make.bat | 2 +- examples/qwin-gui/game-gui/mine1.c | 2 +- examples/qwin-gui/game-gui/mine2.c | 2 +- examples/qwin-gui/game-gui/ship.c | 4 +- examples/qwin-gui/game-gui/tunnel.c | 2 +- .../threadx/arm-cm/dpp_ek-tm4c123gxl/bsp.c | 2 +- .../threadx/arm-cm/dpp_ek-tm4c123gxl/dpp.qm | 2 +- .../arm-cm/dpp_stm32f429-discovery/bsp.c | 4 +- .../arm-cm/dpp_stm32f429-discovery/dpp.qm | 2 +- .../uc-os2/arm-cm/dpp_ek-tm4c123gxl/dpp.qm | 2 +- .../arm-cm/dpp_ek-tm4c123gxl/gnu/Makefile | 4 +- .../arm-cm/dpp_ek-tm4c123gxl/gnu/README.txt | 2 +- examples/zephyr/blinky/README.md | 2 +- examples/zephyr/dpp/src/dpp.qm | 2 +- include/qequeue.h | 8 +- include/qk.h | 10 +- include/qmpool.h | 6 +- include/qp.h | 48 +- include/qp_pkg.h | 2 +- include/qpc.h | 10 +- include/qs.h | 26 +- include/qs_dummy.h | 10 +- include/qs_pkg.h | 6 +- include/qsafe.h | 2 +- include/qstamp.h | 2 +- include/qv.h | 10 +- include/qxk.h | 10 +- ports/arm-cm/qk/armclang/qk_port.c | 10 +- ports/arm-cm/qk/config/qp_config.h | 2 +- ports/arm-cm/qk/gnu/qk_port.c | 15 +- ports/arm-cm/qk/iar/qk_port.c | 10 +- ports/arm-cm/qutest/qp_port.h | 8 +- ports/arm-cm/qv/armclang/qv_port.c | 10 +- ports/arm-cm/qv/config/qp_config.h | 2 +- ports/arm-cm/qv/gnu/qv_port.c | 10 +- ports/arm-cm/qv/iar/qv_port.c | 10 +- ports/arm-cm/qxk/armclang/qxk_port.c | 12 +- ports/arm-cm/qxk/config/qp_config.h | 2 +- ports/arm-cm/qxk/gnu/qxk_port.c | 17 +- ports/arm-cm/qxk/iar/qxk_port.c | 12 +- ports/arm-cr/qk/config/qp_config.h | 2 +- ports/arm-cr/qv/config/qp_config.h | 2 +- ports/config/qp_config.h | 2 +- ports/embos/qf_port.c | 16 +- ports/embos/qp_port.h | 8 +- ports/esp-idf/README.md | 2 +- ports/esp-idf/qf_port.c | 58 +- ports/esp-idf/qp_port.h | 14 +- ports/freertos/qf_port.c | 58 +- ports/freertos/qp_port.h | 12 +- ports/lint-plus/qpc.lnt | 2 +- ports/lint-plus/std.lnt | 1 - ports/msp430/qutest/qp_port.h | 8 +- ports/pic32/qutest/xc32/qp_port.h | 6 +- ports/posix-qutest/README.md | 5 - ports/posix-qutest/qp_port.h | 8 +- ports/posix-qv/qf_port.c | 2 +- ports/posix-qv/qp_port.h | 10 +- ports/posix/qp_port.h | 10 +- ports/qube/qp_port.h | 8 +- ports/threadx/qf_port.c | 12 +- ports/threadx/qp_port.h | 8 +- ports/uc-os2/qf_port.c | 16 +- ports/uc-os2/qp_port.h | 8 +- ports/win32-qutest/qp_port.h | 8 +- ports/win32-qv/qp_port.h | 8 +- ports/win32/qp_port.h | 8 +- qpc.md5 | 148 ++--- qpc.qm | 512 +++++++++--------- src/qf/qep_hsm.c | 62 +-- src/qf/qep_msm.c | 72 +-- src/qf/qf_act.c | 2 +- src/qf/qf_actq.c | 26 +- src/qf/qf_defer.c | 8 +- src/qf/qf_dyn.c | 84 +-- src/qf/qf_mem.c | 16 +- src/qf/qf_ps.c | 12 +- src/qf/qf_qact.c | 2 +- src/qf/qf_qeq.c | 38 +- src/qf/qf_qmact.c | 2 +- src/qf/qf_time.c | 16 +- src/qk/qk.c | 6 +- src/qs/qs.c | 20 +- src/qs/qs_64bit.c | 2 +- src/qs/qs_fp.c | 4 +- src/qs/qs_rx.c | 6 +- src/qs/qstamp.c | 2 +- src/qs/qutest.c | 28 +- src/qv/qv.c | 2 +- src/qxk/qxk.c | 6 +- src/qxk/qxk_mutex.c | 4 +- src/qxk/qxk_sema.c | 4 +- src/qxk/qxk_xthr.c | 6 +- test/qf/qequeue/qp_port.h | 8 +- test/qf/qequeue/test.c | 4 +- test/qk/test_sched/efm32pg1b.mak | 4 +- test/qk/test_sched/nucleo-c031c6.mak | 4 +- test/qk/test_sched/nucleo-h743zi.mak | 4 +- test/qk/test_sched/nucleo-l053r8.mak | 4 +- test/qk/test_sched/test_mpu.py | 2 +- test/qs/qs_rx/qp_port.h | 8 +- test/qs/qs_rx/test.c | 4 +- test/qxk/test_sched/efm32pg1b.mak | 4 +- test/qxk/test_sched/nucleo-c031c6.mak | 4 +- test/qxk/test_sched/nucleo-h743zi.mak | 4 +- test/qxk/test_sched/nucleo-l053r8.mak | 4 +- test/qxk/test_sched/test_mpu.py | 2 +- zephyr/qf_port.c | 16 +- zephyr/qp_port.h | 8 +- 408 files changed, 2512 insertions(+), 2996 deletions(-) delete mode 100644 examples/arm-cm/blinky_ek-tm4c123gxl/qk/gnu/.ccsproject delete mode 100644 examples/arm-cm/blinky_ek-tm4c123gxl/qk/gnu/.cproject delete mode 100644 examples/arm-cm/blinky_ek-tm4c123gxl/qk/gnu/.project delete mode 100644 examples/arm-cm/blinky_ek-tm4c123gxl/qv/gnu/.ccsproject delete mode 100644 examples/arm-cm/blinky_ek-tm4c123gxl/qv/gnu/.cproject delete mode 100644 examples/arm-cm/blinky_ek-tm4c123gxl/qv/gnu/.project create mode 100644 examples/arm-cm/blinky_nucleo-c031c6/README.md create mode 100644 examples/arm-cm/blinky_nucleo-c031c6/qv/gnu/README.txt rename examples/arm-cm/dpp_nucleo-c031c6/qv/gnu-pack/RTE/RTEF/{qp_config.h.base@7.3.0 => qp_config.h.base@7.3.2} (100%) delete mode 100644 examples/arm-cm/dpp_nucleo-c031c6/qv/gnu-pack/RTE/_dpp-rel/RTE_Components.h delete mode 100644 examples/arm-cm/dpp_nucleo-c031c6/qv/gnu-pack/RTE/_dpp-spy/RTE_Components.h rename examples/arm-cm/dpp_nucleo-c031c6/qxk/arm-pack/RTE/RTEF/{qp_config.h.base@7.3.0 => qp_config.h.base@7.3.2} (95%) create mode 100644 examples/arm-cr/blinky_launchxl2-tms57012/launchxl2-tms57012.png create mode 100644 examples/arm-cr/dpp_launchxl2-tms57012/launchxl2-tms57012.png create mode 100644 examples/arm-cr/dpp_launchxl2-tms57012/qspy-output.png delete mode 100644 ports/posix-qutest/README.md diff --git a/3rd_party b/3rd_party index b2df302a..2b7bb752 160000 --- a/3rd_party +++ b/3rd_party @@ -1 +1 @@ -Subproject commit b2df302a9ba285da0aea71e3def72f006ebf36c4 +Subproject commit 2b7bb752b7f137dc12138e8461c65994c899e831 diff --git a/LICENSES/LicenseRef-QL-commercial.txt b/LICENSES/LicenseRef-QL-commercial.txt index b08f3ad0..259ff1db 100644 --- a/LICENSES/LicenseRef-QL-commercial.txt +++ b/LICENSES/LicenseRef-QL-commercial.txt @@ -2,7 +2,7 @@ Quantum Leaps Commercial Licenses Copyright (C) 2005 Quantum Leaps, LLC -Quantum Leaps commercial licenses are traditinal closed-source, paid-for +Quantum Leaps commercial licenses are traditional closed-source, paid-for licenses designed for licensees interested in retaining the proprietary status of their code. @@ -17,17 +17,17 @@ Quantum Leaps commercial licensing options are described below: Single Product License ---------------------- -Single Product License allows a given company (“Licensee”) to embed the +Single Product License allows a given company ("Licensee") to embed the specified type(s) of the QP Real-Time Embedded Framework(s) into one end- product of the Licensee (Single Product). Licensee can distribute/sell an unlimited number of units of the Single Product (royalty-free licensing), for the life of the Single Product. A different Single Product license is required for each different end product (i.e. model) even if the end-product is in the same family as a previously licensed end product. This license -is specific to the Licensee and the name and model of the Signle Product, +is specific to the Licensee and the name and model of the Single Product, which needs to be defined in the license. The general rule we apply is: -If you consider it a separate product…so do we! +If you consider it a separate product... so do we! Volume discounts are offered if several Single Products are licensed at once with one license agreement. @@ -35,7 +35,7 @@ with one license agreement. Product Line License -------------------- -Product Line License allows a given company (“Licensee”) to embed the +Product Line License allows a given company ("Licensee") to embed the specified type(s) of the QP Real-Time Embedded Framework(s) into any number of end-products within a family of related products (Product Line). Licensee can distribute/sell an unlimited number of units of each of those products @@ -46,7 +46,7 @@ similar functions within the same Product Line. Any-Product License ------------------- -Any-Product License allows a given company (“Licensee”) to embed the +Any-Product License allows a given company ("Licensee") to embed the specified type(s) of the QP Real-Time Embedded Framework(s) into any end- product of that company. The Licensee can distribute/sell an unlimited number of the products containing the licensed QP framework type(s) (royalty-free @@ -55,7 +55,7 @@ licensing). Site License ------------ -Site-License allows a given company (“Licensee”) to embed the specified +Site-License allows a given company ("Licensee") to embed the specified type(s) of the QP Real-Time Embedded Framework(s) into any end-customer product, as long as the products are designed at a given physical location (Site), which must be defined in the license. This license gives the @@ -66,7 +66,7 @@ software for other companies. OEM License ----------- -OEM License allows a given company (“Licensee”) to embed the specified +OEM License allows a given company ("Licensee") to embed the specified type(s) of the QP Real-Time Embedded Framework(s) in any product of that company (Original Equipment Manufacturer) and gives limited sublicensing rights to system integrators, subsystem vendors, subcontractors, and other @@ -77,7 +77,7 @@ licensing needs of a given Licensee. Education License ----------------- Education License allows a given accredited educational institution -(“Licensee”) to use and embed the specified type(s) of the QP Real-Time +("Licensee") to use and embed the specified type(s) of the QP Real-Time Embedded Framework(s) in any project completed at that educational institution. To be eligible for this license, the institution must be focused mainly on teaching students. The Education Licenses are free diff --git a/LICENSES/QP-RasPi_GPL_Exception.txt b/LICENSES/QP-RasPi_GPL_Exception.txt index 2b54e5d4..998744ea 100644 --- a/LICENSES/QP-RasPi_GPL_Exception.txt +++ b/LICENSES/QP-RasPi_GPL_Exception.txt @@ -39,7 +39,7 @@ executable form suitable for execution by Raspberry Pi. 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 propriatory source code, provided that all Target Code will execute +your proprietary source code, provided that all Target Code will execute on a genuine Raspberry Pi computer(s). 2. No Weakening of GPL diff --git a/README.md b/README.md index 586144c4..0ae412f2 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ View QP/C Revision History at: https://www.state-machine.com/qpc/history.html > **NOTE:** If you're interested in the latest QP/C version from GitHub, -it is recommened that you clone this repo like that: +it is recommended that you clone this repo like that: ``` git clone https://github.com/QuantumLeaps/qpc --recurse-submodules --depth 1 @@ -104,7 +104,7 @@ you don't use any open source license and you do not violate your policy. # QP/C Documentation -The online HTML documention for the **latest** version of QP/C is located +The online HTML documentation for the **latest** version of QP/C is located at: https://www.state-machine.com/qpc The offline HTML documentation for **this** particular version of QP/C diff --git a/examples/arm-cm/README.md b/examples/arm-cm/README.md index c5f3f478..cfb91ccd 100644 --- a/examples/arm-cm/README.md +++ b/examples/arm-cm/README.md @@ -41,11 +41,11 @@ This is how you might go about an MCU that is not directly supported in the `qpc - choose the compiler you'd like to use. For example, assuming that you like GNU-ARM, you are interested in the gnu subdirectory -- build the chosen example project. Again, it **doesn't matter** at this stage that it is not exacly your final hardware. Your objective is testing your QP installation and the compiler installation. You are also getting familiar with QP. These goals are worth but a few minutes of your time. +- build the chosen example project. Again, it **doesn't matter** at this stage that it is not exactly your final hardware. Your objective is testing your QP installation and the compiler installation. You are also getting familiar with QP. These goals are worth but a few minutes of your time. - at this point, it is highly recommend that you just buy one of the supported ARM Cortex-M boards, which are carefully chosen to be very inexpensive. With your own board, you'd be able to run and debug the QP application at your desk, which is priceless because as you surely remember: *In embedded systems NOTING works until EVERYTHING works*. -- only *after* you get started with a working example, you can try to modify it for your own board. This typically requiers only changes to the BSP (Board Support Package), which is provided in the `bsp.c` file. +- only *after* you get started with a working example, you can try to modify it for your own board. This typically requires only changes to the BSP (Board Support Package), which is provided in the `bsp.c` file. # Code Organization diff --git a/examples/arm-cm/blinky_ek-tm4c123gxl/README.md b/examples/arm-cm/blinky_ek-tm4c123gxl/README.md index 731ed6c3..0674b3b2 100644 --- a/examples/arm-cm/blinky_ek-tm4c123gxl/README.md +++ b/examples/arm-cm/blinky_ek-tm4c123gxl/README.md @@ -31,7 +31,6 @@ examples\arm-cm\blinky_ek-tm4c123gxl | +---qk // preemptive QK kernel | +---gnu // GNU-ARM toolchain -| | \---targetConfigs | | Makefile // Makefile for GNU-ARM | +---armclang // ARM/KEIL toolchain with Compiler 6 (ARM/CLANG) | | blinky-qk.uvprojx // uVision project @@ -40,7 +39,6 @@ examples\arm-cm\blinky_ek-tm4c123gxl | \---qv // cooperative QK kernel | +---gnu // GNU-ARM toolchain -| | \---targetConfigs | | Makefile // Makefile for GNU-ARM | +---armclang // ARM/KEIL toolchain with Compiler 6 (ARM/CLANG) | | blinky-qv.uvprojx // uVision project @@ -48,7 +46,7 @@ examples\arm-cm\blinky_ek-tm4c123gxl | blinky-qv.eww // IAR EW-ARM workspace ``` -# Builing the example +# Building the example ### GNU/ARM - open terminal window diff --git a/examples/arm-cm/blinky_ek-tm4c123gxl/qk/bsp.c b/examples/arm-cm/blinky_ek-tm4c123gxl/qk/bsp.c index a2b19429..73cccc32 100644 --- a/examples/arm-cm/blinky_ek-tm4c123gxl/qk/bsp.c +++ b/examples/arm-cm/blinky_ek-tm4c123gxl/qk/bsp.c @@ -234,7 +234,7 @@ void QK_onIdle(void) { // // NOTE2: // The User LED is used to visualize the idle loop activity. The brightness -// of the LED is proportional to the frequency of invcations of the idle loop. +// of the LED is proportional to the frequency of invocations of the idle loop. // Please note that the LED is toggled with interrupts locked, so no interrupt // execution time contributes to the brightness of the User LED. // diff --git a/examples/arm-cm/blinky_ek-tm4c123gxl/qk/gnu/.ccsproject b/examples/arm-cm/blinky_ek-tm4c123gxl/qk/gnu/.ccsproject deleted file mode 100644 index 0c19207c..00000000 --- a/examples/arm-cm/blinky_ek-tm4c123gxl/qk/gnu/.ccsproject +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - - - - - - - - - - diff --git a/examples/arm-cm/blinky_ek-tm4c123gxl/qk/gnu/.cproject b/examples/arm-cm/blinky_ek-tm4c123gxl/qk/gnu/.cproject deleted file mode 100644 index 2b78bfa0..00000000 --- a/examples/arm-cm/blinky_ek-tm4c123gxl/qk/gnu/.cproject +++ /dev/null @@ -1,277 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/examples/arm-cm/blinky_ek-tm4c123gxl/qk/gnu/.project b/examples/arm-cm/blinky_ek-tm4c123gxl/qk/gnu/.project deleted file mode 100644 index b828bdee..00000000 --- a/examples/arm-cm/blinky_ek-tm4c123gxl/qk/gnu/.project +++ /dev/null @@ -1,114 +0,0 @@ - - - blinky-qk - - - - - - org.eclipse.cdt.managedbuilder.core.genmakebuilder - - - - - org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder - full,incremental, - - - - - - com.ti.ccstudio.core.ccsNature - org.eclipse.cdt.core.cnature - org.eclipse.cdt.managedbuilder.core.managedBuildNature - org.eclipse.cdt.core.ccnature - org.eclipse.cdt.managedbuilder.core.ScannerConfigNature - - - - QK - 2 - PARENT-5-PROJECT_LOC/src/qk - - - QP - 2 - PARENT-5-PROJECT_LOC/src/qf - - - QP_port - 2 - PARENT-5-PROJECT_LOC/ports/arm-cm/qk/gnu - - - QS - 2 - PARENT-5-PROJECT_LOC/src/qs - - - TM4C123GH6PM.h - 1 - PARENT-5-PROJECT_LOC/3rd_party/ek-tm4c123gxl/TM4C123GH6PM.h - - - blinky.c - 1 - PARENT-2-PROJECT_LOC/blinky.c - - - blinky.h - 1 - PARENT-2-PROJECT_LOC/blinky.h - - - bsp.c - 1 - PARENT-1-PROJECT_LOC/bsp.c - - - bsp.h - 1 - PARENT-2-PROJECT_LOC/bsp.h - - - gpio.h - 1 - PARENT-5-PROJECT_LOC/3rd_party/ek-tm4c123gxl/gpio.h - - - main.c - 1 - PARENT-2-PROJECT_LOC/main.c - - - qstamp.c - 1 - PARENT-5-PROJECT_LOC/src/qs/qstamp.c - - - rom.h - 1 - PARENT-5-PROJECT_LOC/3rd_party/ek-tm4c123gxl/rom.h - - - startup_TM4C123GH6PM.c - 1 - PARENT-5-PROJECT_LOC/3rd_party/ek-tm4c123gxl/gnu/startup_TM4C123GH6PM.c - - - sysctl.h - 1 - PARENT-5-PROJECT_LOC/3rd_party/ek-tm4c123gxl/sysctl.h - - - system_TM4C123GH6PM.c - 1 - PARENT-5-PROJECT_LOC/3rd_party/ek-tm4c123gxl/system_TM4C123GH6PM.c - - - system_TM4C123GH6PM.h - 1 - PARENT-5-PROJECT_LOC/3rd_party/ek-tm4c123gxl/system_TM4C123GH6PM.h - - - diff --git a/examples/arm-cm/blinky_ek-tm4c123gxl/qk/gnu/Makefile b/examples/arm-cm/blinky_ek-tm4c123gxl/qk/gnu/Makefile index c3ada1b2..8e56700c 100644 --- a/examples/arm-cm/blinky_ek-tm4c123gxl/qk/gnu/Makefile +++ b/examples/arm-cm/blinky_ek-tm4c123gxl/qk/gnu/Makefile @@ -57,7 +57,7 @@ PROJECT := blinky-qk # project directories # -# location of the QP/C framework (if not provided in an environemnt var.) +# location of the QP/C framework (if not provided in an environment var.) ifeq ($(QPC),) QPC := ../../../../.. endif @@ -176,7 +176,7 @@ RM := rm # build options for various configurations for ARM Cortex-M4F # -# combine all the soruces... +# combine all the sources... C_SRCS += $(QP_SRCS) ASM_SRCS += $(QP_ASMS) diff --git a/examples/arm-cm/blinky_ek-tm4c123gxl/qk/gnu/README.txt b/examples/arm-cm/blinky_ek-tm4c123gxl/qk/gnu/README.txt index 3ba6f924..18bf7307 100644 --- a/examples/arm-cm/blinky_ek-tm4c123gxl/qk/gnu/README.txt +++ b/examples/arm-cm/blinky_ek-tm4c123gxl/qk/gnu/README.txt @@ -31,7 +31,7 @@ to be adjusted in the provided Makefile, by editing the symbol: GNU_ARM. As described in the comment for this symbol, the GNU-ARM toolset is taken from: http://gnutoolchains.com/arm-eabi -It is highly recommened to use the same GNU-ARM distribution, especially +It is highly recommended to use the same GNU-ARM distribution, especially for ARM Cortex-M4F projects, due to the support for the hardware FPU (float-abi=hard). *** diff --git a/examples/arm-cm/blinky_ek-tm4c123gxl/qv/bsp.c b/examples/arm-cm/blinky_ek-tm4c123gxl/qv/bsp.c index 8927d853..30cbcae7 100644 --- a/examples/arm-cm/blinky_ek-tm4c123gxl/qv/bsp.c +++ b/examples/arm-cm/blinky_ek-tm4c123gxl/qv/bsp.c @@ -237,7 +237,7 @@ void QV_onIdle(void) { // CATION: called with interrupts DISABLED, NOTE2 // // NOTE3: // One of the LEDs is used to visualize the idle loop activity. The brightness -// of the LED is proportional to the frequency of invcations of the idle loop. +// of the LED is proportional to the frequency of invocations of the idle loop. // Please note that the LED is toggled with interrupts locked, so no interrupt // execution time contributes to the brightness of the User LED. // diff --git a/examples/arm-cm/blinky_ek-tm4c123gxl/qv/gnu/.ccsproject b/examples/arm-cm/blinky_ek-tm4c123gxl/qv/gnu/.ccsproject deleted file mode 100644 index 0c19207c..00000000 --- a/examples/arm-cm/blinky_ek-tm4c123gxl/qv/gnu/.ccsproject +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - - - - - - - - - - diff --git a/examples/arm-cm/blinky_ek-tm4c123gxl/qv/gnu/.cproject b/examples/arm-cm/blinky_ek-tm4c123gxl/qv/gnu/.cproject deleted file mode 100644 index 82eb559c..00000000 --- a/examples/arm-cm/blinky_ek-tm4c123gxl/qv/gnu/.cproject +++ /dev/null @@ -1,277 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/examples/arm-cm/blinky_ek-tm4c123gxl/qv/gnu/.project b/examples/arm-cm/blinky_ek-tm4c123gxl/qv/gnu/.project deleted file mode 100644 index 4a77cd23..00000000 --- a/examples/arm-cm/blinky_ek-tm4c123gxl/qv/gnu/.project +++ /dev/null @@ -1,114 +0,0 @@ - - - blinky-qv - - - - - - org.eclipse.cdt.managedbuilder.core.genmakebuilder - - - - - org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder - full,incremental, - - - - - - com.ti.ccstudio.core.ccsNature - org.eclipse.cdt.core.cnature - org.eclipse.cdt.managedbuilder.core.managedBuildNature - org.eclipse.cdt.core.ccnature - org.eclipse.cdt.managedbuilder.core.ScannerConfigNature - - - - QP - 2 - PARENT-5-PROJECT_LOC/src/qf - - - QP_port - 2 - PARENT-5-PROJECT_LOC/ports/arm-cm/qv/gnu - - - QS - 2 - PARENT-5-PROJECT_LOC/src/qs - - - QV - 2 - PARENT-5-PROJECT_LOC/src/qv - - - TM4C123GH6PM.h - 1 - PARENT-5-PROJECT_LOC/3rd_party/ek-tm4c123gxl/TM4C123GH6PM.h - - - blinky.c - 1 - PARENT-2-PROJECT_LOC/blinky.c - - - blinky.h - 1 - PARENT-2-PROJECT_LOC/blinky.h - - - bsp.c - 1 - PARENT-1-PROJECT_LOC/bsp.c - - - bsp.h - 1 - PARENT-2-PROJECT_LOC/bsp.h - - - gpio.h - 1 - PARENT-5-PROJECT_LOC/3rd_party/ek-tm4c123gxl/gpio.h - - - main.c - 1 - PARENT-2-PROJECT_LOC/main.c - - - qstamp.c - 1 - PARENT-5-PROJECT_LOC/src/qs/qstamp.c - - - rom.h - 1 - PARENT-5-PROJECT_LOC/3rd_party/ek-tm4c123gxl/rom.h - - - startup_TM4C123GH6PM.c - 1 - PARENT-5-PROJECT_LOC/3rd_party/ek-tm4c123gxl/gnu/startup_TM4C123GH6PM.c - - - sysctl.h - 1 - PARENT-5-PROJECT_LOC/3rd_party/ek-tm4c123gxl/sysctl.h - - - system_TM4C123GH6PM.c - 1 - PARENT-5-PROJECT_LOC/3rd_party/ek-tm4c123gxl/system_TM4C123GH6PM.c - - - system_TM4C123GH6PM.h - 1 - PARENT-5-PROJECT_LOC/3rd_party/ek-tm4c123gxl/system_TM4C123GH6PM.h - - - diff --git a/examples/arm-cm/blinky_ek-tm4c123gxl/qv/gnu/Makefile b/examples/arm-cm/blinky_ek-tm4c123gxl/qv/gnu/Makefile index 7cbc2aa2..148a8619 100644 --- a/examples/arm-cm/blinky_ek-tm4c123gxl/qv/gnu/Makefile +++ b/examples/arm-cm/blinky_ek-tm4c123gxl/qv/gnu/Makefile @@ -57,7 +57,7 @@ PROJECT := blinky-qv # project directories # -# location of the QP/C framework (if not provided in an environemnt var.) +# location of the QP/C framework (if not provided in an environment var.) ifeq ($(QPC),) QPC := ../../../../.. endif @@ -176,7 +176,7 @@ RM := rm # build options for various configurations for ARM Cortex-M4F # -# combine all the soruces... +# combine all the sources... C_SRCS += $(QP_SRCS) ASM_SRCS += $(QP_ASMS) diff --git a/examples/arm-cm/blinky_ek-tm4c123gxl/qv/gnu/README.txt b/examples/arm-cm/blinky_ek-tm4c123gxl/qv/gnu/README.txt index 3ba6f924..18bf7307 100644 --- a/examples/arm-cm/blinky_ek-tm4c123gxl/qv/gnu/README.txt +++ b/examples/arm-cm/blinky_ek-tm4c123gxl/qv/gnu/README.txt @@ -31,7 +31,7 @@ to be adjusted in the provided Makefile, by editing the symbol: GNU_ARM. As described in the comment for this symbol, the GNU-ARM toolset is taken from: http://gnutoolchains.com/arm-eabi -It is highly recommened to use the same GNU-ARM distribution, especially +It is highly recommended to use the same GNU-ARM distribution, especially for ARM Cortex-M4F projects, due to the support for the hardware FPU (float-abi=hard). *** diff --git a/examples/arm-cm/blinky_nucleo-c031c6/README.md b/examples/arm-cm/blinky_nucleo-c031c6/README.md new file mode 100644 index 00000000..334ec392 --- /dev/null +++ b/examples/arm-cm/blinky_nucleo-c031c6/README.md @@ -0,0 +1,80 @@ +> **NOTE** +This file is best viewed in a **markdown viewer**, such as the one built into GitHub. Markdown viewers are also available as plug-ins to popular Internet browsers. + +# Blinky on NUCLEO-C031C6 +This example demonstrates the [Blinky application](https://www.state-machine.com/qpc/tut_blinky.html) on the STM32 NUCLEO-C031C6 board (ARM Cortex-M0+). + +

+
+STM32 NUCLEO-C031C6 +

+ +## Features Demonstrated +- cooperative QV kernel + + with ARM-KEIL toolchain + + with GNU-ARM toolchain + + with IAR-ARM toolchain +- preemptive run-to-completion QK kernel + + with ARM-KEIL toolchain + + with GNU-ARM toolchain + + with IAR-ARM toolchain + +## Build Configurations +- Debug +- Release +- Spy - NOT supported for the simple Blinky example + +# Code Organization +``` +examples\arm-cm\blinky_nucleo-c031c6 +| ++---qk // preemptive QK kernel +| +---gnu // GNU-ARM toolchain +| | Makefile // Makefile for GNU-ARM +| +---armclang // ARM/KEIL toolchain with Compiler 6 (ARM/CLANG) +| | blinky-qk.uvprojx // uVision project +| \---iar // IAR EWARM +| blinky-qk.eww // IAR EW-ARM workspace +| +\---qv // cooperative QK kernel +| +---gnu // GNU-ARM toolchain +| | Makefile // Makefile for GNU-ARM +| +---armclang // ARM/KEIL toolchain with Compiler 6 (ARM/CLANG) +| | blinky-qv.uvprojx // uVision project +| \---iar // IAR EWARM +| blinky-qv.eww // IAR EW-ARM workspace +``` + +# Building the example + +### GNU/ARM +- open terminal window +- change to the desired directory (either `examples\arm-cm\blinky_nucleo-c031c6\qk\gnu` +or `examples\arm-cm\blinky_nucleo-c031c6\qv\gnu`) +- to build the default Debug configuration, type: + +``` +make +``` + +> **NOTE** +The `make` utility for Windows is provided in the QTools collection for Windows. + +- to build the Release configuration, type: + +``` +make CONF=rel +``` + + +### ARM/KEIL MDK +- Open the provided KEIL uVision project (either `blinky-qk.uvprojx` or `blinky-qv.uvprojx`) +in Keil uVision IDE. Build/Debug/Download to the board from the IDE. +- Change the build configuration in the "Project Target" drop-down menu. + + +### IAR EWARM +- Open the provided IAR EWARM workspace (either `blinky-qk.eww` or `blinky-qv.eww`) +in IAR EWARM IDE. Build/Debug/Download to the board from the IDE. +- Change the build configuration in the "Project Configuration" drop-down menu. + diff --git a/examples/arm-cm/blinky_nucleo-c031c6/qk/gnu/Makefile b/examples/arm-cm/blinky_nucleo-c031c6/qk/gnu/Makefile index 378bb30c..cdf786b6 100644 --- a/examples/arm-cm/blinky_nucleo-c031c6/qk/gnu/Makefile +++ b/examples/arm-cm/blinky_nucleo-c031c6/qk/gnu/Makefile @@ -56,7 +56,7 @@ PROJECT := blinky-qk # project directories # -# location of the QP/C framework (if not provided in an environemnt var.) +# location of the QP/C framework (if not provided in an environment var.) ifeq ($(QPC),) QPC := ../../../../.. endif @@ -176,7 +176,7 @@ RM := rm # build options for various configurations for ARM Cortex-M # -# combine all the soruces... +# combine all the sources... C_SRCS += $(QP_SRCS) ASM_SRCS += $(QP_ASMS) diff --git a/examples/arm-cm/blinky_nucleo-c031c6/qk/gnu/README.txt b/examples/arm-cm/blinky_nucleo-c031c6/qk/gnu/README.txt index d3fb3164..c3e5015c 100644 --- a/examples/arm-cm/blinky_nucleo-c031c6/qk/gnu/README.txt +++ b/examples/arm-cm/blinky_nucleo-c031c6/qk/gnu/README.txt @@ -31,7 +31,7 @@ to be adjusted in the provided Makefile, by editing the symbol: GNU_ARM. As described in the comment for this symbol, the GNU-ARM toolset is taken from: http://gnutoolchains.com/arm-eabi -It is highly recommened to use the same GNU-ARM distribution, especially +It is highly recommended to use the same GNU-ARM distribution, especially for ARM Cortex-M projects, due to the support for the hardware FPU (float-abi=hard). *** diff --git a/examples/arm-cm/blinky_nucleo-c031c6/qv/gnu/Makefile b/examples/arm-cm/blinky_nucleo-c031c6/qv/gnu/Makefile index ca1a4332..5a1d5680 100644 --- a/examples/arm-cm/blinky_nucleo-c031c6/qv/gnu/Makefile +++ b/examples/arm-cm/blinky_nucleo-c031c6/qv/gnu/Makefile @@ -56,7 +56,7 @@ PROJECT := blinky-qv # project directories # -# location of the QP/C framework (if not provided in an environemnt var.) +# location of the QP/C framework (if not provided in an environment var.) ifeq ($(QPC),) QPC := ../../../../.. endif @@ -174,7 +174,7 @@ RM := rm # build options for various configurations for ARM Cortex-M # -# combine all the soruces... +# combine all the sources... C_SRCS += $(QP_SRCS) ASM_SRCS += $(QP_ASMS) diff --git a/examples/arm-cm/blinky_nucleo-c031c6/qv/gnu/README.txt b/examples/arm-cm/blinky_nucleo-c031c6/qv/gnu/README.txt new file mode 100644 index 00000000..c3e5015c --- /dev/null +++ b/examples/arm-cm/blinky_nucleo-c031c6/qv/gnu/README.txt @@ -0,0 +1,92 @@ +About this Example +================== +This example can be built in two different ways: +- from the command prompt with the provided Makefile. +- from the Atollic TRUEStudio-ST32 with the provided project. + + +The Makefile +============ +The provided Makefile should be easy to adapt for your own projects. +It contains three build configurations: Debug (default), Release, and +Spy. + +Also, the Makefile has been specifically designed to work as an external +Makefile with the Eclipse CDT. + +The various build configurations are built as follows: + +make +make CONF=rel +make CONF=spy + +make clean +make CONF=rel clean +make CONF=spy clean + +*** +NOTE: +The installation folder of the GNU-ARM toolset on YOUR machine needs +to be adjusted in the provided Makefile, by editing the symbol: GNU_ARM. +As described in the comment for this symbol, the GNU-ARM toolset is taken +from: http://gnutoolchains.com/arm-eabi + +It is highly recommended to use the same GNU-ARM distribution, especially +for ARM Cortex-M projects, due to the support for the hardware FPU +(float-abi=hard). +*** + + +Selecting QK Exception +====================== +The QK kernel needs a dedicated exception to return to the thread +context after preemption. The default is to use the NMI exception +for that purpose. However, in case NMI is needed for some other +purpose, the QK port allows you to select a any, otherwise unused +IRQ for that purpose. To choose a given IRQ, you need to define +the macros QK_USE_IRQ_NUM and QK_USE_IRQ_HANDLER. These macros can +be provided on the command-line to the compiler. + +For example, (see the vector table), you can define the QK IRQ +as follows: + +QK_USE_IRQ_HANDLER=Reserved31_IRQHandler +QK_USE_IRQ_NUM=31 + + +Adjusting Stack and Heap Sizes +============================== +The stack and heap sizes are determined in this project by the GCC linker +script (.ld file), which provides a template of the recommended GCC linker +script for QP applications. + + +Startup Code +============ +The startup code for the STM32C0xx MCU used in this project is +located in the "3rd_party" folder in the following location: + +3rd_party\nucleo-c031c6\gnu\startup_stm32c031xx.c + +The file startup_stm32c031xx.c provides a template of the recommended +startup for QP applications and should be easily customizable for other +ARM Cortex-M microcontrollers. + +The startup file typically does not need to be modified or adapted for +applications. It calls the assert_failed() function, which must be +defined in the application to customize it for the application-specific +error-handling policy. + + +Adjusting the CPU Clock Speed +============================= +The current setting is to run at 12MHz from the MSI (internal oscillator), +but the CPU clock speed can be modified. + +*** +NOTE: +The NUCLEO boards have a wide range of possible clock selections, depending +on the solder bridge configuration. Please see Chapter 5.7 "OSC clock" in +the STM32 NUCLEO Boards User Manual (ST document UM1724) for more information. +*** + diff --git a/examples/arm-cm/dpp_efm32-slstk3401a/README.md b/examples/arm-cm/dpp_efm32-slstk3401a/README.md index 6ad849a4..c31c9d69 100644 --- a/examples/arm-cm/dpp_efm32-slstk3401a/README.md +++ b/examples/arm-cm/dpp_efm32-slstk3401a/README.md @@ -67,7 +67,7 @@ examples\arm-cm\dpp_efm32-slstk3401a | ``` -# Builing the example +# Building the example ### GNU/ARM - open terminal window diff --git a/examples/arm-cm/dpp_efm32-slstk3401a/dpp.qm b/examples/arm-cm/dpp_efm32-slstk3401a/dpp.qm index ac9f2bc9..b2b8aea4 100644 --- a/examples/arm-cm/dpp_efm32-slstk3401a/dpp.qm +++ b/examples/arm-cm/dpp_efm32-slstk3401a/dpp.qm @@ -257,7 +257,7 @@ for (uint8_t n = 0U; n < N_PHILO; ++n) { - // give permissions to eat... + // give permissions to eat... for (uint8_t n = 0U; n < N_PHILO; ++n) { if (me->isHungry[n] && (me->fork[left(n)] == FREE) diff --git a/examples/arm-cm/dpp_efm32-slstk3401a/qk/bsp.c b/examples/arm-cm/dpp_efm32-slstk3401a/qk/bsp.c index 33925932..67a153d7 100644 --- a/examples/arm-cm/dpp_efm32-slstk3401a/qk/bsp.c +++ b/examples/arm-cm/dpp_efm32-slstk3401a/qk/bsp.c @@ -484,7 +484,7 @@ QSTimeCtr QS_onGetTime(void) { // NOTE: invoked with interrupts DISABLED if ((SysTick->CTRL & SysTick_CTRL_COUNTFLAG_Msk) == 0U) { // not set? return QS_tickTime_ - (QSTimeCtr)SysTick->VAL; } - else { // the rollover occured, but the SysTick_ISR did not run yet + else { // the rollover occurred, but the SysTick_ISR did not run yet return QS_tickTime_ + QS_tickPeriod_ - (QSTimeCtr)SysTick->VAL; } } diff --git a/examples/arm-cm/dpp_efm32-slstk3401a/qk/gnu/Makefile b/examples/arm-cm/dpp_efm32-slstk3401a/qk/gnu/Makefile index 6532d3ff..b5ed4064 100644 --- a/examples/arm-cm/dpp_efm32-slstk3401a/qk/gnu/Makefile +++ b/examples/arm-cm/dpp_efm32-slstk3401a/qk/gnu/Makefile @@ -57,7 +57,7 @@ PROJECT := dpp-qk # project directories # -# location of the QP/C framework (if not provided in an environemnt var.) +# location of the QP/C framework (if not provided in an environment var.) ifeq ($(QPC),) QPC := ../../../../.. endif @@ -183,7 +183,7 @@ RM := rm # build options for various configurations for ARM Cortex-M # -# combine all the soruces... +# combine all the sources... C_SRCS += $(QP_SRCS) ASM_SRCS += $(QP_ASMS) diff --git a/examples/arm-cm/dpp_efm32-slstk3401a/qk/gnu/README.txt b/examples/arm-cm/dpp_efm32-slstk3401a/qk/gnu/README.txt index 854a894d..e016d814 100644 --- a/examples/arm-cm/dpp_efm32-slstk3401a/qk/gnu/README.txt +++ b/examples/arm-cm/dpp_efm32-slstk3401a/qk/gnu/README.txt @@ -31,7 +31,7 @@ to be adjusted in the provided Makefile, by editing the symbol: GNU_ARM. As described in the comment for this symbol, the GNU-ARM toolset is taken from: http://gnutoolchains.com/arm-eabi -It is highly recommened to use the same GNU-ARM distribution, especially +It is highly recommended to use the same GNU-ARM distribution, especially for ARM Cortex-M4F projects, due to the support for the hardware FPU (float-abi=hard). *** diff --git a/examples/arm-cm/dpp_efm32-slstk3401a/qv/bsp.c b/examples/arm-cm/dpp_efm32-slstk3401a/qv/bsp.c index 9d464c2d..b3977226 100644 --- a/examples/arm-cm/dpp_efm32-slstk3401a/qv/bsp.c +++ b/examples/arm-cm/dpp_efm32-slstk3401a/qv/bsp.c @@ -478,7 +478,7 @@ QSTimeCtr QS_onGetTime(void) { // NOTE: invoked with interrupts DISABLED if ((SysTick->CTRL & SysTick_CTRL_COUNTFLAG_Msk) == 0U) { // not set? return QS_tickTime_ - (QSTimeCtr)SysTick->VAL; } - else { // the rollover occured, but the SysTick_ISR did not run yet + else { // the rollover occurred, but the SysTick_ISR did not run yet return QS_tickTime_ + QS_tickPeriod_ - (QSTimeCtr)SysTick->VAL; } } diff --git a/examples/arm-cm/dpp_efm32-slstk3401a/qv/gnu/Makefile b/examples/arm-cm/dpp_efm32-slstk3401a/qv/gnu/Makefile index cfd5fe9e..dc96c749 100644 --- a/examples/arm-cm/dpp_efm32-slstk3401a/qv/gnu/Makefile +++ b/examples/arm-cm/dpp_efm32-slstk3401a/qv/gnu/Makefile @@ -57,7 +57,7 @@ PROJECT := dpp-qv # project directories # -# location of the QP/C framework (if not provided in an environemnt var.) +# location of the QP/C framework (if not provided in an environment var.) ifeq ($(QPC),) QPC := ../../../../.. endif @@ -183,7 +183,7 @@ RM := rm # build options for various configurations for ARM Cortex-M # -# combine all the soruces... +# combine all the sources... C_SRCS += $(QP_SRCS) ASM_SRCS += $(QP_ASMS) diff --git a/examples/arm-cm/dpp_efm32-slstk3401a/qv/gnu/README.txt b/examples/arm-cm/dpp_efm32-slstk3401a/qv/gnu/README.txt index 35b38dda..c44c609e 100644 --- a/examples/arm-cm/dpp_efm32-slstk3401a/qv/gnu/README.txt +++ b/examples/arm-cm/dpp_efm32-slstk3401a/qv/gnu/README.txt @@ -31,7 +31,7 @@ to be adjusted in the provided Makefile, by editing the symbol: GNU_ARM. As described in the comment for this symbol, the GNU-ARM toolset is taken from: http://gnutoolchains.com/arm-eabi -It is highly recommened to use the same GNU-ARM distribution, especially +It is highly recommended to use the same GNU-ARM distribution, especially for ARM Cortex-M4F projects, due to the support for the hardware FPU (float-abi=hard). *** diff --git a/examples/arm-cm/dpp_efm32-slstk3401a/qxk/bsp.c b/examples/arm-cm/dpp_efm32-slstk3401a/qxk/bsp.c index 3072eb52..d04d90e9 100644 --- a/examples/arm-cm/dpp_efm32-slstk3401a/qxk/bsp.c +++ b/examples/arm-cm/dpp_efm32-slstk3401a/qxk/bsp.c @@ -501,7 +501,7 @@ QSTimeCtr QS_onGetTime(void) { // NOTE: invoked with interrupts DISABLED if ((SysTick->CTRL & SysTick_CTRL_COUNTFLAG_Msk) == 0) { // not set? return QS_tickTime_ - (QSTimeCtr)SysTick->VAL; } - else { // the rollover occured, but the SysTick_ISR did not run yet + else { // the rollover occurred, but the SysTick_ISR did not run yet return QS_tickTime_ + QS_tickPeriod_ - (QSTimeCtr)SysTick->VAL; } } diff --git a/examples/arm-cm/dpp_efm32-slstk3401a/qxk/gnu/Makefile b/examples/arm-cm/dpp_efm32-slstk3401a/qxk/gnu/Makefile index bb7d1d25..fa0c4a1b 100644 --- a/examples/arm-cm/dpp_efm32-slstk3401a/qxk/gnu/Makefile +++ b/examples/arm-cm/dpp_efm32-slstk3401a/qxk/gnu/Makefile @@ -57,7 +57,7 @@ PROJECT := dpp-qxk # project directories # -# location of the QP/C framework (if not provided in an environemnt var.) +# location of the QP/C framework (if not provided in an environment var.) ifeq ($(QPC),) QPC := ../../../../.. endif @@ -188,7 +188,7 @@ RM := rm # build options for various configurations for ARM Cortex-M # -# combine all the soruces... +# combine all the sources... C_SRCS += $(QP_SRCS) ASM_SRCS += $(QP_ASMS) diff --git a/examples/arm-cm/dpp_efm32-slstk3401a/qxk/gnu/README.txt b/examples/arm-cm/dpp_efm32-slstk3401a/qxk/gnu/README.txt index 6bafe355..db2fad56 100644 --- a/examples/arm-cm/dpp_efm32-slstk3401a/qxk/gnu/README.txt +++ b/examples/arm-cm/dpp_efm32-slstk3401a/qxk/gnu/README.txt @@ -31,7 +31,7 @@ to be adjusted in the provided Makefile, by editing the symbol: GNU_ARM. As described in the comment for this symbol, the GNU-ARM toolset is taken from: http://gnutoolchains.com/arm-eabi -It is highly recommened to use the same GNU-ARM distribution, especially +It is highly recommended to use the same GNU-ARM distribution, especially for ARM Cortex-M4F projects, due to the support for the hardware FPU (float-abi=hard). *** diff --git a/examples/arm-cm/dpp_ek-tm4c123gxl/README.md b/examples/arm-cm/dpp_ek-tm4c123gxl/README.md index a2a6a4a6..9990369b 100644 --- a/examples/arm-cm/dpp_ek-tm4c123gxl/README.md +++ b/examples/arm-cm/dpp_ek-tm4c123gxl/README.md @@ -67,7 +67,7 @@ examples\arm-cm\dpp_ek-tm4c123gxl | ``` -# Builing the example +# Building the example ### GNU/ARM - open terminal window diff --git a/examples/arm-cm/dpp_ek-tm4c123gxl/dpp.qm b/examples/arm-cm/dpp_ek-tm4c123gxl/dpp.qm index ac9f2bc9..b2b8aea4 100644 --- a/examples/arm-cm/dpp_ek-tm4c123gxl/dpp.qm +++ b/examples/arm-cm/dpp_ek-tm4c123gxl/dpp.qm @@ -257,7 +257,7 @@ for (uint8_t n = 0U; n < N_PHILO; ++n) { - // give permissions to eat... + // give permissions to eat... for (uint8_t n = 0U; n < N_PHILO; ++n) { if (me->isHungry[n] && (me->fork[left(n)] == FREE) diff --git a/examples/arm-cm/dpp_ek-tm4c123gxl/lint-plus/README.txt b/examples/arm-cm/dpp_ek-tm4c123gxl/lint-plus/README.txt index d4bb2bbf..4ed3fcad 100644 --- a/examples/arm-cm/dpp_ek-tm4c123gxl/lint-plus/README.txt +++ b/examples/arm-cm/dpp_ek-tm4c123gxl/lint-plus/README.txt @@ -7,7 +7,7 @@ To "lint" the application, invoke the batch "lin.bat" without parameters. Optionally, you can supply the parameter -dQ_SPY to include the QS instrumentation in the "linting" process. -The output from the "linting" is saved in the fle "lin_out.log". +The output from the "linting" is saved in the file "lin_out.log". *** NOTE: You need to adjust the symbol PCLP at the top of the lin.bat diff --git a/examples/arm-cm/dpp_ek-tm4c123gxl/qk/gnu/.ccsproject b/examples/arm-cm/dpp_ek-tm4c123gxl/qk/gnu/.ccsproject index 0c19207c..1adbafc4 100644 --- a/examples/arm-cm/dpp_ek-tm4c123gxl/qk/gnu/.ccsproject +++ b/examples/arm-cm/dpp_ek-tm4c123gxl/qk/gnu/.ccsproject @@ -1,17 +1,7 @@ - - - - - - - - - - diff --git a/examples/arm-cm/dpp_ek-tm4c123gxl/qk/gnu/.cproject b/examples/arm-cm/dpp_ek-tm4c123gxl/qk/gnu/.cproject index 69187d2a..c2e16ff5 100644 --- a/examples/arm-cm/dpp_ek-tm4c123gxl/qk/gnu/.cproject +++ b/examples/arm-cm/dpp_ek-tm4c123gxl/qk/gnu/.cproject @@ -15,32 +15,41 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -187,8 +113,8 @@ - - @@ -259,6 +198,106 @@ + + + + + + + + + + + + + + + + + + + + + + + + + @@ -274,4 +313,5 @@ - + + \ No newline at end of file diff --git a/examples/arm-cm/dpp_ek-tm4c123gxl/qk/gnu/.project b/examples/arm-cm/dpp_ek-tm4c123gxl/qk/gnu/.project index 678a1806..19339227 100644 --- a/examples/arm-cm/dpp_ek-tm4c123gxl/qk/gnu/.project +++ b/examples/arm-cm/dpp_ek-tm4c123gxl/qk/gnu/.project @@ -73,7 +73,7 @@ main.c 1 - PARENT-1-PROJECT_LOC/main.c + PARENT-2-PROJECT_LOC/main.c philo.c @@ -81,25 +81,15 @@ PARENT-2-PROJECT_LOC/philo.c - qstamp.c + qp_config.h 1 - PARENT-5-PROJECT_LOC/src/qs/qstamp.c - - - rom.h - 1 - PARENT-5-PROJECT_LOC/3rd_party/ek-tm4c123gxl/rom.h + PARENT-2-PROJECT_LOC/qp_config.h startup_TM4C123GH6PM.c 1 PARENT-5-PROJECT_LOC/3rd_party/ek-tm4c123gxl/gnu/startup_TM4C123GH6PM.c - - sysctl.h - 1 - PARENT-5-PROJECT_LOC/3rd_party/ek-tm4c123gxl/sysctl.h - system_TM4C123GH6PM.c 1 diff --git a/examples/arm-cm/dpp_ek-tm4c123gxl/qk/gnu/Makefile b/examples/arm-cm/dpp_ek-tm4c123gxl/qk/gnu/Makefile index aa3c97ea..ebcc1f6d 100644 --- a/examples/arm-cm/dpp_ek-tm4c123gxl/qk/gnu/Makefile +++ b/examples/arm-cm/dpp_ek-tm4c123gxl/qk/gnu/Makefile @@ -1,13 +1,13 @@ ############################################################################## # Product: Makefile for QP/C on EK-TM4C123GXL, QK kernel, GNU-ARM -# Last Updated for Version: 7.3.0 -# Date of the Last Update: 2023-09-02 +# Last Updated for Version: 7.3.3 +# Date of the Last Update: 2024-01-29 # # Q u a n t u m L e a P s # ------------------------ # Modern Embedded Software # -# Copyright (C) 2005 Quantum Leaps, LLC. All rights reserved. +# Copyright (C) 2005 Quantum Leaps, LLC. # # This program is open source software: you can redistribute it and/or # modify it under the terms of the GNU General Public License as published @@ -56,7 +56,7 @@ PROJECT := dpp-qk # project directories # -# location of the QP/C framework (if not provided in an environemnt var.) +# location of the QP/C framework (if not provided in an environment var.) ifeq ($(QPC),) QPC := ../../../../.. endif @@ -141,8 +141,8 @@ DEFINES := -DQP_CONFIG # FLOAT_ABI: [ | soft | softfp | hard] # ARM_CPU := -mcpu=cortex-m4 -ARM_FPU := -mfpu=vfp -FLOAT_ABI := -mfloat-abi=softfp +ARM_FPU := -mfpu=fpv4-sp-d16 +FLOAT_ABI := -mfloat-abi=hard #----------------------------------------------------------------------------- # GNU-ARM toolset (NOTE: You need to adjust to your machine) @@ -163,6 +163,7 @@ AS := $(GNU_ARM)/bin/arm-none-eabi-as LINK := $(GNU_ARM)/bin/arm-none-eabi-gcc BIN := $(GNU_ARM)/bin/arm-none-eabi-objcopy + ############################################################################## # Typically you should not need to change anything below this line @@ -176,7 +177,7 @@ RM := rm # build options for various configurations for ARM Cortex-M # -# combine all the soruces... +# combine all the sources... C_SRCS += $(QP_SRCS) ASM_SRCS += $(QP_ASMS) @@ -231,6 +232,7 @@ LINKFLAGS = -T$(LD_SCRIPT) $(ARM_CPU) $(ARM_FPU) $(FLOAT_ABI) -mthumb \ -specs=nosys.specs -specs=nano.specs \ -Wl,-Map,$(BIN_DIR)/$(OUTPUT).map,--cref,--gc-sections $(LIB_DIRS) + ASM_OBJS := $(patsubst %.s,%.o, $(notdir $(ASM_SRCS))) C_OBJS := $(patsubst %.c,%.o, $(notdir $(C_SRCS))) CPP_OBJS := $(patsubst %.cpp,%.o,$(notdir $(CPP_SRCS))) @@ -252,14 +254,8 @@ endif # rules # -.PHONY : run norun flash - -ifeq ($(MAKECMDGOALS),norun) -all : $(TARGET_BIN) -norun : all -else -all : $(TARGET_BIN) run -endif +all: $(TARGET_BIN) +#all: $(TARGET_ELF) $(TARGET_BIN): $(TARGET_ELF) $(BIN) -O binary $< $@ diff --git a/examples/arm-cm/dpp_ek-tm4c123gxl/qk/gnu/README.txt b/examples/arm-cm/dpp_ek-tm4c123gxl/qk/gnu/README.txt index 3ba6f924..ab8e99e8 100644 --- a/examples/arm-cm/dpp_ek-tm4c123gxl/qk/gnu/README.txt +++ b/examples/arm-cm/dpp_ek-tm4c123gxl/qk/gnu/README.txt @@ -11,9 +11,6 @@ The provided Makefile should be easy to adapt for your own projects. It contains three build configurations: Debug (default), Release, and Spy. -Also, the Makefile has been specifically designed to work as an external -Makefile with the Eclipse CDT. - The various build configurations are built as follows: make @@ -31,11 +28,22 @@ to be adjusted in the provided Makefile, by editing the symbol: GNU_ARM. As described in the comment for this symbol, the GNU-ARM toolset is taken from: http://gnutoolchains.com/arm-eabi -It is highly recommened to use the same GNU-ARM distribution, especially +It is highly recommended to use the same GNU-ARM distribution, especially for ARM Cortex-M4F projects, due to the support for the hardware FPU (float-abi=hard). *** +The CCS Project +=============== +This directory contains also the CCS project which can be imported to the +CCS (Code Composer Studio) IDE based on Eclipse. To import the project, +use the section "General -> Existing Project into Workspace" and select this +directory as the "root directory". For example, the "Select root directory" +might be: C:\qp-dev\qpc\examples\arm-cm\dpp_ek-tm4c123gxl\qxk\gnu + +Once you press "Browse", the project (dpp-qk, dpp-qv, or dpp-qxk) should +become visible. Click on "Select All" and then "Finish". + Adjusting Stack and Heap Sizes ============================== diff --git a/examples/arm-cm/dpp_ek-tm4c123gxl/qp_config.h b/examples/arm-cm/dpp_ek-tm4c123gxl/qp_config.h index 38ea5113..edd4854f 100644 --- a/examples/arm-cm/dpp_ek-tm4c123gxl/qp_config.h +++ b/examples/arm-cm/dpp_ek-tm4c123gxl/qp_config.h @@ -113,7 +113,7 @@ // Maximum # event pools (QF_MAX_EPOOL) // <0=>0 no event pools -// <1=>1 <2=>2 <3=>3 (deafult) <4=>4 <5=>5 +// <1=>1 <2=>2 <3=>3 (default) <4=>4 <5=>5 // <6=>6 <7=>7 <8=>8 <9=>9 <10=>10 <11=>11 // <12=>12 <13=>13 <14=>14 <15=>15 // Maximum # Event Pools <1..15> diff --git a/examples/arm-cm/dpp_ek-tm4c123gxl/qv/gnu/.ccsproject b/examples/arm-cm/dpp_ek-tm4c123gxl/qv/gnu/.ccsproject index 0c19207c..1adbafc4 100644 --- a/examples/arm-cm/dpp_ek-tm4c123gxl/qv/gnu/.ccsproject +++ b/examples/arm-cm/dpp_ek-tm4c123gxl/qv/gnu/.ccsproject @@ -1,17 +1,7 @@ - - - - - - - - - - diff --git a/examples/arm-cm/dpp_ek-tm4c123gxl/qv/gnu/.cproject b/examples/arm-cm/dpp_ek-tm4c123gxl/qv/gnu/.cproject index 99f99049..a4055f29 100644 --- a/examples/arm-cm/dpp_ek-tm4c123gxl/qv/gnu/.cproject +++ b/examples/arm-cm/dpp_ek-tm4c123gxl/qv/gnu/.cproject @@ -15,72 +15,81 @@ - - @@ -90,8 +99,8 @@ - - + + @@ -102,166 +111,84 @@ - - - - - - - - - - - - - - - - - - - - - - - @@ -271,10 +198,110 @@ + + + + + + + + + + + + + + + + + + + + + + + + + - + diff --git a/examples/arm-cm/dpp_ek-tm4c123gxl/qv/gnu/.project b/examples/arm-cm/dpp_ek-tm4c123gxl/qv/gnu/.project index 54ab2706..dec8cb77 100644 --- a/examples/arm-cm/dpp_ek-tm4c123gxl/qv/gnu/.project +++ b/examples/arm-cm/dpp_ek-tm4c123gxl/qv/gnu/.project @@ -1,6 +1,6 @@ - dpp-qv + dpp-qv @@ -25,6 +25,11 @@ org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + QV + 2 + PARENT-5-PROJECT_LOC/src/qv + QP 2 @@ -33,18 +38,13 @@ QP_port 2 - PARENT-5-PROJECT_LOC/ports/arm-cm/qv/gnu + PARENT-5-PROJECT_LOC/ports/arm-cm/qv/gnu QS 2 PARENT-5-PROJECT_LOC/src/qs - - QV - 2 - PARENT-5-PROJECT_LOC/src/qv - TM4C123GH6PM.h 1 @@ -73,7 +73,7 @@ main.c 1 - PARENT-1-PROJECT_LOC/main.c + PARENT-2-PROJECT_LOC/main.c philo.c @@ -81,25 +81,15 @@ PARENT-2-PROJECT_LOC/philo.c - qstamp.c + qp_config.h 1 - PARENT-5-PROJECT_LOC/src/qs/qstamp.c - - - rom.h - 1 - PARENT-5-PROJECT_LOC/3rd_party/ek-tm4c123gxl/rom.h + PARENT-2-PROJECT_LOC/qp_config.h startup_TM4C123GH6PM.c 1 PARENT-5-PROJECT_LOC/3rd_party/ek-tm4c123gxl/gnu/startup_TM4C123GH6PM.c - - sysctl.h - 1 - PARENT-5-PROJECT_LOC/3rd_party/ek-tm4c123gxl/sysctl.h - system_TM4C123GH6PM.c 1 diff --git a/examples/arm-cm/dpp_ek-tm4c123gxl/qv/gnu/Makefile b/examples/arm-cm/dpp_ek-tm4c123gxl/qv/gnu/Makefile index 15d7c6be..99586d18 100644 --- a/examples/arm-cm/dpp_ek-tm4c123gxl/qv/gnu/Makefile +++ b/examples/arm-cm/dpp_ek-tm4c123gxl/qv/gnu/Makefile @@ -56,7 +56,7 @@ PROJECT := dpp-qv # project directories # -# location of the QP/C framework (if not provided in an environemnt var.) +# location of the QP/C framework (if not provided in an environment var.) ifeq ($(QPC),) QPC := ../../../../.. endif @@ -176,7 +176,7 @@ RM := rm # build options for various configurations for ARM Cortex-M # -# combine all the soruces... +# combine all the sources... C_SRCS += $(QP_SRCS) ASM_SRCS += $(QP_ASMS) diff --git a/examples/arm-cm/dpp_ek-tm4c123gxl/qv/gnu/README.txt b/examples/arm-cm/dpp_ek-tm4c123gxl/qv/gnu/README.txt index 3ba6f924..ab8e99e8 100644 --- a/examples/arm-cm/dpp_ek-tm4c123gxl/qv/gnu/README.txt +++ b/examples/arm-cm/dpp_ek-tm4c123gxl/qv/gnu/README.txt @@ -11,9 +11,6 @@ The provided Makefile should be easy to adapt for your own projects. It contains three build configurations: Debug (default), Release, and Spy. -Also, the Makefile has been specifically designed to work as an external -Makefile with the Eclipse CDT. - The various build configurations are built as follows: make @@ -31,11 +28,22 @@ to be adjusted in the provided Makefile, by editing the symbol: GNU_ARM. As described in the comment for this symbol, the GNU-ARM toolset is taken from: http://gnutoolchains.com/arm-eabi -It is highly recommened to use the same GNU-ARM distribution, especially +It is highly recommended to use the same GNU-ARM distribution, especially for ARM Cortex-M4F projects, due to the support for the hardware FPU (float-abi=hard). *** +The CCS Project +=============== +This directory contains also the CCS project which can be imported to the +CCS (Code Composer Studio) IDE based on Eclipse. To import the project, +use the section "General -> Existing Project into Workspace" and select this +directory as the "root directory". For example, the "Select root directory" +might be: C:\qp-dev\qpc\examples\arm-cm\dpp_ek-tm4c123gxl\qxk\gnu + +Once you press "Browse", the project (dpp-qk, dpp-qv, or dpp-qxk) should +become visible. Click on "Select All" and then "Finish". + Adjusting Stack and Heap Sizes ============================== diff --git a/examples/arm-cm/dpp_ek-tm4c123gxl/qxk/gnu/.ccsproject b/examples/arm-cm/dpp_ek-tm4c123gxl/qxk/gnu/.ccsproject index 0c19207c..1adbafc4 100644 --- a/examples/arm-cm/dpp_ek-tm4c123gxl/qxk/gnu/.ccsproject +++ b/examples/arm-cm/dpp_ek-tm4c123gxl/qxk/gnu/.ccsproject @@ -1,17 +1,7 @@ - - - - - - - - - - diff --git a/examples/arm-cm/dpp_ek-tm4c123gxl/qxk/gnu/.cproject b/examples/arm-cm/dpp_ek-tm4c123gxl/qxk/gnu/.cproject index 05053a3a..26a2237d 100644 --- a/examples/arm-cm/dpp_ek-tm4c123gxl/qxk/gnu/.cproject +++ b/examples/arm-cm/dpp_ek-tm4c123gxl/qxk/gnu/.cproject @@ -15,155 +15,81 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -187,8 +113,8 @@ - - @@ -259,10 +198,110 @@ + + + + + + + + + + + + + + + + + + + + + + + + + - + @@ -274,4 +313,5 @@ + diff --git a/examples/arm-cm/dpp_ek-tm4c123gxl/qxk/gnu/.project b/examples/arm-cm/dpp_ek-tm4c123gxl/qxk/gnu/.project index 42070f85..6ae838ee 100644 --- a/examples/arm-cm/dpp_ek-tm4c123gxl/qxk/gnu/.project +++ b/examples/arm-cm/dpp_ek-tm4c123gxl/qxk/gnu/.project @@ -73,7 +73,7 @@ main.c 1 - PARENT-1-PROJECT_LOC/main.c + PARENT-2-PROJECT_LOC/main.c philo.c @@ -81,25 +81,15 @@ PARENT-2-PROJECT_LOC/philo.c - qstamp.c + qp_config.h 1 - PARENT-5-PROJECT_LOC/src/qs/qstamp.c - - - rom.h - 1 - PARENT-5-PROJECT_LOC/3rd_party/ek-tm4c123gxl/rom.h + PARENT-2-PROJECT_LOC/qp_config.h startup_TM4C123GH6PM.c 1 PARENT-5-PROJECT_LOC/3rd_party/ek-tm4c123gxl/gnu/startup_TM4C123GH6PM.c - - sysctl.h - 1 - PARENT-5-PROJECT_LOC/3rd_party/ek-tm4c123gxl/sysctl.h - system_TM4C123GH6PM.c 1 @@ -116,9 +106,14 @@ PARENT-2-PROJECT_LOC/table.c - test.c + xthread1.c 1 - PARENT-1-PROJECT_LOC/test.c + PARENT-1-PROJECT_LOC/xthread1.c + + + xthread2.c + 1 + PARENT-1-PROJECT_LOC/xthread2.c diff --git a/examples/arm-cm/dpp_ek-tm4c123gxl/qxk/gnu/Makefile b/examples/arm-cm/dpp_ek-tm4c123gxl/qxk/gnu/Makefile index 8cfeef08..e7193d7a 100644 --- a/examples/arm-cm/dpp_ek-tm4c123gxl/qxk/gnu/Makefile +++ b/examples/arm-cm/dpp_ek-tm4c123gxl/qxk/gnu/Makefile @@ -56,7 +56,7 @@ PROJECT := dpp-qxk # project directories # -# location of the QP/C framework (if not provided in an environemnt var.) +# location of the QP/C framework (if not provided in an environment var.) ifeq ($(QPC),) QPC := ../../../../.. endif @@ -181,7 +181,7 @@ RM := rm # build options for various configurations for ARM Cortex-M # -# combine all the soruces... +# combine all the sources... C_SRCS += $(QP_SRCS) ASM_SRCS += $(QP_ASMS) diff --git a/examples/arm-cm/dpp_ek-tm4c123gxl/qxk/gnu/Makefile-UNSAFE b/examples/arm-cm/dpp_ek-tm4c123gxl/qxk/gnu/Makefile-UNSAFE index 04cdbaa2..3e4ebf38 100644 --- a/examples/arm-cm/dpp_ek-tm4c123gxl/qxk/gnu/Makefile-UNSAFE +++ b/examples/arm-cm/dpp_ek-tm4c123gxl/qxk/gnu/Makefile-UNSAFE @@ -56,7 +56,7 @@ PROJECT := dpp-qxk # project directories # -# location of the QP/C framework (if not provided in an environemnt var.) +# location of the QP/C framework (if not provided in an environment var.) ifeq ($(QPC),) QPC := ../../../../.. endif @@ -182,7 +182,7 @@ RM := rm # build options for various configurations for ARM Cortex-M # -# combine all the soruces... +# combine all the sources... C_SRCS += $(QP_SRCS) ASM_SRCS += $(QP_ASMS) diff --git a/examples/arm-cm/dpp_ek-tm4c123gxl/qxk/gnu/README.txt b/examples/arm-cm/dpp_ek-tm4c123gxl/qxk/gnu/README.txt index 3ba6f924..ab8e99e8 100644 --- a/examples/arm-cm/dpp_ek-tm4c123gxl/qxk/gnu/README.txt +++ b/examples/arm-cm/dpp_ek-tm4c123gxl/qxk/gnu/README.txt @@ -11,9 +11,6 @@ The provided Makefile should be easy to adapt for your own projects. It contains three build configurations: Debug (default), Release, and Spy. -Also, the Makefile has been specifically designed to work as an external -Makefile with the Eclipse CDT. - The various build configurations are built as follows: make @@ -31,11 +28,22 @@ to be adjusted in the provided Makefile, by editing the symbol: GNU_ARM. As described in the comment for this symbol, the GNU-ARM toolset is taken from: http://gnutoolchains.com/arm-eabi -It is highly recommened to use the same GNU-ARM distribution, especially +It is highly recommended to use the same GNU-ARM distribution, especially for ARM Cortex-M4F projects, due to the support for the hardware FPU (float-abi=hard). *** +The CCS Project +=============== +This directory contains also the CCS project which can be imported to the +CCS (Code Composer Studio) IDE based on Eclipse. To import the project, +use the section "General -> Existing Project into Workspace" and select this +directory as the "root directory". For example, the "Select root directory" +might be: C:\qp-dev\qpc\examples\arm-cm\dpp_ek-tm4c123gxl\qxk\gnu + +Once you press "Browse", the project (dpp-qk, dpp-qv, or dpp-qxk) should +become visible. Click on "Select All" and then "Finish". + Adjusting Stack and Heap Sizes ============================== diff --git a/examples/arm-cm/dpp_ek-tm4c123gxl_mpu/dpp_mpu.qm b/examples/arm-cm/dpp_ek-tm4c123gxl_mpu/dpp_mpu.qm index 1b2c85ad..b47f94d0 100644 --- a/examples/arm-cm/dpp_ek-tm4c123gxl_mpu/dpp_mpu.qm +++ b/examples/arm-cm/dpp_ek-tm4c123gxl_mpu/dpp_mpu.qm @@ -319,7 +319,7 @@ for (uint8_t n = 0U; n < N_PHILO; ++n) { - // give permissions to eat... + // give permissions to eat... for (uint8_t n = 0U; n < N_PHILO; ++n) { if (me->isHungry[n] && (me->fork[left(n)] == FREE) diff --git a/examples/arm-cm/dpp_ek-tm4c123gxl_mpu/qk/gnu/Makefile b/examples/arm-cm/dpp_ek-tm4c123gxl_mpu/qk/gnu/Makefile index b1138c00..288c66d1 100644 --- a/examples/arm-cm/dpp_ek-tm4c123gxl_mpu/qk/gnu/Makefile +++ b/examples/arm-cm/dpp_ek-tm4c123gxl_mpu/qk/gnu/Makefile @@ -56,7 +56,7 @@ PROJECT := dpp-qk # project directories # -# location of the QP/C framework (if not provided in an environemnt var.) +# location of the QP/C framework (if not provided in an environment var.) ifeq ($(QPC),) QPC := ../../../../.. endif @@ -177,7 +177,7 @@ RM := rm # build options for various configurations for ARM Cortex-M # -# combine all the soruces... +# combine all the sources... C_SRCS += $(QP_SRCS) ASM_SRCS += $(QP_ASMS) diff --git a/examples/arm-cm/dpp_ek-tm4c123gxl_mpu/qv/gnu/Makefile b/examples/arm-cm/dpp_ek-tm4c123gxl_mpu/qv/gnu/Makefile index ab3dcdd6..95b72996 100644 --- a/examples/arm-cm/dpp_ek-tm4c123gxl_mpu/qv/gnu/Makefile +++ b/examples/arm-cm/dpp_ek-tm4c123gxl_mpu/qv/gnu/Makefile @@ -56,7 +56,7 @@ PROJECT := dpp-qv # project directories # -# location of the QP/C framework (if not provided in an environemnt var.) +# location of the QP/C framework (if not provided in an environment var.) ifeq ($(QPC),) QPC := ../../../../.. endif @@ -177,7 +177,7 @@ RM := rm # build options for various configurations for ARM Cortex-M # -# combine all the soruces... +# combine all the sources... C_SRCS += $(QP_SRCS) ASM_SRCS += $(QP_ASMS) diff --git a/examples/arm-cm/dpp_ek-tm4c123gxl_mpu/qxk/gnu/Makefile b/examples/arm-cm/dpp_ek-tm4c123gxl_mpu/qxk/gnu/Makefile index 20fda4e2..26043659 100644 --- a/examples/arm-cm/dpp_ek-tm4c123gxl_mpu/qxk/gnu/Makefile +++ b/examples/arm-cm/dpp_ek-tm4c123gxl_mpu/qxk/gnu/Makefile @@ -56,7 +56,7 @@ PROJECT := dpp-qxk # project directories # -# location of the QP/C framework (if not provided in an environemnt var.) +# location of the QP/C framework (if not provided in an environment var.) ifeq ($(QPC),) QPC := ../../../../.. endif @@ -182,7 +182,7 @@ RM := rm # build options for various configurations for ARM Cortex-M # -# combine all the soruces... +# combine all the sources... C_SRCS += $(QP_SRCS) ASM_SRCS += $(QP_ASMS) diff --git a/examples/arm-cm/dpp_mbed-lpc1768/dpp.qm b/examples/arm-cm/dpp_mbed-lpc1768/dpp.qm index ac9f2bc9..b2b8aea4 100644 --- a/examples/arm-cm/dpp_mbed-lpc1768/dpp.qm +++ b/examples/arm-cm/dpp_mbed-lpc1768/dpp.qm @@ -257,7 +257,7 @@ for (uint8_t n = 0U; n < N_PHILO; ++n) { - // give permissions to eat... + // give permissions to eat... for (uint8_t n = 0U; n < N_PHILO; ++n) { if (me->isHungry[n] && (me->fork[left(n)] == FREE) diff --git a/examples/arm-cm/dpp_mbed-lpc1768/qk/bsp.c b/examples/arm-cm/dpp_mbed-lpc1768/qk/bsp.c index a6d92f7a..ba73eca7 100644 --- a/examples/arm-cm/dpp_mbed-lpc1768/qk/bsp.c +++ b/examples/arm-cm/dpp_mbed-lpc1768/qk/bsp.c @@ -458,7 +458,7 @@ QSTimeCtr QS_onGetTime(void) { // NOTE: invoked with interrupts DISABLED if ((SysTick->CTRL & SysTick_CTRL_COUNTFLAG_Msk) == 0) { // not set? return QS_tickTime_ - (QSTimeCtr)SysTick->VAL; } - else { // the rollover occured, but the SysTick_ISR did not run yet + else { // the rollover occurred, but the SysTick_ISR did not run yet return QS_tickTime_ + QS_tickPeriod_ - (QSTimeCtr)SysTick->VAL; } } @@ -608,7 +608,7 @@ static void UART0_setBaudrate(uint32_t baud) { // // NOTE2: // The User LED is used to visualize the idle loop activity. The brightness -// of the LED is proportional to the frequency of invcations of the idle loop. +// of the LED is proportional to the frequency of invocations of the idle loop. // Please note that the LED is toggled with interrupts locked, so no interrupt // execution time contributes to the brightness of the User LED. // diff --git a/examples/arm-cm/dpp_mbed-lpc1768/qk/gnu/Makefile b/examples/arm-cm/dpp_mbed-lpc1768/qk/gnu/Makefile index 4fc31b5b..52dcb2fd 100644 --- a/examples/arm-cm/dpp_mbed-lpc1768/qk/gnu/Makefile +++ b/examples/arm-cm/dpp_mbed-lpc1768/qk/gnu/Makefile @@ -57,7 +57,7 @@ PROJECT := dpp-qk # project directories # -# location of the QP/C framework (if not provided in an environemnt var.) +# location of the QP/C framework (if not provided in an environment var.) ifeq ($(QPC),) QPC := ../../../../.. endif @@ -177,7 +177,7 @@ RM := rm # build options for various configurations for ARM Cortex-M # -# combine all the soruces... +# combine all the sources... C_SRCS += $(QP_SRCS) ASM_SRCS += $(QP_ASMS) diff --git a/examples/arm-cm/dpp_mbed-lpc1768/qv/bsp.c b/examples/arm-cm/dpp_mbed-lpc1768/qv/bsp.c index 9c965479..aa61b9f3 100644 --- a/examples/arm-cm/dpp_mbed-lpc1768/qv/bsp.c +++ b/examples/arm-cm/dpp_mbed-lpc1768/qv/bsp.c @@ -452,7 +452,7 @@ QSTimeCtr QS_onGetTime(void) { // NOTE: invoked with interrupts DISABLED if ((SysTick->CTRL & SysTick_CTRL_COUNTFLAG_Msk) == 0) { // not set? return QS_tickTime_ - (QSTimeCtr)SysTick->VAL; } - else { // the rollover occured, but the SysTick_ISR did not run yet + else { // the rollover occurred, but the SysTick_ISR did not run yet return QS_tickTime_ + QS_tickPeriod_ - (QSTimeCtr)SysTick->VAL; } } diff --git a/examples/arm-cm/dpp_mbed-lpc1768/qv/gnu/Makefile b/examples/arm-cm/dpp_mbed-lpc1768/qv/gnu/Makefile index a40ee04e..be2c3d10 100644 --- a/examples/arm-cm/dpp_mbed-lpc1768/qv/gnu/Makefile +++ b/examples/arm-cm/dpp_mbed-lpc1768/qv/gnu/Makefile @@ -57,7 +57,7 @@ PROJECT := dpp-qv # project directories # -# location of the QP/C framework (if not provided in an environemnt var.) +# location of the QP/C framework (if not provided in an environment var.) ifeq ($(QPC),) QPC := ../../../../.. endif @@ -177,7 +177,7 @@ RM := rm # build options for various configurations for ARM Cortex-M # -# combine all the soruces... +# combine all the sources... C_SRCS += $(QP_SRCS) ASM_SRCS += $(QP_ASMS) diff --git a/examples/arm-cm/dpp_mbed-lpc1768/qxk/bsp.c b/examples/arm-cm/dpp_mbed-lpc1768/qxk/bsp.c index 249f6940..4a4dbcb1 100644 --- a/examples/arm-cm/dpp_mbed-lpc1768/qxk/bsp.c +++ b/examples/arm-cm/dpp_mbed-lpc1768/qxk/bsp.c @@ -473,7 +473,7 @@ QSTimeCtr QS_onGetTime(void) { // NOTE: invoked with interrupts DISABLED if ((SysTick->CTRL & SysTick_CTRL_COUNTFLAG_Msk) == 0) { // not set? return QS_tickTime_ - (QSTimeCtr)SysTick->VAL; } - else { // the rollover occured, but the SysTick_ISR did not run yet + else { // the rollover occurred, but the SysTick_ISR did not run yet return QS_tickTime_ + QS_tickPeriod_ - (QSTimeCtr)SysTick->VAL; } } diff --git a/examples/arm-cm/dpp_mbed-lpc1768/qxk/gnu/Makefile b/examples/arm-cm/dpp_mbed-lpc1768/qxk/gnu/Makefile index 9b7a0f18..01a8f7c8 100644 --- a/examples/arm-cm/dpp_mbed-lpc1768/qxk/gnu/Makefile +++ b/examples/arm-cm/dpp_mbed-lpc1768/qxk/gnu/Makefile @@ -57,7 +57,7 @@ PROJECT := dpp-qxk # project directories # -# location of the QP/C framework (if not provided in an environemnt var.) +# location of the QP/C framework (if not provided in an environment var.) ifeq ($(QPC),) QPC := ../../../../.. endif @@ -184,7 +184,7 @@ RM := rm # build options for various configurations for ARM Cortex-M # -# combine all the soruces... +# combine all the sources... C_SRCS += $(QP_SRCS) ASM_SRCS += $(QP_ASMS) diff --git a/examples/arm-cm/dpp_nucleo-c031c6/dpp.qm b/examples/arm-cm/dpp_nucleo-c031c6/dpp.qm index ac9f2bc9..b2b8aea4 100644 --- a/examples/arm-cm/dpp_nucleo-c031c6/dpp.qm +++ b/examples/arm-cm/dpp_nucleo-c031c6/dpp.qm @@ -257,7 +257,7 @@ for (uint8_t n = 0U; n < N_PHILO; ++n) { - // give permissions to eat... + // give permissions to eat... for (uint8_t n = 0U; n < N_PHILO; ++n) { if (me->isHungry[n] && (me->fork[left(n)] == FREE) diff --git a/examples/arm-cm/dpp_nucleo-c031c6/qk/armclang/README.txt b/examples/arm-cm/dpp_nucleo-c031c6/qk/armclang/README.txt index 946a6967..93065fc2 100644 --- a/examples/arm-cm/dpp_nucleo-c031c6/qk/armclang/README.txt +++ b/examples/arm-cm/dpp_nucleo-c031c6/qk/armclang/README.txt @@ -23,7 +23,7 @@ command-line options for the ARM assembler (see the Asm tab in the "Options for Target" dialog box in uVision). Specifically, you should define symbols: Stack_Size=xxx Heap_Size=yyy, where xxx represents a numerical value of stack size and yyy the -numberical value of the heap size. +numerical value of the heap size. Selecting QK Exception diff --git a/examples/arm-cm/dpp_nucleo-c031c6/qk/bsp.c b/examples/arm-cm/dpp_nucleo-c031c6/qk/bsp.c index 6efbf26c..a369610d 100644 --- a/examples/arm-cm/dpp_nucleo-c031c6/qk/bsp.c +++ b/examples/arm-cm/dpp_nucleo-c031c6/qk/bsp.c @@ -1,6 +1,6 @@ //============================================================================ // Product: DPP example, NUCLEO-C031C6 board, QK kernel -// Last updated for version 7.3.2 +// Last updated for version 7.3.3 // Last updated on 2023-12-13 // // Q u a n t u m L e a P s @@ -47,6 +47,7 @@ Q_DEFINE_THIS_FILE // define the name of this file for assertions // Button pins available on the board (just one user Button B1 on PC.13) #define B1_PIN 13U +// Local-scope objects ----------------------------------------------------- static uint32_t l_rndSeed; #ifdef Q_SPY @@ -56,6 +57,7 @@ static uint32_t l_rndSeed; // QSpy source IDs static QSpyId const l_SysTick_Handler = { 0U }; + static QSpyId const l_EXTI0_1_IRQHandler = { 0U }; enum AppRecords { // application-specific trace records PHILO_STAT = QS_USER, @@ -87,6 +89,7 @@ Q_NORETURN Q_onError(char const * const module, int_t const id) { NVIC_SystemReset(); } //............................................................................ +// assertion failure handler for the STM32 library, including the startup code void assert_failed(char const * const module, int_t const id); // prototype void assert_failed(char const * const module, int_t const id) { Q_onError(module, id); @@ -141,7 +144,7 @@ void EXTI0_1_IRQHandler(void) { QK_ISR_ENTRY(); // inform QK about entering an ISR static QEvt const testEvt = QEVT_INITIALIZER(TEST_SIG); - QACTIVE_POST(AO_Table, &testEvt, (void *)0); + QACTIVE_POST(AO_Table, &testEvt, &l_EXTI0_1_IRQHandler); QK_ISR_EXIT(); // inform QK about exiting an ISR } @@ -156,7 +159,7 @@ void EXTI0_1_IRQHandler(void) { void USART2_IRQHandler(void); // prototype void USART2_IRQHandler(void) { // used in QS-RX (kernel UNAWARE interrutp) // is RX register NOT empty? - if ((USART2->ISR & (1U << 5)) != 0) { + if ((USART2->ISR & (1U << 5U)) != 0U) { uint32_t b = USART2->RDR; QS_RX_PUT(b); } @@ -176,6 +179,7 @@ void QF_onContextSw(QActive *prev, QActive *next) { } #endif // QF_ON_CONTEXT_SW + //============================================================================ // BSP functions... @@ -357,6 +361,7 @@ void QF_onStartup(void) { //............................................................................ void QF_onCleanup(void) { } + //............................................................................ void QK_onIdle(void) { // toggle an LED on and then off (not enough LEDs, see NOTE2) @@ -383,18 +388,7 @@ void QK_onIdle(void) { // Put the CPU and peripherals to the low-power mode. // you might need to customize the clock management for your application, // see the datasheet for your particular Cortex-M MCU. - // - // !!!CAUTION!!! - // The WFI instruction stops the CPU clock, which unfortunately disables - // the JTAG port, so the ST-Link debugger can no longer connect to the - // board. For that reason, the call to __WFI() has to be used with CAUTION. - // - // NOTE: If you find your board "frozen" like this, strap BOOT0 to VDD and - // reset the board, then connect with ST-Link Utilities and erase the part. - // The trick with BOOT(0) is it gets the part to run the System Loader - // instead of your broken code. When done disconnect BOOT0, and start over. - // - //__WFI(); // Wait-For-Interrupt + __WFI(); // Wait-For-Interrupt #endif } @@ -463,7 +457,7 @@ QSTimeCtr QS_onGetTime(void) { // NOTE: invoked with interrupts DISABLED if ((SysTick->CTRL & 0x00010000U) == 0U) { // not set? return QS_tickTime_ - (QSTimeCtr)SysTick->VAL; } - else { // the rollover occured, but the SysTick_ISR did not run yet + else { // the rollover occurred, but the SysTick_ISR did not run yet return QS_tickTime_ + QS_tickPeriod_ - (QSTimeCtr)SysTick->VAL; } } diff --git a/examples/arm-cm/dpp_nucleo-c031c6/qk/gnu/Makefile b/examples/arm-cm/dpp_nucleo-c031c6/qk/gnu/Makefile index 18b53b48..08c567b3 100644 --- a/examples/arm-cm/dpp_nucleo-c031c6/qk/gnu/Makefile +++ b/examples/arm-cm/dpp_nucleo-c031c6/qk/gnu/Makefile @@ -56,7 +56,7 @@ PROJECT := dpp-qk # project directories # -# location of the QP/C framework (if not provided in an environemnt var.) +# location of the QP/C framework (if not provided in an environment var.) ifeq ($(QPC),) QPC := ../../../../.. endif @@ -177,7 +177,7 @@ RM := rm # build options for various configurations for ARM Cortex-M # -# combine all the soruces... +# combine all the sources... C_SRCS += $(QP_SRCS) ASM_SRCS += $(QP_ASMS) diff --git a/examples/arm-cm/dpp_nucleo-c031c6/qk/gnu/README.txt b/examples/arm-cm/dpp_nucleo-c031c6/qk/gnu/README.txt index d3fb3164..c3e5015c 100644 --- a/examples/arm-cm/dpp_nucleo-c031c6/qk/gnu/README.txt +++ b/examples/arm-cm/dpp_nucleo-c031c6/qk/gnu/README.txt @@ -31,7 +31,7 @@ to be adjusted in the provided Makefile, by editing the symbol: GNU_ARM. As described in the comment for this symbol, the GNU-ARM toolset is taken from: http://gnutoolchains.com/arm-eabi -It is highly recommened to use the same GNU-ARM distribution, especially +It is highly recommended to use the same GNU-ARM distribution, especially for ARM Cortex-M projects, due to the support for the hardware FPU (float-abi=hard). *** diff --git a/examples/arm-cm/dpp_nucleo-c031c6/qv/bsp.c b/examples/arm-cm/dpp_nucleo-c031c6/qv/bsp.c index 6fa4deba..febd6381 100644 --- a/examples/arm-cm/dpp_nucleo-c031c6/qv/bsp.c +++ b/examples/arm-cm/dpp_nucleo-c031c6/qv/bsp.c @@ -1,6 +1,6 @@ //============================================================================ // Product: DPP example, NUCLEO-C031C6 board, QV kernel -// Last updated for version 7.3.2 +// Last updated for version 7.3.3 // Last updated on 2023-12-13 // // Q u a n t u m L e a P s @@ -202,6 +202,10 @@ void BSP_init(void) { __ISB(); __DSB(); + // NOTE: SystemInit() has been already called from the startup code + // but SystemCoreClock needs to be updated + SystemCoreClockUpdate(); + // enable GPIOA clock port for the LED LD4 RCC->IOPENR |= (1U << 0U); @@ -335,7 +339,6 @@ void BSP_terminate(int16_t result) { // QF callbacks... void QF_onStartup(void) { // set up the SysTick timer to fire at BSP_TICKS_PER_SEC rate - SystemCoreClockUpdate(); SysTick_Config(SystemCoreClock / BSP_TICKS_PER_SEC); // assign all priority bits for preemption-prio. and none to sub-prio. @@ -371,7 +374,7 @@ void QV_onIdle(void) { // CATION: called with interrupts DISABLED, see NOTE0 QS_rxParse(); // parse all the received bytes QF_INT_ENABLE(); - if ((USART2->ISR & (1U << 7U)) != 0U) { // is TXE empty? + if ((USART2->ISR & (1U << 7U)) != 0U) { // TXE empty? QF_INT_DISABLE(); uint16_t b = QS_getByte(); QF_INT_ENABLE(); @@ -455,7 +458,7 @@ QSTimeCtr QS_onGetTime(void) { // NOTE: invoked with interrupts DISABLED if ((SysTick->CTRL & 0x00010000U) == 0U) { // not set? return QS_tickTime_ - (QSTimeCtr)SysTick->VAL; } - else { // the rollover occured, but the SysTick_ISR did not run yet + else { // the rollover occurred, but the SysTick_ISR did not run yet return QS_tickTime_ + QS_tickPeriod_ - (QSTimeCtr)SysTick->VAL; } } @@ -469,7 +472,7 @@ void QS_onFlush(void) { if (b != QS_EOD) { while ((USART2->ISR & (1U << 7U)) == 0U) { // while TXE not empty } - USART2->TDR = b; // put into the DR register + USART2->TDR = b; } else { break; diff --git a/examples/arm-cm/dpp_nucleo-c031c6/qv/gnu-pack/Makefile b/examples/arm-cm/dpp_nucleo-c031c6/qv/gnu-pack/Makefile index c56a8b35..dee62003 100644 --- a/examples/arm-cm/dpp_nucleo-c031c6/qv/gnu-pack/Makefile +++ b/examples/arm-cm/dpp_nucleo-c031c6/qv/gnu-pack/Makefile @@ -56,7 +56,7 @@ PROJECT := dpp-qv # project directories # -# location of the QP/C framework (if not provided in an environemnt var.) +# location of the QP/C framework (if not provided in an environment var.) ifeq ($(QPC),) QPC := ../../../../.. endif @@ -176,7 +176,7 @@ RM := rm # build options for various configurations for ARM Cortex-M # -# combine all the soruces... +# combine all the sources... C_SRCS += $(QP_SRCS) ASM_SRCS += $(QP_ASMS) diff --git a/examples/arm-cm/dpp_nucleo-c031c6/qv/gnu-pack/RTE/RTEF/qp_config.h b/examples/arm-cm/dpp_nucleo-c031c6/qv/gnu-pack/RTE/RTEF/qp_config.h index 05234feb..bb382fbb 100644 --- a/examples/arm-cm/dpp_nucleo-c031c6/qv/gnu-pack/RTE/RTEF/qp_config.h +++ b/examples/arm-cm/dpp_nucleo-c031c6/qv/gnu-pack/RTE/RTEF/qp_config.h @@ -113,7 +113,7 @@ // Maximum # event pools (QF_MAX_EPOOL) // <0=>0 no event pools -// <1=>1 <2=>2 <3=>3 (deafult) <4=>4 <5=>5 +// <1=>1 <2=>2 <3=>3 (default) <4=>4 <5=>5 // <6=>6 <7=>7 <8=>8 <9=>9 <10=>10 <11=>11 // <12=>12 <13=>13 <14=>14 <15=>15 // Maximum # Event Pools <1..15> diff --git a/examples/arm-cm/dpp_nucleo-c031c6/qv/gnu-pack/RTE/RTEF/qp_config.h.base@7.3.0 b/examples/arm-cm/dpp_nucleo-c031c6/qv/gnu-pack/RTE/RTEF/qp_config.h.base@7.3.2 similarity index 100% rename from examples/arm-cm/dpp_nucleo-c031c6/qv/gnu-pack/RTE/RTEF/qp_config.h.base@7.3.0 rename to examples/arm-cm/dpp_nucleo-c031c6/qv/gnu-pack/RTE/RTEF/qp_config.h.base@7.3.2 diff --git a/examples/arm-cm/dpp_nucleo-c031c6/qv/gnu-pack/RTE/_dpp-dbg/RTE_Components.h b/examples/arm-cm/dpp_nucleo-c031c6/qv/gnu-pack/RTE/_dpp-dbg/RTE_Components.h index 77e89473..7527fab1 100644 --- a/examples/arm-cm/dpp_nucleo-c031c6/qv/gnu-pack/RTE/_dpp-dbg/RTE_Components.h +++ b/examples/arm-cm/dpp_nucleo-c031c6/qv/gnu-pack/RTE/_dpp-dbg/RTE_Components.h @@ -16,6 +16,12 @@ */ #define CMSIS_device_header "stm32c0xx.h" +/* QuantumLeaps::RTEF&QuantumLeaps QP/C:Event Processor&qep@7.3.2 */ +#define RTE_RTEF_QPC_QEP /* QP/C QEP */ +/* QuantumLeaps::RTEF&QuantumLeaps QP/C:Framework&qf@7.3.2 */ +#define RTE_RTEF_QPC_QF /* QP/C QF */ +/* QuantumLeaps::RTEF&QuantumLeaps QP/C:Real-Time Kernel&qv@7.3.2 */ +#define RTE_RTEF_QPC_QV /* QP/C QV kernel */ #endif /* RTE_COMPONENTS_H */ diff --git a/examples/arm-cm/dpp_nucleo-c031c6/qv/gnu-pack/RTE/_dpp-rel/RTE_Components.h b/examples/arm-cm/dpp_nucleo-c031c6/qv/gnu-pack/RTE/_dpp-rel/RTE_Components.h deleted file mode 100644 index 7e14a38c..00000000 --- a/examples/arm-cm/dpp_nucleo-c031c6/qv/gnu-pack/RTE/_dpp-rel/RTE_Components.h +++ /dev/null @@ -1,21 +0,0 @@ - -/* - * Auto generated Run-Time-Environment Configuration File - * *** Do not modify ! *** - * - * Project: 'dpp-qv' - * Target: 'dpp-rel' - */ - -#ifndef RTE_COMPONENTS_H -#define RTE_COMPONENTS_H - - -/* - * Define the Device Header File: - */ -#define CMSIS_device_header "stm32c0xx.h" - - - -#endif /* RTE_COMPONENTS_H */ diff --git a/examples/arm-cm/dpp_nucleo-c031c6/qv/gnu-pack/RTE/_dpp-spy/RTE_Components.h b/examples/arm-cm/dpp_nucleo-c031c6/qv/gnu-pack/RTE/_dpp-spy/RTE_Components.h deleted file mode 100644 index 597d7502..00000000 --- a/examples/arm-cm/dpp_nucleo-c031c6/qv/gnu-pack/RTE/_dpp-spy/RTE_Components.h +++ /dev/null @@ -1,21 +0,0 @@ - -/* - * Auto generated Run-Time-Environment Configuration File - * *** Do not modify ! *** - * - * Project: 'dpp-qv' - * Target: 'dpp-spy' - */ - -#ifndef RTE_COMPONENTS_H -#define RTE_COMPONENTS_H - - -/* - * Define the Device Header File: - */ -#define CMSIS_device_header "stm32c0xx.h" - - - -#endif /* RTE_COMPONENTS_H */ diff --git a/examples/arm-cm/dpp_nucleo-c031c6/qv/gnu-pack/dpp-qv.uvoptx b/examples/arm-cm/dpp_nucleo-c031c6/qv/gnu-pack/dpp-qv.uvoptx index 031936b5..b123511e 100644 --- a/examples/arm-cm/dpp_nucleo-c031c6/qv/gnu-pack/dpp-qv.uvoptx +++ b/examples/arm-cm/dpp_nucleo-c031c6/qv/gnu-pack/dpp-qv.uvoptx @@ -135,7 +135,7 @@ 0 ST-LINKIII-KEIL_SWO - -U-O206 -O206 -SF10000 -C0 -A0 -I0 -HNlocalhost -HP7184 -P1 -N00("ARM CoreSight SW-DP (ARM Core") -D00(0BC11477) -L00(0) -TO131090 -TC10000000 -TT10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO7 -FD20000000 -FC1000 -FN1 -FF0STM32C0x_32.FLM -FS08000000 -FL08000 -FP0($$Device:STM32C031C6Tx$CMSIS\Flash\STM32C0x_32.FLM) -WA0 -WE0 -WVCE4 -WS2710 -WM0 -WP2 + -U-O206 -O206 -SF10000 -C0 -A0 -I0 -HNlocalhost -HP7184 -P1 -N00("ARM CoreSight SW-DP (ARM Core") -D00(0BC11477) -L00(0) -TO131090 -TC10000000 -TT10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO7 -FD20000000 -FC1000 -FN1 -FF0STM32C0x_32.FLM -FS08000000 -FL08000 -FP0($$Device:STM32C031C6Tx$CMSIS\Flash\STM32C0x_32.FLM) -WA0 -WE0 -WVCE4 -WS2710 -WM0 -WP2 -WK0 0 diff --git a/examples/arm-cm/dpp_nucleo-c031c6/qv/gnu-pack/dpp-qv.uvprojx b/examples/arm-cm/dpp_nucleo-c031c6/qv/gnu-pack/dpp-qv.uvprojx index 4487d232..a00b0820 100644 --- a/examples/arm-cm/dpp_nucleo-c031c6/qv/gnu-pack/dpp-qv.uvprojx +++ b/examples/arm-cm/dpp_nucleo-c031c6/qv/gnu-pack/dpp-qv.uvprojx @@ -1021,32 +1021,32 @@ - - + + - - + + - - + + - - + + @@ -1055,10 +1055,10 @@ - + RTE\RTEF\qp_config.h - - + + diff --git a/examples/arm-cm/dpp_nucleo-c031c6/qv/gnu/Makefile b/examples/arm-cm/dpp_nucleo-c031c6/qv/gnu/Makefile index c56a8b35..dee62003 100644 --- a/examples/arm-cm/dpp_nucleo-c031c6/qv/gnu/Makefile +++ b/examples/arm-cm/dpp_nucleo-c031c6/qv/gnu/Makefile @@ -56,7 +56,7 @@ PROJECT := dpp-qv # project directories # -# location of the QP/C framework (if not provided in an environemnt var.) +# location of the QP/C framework (if not provided in an environment var.) ifeq ($(QPC),) QPC := ../../../../.. endif @@ -176,7 +176,7 @@ RM := rm # build options for various configurations for ARM Cortex-M # -# combine all the soruces... +# combine all the sources... C_SRCS += $(QP_SRCS) ASM_SRCS += $(QP_ASMS) diff --git a/examples/arm-cm/dpp_nucleo-c031c6/qxk/arm-pack/RTE/RTEF/qp_config.h b/examples/arm-cm/dpp_nucleo-c031c6/qxk/arm-pack/RTE/RTEF/qp_config.h index 9e4c86ab..ac7dfd1e 100644 --- a/examples/arm-cm/dpp_nucleo-c031c6/qxk/arm-pack/RTE/RTEF/qp_config.h +++ b/examples/arm-cm/dpp_nucleo-c031c6/qxk/arm-pack/RTE/RTEF/qp_config.h @@ -1,5 +1,5 @@ //============================================================================ -// QP configuration file (QK on ARM Cortex-M) +// QP configuration file (QXK on ARM Cortex-M) // Last updated for version: 7.3.0 // Last updated on: 2023-10-30 // @@ -113,7 +113,7 @@ // Maximum # event pools (QF_MAX_EPOOL) // <0=>0 no event pools -// <1=>1 <2=>2 <3=>3 (deafult) <4=>4 <5=>5 +// <1=>1 <2=>2 <3=>3 (default) <4=>4 <5=>5 // <6=>6 <7=>7 <8=>8 <9=>9 <10=>10 <11=>11 // <12=>12 <13=>13 <14=>14 <15=>15 // Maximum # Event Pools <1..15> @@ -226,7 +226,7 @@ // //.......................................................................... -// QK Preemptive Non-Blocking Kernel +// QXK Preemptive Dual-Mode Kernel // Preemptive non-blocking/blocking RTOS kernel. // Context switch callback (QF_ON_CONTEXT_SW) @@ -242,9 +242,9 @@ // Context switch callback WITH QS // Enable context switch callback QF_onContextSw() // When Q_SPY is defined. -#ifdef Q_SPY -#define QF_ON_CONTEXT_SW -#endif +//#ifdef Q_SPY +//#define QF_ON_CONTEXT_SW +//#endif // // @@ -255,13 +255,13 @@ //#define QF_MEM_ISOLATE // -// Use IRQ handler for QK return-from-preemption +// Use IRQ handler for QXK return-from-preemption // Enable this option only if the NMI handler is used in the project. -// If enabled, provide the otherwise unused IRQ number (QK_USE_IRQ_NUM) -// and the corresponding IRQ handler name (QK_USE_IRQ_HANDLER) +// If enabled, provide the otherwise unused IRQ number (QXK_USE_IRQ_NUM) +// and the corresponding IRQ handler name (QXK_USE_IRQ_HANDLER) // in the "Text Editor" mode. -//#define QK_USE_IRQ_NUM 31 -//#define QK_USE_IRQ_HANDLER Reserved31_IRQHandler +//#define QXK_USE_IRQ_NUM 31 +//#define QXK_USE_IRQ_HANDLER Reserved31_IRQHandler // // diff --git a/examples/arm-cm/dpp_nucleo-c031c6/qxk/arm-pack/RTE/RTEF/qp_config.h.base@7.3.0 b/examples/arm-cm/dpp_nucleo-c031c6/qxk/arm-pack/RTE/RTEF/qp_config.h.base@7.3.2 similarity index 95% rename from examples/arm-cm/dpp_nucleo-c031c6/qxk/arm-pack/RTE/RTEF/qp_config.h.base@7.3.0 rename to examples/arm-cm/dpp_nucleo-c031c6/qxk/arm-pack/RTE/RTEF/qp_config.h.base@7.3.2 index 6f4e1d1a..5cb75eea 100644 --- a/examples/arm-cm/dpp_nucleo-c031c6/qxk/arm-pack/RTE/RTEF/qp_config.h.base@7.3.0 +++ b/examples/arm-cm/dpp_nucleo-c031c6/qxk/arm-pack/RTE/RTEF/qp_config.h.base@7.3.2 @@ -1,5 +1,5 @@ //============================================================================ -// QP configuration file (QK on ARM Cortex-M) +// QP configuration file (QXK on ARM Cortex-M) // Last updated for version: 7.3.0 // Last updated on: 2023-10-30 // @@ -226,7 +226,7 @@ // //.......................................................................... -// QK Preemptive Non-Blocking Kernel +// QXK Preemptive Dual-Mode Kernel // Preemptive non-blocking/blocking RTOS kernel. // Context switch callback (QF_ON_CONTEXT_SW) @@ -255,13 +255,13 @@ //#define QF_MEM_ISOLATE // -// Use IRQ handler for QK return-from-preemption +// Use IRQ handler for QXK return-from-preemption // Enable this option only if the NMI handler is used in the project. -// If enabled, provide the otherwise unused IRQ number (QK_USE_IRQ_NUM) -// and the corresponding IRQ handler name (QK_USE_IRQ_HANDLER) +// If enabled, provide the otherwise unused IRQ number (QXK_USE_IRQ_NUM) +// and the corresponding IRQ handler name (QXK_USE_IRQ_HANDLER) // in the "Text Editor" mode. -//#define QK_USE_IRQ_NUM 31 -//#define QK_USE_IRQ_HANDLER Reserved31_IRQHandler +//#define QXK_USE_IRQ_NUM 31 +//#define QXK_USE_IRQ_HANDLER Reserved31_IRQHandler // // diff --git a/examples/arm-cm/dpp_nucleo-c031c6/qxk/arm-pack/RTE/_dpp-dbg/RTE_Components.h b/examples/arm-cm/dpp_nucleo-c031c6/qxk/arm-pack/RTE/_dpp-dbg/RTE_Components.h index 5c092ae7..151da46e 100644 --- a/examples/arm-cm/dpp_nucleo-c031c6/qxk/arm-pack/RTE/_dpp-dbg/RTE_Components.h +++ b/examples/arm-cm/dpp_nucleo-c031c6/qxk/arm-pack/RTE/_dpp-dbg/RTE_Components.h @@ -16,11 +16,11 @@ */ #define CMSIS_device_header "stm32c0xx.h" -/* QuantumLeaps.Quantum Leaps QP/C::RTEF:Event Processor:qep:7.3.0 */ +/* QuantumLeaps::RTEF&QuantumLeaps QP/C:Event Processor&qep@7.3.2 */ #define RTE_RTEF_QPC_QEP /* QP/C QEP */ -/* QuantumLeaps.Quantum Leaps QP/C::RTEF:Framework:qf:7.3.0 */ +/* QuantumLeaps::RTEF&QuantumLeaps QP/C:Framework&qf@7.3.2 */ #define RTE_RTEF_QPC_QF /* QP/C QF */ -/* QuantumLeaps.Quantum Leaps QP/C::RTEF:Real-Time Kernel:qxk:7.3.0 */ +/* QuantumLeaps::RTEF&QuantumLeaps QP/C:Real-Time Kernel&qxk@7.3.2 */ #define RTE_RTEF_QPC_QXK /* QP/C QXK kernel */ diff --git a/examples/arm-cm/dpp_nucleo-c031c6/qxk/arm-pack/RTE/_dpp-rel/RTE_Components.h b/examples/arm-cm/dpp_nucleo-c031c6/qxk/arm-pack/RTE/_dpp-rel/RTE_Components.h index a7576c23..c0fe2db6 100644 --- a/examples/arm-cm/dpp_nucleo-c031c6/qxk/arm-pack/RTE/_dpp-rel/RTE_Components.h +++ b/examples/arm-cm/dpp_nucleo-c031c6/qxk/arm-pack/RTE/_dpp-rel/RTE_Components.h @@ -16,11 +16,11 @@ */ #define CMSIS_device_header "stm32c0xx.h" -/* QuantumLeaps.Quantum Leaps QP/C::RTEF:Event Processor:qep:7.3.0 */ +/* QuantumLeaps::RTEF&QuantumLeaps QP/C:Event Processor&qep@7.3.2 */ #define RTE_RTEF_QPC_QEP /* QP/C QEP */ -/* QuantumLeaps.Quantum Leaps QP/C::RTEF:Framework:qf:7.3.0 */ +/* QuantumLeaps::RTEF&QuantumLeaps QP/C:Framework&qf@7.3.2 */ #define RTE_RTEF_QPC_QF /* QP/C QF */ -/* QuantumLeaps.Quantum Leaps QP/C::RTEF:Real-Time Kernel:qxk:7.3.0 */ +/* QuantumLeaps::RTEF&QuantumLeaps QP/C:Real-Time Kernel&qxk@7.3.2 */ #define RTE_RTEF_QPC_QXK /* QP/C QXK kernel */ diff --git a/examples/arm-cm/dpp_nucleo-c031c6/qxk/arm-pack/RTE/_dpp-spy/RTE_Components.h b/examples/arm-cm/dpp_nucleo-c031c6/qxk/arm-pack/RTE/_dpp-spy/RTE_Components.h index d9db596f..77868fa4 100644 --- a/examples/arm-cm/dpp_nucleo-c031c6/qxk/arm-pack/RTE/_dpp-spy/RTE_Components.h +++ b/examples/arm-cm/dpp_nucleo-c031c6/qxk/arm-pack/RTE/_dpp-spy/RTE_Components.h @@ -16,13 +16,13 @@ */ #define CMSIS_device_header "stm32c0xx.h" -/* QuantumLeaps.Quantum Leaps QP/C::RTEF:Event Processor:qep:7.3.0 */ +/* QuantumLeaps::RTEF&QuantumLeaps QP/C:Event Processor&qep@7.3.2 */ #define RTE_RTEF_QPC_QEP /* QP/C QEP */ -/* QuantumLeaps.Quantum Leaps QP/C::RTEF:Framework:qf:7.3.0 */ +/* QuantumLeaps::RTEF&QuantumLeaps QP/C:Framework&qf@7.3.2 */ #define RTE_RTEF_QPC_QF /* QP/C QF */ -/* QuantumLeaps.Quantum Leaps QP/C::RTEF:Real-Time Kernel:qxk:7.3.0 */ +/* QuantumLeaps::RTEF&QuantumLeaps QP/C:Real-Time Kernel&qxk@7.3.2 */ #define RTE_RTEF_QPC_QXK /* QP/C QXK kernel */ -/* QuantumLeaps.Quantum Leaps QP/C::RTEF:Software tracing:qs:7.3.0 */ +/* QuantumLeaps::RTEF&QuantumLeaps QP/C:Software tracing&qs@7.3.2 */ #define RTE_RTEF_QPC_QS /* QP/C QS */ diff --git a/examples/arm-cm/dpp_nucleo-c031c6/qxk/arm-pack/dpp-qxk.uvoptx b/examples/arm-cm/dpp_nucleo-c031c6/qxk/arm-pack/dpp-qxk.uvoptx index 8ea1edcc..68dea58a 100644 --- a/examples/arm-cm/dpp_nucleo-c031c6/qxk/arm-pack/dpp-qxk.uvoptx +++ b/examples/arm-cm/dpp_nucleo-c031c6/qxk/arm-pack/dpp-qxk.uvoptx @@ -75,7 +75,7 @@ 1 0 - 1 + 0 18 @@ -467,7 +467,7 @@ 1 0 - 0 + 1 18 diff --git a/examples/arm-cm/dpp_nucleo-c031c6/qxk/arm-pack/dpp-qxk.uvprojx b/examples/arm-cm/dpp_nucleo-c031c6/qxk/arm-pack/dpp-qxk.uvprojx index 4d912517..5c6498c8 100644 --- a/examples/arm-cm/dpp_nucleo-c031c6/qxk/arm-pack/dpp-qxk.uvprojx +++ b/examples/arm-cm/dpp_nucleo-c031c6/qxk/arm-pack/dpp-qxk.uvprojx @@ -10,7 +10,7 @@ dpp-dbg 0x4 ARM-ADS - 6190000::V6.19::ARMCLANG + 6210000::V6.21::ARMCLANG 1 @@ -465,7 +465,7 @@ dpp-rel 0x4 ARM-ADS - 6190000::V6.19::ARMCLANG + 6210000::V6.21::ARMCLANG 1 @@ -920,7 +920,7 @@ dpp-spy 0x4 ARM-ADS - 6190000::V6.19::ARMCLANG + 6210000::V6.21::ARMCLANG 1 @@ -1376,32 +1376,32 @@ - - + + - - + + - - + + - - + + @@ -1410,10 +1410,10 @@ - + RTE\RTEF\qp_config.h - - + + diff --git a/examples/arm-cm/dpp_nucleo-c031c6/qxk/bsp.c b/examples/arm-cm/dpp_nucleo-c031c6/qxk/bsp.c index 34e3431d..6a846e53 100644 --- a/examples/arm-cm/dpp_nucleo-c031c6/qxk/bsp.c +++ b/examples/arm-cm/dpp_nucleo-c031c6/qxk/bsp.c @@ -1,6 +1,6 @@ //============================================================================ // Product: DPP example, NUCLEO-C031C6 board, QXK kernel -// Last updated for version 7.3.2 +// Last updated for version 7.3.3 // Last updated on 2023-12-13 // // Q u a n t u m L e a P s @@ -47,14 +47,17 @@ Q_DEFINE_THIS_FILE // define the name of this file for assertions // Button pins available on the board (just one user Button B1 on PC.13) #define B1_PIN 13U +// Local-scope objects ----------------------------------------------------- static uint32_t l_rndSeed; #ifdef Q_SPY + QSTimeCtr QS_tickTime_; QSTimeCtr QS_tickPeriod_; // QSpy source IDs static QSpyId const l_SysTick_Handler = { 0U }; + static QSpyId const l_EXTI0_1_IRQHandler = { 0U }; enum AppRecords { // application-specific trace records PHILO_STAT = QS_USER, @@ -86,12 +89,14 @@ Q_NORETURN Q_onError(char const * const module, int_t const id) { NVIC_SystemReset(); } //............................................................................ +// assertion failure handler for the STM32 library, including the startup code void assert_failed(char const * const module, int_t const id); // prototype void assert_failed(char const * const module, int_t const id) { Q_onError(module, id); } -// ISRs used in the application ========================================== +// ISRs used in the application ============================================ + void SysTick_Handler(void); // prototype void SysTick_Handler(void) { QXK_ISR_ENTRY(); // inform QXK about entering an ISR @@ -139,7 +144,7 @@ void EXTI0_1_IRQHandler(void) { QXK_ISR_ENTRY(); // inform QXK about entering an ISR static QEvt const testEvt = QEVT_INITIALIZER(TEST_SIG); - QACTIVE_POST(AO_Table, &testEvt, (void *)0); + QACTIVE_POST(AO_Table, &testEvt, &l_EXTI0_1_IRQHandler); QXK_ISR_EXIT(); // inform QXK about exiting an ISR } @@ -154,7 +159,7 @@ void EXTI0_1_IRQHandler(void) { void USART2_IRQHandler(void); // prototype void USART2_IRQHandler(void) { // used in QS-RX (kernel UNAWARE interrutp) // is RX register NOT empty? - if ((USART2->ISR & (1U << 5)) != 0) { + if ((USART2->ISR & (1U << 5U)) != 0U) { uint32_t b = USART2->RDR; QS_RX_PUT(b); } @@ -174,6 +179,7 @@ void QF_onContextSw(QActive *prev, QActive *next) { } #endif // QF_ON_CONTEXT_SW + //============================================================================ // BSP functions... @@ -288,7 +294,7 @@ void BSP_start(void) { void BSP_displayPhilStat(uint8_t n, char const *stat) { Q_UNUSED_PAR(n); - if (stat[0] == 'h') { + if (stat[0] == 'e') { GPIOA->BSRR = (1U << LD4_PIN); // turn LED on } else { @@ -323,7 +329,7 @@ void BSP_randomSeed(uint32_t seed) { //............................................................................ uint32_t BSP_random(void) { // a very cheap pseudo-random-number generator - QSchedStatus lockStat = QXK_schedLock(N_PHILO); + QSchedStatus lockStat = QXK_schedLock(N_PHILO); // N_PHILO prio. ceiling // "Super-Duper" Linear Congruential Generator (LCG) // LCG(2^32, 3*7*11*13*23, 0, seed) // @@ -334,11 +340,11 @@ uint32_t BSP_random(void) { // a very cheap pseudo-random-number generator return (rnd >> 8U); } //............................................................................ -void BSP_ledOn() { +void BSP_ledOn(void) { GPIOA->BSRR = (1U << LD4_PIN); // turn LED on } //............................................................................ -void BSP_ledOff() { +void BSP_ledOff(void) { GPIOA->BSRR = (1U << (LD4_PIN + 16U)); // turn LED off } //............................................................................ @@ -353,10 +359,11 @@ void QF_onStartup(void) { SysTick_Config(SystemCoreClock / BSP_TICKS_PER_SEC); // assign all priority bits for preemption-prio. and none to sub-prio. + // NOTE: this might have been changed by STM32Cube. NVIC_SetPriorityGrouping(0U); // set priorities of ALL ISRs used in the system, see NOTE1 - NVIC_SetPriority(USART2_IRQn, 0); // kernel UNAWARE interrupt + NVIC_SetPriority(USART2_IRQn, 0U); // kernel UNAWARE interrupt NVIC_SetPriority(EXTI0_1_IRQn, QF_AWARE_ISR_CMSIS_PRI + 0U); NVIC_SetPriority(SysTick_IRQn, QF_AWARE_ISR_CMSIS_PRI + 1U); // ... @@ -371,9 +378,10 @@ void QF_onStartup(void) { //............................................................................ void QF_onCleanup(void) { } + //............................................................................ void QXK_onIdle(void) { - // toggle an LED on and then off (not enough LEDs, see NOTE02) + // toggle an LED on and then off (not enough LEDs, see NOTE2) //QF_INT_DISABLE(); //GPIOA->BSRR = (1U << LD4_PIN); // turn LED[n] on //GPIOA->BSRR = (1U << (LD4_PIN + 16U)); // turn LED[n] off @@ -383,32 +391,21 @@ void QXK_onIdle(void) { QF_INT_DISABLE(); QS_rxParse(); // parse all the received bytes QF_INT_ENABLE(); - QF_CRIT_EXIT_NOP(); - QF_INT_DISABLE(); - if ((USART2->ISR & (1U << 7U)) != 0U) { // is TXE empty? + if ((USART2->ISR & (1U << 7U)) != 0U) { // TXE empty? + QF_INT_DISABLE(); uint16_t b = QS_getByte(); + QF_INT_ENABLE(); + if (b != QS_EOD) { // not End-Of-Data? USART2->TDR = b; // put into the DR register } } - QF_INT_ENABLE(); #elif defined NDEBUG // Put the CPU and peripherals to the low-power mode. // you might need to customize the clock management for your application, // see the datasheet for your particular Cortex-M MCU. - // - // !!!CAUTION!!! - // The WFI instruction stops the CPU clock, which unfortunately disables - // the JTAG port, so the ST-Link debugger can no longer connect to the - // board. For that reason, the call to __WFI() has to be used with CAUTION. - // - // NOTE: If you find your board "frozen" like this, strap BOOT0 to VDD and - // reset the board, then connect with ST-Link Utilities and erase the part. - // The trick with BOOT(0) is it gets the part to run the System Loader - // instead of your broken code. When done disconnect BOOT0, and start over. - // - //__WFI(); // Wait-For-Interrupt + __WFI(); // Wait-For-Interrupt #endif } @@ -474,10 +471,10 @@ void QS_onCleanup(void) { } //............................................................................ QSTimeCtr QS_onGetTime(void) { // NOTE: invoked with interrupts DISABLED - if ((SysTick->CTRL & 0x00010000) == 0) { // COUNT no set? + if ((SysTick->CTRL & 0x00010000U) == 0U) { // not set? return QS_tickTime_ - (QSTimeCtr)SysTick->VAL; } - else { // the rollover occured, but the SysTick_ISR did not run yet + else { // the rollover occurred, but the SysTick_ISR did not run yet return QS_tickTime_ + QS_tickPeriod_ - (QSTimeCtr)SysTick->VAL; } } @@ -491,7 +488,7 @@ void QS_onFlush(void) { if (b != QS_EOD) { while ((USART2->ISR & (1U << 7U)) == 0U) { // while TXE not empty } - USART2->TDR = b; // put into the DR register + USART2->TDR = b; } else { break; diff --git a/examples/arm-cm/dpp_nucleo-c031c6/qxk/gnu/Makefile b/examples/arm-cm/dpp_nucleo-c031c6/qxk/gnu/Makefile index bd91c5e8..07d37d19 100644 --- a/examples/arm-cm/dpp_nucleo-c031c6/qxk/gnu/Makefile +++ b/examples/arm-cm/dpp_nucleo-c031c6/qxk/gnu/Makefile @@ -56,7 +56,7 @@ PROJECT := dpp-qxk # project directories # -# location of the QP/C framework (if not provided in an environemnt var.) +# location of the QP/C framework (if not provided in an environment var.) ifeq ($(QPC),) QPC := ../../../../.. endif @@ -184,7 +184,7 @@ RM := rm # build options for various configurations for ARM Cortex-M # -# combine all the soruces... +# combine all the sources... C_SRCS += $(QP_SRCS) ASM_SRCS += $(QP_ASMS) diff --git a/examples/arm-cm/dpp_nucleo-c031c6/qxk/gnu/README.txt b/examples/arm-cm/dpp_nucleo-c031c6/qxk/gnu/README.txt index 99a5d743..85b07eb6 100644 --- a/examples/arm-cm/dpp_nucleo-c031c6/qxk/gnu/README.txt +++ b/examples/arm-cm/dpp_nucleo-c031c6/qxk/gnu/README.txt @@ -31,7 +31,7 @@ to be adjusted in the provided Makefile, by editing the symbol: GNU_ARM. As described in the comment for this symbol, the GNU-ARM toolset is taken from: http://gnutoolchains.com/arm-eabi -It is highly recommened to use the same GNU-ARM distribution, especially +It is highly recommended to use the same GNU-ARM distribution, especially for ARM Cortex-M projects, due to the support for the hardware FPU (float-abi=hard). *** diff --git a/examples/arm-cm/dpp_nucleo-c031c6_mpu/dpp_mpu.qm b/examples/arm-cm/dpp_nucleo-c031c6_mpu/dpp_mpu.qm index 1b2c85ad..b47f94d0 100644 --- a/examples/arm-cm/dpp_nucleo-c031c6_mpu/dpp_mpu.qm +++ b/examples/arm-cm/dpp_nucleo-c031c6_mpu/dpp_mpu.qm @@ -319,7 +319,7 @@ for (uint8_t n = 0U; n < N_PHILO; ++n) { - // give permissions to eat... + // give permissions to eat... for (uint8_t n = 0U; n < N_PHILO; ++n) { if (me->isHungry[n] && (me->fork[left(n)] == FREE) diff --git a/examples/arm-cm/dpp_nucleo-c031c6_mpu/qk/armclang/README.txt b/examples/arm-cm/dpp_nucleo-c031c6_mpu/qk/armclang/README.txt index 946a6967..93065fc2 100644 --- a/examples/arm-cm/dpp_nucleo-c031c6_mpu/qk/armclang/README.txt +++ b/examples/arm-cm/dpp_nucleo-c031c6_mpu/qk/armclang/README.txt @@ -23,7 +23,7 @@ command-line options for the ARM assembler (see the Asm tab in the "Options for Target" dialog box in uVision). Specifically, you should define symbols: Stack_Size=xxx Heap_Size=yyy, where xxx represents a numerical value of stack size and yyy the -numberical value of the heap size. +numerical value of the heap size. Selecting QK Exception diff --git a/examples/arm-cm/dpp_nucleo-c031c6_mpu/qk/bsp.c b/examples/arm-cm/dpp_nucleo-c031c6_mpu/qk/bsp.c index 5283d5da..d54e6e92 100644 --- a/examples/arm-cm/dpp_nucleo-c031c6_mpu/qk/bsp.c +++ b/examples/arm-cm/dpp_nucleo-c031c6_mpu/qk/bsp.c @@ -780,7 +780,7 @@ QSTimeCtr QS_onGetTime(void) { // NOTE: invoked with interrupts DISABLED if ((SysTick->CTRL & 0x00010000) == 0) { // COUNT no set? return QS_tickTime_ - (QSTimeCtr)SysTick->VAL; } - else { // the rollover occured, but the SysTick_ISR did not run yet + else { // the rollover occurred, but the SysTick_ISR did not run yet return QS_tickTime_ + QS_tickPeriod_ - (QSTimeCtr)SysTick->VAL; } } diff --git a/examples/arm-cm/dpp_nucleo-c031c6_mpu/qk/gnu/Makefile b/examples/arm-cm/dpp_nucleo-c031c6_mpu/qk/gnu/Makefile index b5eb1e6a..973e4dcb 100644 --- a/examples/arm-cm/dpp_nucleo-c031c6_mpu/qk/gnu/Makefile +++ b/examples/arm-cm/dpp_nucleo-c031c6_mpu/qk/gnu/Makefile @@ -56,7 +56,7 @@ PROJECT := dpp-qk # project directories # -# location of the QP/C framework (if not provided in an environemnt var.) +# location of the QP/C framework (if not provided in an environment var.) ifeq ($(QPC),) QPC := ../../../../.. endif @@ -177,7 +177,7 @@ RM := rm # build options for various configurations for ARM Cortex-M # -# combine all the soruces... +# combine all the sources... C_SRCS += $(QP_SRCS) ASM_SRCS += $(QP_ASMS) diff --git a/examples/arm-cm/dpp_nucleo-c031c6_mpu/qv/bsp.c b/examples/arm-cm/dpp_nucleo-c031c6_mpu/qv/bsp.c index e9cf94d2..415abcd7 100644 --- a/examples/arm-cm/dpp_nucleo-c031c6_mpu/qv/bsp.c +++ b/examples/arm-cm/dpp_nucleo-c031c6_mpu/qv/bsp.c @@ -770,7 +770,7 @@ QSTimeCtr QS_onGetTime(void) { // NOTE: invoked with interrupts DISABLED if ((SysTick->CTRL & 0x00010000U) == 0U) { // not set? return QS_tickTime_ - (QSTimeCtr)SysTick->VAL; } - else { // the rollover occured, but the SysTick_ISR did not run yet + else { // the rollover occurred, but the SysTick_ISR did not run yet return QS_tickTime_ + QS_tickPeriod_ - (QSTimeCtr)SysTick->VAL; } } diff --git a/examples/arm-cm/dpp_nucleo-c031c6_mpu/qv/gnu/Makefile b/examples/arm-cm/dpp_nucleo-c031c6_mpu/qv/gnu/Makefile index b3f50e9f..446e3017 100644 --- a/examples/arm-cm/dpp_nucleo-c031c6_mpu/qv/gnu/Makefile +++ b/examples/arm-cm/dpp_nucleo-c031c6_mpu/qv/gnu/Makefile @@ -56,7 +56,7 @@ PROJECT := dpp-qv # project directories # -# location of the QP/C framework (if not provided in an environemnt var.) +# location of the QP/C framework (if not provided in an environment var.) ifeq ($(QPC),) QPC := ../../../../.. endif @@ -177,7 +177,7 @@ RM := rm # build options for various configurations for ARM Cortex-M # -# combine all the soruces... +# combine all the sources... C_SRCS += $(QP_SRCS) ASM_SRCS += $(QP_ASMS) diff --git a/examples/arm-cm/dpp_nucleo-c031c6_mpu/qxk/armclang/dpp-qxk.uvoptx b/examples/arm-cm/dpp_nucleo-c031c6_mpu/qxk/armclang/dpp-qxk.uvoptx index 68861eed..927085cf 100644 --- a/examples/arm-cm/dpp_nucleo-c031c6_mpu/qxk/armclang/dpp-qxk.uvoptx +++ b/examples/arm-cm/dpp_nucleo-c031c6_mpu/qxk/armclang/dpp-qxk.uvoptx @@ -75,7 +75,7 @@ 1 0 - 0 + 1 18 @@ -474,7 +474,7 @@ 1 0 - 1 + 0 18 diff --git a/examples/arm-cm/dpp_nucleo-c031c6_mpu/qxk/armclang/dpp-qxk.uvprojx b/examples/arm-cm/dpp_nucleo-c031c6_mpu/qxk/armclang/dpp-qxk.uvprojx index 5249789c..75bbd658 100644 --- a/examples/arm-cm/dpp_nucleo-c031c6_mpu/qxk/armclang/dpp-qxk.uvprojx +++ b/examples/arm-cm/dpp_nucleo-c031c6_mpu/qxk/armclang/dpp-qxk.uvprojx @@ -10,7 +10,7 @@ dpp-dbg 0x4 ARM-ADS - 6190000::V6.19::ARMCLANG + 6210000::V6.21::ARMCLANG 1 @@ -1302,7 +1302,7 @@ dpp-spy 0x4 ARM-ADS - 6190000::V6.19::ARMCLANG + 6210000::V6.21::ARMCLANG 1 diff --git a/examples/arm-cm/dpp_nucleo-c031c6_mpu/qxk/bsp.c b/examples/arm-cm/dpp_nucleo-c031c6_mpu/qxk/bsp.c index ab4a3ae6..c7cdd95f 100644 --- a/examples/arm-cm/dpp_nucleo-c031c6_mpu/qxk/bsp.c +++ b/examples/arm-cm/dpp_nucleo-c031c6_mpu/qxk/bsp.c @@ -867,7 +867,7 @@ QSTimeCtr QS_onGetTime(void) { // NOTE: invoked with interrupts DISABLED if ((SysTick->CTRL & 0x00010000) == 0) { // COUNT no set? return QS_tickTime_ - (QSTimeCtr)SysTick->VAL; } - else { // the rollover occured, but the SysTick_ISR did not run yet + else { // the rollover occurred, but the SysTick_ISR did not run yet return QS_tickTime_ + QS_tickPeriod_ - (QSTimeCtr)SysTick->VAL; } } diff --git a/examples/arm-cm/dpp_nucleo-c031c6_mpu/qxk/gnu/Makefile b/examples/arm-cm/dpp_nucleo-c031c6_mpu/qxk/gnu/Makefile index 283c3512..4422a360 100644 --- a/examples/arm-cm/dpp_nucleo-c031c6_mpu/qxk/gnu/Makefile +++ b/examples/arm-cm/dpp_nucleo-c031c6_mpu/qxk/gnu/Makefile @@ -56,7 +56,7 @@ PROJECT := dpp-qxk # project directories # -# location of the QP/C framework (if not provided in an environemnt var.) +# location of the QP/C framework (if not provided in an environment var.) ifeq ($(QPC),) QPC := ../../../../.. endif @@ -182,7 +182,7 @@ RM := rm # build options for various configurations for ARM Cortex-M # -# combine all the soruces... +# combine all the sources... C_SRCS += $(QP_SRCS) ASM_SRCS += $(QP_ASMS) diff --git a/examples/arm-cm/dpp_nucleo-c031c6_mpu/qxk/gnu/README.txt b/examples/arm-cm/dpp_nucleo-c031c6_mpu/qxk/gnu/README.txt index 99a5d743..85b07eb6 100644 --- a/examples/arm-cm/dpp_nucleo-c031c6_mpu/qxk/gnu/README.txt +++ b/examples/arm-cm/dpp_nucleo-c031c6_mpu/qxk/gnu/README.txt @@ -31,7 +31,7 @@ to be adjusted in the provided Makefile, by editing the symbol: GNU_ARM. As described in the comment for this symbol, the GNU-ARM toolset is taken from: http://gnutoolchains.com/arm-eabi -It is highly recommened to use the same GNU-ARM distribution, especially +It is highly recommended to use the same GNU-ARM distribution, especially for ARM Cortex-M projects, due to the support for the hardware FPU (float-abi=hard). *** diff --git a/examples/arm-cm/dpp_nucleo-h743zi/dpp.qm b/examples/arm-cm/dpp_nucleo-h743zi/dpp.qm index ac9f2bc9..b2b8aea4 100644 --- a/examples/arm-cm/dpp_nucleo-h743zi/dpp.qm +++ b/examples/arm-cm/dpp_nucleo-h743zi/dpp.qm @@ -257,7 +257,7 @@ for (uint8_t n = 0U; n < N_PHILO; ++n) { - // give permissions to eat... + // give permissions to eat... for (uint8_t n = 0U; n < N_PHILO; ++n) { if (me->isHungry[n] && (me->fork[left(n)] == FREE) diff --git a/examples/arm-cm/dpp_nucleo-h743zi/qk/bsp.c b/examples/arm-cm/dpp_nucleo-h743zi/qk/bsp.c index 48d2cc65..4f67f693 100644 --- a/examples/arm-cm/dpp_nucleo-h743zi/qk/bsp.c +++ b/examples/arm-cm/dpp_nucleo-h743zi/qk/bsp.c @@ -431,7 +431,7 @@ QSTimeCtr QS_onGetTime(void) { // NOTE: invoked with interrupts DISABLED if ((SysTick->CTRL & SysTick_CTRL_COUNTFLAG_Msk) == 0) { // not set? return QS_tickTime_ - (QSTimeCtr)SysTick->VAL; } - else { // the rollover occured, but the SysTick_ISR did not run yet + else { // the rollover occurred, but the SysTick_ISR did not run yet return QS_tickTime_ + QS_tickPeriod_ - (QSTimeCtr)SysTick->VAL; } } diff --git a/examples/arm-cm/dpp_nucleo-h743zi/qk/gnu/Makefile b/examples/arm-cm/dpp_nucleo-h743zi/qk/gnu/Makefile index 8cdabe24..42dd5390 100644 --- a/examples/arm-cm/dpp_nucleo-h743zi/qk/gnu/Makefile +++ b/examples/arm-cm/dpp_nucleo-h743zi/qk/gnu/Makefile @@ -56,7 +56,7 @@ PROJECT := dpp-qk # project directories # -# location of the QP/C framework (if not provided in an environemnt var.) +# location of the QP/C framework (if not provided in an environment var.) ifeq ($(QPC),) QPC := ../../../../.. endif @@ -191,7 +191,7 @@ RM := rm # build options for various configurations for ARM Cortex-M # -# combine all the soruces... +# combine all the sources... C_SRCS += $(QP_SRCS) ASM_SRCS += $(QP_ASMS) diff --git a/examples/arm-cm/dpp_nucleo-h743zi/qk/gnu/README.txt b/examples/arm-cm/dpp_nucleo-h743zi/qk/gnu/README.txt index 29af98f5..4450a7f9 100644 --- a/examples/arm-cm/dpp_nucleo-h743zi/qk/gnu/README.txt +++ b/examples/arm-cm/dpp_nucleo-h743zi/qk/gnu/README.txt @@ -31,7 +31,7 @@ to be adjusted in the provided Makefile, by editing the symbol: GNU_ARM. As described in the comment for this symbol, the GNU-ARM toolset is taken from: http://gnutoolchains.com/arm-eabi -It is highly recommened to use the same GNU-ARM distribution, especially +It is highly recommended to use the same GNU-ARM distribution, especially for ARM Cortex-M projects, due to the support for the hardware FPU (float-abi=hard). *** @@ -82,7 +82,7 @@ Adjusting the CPU Clock Speed ============================= The current setting is to run at 2MHz from the MSI (internal oscillator), but the CPU clock speed can be modified by editing the file -system_stm32l1xx.c. Ther file system_stm32l0xx.c.pll provides an example +system_stm32l1xx.c. The file system_stm32l0xx.c.pll provides an example of clock setting using the PLL driven from the MSE. *** diff --git a/examples/arm-cm/dpp_nucleo-h743zi/qv/bsp.c b/examples/arm-cm/dpp_nucleo-h743zi/qv/bsp.c index d8e84080..f44900fa 100644 --- a/examples/arm-cm/dpp_nucleo-h743zi/qv/bsp.c +++ b/examples/arm-cm/dpp_nucleo-h743zi/qv/bsp.c @@ -421,7 +421,7 @@ QSTimeCtr QS_onGetTime(void) { // NOTE: invoked with interrupts DISABLED if ((SysTick->CTRL & SysTick_CTRL_COUNTFLAG_Msk) == 0) { // not set? return QS_tickTime_ - (QSTimeCtr)SysTick->VAL; } - else { // the rollover occured, but the SysTick_ISR did not run yet + else { // the rollover occurred, but the SysTick_ISR did not run yet return QS_tickTime_ + QS_tickPeriod_ - (QSTimeCtr)SysTick->VAL; } } @@ -492,7 +492,7 @@ void QS_onCommand(uint8_t cmdId, // // NOTE3: // The User LED is used to visualize the idle loop activity. The brightness -// of the LED is proportional to the frequency of invcations of the idle loop. +// of the LED is proportional to the frequency of invocations of the idle loop. // Please note that the LED is toggled with interrupts locked, so no interrupt // execution time contributes to the brightness of the User LED. // diff --git a/examples/arm-cm/dpp_nucleo-h743zi/qv/gnu/Makefile b/examples/arm-cm/dpp_nucleo-h743zi/qv/gnu/Makefile index c7bdeb43..b8ec4d8e 100644 --- a/examples/arm-cm/dpp_nucleo-h743zi/qv/gnu/Makefile +++ b/examples/arm-cm/dpp_nucleo-h743zi/qv/gnu/Makefile @@ -56,7 +56,7 @@ PROJECT := dpp-qv # project directories # -# location of the QP/C framework (if not provided in an environemnt var.) +# location of the QP/C framework (if not provided in an environment var.) ifeq ($(QPC),) QPC := ../../../../.. endif @@ -191,7 +191,7 @@ RM := rm # build options for various configurations for ARM Cortex-M # -# combine all the soruces... +# combine all the sources... C_SRCS += $(QP_SRCS) ASM_SRCS += $(QP_ASMS) diff --git a/examples/arm-cm/dpp_nucleo-h743zi/qv/gnu/README.txt b/examples/arm-cm/dpp_nucleo-h743zi/qv/gnu/README.txt index 29af98f5..4450a7f9 100644 --- a/examples/arm-cm/dpp_nucleo-h743zi/qv/gnu/README.txt +++ b/examples/arm-cm/dpp_nucleo-h743zi/qv/gnu/README.txt @@ -31,7 +31,7 @@ to be adjusted in the provided Makefile, by editing the symbol: GNU_ARM. As described in the comment for this symbol, the GNU-ARM toolset is taken from: http://gnutoolchains.com/arm-eabi -It is highly recommened to use the same GNU-ARM distribution, especially +It is highly recommended to use the same GNU-ARM distribution, especially for ARM Cortex-M projects, due to the support for the hardware FPU (float-abi=hard). *** @@ -82,7 +82,7 @@ Adjusting the CPU Clock Speed ============================= The current setting is to run at 2MHz from the MSI (internal oscillator), but the CPU clock speed can be modified by editing the file -system_stm32l1xx.c. Ther file system_stm32l0xx.c.pll provides an example +system_stm32l1xx.c. The file system_stm32l0xx.c.pll provides an example of clock setting using the PLL driven from the MSE. *** diff --git a/examples/arm-cm/dpp_nucleo-h743zi/qxk/bsp.c b/examples/arm-cm/dpp_nucleo-h743zi/qxk/bsp.c index f834070a..651f4dd5 100644 --- a/examples/arm-cm/dpp_nucleo-h743zi/qxk/bsp.c +++ b/examples/arm-cm/dpp_nucleo-h743zi/qxk/bsp.c @@ -457,7 +457,7 @@ QSTimeCtr QS_onGetTime(void) { // NOTE: invoked with interrupts DISABLED if ((SysTick->CTRL & SysTick_CTRL_COUNTFLAG_Msk) == 0) { // not set? return QS_tickTime_ - (QSTimeCtr)SysTick->VAL; } - else { // the rollover occured, but the SysTick_ISR did not run yet + else { // the rollover occurred, but the SysTick_ISR did not run yet return QS_tickTime_ + QS_tickPeriod_ - (QSTimeCtr)SysTick->VAL; } } diff --git a/examples/arm-cm/dpp_nucleo-h743zi/qxk/gnu/Makefile b/examples/arm-cm/dpp_nucleo-h743zi/qxk/gnu/Makefile index 991af12d..bf6c640f 100644 --- a/examples/arm-cm/dpp_nucleo-h743zi/qxk/gnu/Makefile +++ b/examples/arm-cm/dpp_nucleo-h743zi/qxk/gnu/Makefile @@ -56,7 +56,7 @@ PROJECT := dpp-qxk # project directories # -# location of the QP/C framework (if not provided in an environemnt var.) +# location of the QP/C framework (if not provided in an environment var.) ifeq ($(QPC),) QPC := ../../../../.. endif @@ -196,7 +196,7 @@ RM := rm # build options for various configurations for ARM Cortex-M # -# combine all the soruces... +# combine all the sources... C_SRCS += $(QP_SRCS) ASM_SRCS += $(QP_ASMS) diff --git a/examples/arm-cm/dpp_nucleo-h743zi/qxk/gnu/README.txt b/examples/arm-cm/dpp_nucleo-h743zi/qxk/gnu/README.txt index 29af98f5..4450a7f9 100644 --- a/examples/arm-cm/dpp_nucleo-h743zi/qxk/gnu/README.txt +++ b/examples/arm-cm/dpp_nucleo-h743zi/qxk/gnu/README.txt @@ -31,7 +31,7 @@ to be adjusted in the provided Makefile, by editing the symbol: GNU_ARM. As described in the comment for this symbol, the GNU-ARM toolset is taken from: http://gnutoolchains.com/arm-eabi -It is highly recommened to use the same GNU-ARM distribution, especially +It is highly recommended to use the same GNU-ARM distribution, especially for ARM Cortex-M projects, due to the support for the hardware FPU (float-abi=hard). *** @@ -82,7 +82,7 @@ Adjusting the CPU Clock Speed ============================= The current setting is to run at 2MHz from the MSI (internal oscillator), but the CPU clock speed can be modified by editing the file -system_stm32l1xx.c. Ther file system_stm32l0xx.c.pll provides an example +system_stm32l1xx.c. The file system_stm32l0xx.c.pll provides an example of clock setting using the PLL driven from the MSE. *** diff --git a/examples/arm-cm/dpp_nucleo-h743zi/stm32h7xx_hal_msp.c b/examples/arm-cm/dpp_nucleo-h743zi/stm32h7xx_hal_msp.c index a37af714..46847423 100644 --- a/examples/arm-cm/dpp_nucleo-h743zi/stm32h7xx_hal_msp.c +++ b/examples/arm-cm/dpp_nucleo-h743zi/stm32h7xx_hal_msp.c @@ -88,11 +88,11 @@ //! // NOTE: -// STM32Cube's initialization calls the weakly defiend HAL_InitTick(), which +// STM32Cube's initialization calls the weakly defined HAL_InitTick(), which // by default configures and starts the Systick interrupt. This is TOO EARLY, -// because the system os NOT ready yet to handle interrutps. +// because the system os NOT ready yet to handle interrupts. // To avoid problems, a dummy definition for HAL_InitTick() is provided -// in the fiel stm32l5xx_hal_msp.c. The SystTick is configured and +// in the file stm32l5xx_hal_msp.c. The SystTick is configured and // started later in QF_onStartup(). // HAL_StatusTypeDef HAL_InitTick(uint32_t TickPriority) { @@ -162,7 +162,7 @@ void HAL_UART_MspDeInit(UART_HandleTypeDef *huart) // this is delayed till QF_onCleanup() } -// dummy legacy callacks for STM32CubeH7 +// dummy legacy callbacks for STM32CubeH7 void HAL_UARTEx_RxFifoFullCallback(UART_HandleTypeDef *huart) { (void)huart; // unused parameter } diff --git a/examples/arm-cm/dpp_nucleo-l053r8/dpp.qm b/examples/arm-cm/dpp_nucleo-l053r8/dpp.qm index ac9f2bc9..b2b8aea4 100644 --- a/examples/arm-cm/dpp_nucleo-l053r8/dpp.qm +++ b/examples/arm-cm/dpp_nucleo-l053r8/dpp.qm @@ -257,7 +257,7 @@ for (uint8_t n = 0U; n < N_PHILO; ++n) { - // give permissions to eat... + // give permissions to eat... for (uint8_t n = 0U; n < N_PHILO; ++n) { if (me->isHungry[n] && (me->fork[left(n)] == FREE) diff --git a/examples/arm-cm/dpp_nucleo-l053r8/qk/armclang/README.txt b/examples/arm-cm/dpp_nucleo-l053r8/qk/armclang/README.txt index a54a1ba3..8351c9be 100644 --- a/examples/arm-cm/dpp_nucleo-l053r8/qk/armclang/README.txt +++ b/examples/arm-cm/dpp_nucleo-l053r8/qk/armclang/README.txt @@ -23,7 +23,7 @@ command-line options for the ARM assembler (see the Asm tab in the "Options for Target" dialog box in uVision). Specifically, you should define symbols: Stack_Size=xxx Heap_Size=yyy, where xxx represents a numerical value of stack size and yyy the -numberical value of the heap size. +numerical value of the heap size. Selecting QK Exception @@ -75,7 +75,7 @@ Adjusting the CPU Clock Speed ============================= The current setting is to run at 2MHz from the MSI (internal oscillator), but the CPU clock speed can be modified by editing the file -system_stm32l1xx.c. Ther file system_stm32l0xx.c.pll provides an example +system_stm32l1xx.c. The file system_stm32l0xx.c.pll provides an example of clock setting using the PLL driven from the MSE. *** diff --git a/examples/arm-cm/dpp_nucleo-l053r8/qk/bsp.c b/examples/arm-cm/dpp_nucleo-l053r8/qk/bsp.c index 2c11e1af..6b698a4e 100644 --- a/examples/arm-cm/dpp_nucleo-l053r8/qk/bsp.c +++ b/examples/arm-cm/dpp_nucleo-l053r8/qk/bsp.c @@ -463,7 +463,7 @@ QSTimeCtr QS_onGetTime(void) { // NOTE: invoked with interrupts DISABLED if ((SysTick->CTRL & SysTick_CTRL_COUNTFLAG_Msk) == 0U) { // not set? return QS_tickTime_ - (QSTimeCtr)SysTick->VAL; } - else { // the rollover occured, but the SysTick_ISR did not run yet + else { // the rollover occurred, but the SysTick_ISR did not run yet return QS_tickTime_ + QS_tickPeriod_ - (QSTimeCtr)SysTick->VAL; } } diff --git a/examples/arm-cm/dpp_nucleo-l053r8/qk/gnu/Makefile b/examples/arm-cm/dpp_nucleo-l053r8/qk/gnu/Makefile index 7cbded4e..2e6dcd67 100644 --- a/examples/arm-cm/dpp_nucleo-l053r8/qk/gnu/Makefile +++ b/examples/arm-cm/dpp_nucleo-l053r8/qk/gnu/Makefile @@ -56,7 +56,7 @@ PROJECT := dpp-qk # project directories # -# location of the QP/C framework (if not provided in an environemnt var.) +# location of the QP/C framework (if not provided in an environment var.) ifeq ($(QPC),) QPC := ../../../../.. endif @@ -176,7 +176,7 @@ RM := rm # build options for various configurations for ARM Cortex-M # -# combine all the soruces... +# combine all the sources... C_SRCS += $(QP_SRCS) ASM_SRCS += $(QP_ASMS) diff --git a/examples/arm-cm/dpp_nucleo-l053r8/qk/gnu/README.txt b/examples/arm-cm/dpp_nucleo-l053r8/qk/gnu/README.txt index 7dae1b3c..332178d4 100644 --- a/examples/arm-cm/dpp_nucleo-l053r8/qk/gnu/README.txt +++ b/examples/arm-cm/dpp_nucleo-l053r8/qk/gnu/README.txt @@ -31,7 +31,7 @@ to be adjusted in the provided Makefile, by editing the symbol: GNU_ARM. As described in the comment for this symbol, the GNU-ARM toolset is taken from: http://gnutoolchains.com/arm-eabi -It is highly recommened to use the same GNU-ARM distribution, especially +It is highly recommended to use the same GNU-ARM distribution, especially for ARM Cortex-M projects, due to the support for the hardware FPU (float-abi=hard). *** @@ -93,7 +93,7 @@ Adjusting the CPU Clock Speed ============================= The current setting is to run at 2MHz from the MSI (internal oscillator), but the CPU clock speed can be modified by editing the file -system_stm32l1xx.c. Ther file system_stm32l0xx.c.pll provides an example +system_stm32l1xx.c. The file system_stm32l0xx.c.pll provides an example of clock setting using the PLL driven from the MSE. *** diff --git a/examples/arm-cm/dpp_nucleo-l053r8/qv/armclang/README.txt b/examples/arm-cm/dpp_nucleo-l053r8/qv/armclang/README.txt index f5453372..3c312c7a 100644 --- a/examples/arm-cm/dpp_nucleo-l053r8/qv/armclang/README.txt +++ b/examples/arm-cm/dpp_nucleo-l053r8/qv/armclang/README.txt @@ -24,7 +24,7 @@ command-line options for the ARM assembler (see the Asm tab in the "Options for Target" dialog box in uVision). Specifically, you should define symbols: Stack_Size=xxx Heap_Size=yyy, where xxx represents a numerical value of stack size and yyy the -numberical value of the heap size. +numerical value of the heap size. Startup Code @@ -58,7 +58,7 @@ Adjusting the CPU Clock Speed ============================= The current setting is to run at 2MHz from the MSI (internal oscillator), but the CPU clock speed can be modified by editing the file -system_stm32l1xx.c. Ther file system_stm32l0xx.c.pll provides an example +system_stm32l1xx.c. The file system_stm32l0xx.c.pll provides an example of clock setting using the PLL driven from the MSE. *** diff --git a/examples/arm-cm/dpp_nucleo-l053r8/qv/bsp.c b/examples/arm-cm/dpp_nucleo-l053r8/qv/bsp.c index 281a85d9..d8226a1e 100644 --- a/examples/arm-cm/dpp_nucleo-l053r8/qv/bsp.c +++ b/examples/arm-cm/dpp_nucleo-l053r8/qv/bsp.c @@ -455,7 +455,7 @@ QSTimeCtr QS_onGetTime(void) { // NOTE: invoked with interrupts DISABLED if ((SysTick->CTRL & SysTick_CTRL_COUNTFLAG_Msk) == 0U) { // not set? return QS_tickTime_ - (QSTimeCtr)SysTick->VAL; } - else { // the rollover occured, but the SysTick_ISR did not run yet + else { // the rollover occurred, but the SysTick_ISR did not run yet return QS_tickTime_ + QS_tickPeriod_ - (QSTimeCtr)SysTick->VAL; } } diff --git a/examples/arm-cm/dpp_nucleo-l053r8/qv/gnu/Makefile b/examples/arm-cm/dpp_nucleo-l053r8/qv/gnu/Makefile index ec70675e..580eb364 100644 --- a/examples/arm-cm/dpp_nucleo-l053r8/qv/gnu/Makefile +++ b/examples/arm-cm/dpp_nucleo-l053r8/qv/gnu/Makefile @@ -57,7 +57,7 @@ PROJECT := dpp-qv # project directories # -# location of the QP/C framework (if not provided in an environemnt var.) +# location of the QP/C framework (if not provided in an environment var.) ifeq ($(QPC),) QPC := ../../../../.. endif @@ -177,7 +177,7 @@ RM := rm # build options for various configurations for ARM Cortex-M # -# combine all the soruces... +# combine all the sources... C_SRCS += $(QP_SRCS) ASM_SRCS += $(QP_ASMS) diff --git a/examples/arm-cm/dpp_nucleo-l053r8/qv/gnu/README.txt b/examples/arm-cm/dpp_nucleo-l053r8/qv/gnu/README.txt index cce0e5f7..0745590d 100644 --- a/examples/arm-cm/dpp_nucleo-l053r8/qv/gnu/README.txt +++ b/examples/arm-cm/dpp_nucleo-l053r8/qv/gnu/README.txt @@ -31,7 +31,7 @@ to be adjusted in the provided Makefile, by editing the symbol: GNU_ARM. As described in the comment for this symbol, the GNU-ARM toolset is taken from: http://gnutoolchains.com/arm-eabi -It is highly recommened to use the same GNU-ARM distribution, especially +It is highly recommended to use the same GNU-ARM distribution, especially for ARM Cortex-M projects, due to the support for the hardware FPU (float-abi=hard). *** @@ -82,7 +82,7 @@ Adjusting the CPU Clock Speed ============================= The current setting is to run at 2MHz from the MSI (internal oscillator), but the CPU clock speed can be modified by editing the file -system_stm32l1xx.c. Ther file system_stm32l0xx.c.pll provides an example +system_stm32l1xx.c. The file system_stm32l0xx.c.pll provides an example of clock setting using the PLL driven from the MSE. *** diff --git a/examples/arm-cm/dpp_nucleo-l053r8/qxk/armclang/README.txt b/examples/arm-cm/dpp_nucleo-l053r8/qxk/armclang/README.txt index f5453372..3c312c7a 100644 --- a/examples/arm-cm/dpp_nucleo-l053r8/qxk/armclang/README.txt +++ b/examples/arm-cm/dpp_nucleo-l053r8/qxk/armclang/README.txt @@ -24,7 +24,7 @@ command-line options for the ARM assembler (see the Asm tab in the "Options for Target" dialog box in uVision). Specifically, you should define symbols: Stack_Size=xxx Heap_Size=yyy, where xxx represents a numerical value of stack size and yyy the -numberical value of the heap size. +numerical value of the heap size. Startup Code @@ -58,7 +58,7 @@ Adjusting the CPU Clock Speed ============================= The current setting is to run at 2MHz from the MSI (internal oscillator), but the CPU clock speed can be modified by editing the file -system_stm32l1xx.c. Ther file system_stm32l0xx.c.pll provides an example +system_stm32l1xx.c. The file system_stm32l0xx.c.pll provides an example of clock setting using the PLL driven from the MSE. *** diff --git a/examples/arm-cm/dpp_nucleo-l053r8/qxk/bsp.c b/examples/arm-cm/dpp_nucleo-l053r8/qxk/bsp.c index acad530f..45f019ee 100644 --- a/examples/arm-cm/dpp_nucleo-l053r8/qxk/bsp.c +++ b/examples/arm-cm/dpp_nucleo-l053r8/qxk/bsp.c @@ -477,7 +477,7 @@ QSTimeCtr QS_onGetTime(void) { // NOTE: invoked with interrupts DISABLED if ((SysTick->CTRL & 0x00010000) == 0) { // COUNT no set? return QS_tickTime_ - (QSTimeCtr)SysTick->VAL; } - else { // the rollover occured, but the SysTick_ISR did not run yet + else { // the rollover occurred, but the SysTick_ISR did not run yet return QS_tickTime_ + QS_tickPeriod_ - (QSTimeCtr)SysTick->VAL; } } diff --git a/examples/arm-cm/dpp_nucleo-l053r8/qxk/gnu/Makefile b/examples/arm-cm/dpp_nucleo-l053r8/qxk/gnu/Makefile index 32f169b3..5e4be95f 100644 --- a/examples/arm-cm/dpp_nucleo-l053r8/qxk/gnu/Makefile +++ b/examples/arm-cm/dpp_nucleo-l053r8/qxk/gnu/Makefile @@ -57,7 +57,7 @@ PROJECT := dpp-qxk # project directories # -# location of the QP/C framework (if not provided in an environemnt var.) +# location of the QP/C framework (if not provided in an environment var.) ifeq ($(QPC),) QPC := ../../../../.. endif @@ -182,7 +182,7 @@ RM := rm # build options for various configurations for ARM Cortex-M # -# combine all the soruces... +# combine all the sources... C_SRCS += $(QP_SRCS) ASM_SRCS += $(QP_ASMS) diff --git a/examples/arm-cm/dpp_nucleo-l053r8/qxk/gnu/README.txt b/examples/arm-cm/dpp_nucleo-l053r8/qxk/gnu/README.txt index cce0e5f7..0745590d 100644 --- a/examples/arm-cm/dpp_nucleo-l053r8/qxk/gnu/README.txt +++ b/examples/arm-cm/dpp_nucleo-l053r8/qxk/gnu/README.txt @@ -31,7 +31,7 @@ to be adjusted in the provided Makefile, by editing the symbol: GNU_ARM. As described in the comment for this symbol, the GNU-ARM toolset is taken from: http://gnutoolchains.com/arm-eabi -It is highly recommened to use the same GNU-ARM distribution, especially +It is highly recommended to use the same GNU-ARM distribution, especially for ARM Cortex-M projects, due to the support for the hardware FPU (float-abi=hard). *** @@ -82,7 +82,7 @@ Adjusting the CPU Clock Speed ============================= The current setting is to run at 2MHz from the MSI (internal oscillator), but the CPU clock speed can be modified by editing the file -system_stm32l1xx.c. Ther file system_stm32l0xx.c.pll provides an example +system_stm32l1xx.c. The file system_stm32l0xx.c.pll provides an example of clock setting using the PLL driven from the MSE. *** diff --git a/examples/arm-cm/dpp_nucleo-l152re/dpp.qm b/examples/arm-cm/dpp_nucleo-l152re/dpp.qm index ac9f2bc9..b2b8aea4 100644 --- a/examples/arm-cm/dpp_nucleo-l152re/dpp.qm +++ b/examples/arm-cm/dpp_nucleo-l152re/dpp.qm @@ -257,7 +257,7 @@ for (uint8_t n = 0U; n < N_PHILO; ++n) { - // give permissions to eat... + // give permissions to eat... for (uint8_t n = 0U; n < N_PHILO; ++n) { if (me->isHungry[n] && (me->fork[left(n)] == FREE) diff --git a/examples/arm-cm/dpp_nucleo-l152re/qk/armclang/README.txt b/examples/arm-cm/dpp_nucleo-l152re/qk/armclang/README.txt index a6979622..87697dbc 100644 --- a/examples/arm-cm/dpp_nucleo-l152re/qk/armclang/README.txt +++ b/examples/arm-cm/dpp_nucleo-l152re/qk/armclang/README.txt @@ -24,7 +24,7 @@ command-line options for the ARM assembler (see the Asm tab in the "Options for Target" dialog box in uVision). Specifically, you should define symbols: Stack_Size=xxx Heap_Size=yyy, where xxx represents a numerical value of stack size and yyy the -numberical value of the heap size (for most embedded projects +numerical value of the heap size (for most embedded projects yyy should be 0, as the using the heap is not recommended). @@ -59,7 +59,7 @@ Adjusting the CPU Clock Speed ============================= The current setting is to run at 2MHz from the MSI (internal oscillator), but the CPU clock speed can be modified by editing the file -system_stm32l1xx.c. Ther file system_stm32l1xx_pll.c provides an example +system_stm32l1xx.c. The file system_stm32l1xx_pll.c provides an example of clock setting using the PLL driven from the MSE. *** diff --git a/examples/arm-cm/dpp_nucleo-l152re/qk/bsp.c b/examples/arm-cm/dpp_nucleo-l152re/qk/bsp.c index df3ec0b3..7808fa65 100644 --- a/examples/arm-cm/dpp_nucleo-l152re/qk/bsp.c +++ b/examples/arm-cm/dpp_nucleo-l152re/qk/bsp.c @@ -456,7 +456,7 @@ QSTimeCtr QS_onGetTime(void) { // NOTE: invoked with interrupts DISABLED if ((SysTick->CTRL & 0x00010000U) == 0U) { // COUNT no set? return QS_tickTime_ - (QSTimeCtr)SysTick->VAL; } - else { // the rollover occured, but the SysTick_ISR did not run yet + else { // the rollover occurred, but the SysTick_ISR did not run yet return QS_tickTime_ + QS_tickPeriod_ - (QSTimeCtr)SysTick->VAL; } } diff --git a/examples/arm-cm/dpp_nucleo-l152re/qk/gnu/Makefile b/examples/arm-cm/dpp_nucleo-l152re/qk/gnu/Makefile index c55ba5e9..7f44b910 100644 --- a/examples/arm-cm/dpp_nucleo-l152re/qk/gnu/Makefile +++ b/examples/arm-cm/dpp_nucleo-l152re/qk/gnu/Makefile @@ -57,7 +57,7 @@ PROJECT := dpp-qk # project directories # -# location of the QP/C framework (if not provided in an environemnt var.) +# location of the QP/C framework (if not provided in an environment var.) ifeq ($(QPC),) QPC := ../../../../.. endif @@ -178,7 +178,7 @@ RM := rm # build options for various configurations for ARM Cortex-M # -# combine all the soruces... +# combine all the sources... C_SRCS += $(QP_SRCS) ASM_SRCS += $(QP_ASMS) diff --git a/examples/arm-cm/dpp_nucleo-l152re/qk/gnu/README.txt b/examples/arm-cm/dpp_nucleo-l152re/qk/gnu/README.txt index 18d8340e..6cd286bc 100644 --- a/examples/arm-cm/dpp_nucleo-l152re/qk/gnu/README.txt +++ b/examples/arm-cm/dpp_nucleo-l152re/qk/gnu/README.txt @@ -31,7 +31,7 @@ to be adjusted in the provided Makefile, by editing the symbol: GNU_ARM. As described in the comment for this symbol, the GNU-ARM toolset is taken from: http://gnutoolchains.com/arm-eabi -It is highly recommened to use the same GNU-ARM distribution, especially +It is highly recommended to use the same GNU-ARM distribution, especially for ARM Cortex-M projects, due to the support for the hardware FPU (float-abi=hard). *** @@ -82,7 +82,7 @@ Adjusting the CPU Clock Speed ============================= The current setting is to run at 2MHz from the MSI (internal oscillator), but the CPU clock speed can be modified by editing the file -system_stm32l1xx.c. Ther file system_stm32l0xx.c.pll provides an example +system_stm32l1xx.c. The file system_stm32l0xx.c.pll provides an example of clock setting using the PLL driven from the MSE. *** diff --git a/examples/arm-cm/dpp_nucleo-l152re/qv/armclang/README.txt b/examples/arm-cm/dpp_nucleo-l152re/qv/armclang/README.txt index 2484477d..0173c80d 100644 --- a/examples/arm-cm/dpp_nucleo-l152re/qv/armclang/README.txt +++ b/examples/arm-cm/dpp_nucleo-l152re/qv/armclang/README.txt @@ -24,7 +24,7 @@ command-line options for the ARM assembler (see the Asm tab in the "Options for Target" dialog box in uVision). Specifically, you should define symbols: Stack_Size=xxx Heap_Size=yyy, where xxx represents a numerical value of stack size and yyy the -numberical value of the heap size (for most embedded projects +numerical value of the heap size (for most embedded projects yyy should be 0, as the using the heap is not recommended). @@ -67,7 +67,7 @@ SystemCoreClock variable to 32000000 (32MHz). However, the NUCLEO-L152RE board appears to run actually only at 16MHz. As a quick fix, the projects in the qpc\examples directory set the HSE_VALUE to only 4MHz (HSE_VALUE=4000000) in the command-line options to the compiler, to match -the reporeted SystemCoreClock to the actual speed of the clock (16MHz). +the reported SystemCoreClock to the actual speed of the clock (16MHz). At this point it is not clear why the CPU clock is set to only half of the expected speed. *** diff --git a/examples/arm-cm/dpp_nucleo-l152re/qv/bsp.c b/examples/arm-cm/dpp_nucleo-l152re/qv/bsp.c index 3e2e90c2..21e266d5 100644 --- a/examples/arm-cm/dpp_nucleo-l152re/qv/bsp.c +++ b/examples/arm-cm/dpp_nucleo-l152re/qv/bsp.c @@ -452,7 +452,7 @@ QSTimeCtr QS_onGetTime(void) { // NOTE: invoked with interrupts DISABLED if ((SysTick->CTRL & 0x00010000U) == 0U) { // COUNT no set? return QS_tickTime_ - (QSTimeCtr)SysTick->VAL; } - else { // the rollover occured, but the SysTick_ISR did not run yet + else { // the rollover occurred, but the SysTick_ISR did not run yet return QS_tickTime_ + QS_tickPeriod_ - (QSTimeCtr)SysTick->VAL; } } diff --git a/examples/arm-cm/dpp_nucleo-l152re/qv/gnu/Makefile b/examples/arm-cm/dpp_nucleo-l152re/qv/gnu/Makefile index 8445cd62..ba375edc 100644 --- a/examples/arm-cm/dpp_nucleo-l152re/qv/gnu/Makefile +++ b/examples/arm-cm/dpp_nucleo-l152re/qv/gnu/Makefile @@ -57,7 +57,7 @@ PROJECT := dpp-qv # project directories # -# location of the QP/C framework (if not provided in an environemnt var.) +# location of the QP/C framework (if not provided in an environment var.) ifeq ($(QPC),) QPC := ../../../../.. endif @@ -178,7 +178,7 @@ RM := rm # build options for various configurations for ARM Cortex-M # -# combine all the soruces... +# combine all the sources... C_SRCS += $(QP_SRCS) ASM_SRCS += $(QP_ASMS) diff --git a/examples/arm-cm/dpp_nucleo-l152re/qv/gnu/README.txt b/examples/arm-cm/dpp_nucleo-l152re/qv/gnu/README.txt index 18d8340e..6cd286bc 100644 --- a/examples/arm-cm/dpp_nucleo-l152re/qv/gnu/README.txt +++ b/examples/arm-cm/dpp_nucleo-l152re/qv/gnu/README.txt @@ -31,7 +31,7 @@ to be adjusted in the provided Makefile, by editing the symbol: GNU_ARM. As described in the comment for this symbol, the GNU-ARM toolset is taken from: http://gnutoolchains.com/arm-eabi -It is highly recommened to use the same GNU-ARM distribution, especially +It is highly recommended to use the same GNU-ARM distribution, especially for ARM Cortex-M projects, due to the support for the hardware FPU (float-abi=hard). *** @@ -82,7 +82,7 @@ Adjusting the CPU Clock Speed ============================= The current setting is to run at 2MHz from the MSI (internal oscillator), but the CPU clock speed can be modified by editing the file -system_stm32l1xx.c. Ther file system_stm32l0xx.c.pll provides an example +system_stm32l1xx.c. The file system_stm32l0xx.c.pll provides an example of clock setting using the PLL driven from the MSE. *** diff --git a/examples/arm-cm/dpp_nucleo-l152re/qxk/armclang/README.txt b/examples/arm-cm/dpp_nucleo-l152re/qxk/armclang/README.txt index a6979622..87697dbc 100644 --- a/examples/arm-cm/dpp_nucleo-l152re/qxk/armclang/README.txt +++ b/examples/arm-cm/dpp_nucleo-l152re/qxk/armclang/README.txt @@ -24,7 +24,7 @@ command-line options for the ARM assembler (see the Asm tab in the "Options for Target" dialog box in uVision). Specifically, you should define symbols: Stack_Size=xxx Heap_Size=yyy, where xxx represents a numerical value of stack size and yyy the -numberical value of the heap size (for most embedded projects +numerical value of the heap size (for most embedded projects yyy should be 0, as the using the heap is not recommended). @@ -59,7 +59,7 @@ Adjusting the CPU Clock Speed ============================= The current setting is to run at 2MHz from the MSI (internal oscillator), but the CPU clock speed can be modified by editing the file -system_stm32l1xx.c. Ther file system_stm32l1xx_pll.c provides an example +system_stm32l1xx.c. The file system_stm32l1xx_pll.c provides an example of clock setting using the PLL driven from the MSE. *** diff --git a/examples/arm-cm/dpp_nucleo-l152re/qxk/bsp.c b/examples/arm-cm/dpp_nucleo-l152re/qxk/bsp.c index 07f7d4c2..68cc086f 100644 --- a/examples/arm-cm/dpp_nucleo-l152re/qxk/bsp.c +++ b/examples/arm-cm/dpp_nucleo-l152re/qxk/bsp.c @@ -479,7 +479,7 @@ QSTimeCtr QS_onGetTime(void) { // NOTE: invoked with interrupts DISABLED if ((SysTick->CTRL & 0x00010000) == 0) { // COUNT no set? return QS_tickTime_ - (QSTimeCtr)SysTick->VAL; } - else { // the rollover occured, but the SysTick_ISR did not run yet + else { // the rollover occurred, but the SysTick_ISR did not run yet return QS_tickTime_ + QS_tickPeriod_ - (QSTimeCtr)SysTick->VAL; } } diff --git a/examples/arm-cm/dpp_nucleo-l152re/qxk/gnu/Makefile b/examples/arm-cm/dpp_nucleo-l152re/qxk/gnu/Makefile index b266d288..ccfdd59e 100644 --- a/examples/arm-cm/dpp_nucleo-l152re/qxk/gnu/Makefile +++ b/examples/arm-cm/dpp_nucleo-l152re/qxk/gnu/Makefile @@ -57,7 +57,7 @@ PROJECT := dpp-qxk # project directories # -# location of the QP/C framework (if not provided in an environemnt var.) +# location of the QP/C framework (if not provided in an environment var.) ifeq ($(QPC),) QPC := ../../../../.. endif @@ -183,7 +183,7 @@ RM := rm # build options for various configurations for ARM Cortex-M # -# combine all the soruces... +# combine all the sources... C_SRCS += $(QP_SRCS) ASM_SRCS += $(QP_ASMS) diff --git a/examples/arm-cm/dpp_nucleo-l152re/qxk/gnu/README.txt b/examples/arm-cm/dpp_nucleo-l152re/qxk/gnu/README.txt index 18d8340e..6cd286bc 100644 --- a/examples/arm-cm/dpp_nucleo-l152re/qxk/gnu/README.txt +++ b/examples/arm-cm/dpp_nucleo-l152re/qxk/gnu/README.txt @@ -31,7 +31,7 @@ to be adjusted in the provided Makefile, by editing the symbol: GNU_ARM. As described in the comment for this symbol, the GNU-ARM toolset is taken from: http://gnutoolchains.com/arm-eabi -It is highly recommened to use the same GNU-ARM distribution, especially +It is highly recommended to use the same GNU-ARM distribution, especially for ARM Cortex-M projects, due to the support for the hardware FPU (float-abi=hard). *** @@ -82,7 +82,7 @@ Adjusting the CPU Clock Speed ============================= The current setting is to run at 2MHz from the MSI (internal oscillator), but the CPU clock speed can be modified by editing the file -system_stm32l1xx.c. Ther file system_stm32l0xx.c.pll provides an example +system_stm32l1xx.c. The file system_stm32l0xx.c.pll provides an example of clock setting using the PLL driven from the MSE. *** diff --git a/examples/arm-cm/dpp_nucleo-l552ze/dpp.qm b/examples/arm-cm/dpp_nucleo-l552ze/dpp.qm index ac9f2bc9..b2b8aea4 100644 --- a/examples/arm-cm/dpp_nucleo-l552ze/dpp.qm +++ b/examples/arm-cm/dpp_nucleo-l552ze/dpp.qm @@ -257,7 +257,7 @@ for (uint8_t n = 0U; n < N_PHILO; ++n) { - // give permissions to eat... + // give permissions to eat... for (uint8_t n = 0U; n < N_PHILO; ++n) { if (me->isHungry[n] && (me->fork[left(n)] == FREE) diff --git a/examples/arm-cm/dpp_nucleo-l552ze/qk/bsp.c b/examples/arm-cm/dpp_nucleo-l552ze/qk/bsp.c index 3c66db5d..75705287 100644 --- a/examples/arm-cm/dpp_nucleo-l552ze/qk/bsp.c +++ b/examples/arm-cm/dpp_nucleo-l552ze/qk/bsp.c @@ -470,7 +470,7 @@ QSTimeCtr QS_onGetTime(void) { // NOTE: invoked with interrupts DISABLED if ((SysTick->CTRL & SysTick_CTRL_COUNTFLAG_Msk) == 0U) { // not set? return QS_tickTime_ - (QSTimeCtr)SysTick->VAL; } - else { // the rollover occured, but the SysTick_ISR did not run yet + else { // the rollover occurred, but the SysTick_ISR did not run yet return QS_tickTime_ + QS_tickPeriod_ - (QSTimeCtr)SysTick->VAL; } } diff --git a/examples/arm-cm/dpp_nucleo-l552ze/qk/gnu/Makefile b/examples/arm-cm/dpp_nucleo-l552ze/qk/gnu/Makefile index ba1eebb3..cb957da9 100644 --- a/examples/arm-cm/dpp_nucleo-l552ze/qk/gnu/Makefile +++ b/examples/arm-cm/dpp_nucleo-l552ze/qk/gnu/Makefile @@ -57,7 +57,7 @@ PROJECT := dpp-qk # project directories # -# location of the QP/C framework (if not provided in an environemnt var.) +# location of the QP/C framework (if not provided in an environment var.) ifeq ($(QPC),) QPC := ../../../../.. endif @@ -201,7 +201,7 @@ RM := rm # build options for various configurations for ARM Cortex-M # -# combine all the soruces... +# combine all the sources... C_SRCS += $(QP_SRCS) ASM_SRCS += $(QP_ASMS) diff --git a/examples/arm-cm/dpp_nucleo-l552ze/qv/bsp.c b/examples/arm-cm/dpp_nucleo-l552ze/qv/bsp.c index ca00e92c..07e046b6 100644 --- a/examples/arm-cm/dpp_nucleo-l552ze/qv/bsp.c +++ b/examples/arm-cm/dpp_nucleo-l552ze/qv/bsp.c @@ -458,7 +458,7 @@ QSTimeCtr QS_onGetTime(void) { // NOTE: invoked with interrupts DISABLED if ((SysTick->CTRL & SysTick_CTRL_COUNTFLAG_Msk) == 0U) { // not set? return QS_tickTime_ - (QSTimeCtr)SysTick->VAL; } - else { // the rollover occured, but the SysTick_ISR did not run yet + else { // the rollover occurred, but the SysTick_ISR did not run yet return QS_tickTime_ + QS_tickPeriod_ - (QSTimeCtr)SysTick->VAL; } } diff --git a/examples/arm-cm/dpp_nucleo-l552ze/qv/gnu/Makefile b/examples/arm-cm/dpp_nucleo-l552ze/qv/gnu/Makefile index 28dac4a2..9d3b8917 100644 --- a/examples/arm-cm/dpp_nucleo-l552ze/qv/gnu/Makefile +++ b/examples/arm-cm/dpp_nucleo-l552ze/qv/gnu/Makefile @@ -57,7 +57,7 @@ PROJECT := dpp-qv # project directories # -# location of the QP/C framework (if not provided in an environemnt var.) +# location of the QP/C framework (if not provided in an environment var.) ifeq ($(QPC),) QPC := ../../../../.. endif @@ -201,7 +201,7 @@ RM := rm # build options for various configurations for ARM Cortex-M # -# combine all the soruces... +# combine all the sources... C_SRCS += $(QP_SRCS) ASM_SRCS += $(QP_ASMS) diff --git a/examples/arm-cm/dpp_nucleo-l552ze/qxk/bsp.c b/examples/arm-cm/dpp_nucleo-l552ze/qxk/bsp.c index c9302751..a8fddddb 100644 --- a/examples/arm-cm/dpp_nucleo-l552ze/qxk/bsp.c +++ b/examples/arm-cm/dpp_nucleo-l552ze/qxk/bsp.c @@ -484,7 +484,7 @@ QSTimeCtr QS_onGetTime(void) { // NOTE: invoked with interrupts DISABLED if ((SysTick->CTRL & SysTick_CTRL_COUNTFLAG_Msk) == 0) { // not set? return QS_tickTime_ - (QSTimeCtr)SysTick->VAL; } - else { // the rollover occured, but the SysTick_ISR did not run yet + else { // the rollover occurred, but the SysTick_ISR did not run yet return QS_tickTime_ + QS_tickPeriod_ - (QSTimeCtr)SysTick->VAL; } } diff --git a/examples/arm-cm/dpp_nucleo-l552ze/qxk/gnu/Makefile b/examples/arm-cm/dpp_nucleo-l552ze/qxk/gnu/Makefile index 75ad7c8e..dd57b3f2 100644 --- a/examples/arm-cm/dpp_nucleo-l552ze/qxk/gnu/Makefile +++ b/examples/arm-cm/dpp_nucleo-l552ze/qxk/gnu/Makefile @@ -57,7 +57,7 @@ PROJECT := dpp-qxk # project directories # -# location of the QP/C framework (if not provided in an environemnt var.) +# location of the QP/C framework (if not provided in an environment var.) ifeq ($(QPC),) QPC := ../../../../.. endif @@ -206,7 +206,7 @@ RM := rm # build options for various configurations for ARM Cortex-M # -# combine all the soruces... +# combine all the sources... C_SRCS += $(QP_SRCS) ASM_SRCS += $(QP_ASMS) diff --git a/examples/arm-cm/dpp_nucleo-l552ze/stm32l5xx_hal_msp.c b/examples/arm-cm/dpp_nucleo-l552ze/stm32l5xx_hal_msp.c index d9dd69d2..7a40e2be 100644 --- a/examples/arm-cm/dpp_nucleo-l552ze/stm32l5xx_hal_msp.c +++ b/examples/arm-cm/dpp_nucleo-l552ze/stm32l5xx_hal_msp.c @@ -84,11 +84,11 @@ void HAL_MspInit(void) } // NOTE: -// STM32Cube's initialization calls the weakly defiend HAL_InitTick(), which +// STM32Cube's initialization calls the weakly defined HAL_InitTick(), which // by default configures and starts the Systick interrupt. This is TOO EARLY, -// because the system os NOT ready yet to handle interrutps. +// because the system os NOT ready yet to handle interrupts. // To avoid problems, a dummy definition for HAL_InitTick() is provided -// in the fiel stm32l5xx_hal_msp.c. The SystTick is configured and +// in the file stm32l5xx_hal_msp.c. The SystTick is configured and // started later in QF_onStartup(). // HAL_StatusTypeDef HAL_InitTick(uint32_t TickPriority) { diff --git a/examples/arm-cm/dpp_stm32f4-discovery/dpp.qm b/examples/arm-cm/dpp_stm32f4-discovery/dpp.qm index ac9f2bc9..b2b8aea4 100644 --- a/examples/arm-cm/dpp_stm32f4-discovery/dpp.qm +++ b/examples/arm-cm/dpp_stm32f4-discovery/dpp.qm @@ -257,7 +257,7 @@ for (uint8_t n = 0U; n < N_PHILO; ++n) { - // give permissions to eat... + // give permissions to eat... for (uint8_t n = 0U; n < N_PHILO; ++n) { if (me->isHungry[n] && (me->fork[left(n)] == FREE) diff --git a/examples/arm-cm/dpp_stm32f4-discovery/qk/armclang/README.txt b/examples/arm-cm/dpp_stm32f4-discovery/qk/armclang/README.txt index 9542fe4a..1f7cfb27 100644 --- a/examples/arm-cm/dpp_stm32f4-discovery/qk/armclang/README.txt +++ b/examples/arm-cm/dpp_stm32f4-discovery/qk/armclang/README.txt @@ -18,7 +18,7 @@ command-line options for the ARM assembler (see the Asm tab in the "Options for Target" dialog box in uVision). Specifically, you should define symbols: Stack_Size=xxx Heap_Size=yyy, where xxx represents a numerical value of stack size and yyy the -numberical value of the heap size (for most embedded projects +numerical value of the heap size (for most embedded projects yyy should be 0, as the using the heap is not recommended). \ No newline at end of file diff --git a/examples/arm-cm/dpp_stm32f4-discovery/qk/bsp.c b/examples/arm-cm/dpp_stm32f4-discovery/qk/bsp.c index 5f97ce69..7f3a15c6 100644 --- a/examples/arm-cm/dpp_stm32f4-discovery/qk/bsp.c +++ b/examples/arm-cm/dpp_stm32f4-discovery/qk/bsp.c @@ -497,7 +497,7 @@ QSTimeCtr QS_onGetTime(void) { // NOTE: invoked with interrupts DISABLED if ((SysTick->CTRL & SysTick_CTRL_COUNTFLAG_Msk) == 0U) { // not set? return QS_tickTime_ - (QSTimeCtr)SysTick->VAL; } - else { // the rollover occured, but the SysTick_ISR did not run yet + else { // the rollover occurred, but the SysTick_ISR did not run yet return QS_tickTime_ + QS_tickPeriod_ - (QSTimeCtr)SysTick->VAL; } } diff --git a/examples/arm-cm/dpp_stm32f4-discovery/qk/gnu/Makefile b/examples/arm-cm/dpp_stm32f4-discovery/qk/gnu/Makefile index 6998cae1..dbeb1162 100644 --- a/examples/arm-cm/dpp_stm32f4-discovery/qk/gnu/Makefile +++ b/examples/arm-cm/dpp_stm32f4-discovery/qk/gnu/Makefile @@ -57,7 +57,7 @@ PROJECT := dpp-qk # project directories # -# location of the QP/C framework (if not provided in an environemnt var.) +# location of the QP/C framework (if not provided in an environment var.) ifeq ($(QPC),) QPC := ../../../../.. endif @@ -183,7 +183,7 @@ RM := rm # build options for various configurations for ARM Cortex-M # -# combine all the soruces... +# combine all the sources... C_SRCS += $(QP_SRCS) ASM_SRCS += $(QP_ASMS) diff --git a/examples/arm-cm/dpp_stm32f4-discovery/qk/gnu/README.txt b/examples/arm-cm/dpp_stm32f4-discovery/qk/gnu/README.txt index 63d84598..99ca75ab 100644 --- a/examples/arm-cm/dpp_stm32f4-discovery/qk/gnu/README.txt +++ b/examples/arm-cm/dpp_stm32f4-discovery/qk/gnu/README.txt @@ -31,7 +31,7 @@ to be adjusted in the provided Makefile, by editing the symbol: GNU_ARM. As described in the comment for this symbol, the GNU-ARM toolset is taken from: http://gnutoolchains.com/arm-eabi -It is highly recommened to use the same GNU-ARM distribution, especially +It is highly recommended to use the same GNU-ARM distribution, especially for ARM Cortex-M4F projects, due to the support for the hardware FPU (float-abi=hard). *** diff --git a/examples/arm-cm/dpp_stm32f4-discovery/qk/gnu/flash.bat b/examples/arm-cm/dpp_stm32f4-discovery/qk/gnu/flash.bat index 60694ebc..2ea7836b 100644 --- a/examples/arm-cm/dpp_stm32f4-discovery/qk/gnu/flash.bat +++ b/examples/arm-cm/dpp_stm32f4-discovery/qk/gnu/flash.bat @@ -1,7 +1,7 @@ ::============================================================================ :: Batch file to load the DPP program to the flash of STM32 boards :: -:: NOTE: requires the ST-LINK utlity from ST, see: +:: NOTE: requires the ST-LINK utility from ST, see: :: http://www.st.com/en/embedded-software/stsw-link004.html :: @echo off diff --git a/examples/arm-cm/dpp_stm32f4-discovery/qv/armclang/README.txt b/examples/arm-cm/dpp_stm32f4-discovery/qv/armclang/README.txt index 9542fe4a..1f7cfb27 100644 --- a/examples/arm-cm/dpp_stm32f4-discovery/qv/armclang/README.txt +++ b/examples/arm-cm/dpp_stm32f4-discovery/qv/armclang/README.txt @@ -18,7 +18,7 @@ command-line options for the ARM assembler (see the Asm tab in the "Options for Target" dialog box in uVision). Specifically, you should define symbols: Stack_Size=xxx Heap_Size=yyy, where xxx represents a numerical value of stack size and yyy the -numberical value of the heap size (for most embedded projects +numerical value of the heap size (for most embedded projects yyy should be 0, as the using the heap is not recommended). \ No newline at end of file diff --git a/examples/arm-cm/dpp_stm32f4-discovery/qv/bsp.c b/examples/arm-cm/dpp_stm32f4-discovery/qv/bsp.c index 9d682a4b..7db0d76a 100644 --- a/examples/arm-cm/dpp_stm32f4-discovery/qv/bsp.c +++ b/examples/arm-cm/dpp_stm32f4-discovery/qv/bsp.c @@ -493,7 +493,7 @@ QSTimeCtr QS_onGetTime(void) { // NOTE: invoked with interrupts DISABLED if ((SysTick->CTRL & SysTick_CTRL_COUNTFLAG_Msk) == 0U) { // not set? return QS_tickTime_ - (QSTimeCtr)SysTick->VAL; } - else { // the rollover occured, but the SysTick_ISR did not run yet + else { // the rollover occurred, but the SysTick_ISR did not run yet return QS_tickTime_ + QS_tickPeriod_ - (QSTimeCtr)SysTick->VAL; } } diff --git a/examples/arm-cm/dpp_stm32f4-discovery/qv/gnu/Makefile b/examples/arm-cm/dpp_stm32f4-discovery/qv/gnu/Makefile index 1d14d399..1c866846 100644 --- a/examples/arm-cm/dpp_stm32f4-discovery/qv/gnu/Makefile +++ b/examples/arm-cm/dpp_stm32f4-discovery/qv/gnu/Makefile @@ -57,7 +57,7 @@ PROJECT := dpp-qv # project directories # -# location of the QP/C framework (if not provided in an environemnt var.) +# location of the QP/C framework (if not provided in an environment var.) ifeq ($(QPC),) QPC := ../../../../.. endif @@ -182,7 +182,7 @@ RM := rm # build options for various configurations for ARM Cortex-M # -# combine all the soruces... +# combine all the sources... C_SRCS += $(QP_SRCS) ASM_SRCS += $(QP_ASMS) diff --git a/examples/arm-cm/dpp_stm32f4-discovery/qv/gnu/README.txt b/examples/arm-cm/dpp_stm32f4-discovery/qv/gnu/README.txt index 63d84598..99ca75ab 100644 --- a/examples/arm-cm/dpp_stm32f4-discovery/qv/gnu/README.txt +++ b/examples/arm-cm/dpp_stm32f4-discovery/qv/gnu/README.txt @@ -31,7 +31,7 @@ to be adjusted in the provided Makefile, by editing the symbol: GNU_ARM. As described in the comment for this symbol, the GNU-ARM toolset is taken from: http://gnutoolchains.com/arm-eabi -It is highly recommened to use the same GNU-ARM distribution, especially +It is highly recommended to use the same GNU-ARM distribution, especially for ARM Cortex-M4F projects, due to the support for the hardware FPU (float-abi=hard). *** diff --git a/examples/arm-cm/dpp_stm32f4-discovery/qv/gnu/flash.bat b/examples/arm-cm/dpp_stm32f4-discovery/qv/gnu/flash.bat index 60694ebc..2ea7836b 100644 --- a/examples/arm-cm/dpp_stm32f4-discovery/qv/gnu/flash.bat +++ b/examples/arm-cm/dpp_stm32f4-discovery/qv/gnu/flash.bat @@ -1,7 +1,7 @@ ::============================================================================ :: Batch file to load the DPP program to the flash of STM32 boards :: -:: NOTE: requires the ST-LINK utlity from ST, see: +:: NOTE: requires the ST-LINK utility from ST, see: :: http://www.st.com/en/embedded-software/stsw-link004.html :: @echo off diff --git a/examples/arm-cm/dpp_stm32f4-discovery/qxk/armclang/README.txt b/examples/arm-cm/dpp_stm32f4-discovery/qxk/armclang/README.txt index 9542fe4a..1f7cfb27 100644 --- a/examples/arm-cm/dpp_stm32f4-discovery/qxk/armclang/README.txt +++ b/examples/arm-cm/dpp_stm32f4-discovery/qxk/armclang/README.txt @@ -18,7 +18,7 @@ command-line options for the ARM assembler (see the Asm tab in the "Options for Target" dialog box in uVision). Specifically, you should define symbols: Stack_Size=xxx Heap_Size=yyy, where xxx represents a numerical value of stack size and yyy the -numberical value of the heap size (for most embedded projects +numerical value of the heap size (for most embedded projects yyy should be 0, as the using the heap is not recommended). \ No newline at end of file diff --git a/examples/arm-cm/dpp_stm32f4-discovery/qxk/bsp.c b/examples/arm-cm/dpp_stm32f4-discovery/qxk/bsp.c index 6a41a9c2..02912145 100644 --- a/examples/arm-cm/dpp_stm32f4-discovery/qxk/bsp.c +++ b/examples/arm-cm/dpp_stm32f4-discovery/qxk/bsp.c @@ -518,7 +518,7 @@ QSTimeCtr QS_onGetTime(void) { // NOTE: invoked with interrupts DISABLED if ((SysTick->CTRL & SysTick_CTRL_COUNTFLAG_Msk) == 0U) { // not set? return QS_tickTime_ - (QSTimeCtr)SysTick->VAL; } - else { // the rollover occured, but the SysTick_ISR did not run yet + else { // the rollover occurred, but the SysTick_ISR did not run yet return QS_tickTime_ + QS_tickPeriod_ - (QSTimeCtr)SysTick->VAL; } } diff --git a/examples/arm-cm/dpp_stm32f4-discovery/qxk/gnu/Makefile b/examples/arm-cm/dpp_stm32f4-discovery/qxk/gnu/Makefile index aea06e43..413f5d52 100644 --- a/examples/arm-cm/dpp_stm32f4-discovery/qxk/gnu/Makefile +++ b/examples/arm-cm/dpp_stm32f4-discovery/qxk/gnu/Makefile @@ -57,7 +57,7 @@ PROJECT := dpp-qxk # project directories # -# location of the QP/C framework (if not provided in an environemnt var.) +# location of the QP/C framework (if not provided in an environment var.) ifeq ($(QPC),) QPC := ../../../../.. endif @@ -188,7 +188,7 @@ RM := rm # build options for various configurations for ARM Cortex-M # -# combine all the soruces... +# combine all the sources... C_SRCS += $(QP_SRCS) ASM_SRCS += $(QP_ASMS) diff --git a/examples/arm-cm/dpp_stm32f4-discovery/qxk/gnu/README.txt b/examples/arm-cm/dpp_stm32f4-discovery/qxk/gnu/README.txt index 63d84598..99ca75ab 100644 --- a/examples/arm-cm/dpp_stm32f4-discovery/qxk/gnu/README.txt +++ b/examples/arm-cm/dpp_stm32f4-discovery/qxk/gnu/README.txt @@ -31,7 +31,7 @@ to be adjusted in the provided Makefile, by editing the symbol: GNU_ARM. As described in the comment for this symbol, the GNU-ARM toolset is taken from: http://gnutoolchains.com/arm-eabi -It is highly recommened to use the same GNU-ARM distribution, especially +It is highly recommended to use the same GNU-ARM distribution, especially for ARM Cortex-M4F projects, due to the support for the hardware FPU (float-abi=hard). *** diff --git a/examples/arm-cm/dpp_stm32f4-discovery/qxk/gnu/flash.bat b/examples/arm-cm/dpp_stm32f4-discovery/qxk/gnu/flash.bat index 60694ebc..2ea7836b 100644 --- a/examples/arm-cm/dpp_stm32f4-discovery/qxk/gnu/flash.bat +++ b/examples/arm-cm/dpp_stm32f4-discovery/qxk/gnu/flash.bat @@ -1,7 +1,7 @@ ::============================================================================ :: Batch file to load the DPP program to the flash of STM32 boards :: -:: NOTE: requires the ST-LINK utlity from ST, see: +:: NOTE: requires the ST-LINK utility from ST, see: :: http://www.st.com/en/embedded-software/stsw-link004.html :: @echo off diff --git a/examples/arm-cm/game_efm32-slstk3401a/README.md b/examples/arm-cm/game_efm32-slstk3401a/README.md index 82697911..4d9f7425 100644 --- a/examples/arm-cm/game_efm32-slstk3401a/README.md +++ b/examples/arm-cm/game_efm32-slstk3401a/README.md @@ -44,9 +44,9 @@ Please check the Device Manager to find the COM port number. # Win32-GUI Emulation -The directory `qpc\examples\workstation\game-gui` conatins the emulation +The directory `qpc\examples\workstation\game-gui` contains the emulation of the "Fly 'n' Shoot" game on Windows GUI, either single-threaded (win32-qv) -or multithreded (win32). This sub-directory contains the Visual Studio +or multithreaded (win32). This sub-directory contains the Visual Studio solution file (game-gui.sln) for Visual C++. The Win32-GUI emulation is based on the QWin™ GUI Prototyping Toolkit, see: diff --git a/examples/arm-cm/game_efm32-slstk3401a/game.qm b/examples/arm-cm/game_efm32-slstk3401a/game.qm index 55b3cc32..d6bca299 100644 --- a/examples/arm-cm/game_efm32-slstk3401a/game.qm +++ b/examples/arm-cm/game_efm32-slstk3401a/game.qm @@ -341,7 +341,7 @@ me->blink_ctr = 0U; // init the blink counter QTimeEvt_disarm(&me->screenTimeEvt); - me->blink_ctr ^= 1U; // toggle the blink cunter + me->blink_ctr ^= 1U; // toggle the blink counter @@ -653,7 +653,7 @@ sev = Q_NEW(ScoreEvt, SCORE_SIG); sev->score = me->score; QACTIVE_POST(AO_Tunnel, (QEvt *)sev, me); -// lauch the ship from the initial position +// launch the ship from the initial position me->x = GAME_SHIP_X; me->y = (GAME_SHIP_Y << 2); @@ -1392,7 +1392,7 @@ $define ${AOs::Missile} #define SHIP_WIDTH 5 #define SHIP_HEIGHT 3 -// encapsulated delcaration of the Ship active object ---------------------- +// encapsulated declaration of the Ship active object ---------------------- $declare ${AOs::Ship} // Public-scope objects ---------------------------------------------------- @@ -1428,7 +1428,7 @@ $define ${AOs::Tunnel} Q_DEFINE_THIS_FILE -// encapsulated delcaration of the Mine1 HSM ------------------------------- +// encapsulated declaration of the Mine1 HSM ------------------------------- $declare ${AOs::Mine1} // helper macro to provide the ID of this mine @@ -1446,7 +1446,7 @@ $define ${AOs::Mine1} Q_DEFINE_THIS_FILE -// encapsulated delcaration of the Mine2 HSM ------------------------------- +// encapsulated declaration of the Mine2 HSM ------------------------------- $declare ${AOs::Mine2} // helper macro to provide the ID of this mine diff --git a/examples/arm-cm/game_efm32-slstk3401a/mine1.c b/examples/arm-cm/game_efm32-slstk3401a/mine1.c index 58f1964e..5ab87652 100644 --- a/examples/arm-cm/game_efm32-slstk3401a/mine1.c +++ b/examples/arm-cm/game_efm32-slstk3401a/mine1.c @@ -34,7 +34,7 @@ Q_DEFINE_THIS_FILE -// encapsulated delcaration of the Mine1 HSM ------------------------------- +// encapsulated declaration of the Mine1 HSM ------------------------------- //$declare${AOs::Mine1} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv //${AOs::Mine1} .............................................................. diff --git a/examples/arm-cm/game_efm32-slstk3401a/mine2.c b/examples/arm-cm/game_efm32-slstk3401a/mine2.c index 79e80c9d..c074435d 100644 --- a/examples/arm-cm/game_efm32-slstk3401a/mine2.c +++ b/examples/arm-cm/game_efm32-slstk3401a/mine2.c @@ -34,7 +34,7 @@ Q_DEFINE_THIS_FILE -// encapsulated delcaration of the Mine2 HSM ------------------------------- +// encapsulated declaration of the Mine2 HSM ------------------------------- //$declare${AOs::Mine2} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv //${AOs::Mine2} .............................................................. diff --git a/examples/arm-cm/game_efm32-slstk3401a/qk/bsp.c b/examples/arm-cm/game_efm32-slstk3401a/qk/bsp.c index b49a63fb..9f92b9b6 100644 --- a/examples/arm-cm/game_efm32-slstk3401a/qk/bsp.c +++ b/examples/arm-cm/game_efm32-slstk3401a/qk/bsp.c @@ -570,14 +570,14 @@ bool BSP_doBitmapsOverlap(uint8_t bmp_id1, uint8_t x1, uint8_t y1, //............................................................................ bool BSP_isWallHit(uint8_t bmp_id, uint8_t x, uint8_t y) { Bitmap const *bmp = &l_bitmap[bmp_id]; - uint32_t shft = (x & 0x1FU); + uint32_t shift = (x & 0x1FU); uint32_t *walls = &l_walls[y][x >> 5]; for (y = 0; y < bmp->height; ++y, walls += (BSP_SCREEN_WIDTH >> 5)) { - if (*walls & ((uint32_t)bmp->bits[y] << shft)) { + if (*walls & ((uint32_t)bmp->bits[y] << shift)) { return true; } - if (shft > 24U) { - if (*(walls + 1) & ((uint32_t)bmp->bits[y] >> (32U - shft))) { + if (shift > 24U) { + if (*(walls + 1) & ((uint32_t)bmp->bits[y] >> (32U - shift))) { return true; } } @@ -635,11 +635,11 @@ void BSP_randomSeed(uint32_t seed) { //............................................................................ static void paintBits(uint8_t x, uint8_t y, uint8_t const *bits, uint8_t h) { uint32_t *fb = &l_fb[y][x >> 5]; - uint32_t shft = (x & 0x1FU); + uint32_t shift = (x & 0x1FU); for (y = 0; y < h; ++y, fb += (BSP_SCREEN_WIDTH >> 5)) { - *fb |= ((uint32_t)bits[y] << shft); - if (shft > 24U) { - *(fb + 1) |= ((uint32_t)bits[y] >> (32U - shft)); + *fb |= ((uint32_t)bits[y] << shift); + if (shift > 24U) { + *(fb + 1) |= ((uint32_t)bits[y] >> (32U - shift)); } } } @@ -648,17 +648,17 @@ static void paintBitsClear(uint8_t x, uint8_t y, uint8_t const *bits, uint8_t h) { uint32_t *fb = &l_fb[y][x >> 5]; - uint32_t shft = (x & 0x1FU); - uint32_t mask1 = ~((uint32_t)0xFFU << shft); + uint32_t shift = (x & 0x1FU); + uint32_t mask1 = ~((uint32_t)0xFFU << shift); uint32_t mask2; - if (shft > 24U) { - mask2 = ~(0xFFU >> (32U - shft)); + if (shift > 24U) { + mask2 = ~(0xFFU >> (32U - shift)); } for (y = 0; y < h; ++y, fb += (BSP_SCREEN_WIDTH >> 5)) { - *fb = ((*fb & mask1) | ((uint32_t)bits[y] << shft)); - if (shft > 24U) { + *fb = ((*fb & mask1) | ((uint32_t)bits[y] << shift)); + if (shift > 24U) { *(fb + 1) = ((*(fb + 1) & mask2) - | ((uint32_t)bits[y] >> (32U - shft))); + | ((uint32_t)bits[y] >> (32U - shift))); } } } @@ -668,7 +668,7 @@ void QF_onStartup(void) { // set up the SysTick timer to fire at BSP_TICKS_PER_SEC rate SysTick_Config(SystemCoreClock / BSP_TICKS_PER_SEC); - // assing all priority bits for preemption-prio. and none to sub-prio. + // assign all priority bits for preemption-prio. and none to sub-prio. NVIC_SetPriorityGrouping(0U); // set priorities of ALL ISRs used in the system, see NOTE1 @@ -821,7 +821,7 @@ QSTimeCtr QS_onGetTime(void) { // NOTE: invoked with interrupts DISABLED if ((SysTick->CTRL & SysTick_CTRL_COUNTFLAG_Msk) == 0) { // not set? return QS_tickTime_ - (QSTimeCtr)SysTick->VAL; } - else { // the rollover occured, but the SysTick_ISR did not run yet + else { // the rollover occurred, but the SysTick_ISR did not run yet return QS_tickTime_ + QS_tickPeriod_ - (QSTimeCtr)SysTick->VAL; } } @@ -890,7 +890,7 @@ void QS_onCommand(uint8_t cmdId, // // NOTE2: // The User LED is used to visualize the idle loop activity. The brightness -// of the LED is proportional to the frequency of invcations of the idle loop. +// of the LED is proportional to the frequency of invocations of the idle loop. // Please note that the LED is toggled with interrupts locked, so no interrupt // execution time contributes to the brightness of the User LED. // diff --git a/examples/arm-cm/game_efm32-slstk3401a/qk/gnu/Makefile b/examples/arm-cm/game_efm32-slstk3401a/qk/gnu/Makefile index a443198c..69b46659 100644 --- a/examples/arm-cm/game_efm32-slstk3401a/qk/gnu/Makefile +++ b/examples/arm-cm/game_efm32-slstk3401a/qk/gnu/Makefile @@ -57,7 +57,7 @@ PROJECT := game-qk # project directories # -# location of the QP/C framework (if not provided in an environemnt var.) +# location of the QP/C framework (if not provided in an environment var.) ifeq ($(QPC),) QPC := ../../../../.. endif @@ -191,7 +191,7 @@ RM := rm # build options for various configurations for ARM Cortex-M4F # -# combine all the soruces... +# combine all the sources... C_SRCS += $(QP_SRCS) ASM_SRCS += $(QP_ASMS) diff --git a/examples/arm-cm/game_efm32-slstk3401a/qk/gnu/README.txt b/examples/arm-cm/game_efm32-slstk3401a/qk/gnu/README.txt index 35b38dda..c44c609e 100644 --- a/examples/arm-cm/game_efm32-slstk3401a/qk/gnu/README.txt +++ b/examples/arm-cm/game_efm32-slstk3401a/qk/gnu/README.txt @@ -31,7 +31,7 @@ to be adjusted in the provided Makefile, by editing the symbol: GNU_ARM. As described in the comment for this symbol, the GNU-ARM toolset is taken from: http://gnutoolchains.com/arm-eabi -It is highly recommened to use the same GNU-ARM distribution, especially +It is highly recommended to use the same GNU-ARM distribution, especially for ARM Cortex-M4F projects, due to the support for the hardware FPU (float-abi=hard). *** diff --git a/examples/arm-cm/game_efm32-slstk3401a/qv/bsp.c b/examples/arm-cm/game_efm32-slstk3401a/qv/bsp.c index cbdd88f7..b451ce8c 100644 --- a/examples/arm-cm/game_efm32-slstk3401a/qv/bsp.c +++ b/examples/arm-cm/game_efm32-slstk3401a/qv/bsp.c @@ -563,14 +563,14 @@ bool BSP_doBitmapsOverlap(uint8_t bmp_id1, uint8_t x1, uint8_t y1, //............................................................................ bool BSP_isWallHit(uint8_t bmp_id, uint8_t x, uint8_t y) { Bitmap const *bmp = &l_bitmap[bmp_id]; - uint32_t shft = (x & 0x1FU); + uint32_t shift = (x & 0x1FU); uint32_t *walls = &l_walls[y][x >> 5]; for (y = 0; y < bmp->height; ++y, walls += (BSP_SCREEN_WIDTH >> 5)) { - if (*walls & ((uint32_t)bmp->bits[y] << shft)) { + if (*walls & ((uint32_t)bmp->bits[y] << shift)) { return true; } - if (shft > 24U) { - if (*(walls + 1) & ((uint32_t)bmp->bits[y] >> (32U - shft))) { + if (shift > 24U) { + if (*(walls + 1) & ((uint32_t)bmp->bits[y] >> (32U - shift))) { return true; } } @@ -624,11 +624,11 @@ void BSP_randomSeed(uint32_t seed) { //............................................................................ static void paintBits(uint8_t x, uint8_t y, uint8_t const *bits, uint8_t h) { uint32_t *fb = &l_fb[y][x >> 5]; - uint32_t shft = (x & 0x1FU); + uint32_t shift = (x & 0x1FU); for (y = 0; y < h; ++y, fb += (BSP_SCREEN_WIDTH >> 5)) { - *fb |= ((uint32_t)bits[y] << shft); - if (shft > 24U) { - *(fb + 1) |= ((uint32_t)bits[y] >> (32U - shft)); + *fb |= ((uint32_t)bits[y] << shift); + if (shift > 24U) { + *(fb + 1) |= ((uint32_t)bits[y] >> (32U - shift)); } } } @@ -637,17 +637,17 @@ static void paintBitsClear(uint8_t x, uint8_t y, uint8_t const *bits, uint8_t h) { uint32_t *fb = &l_fb[y][x >> 5]; - uint32_t shft = (x & 0x1FU); - uint32_t mask1 = ~((uint32_t)0xFFU << shft); + uint32_t shift = (x & 0x1FU); + uint32_t mask1 = ~((uint32_t)0xFFU << shift); uint32_t mask2; - if (shft > 24U) { - mask2 = ~(0xFFU >> (32U - shft)); + if (shift > 24U) { + mask2 = ~(0xFFU >> (32U - shift)); } for (y = 0; y < h; ++y, fb += (BSP_SCREEN_WIDTH >> 5)) { - *fb = ((*fb & mask1) | ((uint32_t)bits[y] << shft)); - if (shft > 24U) { + *fb = ((*fb & mask1) | ((uint32_t)bits[y] << shift)); + if (shift > 24U) { *(fb + 1) = ((*(fb + 1) & mask2) - | ((uint32_t)bits[y] >> (32U - shft))); + | ((uint32_t)bits[y] >> (32U - shift))); } } } @@ -657,7 +657,7 @@ void QF_onStartup(void) { // set up the SysTick timer to fire at BSP_TICKS_PER_SEC rate SysTick_Config(SystemCoreClock / BSP_TICKS_PER_SEC); - // assing all priority bits for preemption-prio. and none to sub-prio. + // assign all priority bits for preemption-prio. and none to sub-prio. NVIC_SetPriorityGrouping(0U); // set priorities of ALL ISRs used in the system, see NOTE00 @@ -811,7 +811,7 @@ QSTimeCtr QS_onGetTime(void) { // NOTE: invoked with interrupts DISABLED if ((SysTick->CTRL & SysTick_CTRL_COUNTFLAG_Msk) == 0) { // not set? return QS_tickTime_ - (QSTimeCtr)SysTick->VAL; } - else { // the rollover occured, but the SysTick_ISR did not run yet + else { // the rollover occurred, but the SysTick_ISR did not run yet return QS_tickTime_ + QS_tickPeriod_ - (QSTimeCtr)SysTick->VAL; } } @@ -886,7 +886,7 @@ void QS_onCommand(uint8_t cmdId, // // NOTE02: // The User LED is used to visualize the idle loop activity. The brightness -// of the LED is proportional to the frequency of invcations of the idle loop. +// of the LED is proportional to the frequency of invocations of the idle loop. // Please note that the LED is toggled with interrupts locked, so no interrupt // execution time contributes to the brightness of the User LED. // diff --git a/examples/arm-cm/game_efm32-slstk3401a/qv/gnu/Makefile b/examples/arm-cm/game_efm32-slstk3401a/qv/gnu/Makefile index a25d41f3..21bd41df 100644 --- a/examples/arm-cm/game_efm32-slstk3401a/qv/gnu/Makefile +++ b/examples/arm-cm/game_efm32-slstk3401a/qv/gnu/Makefile @@ -57,7 +57,7 @@ PROJECT := game-qv # project directories # -# location of the QP/C framework (if not provided in an environemnt var.) +# location of the QP/C framework (if not provided in an environment var.) ifeq ($(QPC),) QPC := ../../../../.. endif @@ -191,7 +191,7 @@ RM := rm # build options for various configurations for ARM Cortex-M4F # -# combine all the soruces... +# combine all the sources... C_SRCS += $(QP_SRCS) ASM_SRCS += $(QP_ASMS) diff --git a/examples/arm-cm/game_efm32-slstk3401a/qv/gnu/README.txt b/examples/arm-cm/game_efm32-slstk3401a/qv/gnu/README.txt index 35b38dda..c44c609e 100644 --- a/examples/arm-cm/game_efm32-slstk3401a/qv/gnu/README.txt +++ b/examples/arm-cm/game_efm32-slstk3401a/qv/gnu/README.txt @@ -31,7 +31,7 @@ to be adjusted in the provided Makefile, by editing the symbol: GNU_ARM. As described in the comment for this symbol, the GNU-ARM toolset is taken from: http://gnutoolchains.com/arm-eabi -It is highly recommened to use the same GNU-ARM distribution, especially +It is highly recommended to use the same GNU-ARM distribution, especially for ARM Cortex-M4F projects, due to the support for the hardware FPU (float-abi=hard). *** diff --git a/examples/arm-cm/game_efm32-slstk3401a/ship.c b/examples/arm-cm/game_efm32-slstk3401a/ship.c index c626dc1c..ec12902a 100644 --- a/examples/arm-cm/game_efm32-slstk3401a/ship.c +++ b/examples/arm-cm/game_efm32-slstk3401a/ship.c @@ -37,7 +37,7 @@ #define SHIP_WIDTH 5 #define SHIP_HEIGHT 3 -// encapsulated delcaration of the Ship active object ---------------------- +// encapsulated declaration of the Ship active object ---------------------- //$declare${AOs::Ship} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv //${AOs::Ship} ............................................................... @@ -169,7 +169,7 @@ static QState Ship_flying(Ship * const me, QEvt const * const e) { sev->score = me->score; QACTIVE_POST(AO_Tunnel, (QEvt *)sev, me); - // lauch the ship from the initial position + // launch the ship from the initial position me->x = GAME_SHIP_X; me->y = (GAME_SHIP_Y << 2); status_ = Q_HANDLED(); diff --git a/examples/arm-cm/game_efm32-slstk3401a/tunnel.c b/examples/arm-cm/game_efm32-slstk3401a/tunnel.c index b0852647..2ee6206f 100644 --- a/examples/arm-cm/game_efm32-slstk3401a/tunnel.c +++ b/examples/arm-cm/game_efm32-slstk3401a/tunnel.c @@ -381,7 +381,7 @@ static QState Tunnel_demo(Tunnel * const me, QEvt const * const e) { } //${AOs::Tunnel::SM::active::demo::BLINK_TIMEOUT} case BLINK_TIMEOUT_SIG: { - me->blink_ctr ^= 1U; // toggle the blink cunter + me->blink_ctr ^= 1U; // toggle the blink counter status_ = Q_HANDLED(); break; } diff --git a/examples/arm-cm/low-power_ek-tm4c123gxl/qk/gnu/Makefile b/examples/arm-cm/low-power_ek-tm4c123gxl/qk/gnu/Makefile index b73ec70c..1caca009 100644 --- a/examples/arm-cm/low-power_ek-tm4c123gxl/qk/gnu/Makefile +++ b/examples/arm-cm/low-power_ek-tm4c123gxl/qk/gnu/Makefile @@ -57,7 +57,7 @@ PROJECT := low-power-qk # project directories # -# location of the QP/C framework (if not provided in an environemnt var.) +# location of the QP/C framework (if not provided in an environment var.) ifeq ($(QPC),) QPC := ../../../../.. endif @@ -177,7 +177,7 @@ RM := rm # build options for various configurations for ARM Cortex-M # -# combine all the soruces... +# combine all the sources... C_SRCS += $(QP_SRCS) ASM_SRCS += $(QP_ASMS) diff --git a/examples/arm-cm/low-power_ek-tm4c123gxl/qk/gnu/README.txt b/examples/arm-cm/low-power_ek-tm4c123gxl/qk/gnu/README.txt index 3ba6f924..18bf7307 100644 --- a/examples/arm-cm/low-power_ek-tm4c123gxl/qk/gnu/README.txt +++ b/examples/arm-cm/low-power_ek-tm4c123gxl/qk/gnu/README.txt @@ -31,7 +31,7 @@ to be adjusted in the provided Makefile, by editing the symbol: GNU_ARM. As described in the comment for this symbol, the GNU-ARM toolset is taken from: http://gnutoolchains.com/arm-eabi -It is highly recommened to use the same GNU-ARM distribution, especially +It is highly recommended to use the same GNU-ARM distribution, especially for ARM Cortex-M4F projects, due to the support for the hardware FPU (float-abi=hard). *** diff --git a/examples/arm-cm/low-power_ek-tm4c123gxl/qv/gnu/Makefile b/examples/arm-cm/low-power_ek-tm4c123gxl/qv/gnu/Makefile index 9fb23194..b6509199 100644 --- a/examples/arm-cm/low-power_ek-tm4c123gxl/qv/gnu/Makefile +++ b/examples/arm-cm/low-power_ek-tm4c123gxl/qv/gnu/Makefile @@ -57,7 +57,7 @@ PROJECT := low-power-qv # project directories # -# location of the QP/C framework (if not provided in an environemnt var.) +# location of the QP/C framework (if not provided in an environment var.) ifeq ($(QPC),) QPC := ../../../../.. endif @@ -177,7 +177,7 @@ RM := rm # build options for various configurations for ARM Cortex-M # -# combine all the soruces... +# combine all the sources... C_SRCS += $(QP_SRCS) ASM_SRCS += $(QP_ASMS) diff --git a/examples/arm-cm/low-power_ek-tm4c123gxl/qv/gnu/README.txt b/examples/arm-cm/low-power_ek-tm4c123gxl/qv/gnu/README.txt index 3ba6f924..18bf7307 100644 --- a/examples/arm-cm/low-power_ek-tm4c123gxl/qv/gnu/README.txt +++ b/examples/arm-cm/low-power_ek-tm4c123gxl/qv/gnu/README.txt @@ -31,7 +31,7 @@ to be adjusted in the provided Makefile, by editing the symbol: GNU_ARM. As described in the comment for this symbol, the GNU-ARM toolset is taken from: http://gnutoolchains.com/arm-eabi -It is highly recommened to use the same GNU-ARM distribution, especially +It is highly recommended to use the same GNU-ARM distribution, especially for ARM Cortex-M4F projects, due to the support for the hardware FPU (float-abi=hard). *** diff --git a/examples/arm-cm/low-power_ek-tm4c123gxl/qxk/gnu/Makefile b/examples/arm-cm/low-power_ek-tm4c123gxl/qxk/gnu/Makefile index 57f1bd7e..f38168ee 100644 --- a/examples/arm-cm/low-power_ek-tm4c123gxl/qxk/gnu/Makefile +++ b/examples/arm-cm/low-power_ek-tm4c123gxl/qxk/gnu/Makefile @@ -57,7 +57,7 @@ PROJECT := low-power-qxk # project directories # -# location of the QP/C framework (if not provided in an environemnt var.) +# location of the QP/C framework (if not provided in an environment var.) ifeq ($(QPC),) QPC := ../../../../.. endif @@ -180,7 +180,7 @@ RM := rm # build options for various configurations for ARM Cortex-M # -# combine all the soruces... +# combine all the sources... C_SRCS += $(QP_SRCS) ASM_SRCS += $(QP_ASMS) diff --git a/examples/arm-cm/low-power_ek-tm4c123gxl/qxk/gnu/README.txt b/examples/arm-cm/low-power_ek-tm4c123gxl/qxk/gnu/README.txt index 3ba6f924..18bf7307 100644 --- a/examples/arm-cm/low-power_ek-tm4c123gxl/qxk/gnu/README.txt +++ b/examples/arm-cm/low-power_ek-tm4c123gxl/qxk/gnu/README.txt @@ -31,7 +31,7 @@ to be adjusted in the provided Makefile, by editing the symbol: GNU_ARM. As described in the comment for this symbol, the GNU-ARM toolset is taken from: http://gnutoolchains.com/arm-eabi -It is highly recommened to use the same GNU-ARM distribution, especially +It is highly recommended to use the same GNU-ARM distribution, especially for ARM Cortex-M4F projects, due to the support for the hardware FPU (float-abi=hard). *** diff --git a/examples/arm-cm/real-time_nucleo-l053r8/README.md b/examples/arm-cm/real-time_nucleo-l053r8/README.md index 0f10c560..5af54f13 100644 --- a/examples/arm-cm/real-time_nucleo-l053r8/README.md +++ b/examples/arm-cm/real-time_nucleo-l053r8/README.md @@ -41,7 +41,7 @@ The example QP application consists of 2 periodic threads (Active Objects) and t - directory `qv-tt`: cooperative run-to-completion QV kernel with time-triggered tasks -# Builing the Examples +# Building the Examples ## ARM/KEIL MDK - Open one of the provided KEIL uVision projects (e.g., `rt-qk.uvprojx`) in Keil uVision IDE. Build/Debug/Download to the board from the IDE. @@ -58,7 +58,7 @@ The NUCLEO-L053R8 needs to be conntected to a logic analyzer as shown in the pic

-The logic analyzer needs to be configured as follwos: +The logic analyzer needs to be configured as follows: - sampling rate: several MHz (e.g., 24MHz) - trigger: Sporadic (PC.13 on the NUCLEO-L053R8), falling edge - pre-trigger capture ratio: 20% diff --git a/examples/arm-cr/blinky_launchxl2-tms57012/README.md b/examples/arm-cr/blinky_launchxl2-tms57012/README.md index 34ada591..7f84df1a 100644 --- a/examples/arm-cr/blinky_launchxl2-tms57012/README.md +++ b/examples/arm-cr/blinky_launchxl2-tms57012/README.md @@ -1,5 +1,61 @@ -![LAUNCHXL2-TMS57012](../../../doxygen/images/bd_LAUNCHXL2-TMS57012.jpg) +> **NOTE** +This file is best viewed in a **markdown viewer**, such as the one built into GitHub. Markdown viewers are also available as plug-ins to popular Internet browsers. + +# Blinky on LAUNCHXL2-TMS57012 board +This example implements the simple [Blinky application](https://www.state-machine.com/qpc/tut_blinky.html) on the LAUNCHXL2-TMS57012 board (ARM Cortex-R4F). The example blinks the LED +on the LAUNCHXL2-TMS57012 board at 1Hz (0.5 seconds on, 0.5 seconds off). + +

+
+LAUNCHXL2-TMS57012 board +

+ +## Features Demonstrated +- cooperative QV kernel + + with IAR-ARM toolchain + + with TI-ARM toolchain (in Code Composer Studio) +- preemptive run-to-completion QK kernel + + with IAR-ARM toolchain + + with TI-ARM toolchain (in Code Composer Studio) + +## Build Configurations +- Debug +- Release +- Spy - NOT supported for the simple Blinky example + +# Code Organization +``` +examples\arm-cr\blinky_launchxl2-tms57012 +| ++---qk // preemptive QK kernel +| +---iar // IAR EWARM +| | blinky-qk.eww // IAR EW-ARM workspace +| \---ti // TI CCS +| \---targetConfigs // CCS project (target config) +| .ccsproject // CCS project +| .cproject // CCS project +| .project // CCS project +| +\---qv // cooperative QV kernel +| +---iar // IAR EWARM +| | blinky-qv.eww // IAR EW-ARM workspace +| \---ti // TI CCS +| \---targetConfigs // CCS project (target config) +| .ccsproject // CCS project +| .cproject // CCS project +| .project // CCS project +``` + +# Building the example + +### IAR EWARM +- Open the provided IAR EWARM workspace (either `blinky-qk.eww` or `blinky-qv.eww`) +in IAR EWARM IDE. Build/Debug/Download to the board from the IDE. +- Change the build configuration in the "Project Configuration" drop-down menu. + +### TI CCS +- Import the provided CCS project (either `examples\arm-cr\blinky_launchxl2-tms57012\qk\ti` +or `examples\arm-cr\blinky_launchxl2-tms57012\qv\ti`). +- Change the build configuration in the "Build" drop-down menu. -Documentation for this example is available in the QP/C Manual at: -- https://www.state-machine.com/qpc/arm-cr_blinky_launchxl2-tms57012.html diff --git a/examples/arm-cr/blinky_launchxl2-tms57012/launchxl2-tms57012.png b/examples/arm-cr/blinky_launchxl2-tms57012/launchxl2-tms57012.png new file mode 100644 index 0000000000000000000000000000000000000000..04766ae75bfb3eed3b8f778aebfed384af2f23a1 GIT binary patch literal 136290 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 literal 0 HcmV?d00001 diff --git a/examples/arm-cr/blinky_launchxl2-tms57012/qk/bsp.c b/examples/arm-cr/blinky_launchxl2-tms57012/qk/bsp.c index cf35e5c1..3aa35a24 100644 --- a/examples/arm-cr/blinky_launchxl2-tms57012/qk/bsp.c +++ b/examples/arm-cr/blinky_launchxl2-tms57012/qk/bsp.c @@ -164,7 +164,7 @@ void assert_failed(char const * const module, int_t const id) { // // NOTE01: // One of the LEDs is used to visualize the idle loop activity. The brightness -// of the LED is proportional to the frequency of invcations of the idle loop. +// of the LED is proportional to the frequency of invocations of the idle loop. // Please note that the LED is toggled with interrupts locked, so no interrupt // execution time contributes to the brightness of the User LED. // diff --git a/examples/arm-cr/blinky_launchxl2-tms57012/qk/ti/.cproject b/examples/arm-cr/blinky_launchxl2-tms57012/qk/ti/.cproject index cc17c548..64aa9be6 100644 --- a/examples/arm-cr/blinky_launchxl2-tms57012/qk/ti/.cproject +++ b/examples/arm-cr/blinky_launchxl2-tms57012/qk/ti/.cproject @@ -15,82 +15,86 @@ - - - - @@ -115,7 +119,7 @@ - - + + \ No newline at end of file diff --git a/examples/arm-cr/blinky_launchxl2-tms57012/qk/ti/.project b/examples/arm-cr/blinky_launchxl2-tms57012/qk/ti/.project index 6d586f52..3a24e867 100644 --- a/examples/arm-cr/blinky_launchxl2-tms57012/qk/ti/.project +++ b/examples/arm-cr/blinky_launchxl2-tms57012/qk/ti/.project @@ -7,7 +7,6 @@ org.eclipse.cdt.managedbuilder.core.genmakebuilder - clean,full,incremental, diff --git a/examples/arm-cr/blinky_launchxl2-tms57012/qv/bsp.c b/examples/arm-cr/blinky_launchxl2-tms57012/qv/bsp.c index 87909d32..52f5c534 100644 --- a/examples/arm-cr/blinky_launchxl2-tms57012/qv/bsp.c +++ b/examples/arm-cr/blinky_launchxl2-tms57012/qv/bsp.c @@ -177,7 +177,7 @@ void assert_failed(char const * const module, int_t const id) { // // NOTE02: // One of the LEDs is used to visualize the idle loop activity. The brightness -// of the LED is proportional to the frequency of invcations of the idle loop. +// of the LED is proportional to the frequency of invocations of the idle loop. // Please note that the LED is toggled with interrupts locked, so no interrupt // execution time contributes to the brightness of the User LED. // diff --git a/examples/arm-cr/dpp_launchxl2-tms57012/README.md b/examples/arm-cr/dpp_launchxl2-tms57012/README.md index 8a155d18..757e8aa0 100644 --- a/examples/arm-cr/dpp_launchxl2-tms57012/README.md +++ b/examples/arm-cr/dpp_launchxl2-tms57012/README.md @@ -1,5 +1,88 @@ -![LAUNCHXL2-TMS57012](../../../doxygen/images/bd_LAUNCHXL2-TMS57012.jpg) +> **NOTE** +This file is best viewed in a **markdown viewer**, such as the one built into GitHub. Markdown viewers are also available as plug-ins to popular Internet browsers. -Documentation for this example is available in the QP/C Manual at: +# DPP on LAUNCHXL2-TMS57012 board +This example implements the [Dining Philosophers Problem (DPP) application](https://www.state-machine.com/qpc/tut_dpp.html) on the LAUNCHXL2-TMS57012 board (ARM Cortex-R4F). The example blinks the LED on the LAUNCHXL2-TMS57012 board at 1Hz (0.5 seconds on, 0.5 seconds off). + +

+
+LAUNCHXL2-TMS57012 board +

+ +## Features Demonstrated +- multiple cooperating active objects +- immutable (const) events +- mutable (dynamic) events +- time events +- direct event posting +- publish-subscribe event delivery +- cooperative QV kernel + + with IAR-ARM toolchain + + with TI-ARM toolchain (in Code Composer Studio) +- preemptive run-to-completion QK kernel + + with IAR-ARM toolchain + + with TI-ARM toolchain (in Code Composer Studio) + +## Build Configurations +- Debug +- Release +- Spy - software tracing with the built-in virtual COM port + +# Code Organization +``` +examples\arm-cr\dpp_launchxl2-tms57012 +| ++---qk // preemptive QK kernel +| +---iar // IAR EWARM +| | blinky-qk.eww // IAR EW-ARM workspace +| \---ti // TI CCS +| \---targetConfigs // CCS project (target config) +| .ccsproject // CCS project +| .cproject // CCS project +| .project // CCS project +| +\---qv // cooperative QV kernel +| +---iar // IAR EWARM +| | blinky-qv.eww // IAR EW-ARM workspace +| \---ti // TI CCS +| \---targetConfigs // CCS project (target config) +| .ccsproject // CCS project +| .cproject // CCS project +| .project // CCS project +``` + +# Building the example + +### IAR EWARM +- Open the provided IAR EWARM workspace (either `blinky-qk.eww` or `blinky-qv.eww`) +in IAR EWARM IDE. Build/Debug/Download to the board from the IDE. +- Change the build configuration in the "Project Configuration" drop-down menu. + +### TI CCS +- Import the provided CCS project (either `examples\arm-cr\dpp_launchxl2-tms57012\qk\ti` +or `examples\arm-cr\dpp_launchxl2-tms57012\qv\ti`). +- Change the build configuration in the "Build" drop-down menu. + +# Tracing with QP/Spy +When the board is flashed with the Spy build configuration, it produces the QP/Spy software tracing output to the built-in virtual COM port of the LAUNCHXL2-TMS57012 board. The trace is binary rather than ASCII, and therefore requires a special host-based application called QSPY. + +> **NOTE** QSPY host application is available in the QTools collection. + +To launch the QSPY host application: +- open terminal window +- type: + +``` +qspy -c COM5 +``` + +where "COM5" is an example virtual COM port enumerated by the board. You need to check the specific COM port number on your host computer using the Device Manager application, Ports (COM and LPT) section. + + +The following screen shot shows a typical output from QSPY: + +

+
+Typical QSPY output produced by the Spy build configuration +

-- https://www.state-machine.com/qpc/arm-cr_dpp_launchxl2-tms57012.html diff --git a/examples/arm-cr/dpp_launchxl2-tms57012/dpp.qm b/examples/arm-cr/dpp_launchxl2-tms57012/dpp.qm index ac9f2bc9..b2b8aea4 100644 --- a/examples/arm-cr/dpp_launchxl2-tms57012/dpp.qm +++ b/examples/arm-cr/dpp_launchxl2-tms57012/dpp.qm @@ -257,7 +257,7 @@ for (uint8_t n = 0U; n < N_PHILO; ++n) { - // give permissions to eat... + // give permissions to eat... for (uint8_t n = 0U; n < N_PHILO; ++n) { if (me->isHungry[n] && (me->fork[left(n)] == FREE) diff --git a/examples/arm-cr/dpp_launchxl2-tms57012/launchxl2-tms57012.png b/examples/arm-cr/dpp_launchxl2-tms57012/launchxl2-tms57012.png new file mode 100644 index 0000000000000000000000000000000000000000..04766ae75bfb3eed3b8f778aebfed384af2f23a1 GIT binary patch literal 136290 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 literal 0 HcmV?d00001 diff --git a/examples/arm-cr/dpp_launchxl2-tms57012/qk/Readme.txt b/examples/arm-cr/dpp_launchxl2-tms57012/qk/Readme.txt index 7399a0d6..4159ea74 100644 --- a/examples/arm-cr/dpp_launchxl2-tms57012/qk/Readme.txt +++ b/examples/arm-cr/dpp_launchxl2-tms57012/qk/Readme.txt @@ -28,14 +28,14 @@ the System SSKEY1 register in your debugger. IAR Debugger ------------ -In IAR debugger, open the Regiser view and select the SYS1 (Primary +In IAR debugger, open the "register view" and select the SYS1 (Primary System Control) tab. Scroll down to the SSIR1 register, which has two fields: SSDATA1 and SSKEY1. You type 0x75 to SSKEY1 and press Enter. The SSI interrupt is triggered immediately. CCS Debugger ------------ -In CCS debugger, open the Registers view and select the Sys regiser +In CCS debugger, open the Registers view and select the Sys register group. Scroll down to the SSIr1, which has the SSDATA1 and SSKEY1 fields combined. You type 0x7500 to the Value of the SSIr1 and press Enter. The SSI interrupt is triggered immediately. @@ -46,4 +46,4 @@ References TI E2E Community, Hercules Safety Microcontroller Forum How to force System Software Interrupts(SSI): -https://e2e.ti.com/support/microcontrollers/hercules/f/312/t/413343 \ No newline at end of file +https://e2e.ti.com/support/microcontrollers/hercules/f/312/t/413343 diff --git a/examples/arm-cr/dpp_launchxl2-tms57012/qk/bsp.c b/examples/arm-cr/dpp_launchxl2-tms57012/qk/bsp.c index eceeee59..ed27e028 100644 --- a/examples/arm-cr/dpp_launchxl2-tms57012/qk/bsp.c +++ b/examples/arm-cr/dpp_launchxl2-tms57012/qk/bsp.c @@ -114,7 +114,7 @@ void assert_failed(char const * const module, int_t const id) { // CAUTION: ISRs MUST be both __stackless and __arm! QK_IRQ_BEGIN(rtiCompare0) - rtiREG1->INTFLAG = 1U; // clear the interrutp source + rtiREG1->INTFLAG = 1U; // clear the interrupt source QTIMEEVT_TICK_X(0U, (void *)0); // time events at rate 0 // Perform the debouncing of buttons. The algorithm for debouncing diff --git a/examples/arm-cr/dpp_launchxl2-tms57012/qk/ti/.cproject b/examples/arm-cr/dpp_launchxl2-tms57012/qk/ti/.cproject index 357cf2c7..a583dcdb 100644 --- a/examples/arm-cr/dpp_launchxl2-tms57012/qk/ti/.cproject +++ b/examples/arm-cr/dpp_launchxl2-tms57012/qk/ti/.cproject @@ -15,30 +15,30 @@ - - - - diff --git a/examples/arm-cr/dpp_launchxl2-tms57012/qk/ti/.project b/examples/arm-cr/dpp_launchxl2-tms57012/qk/ti/.project index 54858375..de39009f 100644 --- a/examples/arm-cr/dpp_launchxl2-tms57012/qk/ti/.project +++ b/examples/arm-cr/dpp_launchxl2-tms57012/qk/ti/.project @@ -7,7 +7,6 @@ org.eclipse.cdt.managedbuilder.core.genmakebuilder - clean,full,incremental, diff --git a/examples/arm-cr/dpp_launchxl2-tms57012/qspy-output.png b/examples/arm-cr/dpp_launchxl2-tms57012/qspy-output.png new file mode 100644 index 0000000000000000000000000000000000000000..ee764450fc698007b726222ee98e0c4ff8a2347d GIT binary patch literal 30404 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

5IoT*WP_S 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

48s!6PLv3#1J$zTBSi{a{Ql)}O! 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 literal 0 HcmV?d00001 diff --git a/examples/arm-cr/dpp_launchxl2-tms57012/qv/bsp.c b/examples/arm-cr/dpp_launchxl2-tms57012/qv/bsp.c index c6f52f47..499842b5 100644 --- a/examples/arm-cr/dpp_launchxl2-tms57012/qv/bsp.c +++ b/examples/arm-cr/dpp_launchxl2-tms57012/qv/bsp.c @@ -417,7 +417,7 @@ void QS_onCommand(uint8_t cmdId, // // NOTE2: // One of the LEDs is used to visualize the idle loop activity. The brightness -// of the LED is proportional to the frequency of invcations of the idle loop. +// of the LED is proportional to the frequency of invocations of the idle loop. // Please note that the LED is toggled with interrupts locked, so no interrupt // execution time contributes to the brightness of the User LED. // diff --git a/examples/embos/arm-cm/dpp_nucleo-h743zi/bsp.c b/examples/embos/arm-cm/dpp_nucleo-h743zi/bsp.c index 2f3eec1e..c396c34c 100644 --- a/examples/embos/arm-cm/dpp_nucleo-h743zi/bsp.c +++ b/examples/embos/arm-cm/dpp_nucleo-h743zi/bsp.c @@ -415,7 +415,7 @@ QSTimeCtr QS_onGetTime(void) { // NOTE: invoked with interrupts DISABLED if ((SysTick->CTRL & SysTick_CTRL_COUNTFLAG_Msk) == 0) { // not set? return QS_tickTime_ - (QSTimeCtr)SysTick->VAL; } - else { // the rollover occured, but the SysTick_ISR did not run yet + else { // the rollover occurred, but the SysTick_ISR did not run yet return QS_tickTime_ + QS_tickPeriod_ - (QSTimeCtr)SysTick->VAL; } } @@ -459,7 +459,7 @@ void QS_onCommand(uint8_t cmdId, //============================================================================ // NOTE1: // One of the LEDs is used to visualize the idle loop activity. The brightness -// of the LED is proportional to the frequency of invcations of the idle loop. +// of the LED is proportional to the frequency of invocations of the idle loop. // Please note that the LED is toggled with interrupts disabled, so no // interrupt execution time contributes to the brightness of the LED. // diff --git a/examples/embos/arm-cm/dpp_nucleo-h743zi/dpp.qm b/examples/embos/arm-cm/dpp_nucleo-h743zi/dpp.qm index ac9f2bc9..b2b8aea4 100644 --- a/examples/embos/arm-cm/dpp_nucleo-h743zi/dpp.qm +++ b/examples/embos/arm-cm/dpp_nucleo-h743zi/dpp.qm @@ -257,7 +257,7 @@ for (uint8_t n = 0U; n < N_PHILO; ++n) { - // give permissions to eat... + // give permissions to eat... for (uint8_t n = 0U; n < N_PHILO; ++n) { if (me->isHungry[n] && (me->fork[left(n)] == FREE) diff --git a/examples/embos/arm-cm/dpp_nucleo-h743zi/gnu/Makefile b/examples/embos/arm-cm/dpp_nucleo-h743zi/gnu/Makefile index b1ca441e..5b47c75d 100644 --- a/examples/embos/arm-cm/dpp_nucleo-h743zi/gnu/Makefile +++ b/examples/embos/arm-cm/dpp_nucleo-h743zi/gnu/Makefile @@ -57,7 +57,7 @@ PROJECT := dpp # project directories # -# location of the QP/C framework (if not provided in an environemnt var.) +# location of the QP/C framework (if not provided in an environment var.) ifeq ($(QPC),) QPC := ../../../../.. endif @@ -196,7 +196,7 @@ RM := rm # build options for various configurations for ARM Cortex-M # -# combine all the soruces... +# combine all the sources... C_SRCS += $(QP_SRCS) ASM_SRCS += $(QP_ASMS) diff --git a/examples/embos/arm-cm/dpp_nucleo-h743zi/stm32h7xx_hal_msp.c b/examples/embos/arm-cm/dpp_nucleo-h743zi/stm32h7xx_hal_msp.c index a37af714..46847423 100644 --- a/examples/embos/arm-cm/dpp_nucleo-h743zi/stm32h7xx_hal_msp.c +++ b/examples/embos/arm-cm/dpp_nucleo-h743zi/stm32h7xx_hal_msp.c @@ -88,11 +88,11 @@ //! // NOTE: -// STM32Cube's initialization calls the weakly defiend HAL_InitTick(), which +// STM32Cube's initialization calls the weakly defined HAL_InitTick(), which // by default configures and starts the Systick interrupt. This is TOO EARLY, -// because the system os NOT ready yet to handle interrutps. +// because the system os NOT ready yet to handle interrupts. // To avoid problems, a dummy definition for HAL_InitTick() is provided -// in the fiel stm32l5xx_hal_msp.c. The SystTick is configured and +// in the file stm32l5xx_hal_msp.c. The SystTick is configured and // started later in QF_onStartup(). // HAL_StatusTypeDef HAL_InitTick(uint32_t TickPriority) { @@ -162,7 +162,7 @@ void HAL_UART_MspDeInit(UART_HandleTypeDef *huart) // this is delayed till QF_onCleanup() } -// dummy legacy callacks for STM32CubeH7 +// dummy legacy callbacks for STM32CubeH7 void HAL_UARTEx_RxFifoFullCallback(UART_HandleTypeDef *huart) { (void)huart; // unused parameter } diff --git a/examples/esp-idf/dpp-esp32devkitc/main/dpp.h b/examples/esp-idf/dpp-esp32devkitc/main/dpp.h index f0be7cbc..343afd63 100644 --- a/examples/esp-idf/dpp-esp32devkitc/main/dpp.h +++ b/examples/esp-idf/dpp-esp32devkitc/main/dpp.h @@ -39,7 +39,7 @@ enum DPPSignals { TEST_SIG, // published by BSP to test the application MAX_PUB_SIG, // the last published signal - HUNGRY_SIG, // posted direclty to Table from hungry Philo + HUNGRY_SIG, // posted directly to Table from hungry Philo TIMEOUT_SIG, // used by Philosophers for time events MAX_SIG // the last signal }; diff --git a/examples/esp-idf/dpp-esp32devkitc/main/dpp.qm b/examples/esp-idf/dpp-esp32devkitc/main/dpp.qm index 6fd3bc97..99d934d9 100644 --- a/examples/esp-idf/dpp-esp32devkitc/main/dpp.qm +++ b/examples/esp-idf/dpp-esp32devkitc/main/dpp.qm @@ -397,7 +397,7 @@ enum DPPSignals { TEST_SIG, // published by BSP to test the application MAX_PUB_SIG, // the last published signal - HUNGRY_SIG, // posted direclty to Table from hungry Philo + HUNGRY_SIG, // posted directly to Table from hungry Philo TIMEOUT_SIG, // used by Philosophers for time events MAX_SIG // the last signal }; diff --git a/examples/freertos/arm-cm/dpp_ek-tm4c123gxl/bsp.c b/examples/freertos/arm-cm/dpp_ek-tm4c123gxl/bsp.c index ca6a29bd..dffd47cc 100644 --- a/examples/freertos/arm-cm/dpp_ek-tm4c123gxl/bsp.c +++ b/examples/freertos/arm-cm/dpp_ek-tm4c123gxl/bsp.c @@ -580,7 +580,7 @@ void QS_onCommand(uint8_t cmdId, // // NOTE2: // The User LED is used to visualize the idle loop activity. The brightness -// of the LED is proportional to the frequency of invcations of the idle loop. +// of the LED is proportional to the frequency of invocations of the idle loop. // Please note that the LED is toggled with interrupts locked, so no interrupt // execution time contributes to the brightness of the User LED. diff --git a/examples/freertos/arm-cm/dpp_ek-tm4c123gxl/dpp.qm b/examples/freertos/arm-cm/dpp_ek-tm4c123gxl/dpp.qm index ac9f2bc9..b2b8aea4 100644 --- a/examples/freertos/arm-cm/dpp_ek-tm4c123gxl/dpp.qm +++ b/examples/freertos/arm-cm/dpp_ek-tm4c123gxl/dpp.qm @@ -257,7 +257,7 @@ for (uint8_t n = 0U; n < N_PHILO; ++n) { - // give permissions to eat... + // give permissions to eat... for (uint8_t n = 0U; n < N_PHILO; ++n) { if (me->isHungry[n] && (me->fork[left(n)] == FREE) diff --git a/examples/freertos/arm-cm/dpp_ek-tm4c123gxl/gnu/Makefile b/examples/freertos/arm-cm/dpp_ek-tm4c123gxl/gnu/Makefile index 6091d436..ef9cf2ba 100644 --- a/examples/freertos/arm-cm/dpp_ek-tm4c123gxl/gnu/Makefile +++ b/examples/freertos/arm-cm/dpp_ek-tm4c123gxl/gnu/Makefile @@ -57,12 +57,12 @@ PROJECT := dpp # project directories # -# location of the QP/C framework (if not provided in an environemnt var.) +# location of the QP/C framework (if not provided in an environment var.) ifeq ($(QPC),) QPC := ../../../../.. endif -# location of the FREERTOS (if not provided in an environemnt var.) +# location of the FREERTOS (if not provided in an environment var.) ifeq ($(FREERTOS),) FREERTOS := $(QPC)/3rd_party/FreeRTOS-Kernel endif @@ -186,7 +186,7 @@ RM := rm # build options for various configurations for ARM Cortex-M4F # -# combine all the soruces... +# combine all the sources... C_SRCS += $(QP_SRCS) $(RTOS_SRCS) ASM_SRCS += $(QP_ASMS) diff --git a/examples/freertos/arm-cm/dpp_ek-tm4c123gxl/gnu/README.txt b/examples/freertos/arm-cm/dpp_ek-tm4c123gxl/gnu/README.txt index c8e80728..64b4d187 100644 --- a/examples/freertos/arm-cm/dpp_ek-tm4c123gxl/gnu/README.txt +++ b/examples/freertos/arm-cm/dpp_ek-tm4c123gxl/gnu/README.txt @@ -31,7 +31,7 @@ to be adjusted in the provided Makefile, by editing the symbol: GNU_ARM. As described in the comment for this symbol, the GNU-ARM toolset is taken from: http://gnutoolchains.com/arm-eabi -It is highly recommened to use the same GNU-ARM distribution, especially +It is highly recommended to use the same GNU-ARM distribution, especially for ARM Cortex-M4F projects, due to the support for the hardware FPU (float-abi=hard). *** diff --git a/examples/freertos/arm-cm/dpp_nucleo-h743zi/bsp.c b/examples/freertos/arm-cm/dpp_nucleo-h743zi/bsp.c index b1c09b1d..69e2e492 100644 --- a/examples/freertos/arm-cm/dpp_nucleo-h743zi/bsp.c +++ b/examples/freertos/arm-cm/dpp_nucleo-h743zi/bsp.c @@ -485,7 +485,7 @@ QSTimeCtr QS_onGetTime(void) { // NOTE: invoked with interrupts DISABLED if ((SysTick->CTRL & SysTick_CTRL_COUNTFLAG_Msk) == 0) { // not set? return QS_tickTime_ - (QSTimeCtr)SysTick->VAL; } - else { // the rollover occured, but the SysTick_ISR did not run yet + else { // the rollover occurred, but the SysTick_ISR did not run yet return QS_tickTime_ + QS_tickPeriod_ - (QSTimeCtr)SysTick->VAL; } } @@ -552,7 +552,7 @@ void QS_onCommand(uint8_t cmdId, // // NOTE2: // The User LED is used to visualize the idle loop activity. The brightness -// of the LED is proportional to the frequency of invcations of the idle loop. +// of the LED is proportional to the frequency of invocations of the idle loop. // Please note that the LED is toggled with interrupts locked, so no interrupt // execution time contributes to the brightness of the User LED. diff --git a/examples/freertos/arm-cm/dpp_nucleo-h743zi/dpp.qm b/examples/freertos/arm-cm/dpp_nucleo-h743zi/dpp.qm index ac9f2bc9..b2b8aea4 100644 --- a/examples/freertos/arm-cm/dpp_nucleo-h743zi/dpp.qm +++ b/examples/freertos/arm-cm/dpp_nucleo-h743zi/dpp.qm @@ -257,7 +257,7 @@ for (uint8_t n = 0U; n < N_PHILO; ++n) { - // give permissions to eat... + // give permissions to eat... for (uint8_t n = 0U; n < N_PHILO; ++n) { if (me->isHungry[n] && (me->fork[left(n)] == FREE) diff --git a/examples/freertos/arm-cm/dpp_nucleo-h743zi/gnu/Makefile b/examples/freertos/arm-cm/dpp_nucleo-h743zi/gnu/Makefile index 2fbf7e69..6076db8e 100644 --- a/examples/freertos/arm-cm/dpp_nucleo-h743zi/gnu/Makefile +++ b/examples/freertos/arm-cm/dpp_nucleo-h743zi/gnu/Makefile @@ -57,12 +57,12 @@ PROJECT := dpp # project directories # -# location of the QP/C framework (if not provided in an environemnt var.) +# location of the QP/C framework (if not provided in an environment var.) ifeq ($(QPC),) QPC := ../../../../.. endif -# location of the FREERTOS (if not provided in an environemnt var.) +# location of the FREERTOS (if not provided in an environment var.) ifeq ($(FREERTOS),) FREERTOS := $(QPC)/3rd_party/FreeRTOS-Kernel endif @@ -202,7 +202,7 @@ RM := rm # build options for various configurations for ARM Cortex-M # -# combine all the soruces... +# combine all the sources... C_SRCS += $(QP_SRCS) $(RTOS_SRCS) ASM_SRCS += $(QP_ASMS) diff --git a/examples/freertos/arm-cm/dpp_nucleo-h743zi/gnu/README.txt b/examples/freertos/arm-cm/dpp_nucleo-h743zi/gnu/README.txt index 2e5ed975..20c2d487 100644 --- a/examples/freertos/arm-cm/dpp_nucleo-h743zi/gnu/README.txt +++ b/examples/freertos/arm-cm/dpp_nucleo-h743zi/gnu/README.txt @@ -31,7 +31,7 @@ to be adjusted in the provided Makefile, by editing the symbol: GNU_ARM. As described in the comment for this symbol, the GNU-ARM toolset is taken from: http://gnutoolchains.com/arm-eabi -It is highly recommened to use the same GNU-ARM distribution, especially +It is highly recommended to use the same GNU-ARM distribution, especially for ARM Cortex-M4/M7 projects, due to the support for the hardware FPU (float-abi=hard). *** diff --git a/examples/freertos/arm-cm/dpp_nucleo-h743zi/stm32h7xx_hal_msp.c b/examples/freertos/arm-cm/dpp_nucleo-h743zi/stm32h7xx_hal_msp.c index a37af714..46847423 100644 --- a/examples/freertos/arm-cm/dpp_nucleo-h743zi/stm32h7xx_hal_msp.c +++ b/examples/freertos/arm-cm/dpp_nucleo-h743zi/stm32h7xx_hal_msp.c @@ -88,11 +88,11 @@ //! // NOTE: -// STM32Cube's initialization calls the weakly defiend HAL_InitTick(), which +// STM32Cube's initialization calls the weakly defined HAL_InitTick(), which // by default configures and starts the Systick interrupt. This is TOO EARLY, -// because the system os NOT ready yet to handle interrutps. +// because the system os NOT ready yet to handle interrupts. // To avoid problems, a dummy definition for HAL_InitTick() is provided -// in the fiel stm32l5xx_hal_msp.c. The SystTick is configured and +// in the file stm32l5xx_hal_msp.c. The SystTick is configured and // started later in QF_onStartup(). // HAL_StatusTypeDef HAL_InitTick(uint32_t TickPriority) { @@ -162,7 +162,7 @@ void HAL_UART_MspDeInit(UART_HandleTypeDef *huart) // this is delayed till QF_onCleanup() } -// dummy legacy callacks for STM32CubeH7 +// dummy legacy callbacks for STM32CubeH7 void HAL_UARTEx_RxFifoFullCallback(UART_HandleTypeDef *huart) { (void)huart; // unused parameter } diff --git a/examples/lwip/arm-cm/lwip_ek-lm3s6965/README.txt b/examples/lwip/arm-cm/lwip_ek-lm3s6965/README.txt index f998aaf6..b8fe0c26 100644 --- a/examples/lwip/arm-cm/lwip_ek-lm3s6965/README.txt +++ b/examples/lwip/arm-cm/lwip_ek-lm3s6965/README.txt @@ -58,7 +58,7 @@ the code on the board from the EWARM IDE. Running the QP-lwIP Example --------------------------- -Connect the EK-LM3S6965 board to the wired Ehternet and power it up by +Connect the EK-LM3S6965 board to the wired Ethernet and power it up by plugging in the USB cable. Immediately after the power-up, you should see the startup screen on the OLED-display. The status of the Dining Philosophers should be changing. diff --git a/examples/lwip/arm-cm/lwip_ek-lm3s6965/dpp.h b/examples/lwip/arm-cm/lwip_ek-lm3s6965/dpp.h index dc4aaa59..1b18af8a 100644 --- a/examples/lwip/arm-cm/lwip_ek-lm3s6965/dpp.h +++ b/examples/lwip/arm-cm/lwip_ek-lm3s6965/dpp.h @@ -41,12 +41,12 @@ enum DPPSignals { BTN_DOWN_SIG, // published by ISR_SysTick when user button is pressed BTN_UP_SIG, // published by ISR_SysTick when user button is released - DISPLAY_IPADDR_SIG, // published by lwIPMgr to display IP addres + DISPLAY_IPADDR_SIG, // published by lwIPMgr to display IP address DISPLAY_CGI_SIG, // published by lwIPMgr to display CGI text DISPLAY_UDP_SIG, // published by lwIPMgr to display UDP text MAX_PUB_SIG, // the last published signal - HUNGRY_SIG, // posted direclty to Table from hungry Philosopher + HUNGRY_SIG, // posted directly to Table from hungry Philosopher SEND_UDP_SIG, // posted directly to lwIPMgr to send text via UDP LWIP_DRIVER_GROUP, // LwIP driver signal group LWIP_DRIVER_END = LWIP_DRIVER_GROUP + 10, // reserve 10 signals diff --git a/examples/lwip/arm-cm/lwip_ek-lm3s6965/lwip.c b/examples/lwip/arm-cm/lwip_ek-lm3s6965/lwip.c index bd49f086..e423d7ac 100644 --- a/examples/lwip/arm-cm/lwip_ek-lm3s6965/lwip.c +++ b/examples/lwip/arm-cm/lwip_ek-lm3s6965/lwip.c @@ -33,8 +33,8 @@ #include "lwip/mem.h" // NOTE: all the following modules contain conditional compilation protection, -// so tht code will be actually generated only if the appropriate options are -// set in the lwipopts.h header file included from lwip/opt.h. +// so that code will be actually generated only if the appropriate options +// are set in the lwipopts.h header file included from lwip/opt.h. // // Core lwIP TCP/IP stack .................................................. @@ -109,7 +109,7 @@ struct pbuf *pbuf_new(u8_t *data, u16_t len) { while ((q != (struct pbuf *)0) && (len >= q->len)) { memcpy(q->payload, data, q->len); // copy data into payload len -= q->len; // remaining length - data += q->len; // remainig data chunk + data += q->len; // remaining data chunk q = q->next; // get next pbuf } return p; diff --git a/examples/lwip/arm-cm/lwip_ek-lm3s6965/qk/bsp.c b/examples/lwip/arm-cm/lwip_ek-lm3s6965/qk/bsp.c index fd083bca..3bcc8040 100644 --- a/examples/lwip/arm-cm/lwip_ek-lm3s6965/qk/bsp.c +++ b/examples/lwip/arm-cm/lwip_ek-lm3s6965/qk/bsp.c @@ -168,7 +168,7 @@ void QF_onStartup(void) { // set up the SysTick timer to fire at BSP_TICKS_PER_SEC rate SysTick_Config(SystemCoreClock / BSP_TICKS_PER_SEC); - // assing all priority bits for preemption-prio. and none to sub-prio. + // assign all priority bits for preemption-prio. and none to sub-prio. NVIC_SetPriorityGrouping(0U); // set priorities of ALL ISRs used in the system, see NOTE1 @@ -289,7 +289,7 @@ QSTimeCtr QS_onGetTime(void) { // invoked with interrupts disabled if ((SysTick->CTRL & SysTick_CTRL_COUNTFLAG_Msk) == 0) { // not set? return QS_tickTime_ - (QSTimeCtr)SysTick->VAL; } - else { // the rollover occured, but the SysTick_ISR did not run yet + else { // the rollover occurred, but the SysTick_ISR did not run yet return QS_tickTime_ + QS_tickPeriod_ - (QSTimeCtr)SysTick->VAL; } } @@ -334,7 +334,7 @@ void QS_onFlush(void) { // // NOTE2: // The User LED is used to visualize the idle loop activity. The brightness -// of the LED is proportional to the frequency of invcations of the idle loop. +// of the LED is proportional to the frequency of invocations of the idle loop. // Please note that the LED is toggled with interrupts locked, so no interrupt // execution time contributes to the brightness of the User LED. // diff --git a/examples/lwip/arm-cm/lwip_ek-lm3s6965/qk/gnu/Makefile b/examples/lwip/arm-cm/lwip_ek-lm3s6965/qk/gnu/Makefile index 33556dfa..907a5884 100644 --- a/examples/lwip/arm-cm/lwip_ek-lm3s6965/qk/gnu/Makefile +++ b/examples/lwip/arm-cm/lwip_ek-lm3s6965/qk/gnu/Makefile @@ -57,7 +57,7 @@ PROJECT := lwip-qk # project directories # -# location of the QP/C framework (if not provided in an environemnt var.) +# location of the QP/C framework (if not provided in an environment var.) ifeq ($(QPC),) QPC := ../../../../../.. endif @@ -190,7 +190,7 @@ RM := rm # build options for various configurations for ARM Cortex-M4F # -# combine all the soruces... +# combine all the sources... C_SRCS += $(QP_SRCS) ASM_SRCS += $(QP_ASMS) diff --git a/examples/lwip/arm-cm/lwip_ek-lm3s6965/qv/bsp.c b/examples/lwip/arm-cm/lwip_ek-lm3s6965/qv/bsp.c index be62144a..8cc0e021 100644 --- a/examples/lwip/arm-cm/lwip_ek-lm3s6965/qv/bsp.c +++ b/examples/lwip/arm-cm/lwip_ek-lm3s6965/qv/bsp.c @@ -164,7 +164,7 @@ void QF_onStartup(void) { // set up the SysTick timer to fire at BSP_TICKS_PER_SEC rate SysTick_Config(SystemCoreClock / BSP_TICKS_PER_SEC); - // assing all priority bits for preemption-prio. and none to sub-prio. + // assign all priority bits for preemption-prio. and none to sub-prio. NVIC_SetPriorityGrouping(0U); // set priorities of ALL ISRs used in the system, see NOTE1 @@ -183,7 +183,7 @@ void QF_onStartup(void) { void QF_onCleanup(void) { } //............................................................................ -void QV_onIdle(void) { // NOTE: called with interrutps DISABLED, see NOTE2 +void QV_onIdle(void) { // NOTE: called with interrupts DISABLED, see NOTE2 // toggle the User LED on and then off, see NOTE3 QF_INT_DISABLE(); @@ -287,7 +287,7 @@ QSTimeCtr QS_onGetTime(void) { // invoked with interrupts disabled if ((SysTick->CTRL & SysTick_CTRL_COUNTFLAG_Msk) == 0) { // not set? return QS_tickTime_ - (QSTimeCtr)SysTick->VAL; } - else { // the rollover occured, but the SysTick_ISR did not run yet + else { // the rollover occurred, but the SysTick_ISR did not run yet return QS_tickTime_ + QS_tickPeriod_ - (QSTimeCtr)SysTick->VAL; } } @@ -338,7 +338,7 @@ void QS_onFlush(void) { // // NOTE3: // The User LED is used to visualize the idle loop activity. The brightness -// of the LED is proportional to the frequency of invcations of the idle loop. +// of the LED is proportional to the frequency of invocations of the idle loop. // Please note that the LED is toggled with interrupts locked, so no interrupt // execution time contributes to the brightness of the User LED. // diff --git a/examples/lwip/arm-cm/lwip_ek-lm3s6965/qv/gnu/Makefile b/examples/lwip/arm-cm/lwip_ek-lm3s6965/qv/gnu/Makefile index 3f48c442..6ab2e064 100644 --- a/examples/lwip/arm-cm/lwip_ek-lm3s6965/qv/gnu/Makefile +++ b/examples/lwip/arm-cm/lwip_ek-lm3s6965/qv/gnu/Makefile @@ -57,7 +57,7 @@ PROJECT := lwip-qv # project directories # -# location of the QP/C framework (if not provided in an environemnt var.) +# location of the QP/C framework (if not provided in an environment var.) ifeq ($(QPC),) QPC := ../../../../../.. endif @@ -190,7 +190,7 @@ RM := rm # build options for various configurations for ARM Cortex-M4F # -# combine all the soruces... +# combine all the sources... C_SRCS += $(QP_SRCS) ASM_SRCS += $(QP_ASMS) diff --git a/examples/lwip/arm-cm/lwip_ek-lm3s6965/website/index.htm b/examples/lwip/arm-cm/lwip_ek-lm3s6965/website/index.htm index bb492091..5b4a6437 100644 --- a/examples/lwip/arm-cm/lwip_ek-lm3s6965/website/index.htm +++ b/examples/lwip/arm-cm/lwip_ek-lm3s6965/website/index.htm @@ -43,7 +43,7 @@

The example provides an HTTP server with simple Server Side Include (SSI) and Common Gateway Interface (CGI) capability, so that dynamic web pages can be served and the pages can send data or commands to the target. Internal file system for web pages and a utility (qfsgen.exe) for generating the HTML-files and images is also provided in the QP-lwIP example code.

-

The lwIP code is initially configured in this example to use DHCP to obtain the IP address, so it assumes the presence of a DHCP server, such as a typical Ethernet router. By modifying the lwipopts.h header file, the application can also be configured to optain the IP address via AUTOIP (as described in RFC 3927), or to use a static IP address. The example also demonstrates UDP. A UDP test application (qudp.exe) for sending and receiving UDP packets (on Windows and Linux hosts) is provided in the QP-lwIP example code. +

The lwIP code is initially configured in this example to use DHCP to obtain the IP address, so it assumes the presence of a DHCP server, such as a typical Ethernet router. By modifying the lwipopts.h header file, the application can also be configured to obtain the IP address via AUTOIP (as described in RFC 3927), or to use a static IP address. The example also demonstrates UDP. A UDP test application (qudp.exe) for sending and receiving UDP packets (on Windows and Linux hosts) is provided in the QP-lwIP example code.

Please refer to the Quantum Leaps Application Note: "QP and lwIP TCP/IP Stack" for more information. The Application Note in PDF is provided in the QP-lwIP example code.

diff --git a/examples/lwip/arm-cm/lwip_ek-lm3s6965/website/udp_demo.htm b/examples/lwip/arm-cm/lwip_ek-lm3s6965/website/udp_demo.htm index 7ea0b46c..7f795882 100644 --- a/examples/lwip/arm-cm/lwip_ek-lm3s6965/website/udp_demo.htm +++ b/examples/lwip/arm-cm/lwip_ek-lm3s6965/website/udp_demo.htm @@ -45,7 +45,7 @@ Application Note (1.4MB PDF) -

To facilitate testing of UDP connectivity, a simple console application called qudp for Windows or Linux hosts is provided in the QP-lwIP example code. The following listing shows an example output generated from the qudp applicaiton: +

To facilitate testing of UDP connectivity, a simple console application called qudp for Windows or Linux hosts is provided in the QP-lwIP example code. The following listing shows an example output generated from the qudp application:

 C:\software\qpcpp\tools\qudp\win32\vc6>Debug\qudp 192.168.0.100
diff --git a/examples/msp430/blinky_msp-exp430f5529lp/qk/bsp.c b/examples/msp430/blinky_msp-exp430f5529lp/qk/bsp.c
index a2586d34..d05f5af2 100644
--- a/examples/msp430/blinky_msp-exp430f5529lp/qk/bsp.c
+++ b/examples/msp430/blinky_msp-exp430f5529lp/qk/bsp.c
@@ -162,7 +162,7 @@ void QK_onIdle(void) {
 //
 // NOTE2:
 // One of the LEDs is used to visualize the idle loop activity. The brightness
-// of the LED is proportional to the frequency of invcations of the idle loop.
+// of the LED is proportional to the frequency of invocations of the idle loop.
 // Please note that the LED is toggled with interrupts locked, so no interrupt
 // execution time contributes to the brightness of the User LED.
 //
diff --git a/examples/msp430/blinky_msp-exp430f5529lp/qv/bsp.c b/examples/msp430/blinky_msp-exp430f5529lp/qv/bsp.c
index e050448c..400ef1cc 100644
--- a/examples/msp430/blinky_msp-exp430f5529lp/qv/bsp.c
+++ b/examples/msp430/blinky_msp-exp430f5529lp/qv/bsp.c
@@ -104,7 +104,7 @@ void QF_onStartup(void) {
 void QF_onCleanup(void) {
 }
 //............................................................................
-void QV_onIdle(void) { // NOTE: called with interrutps DISABLED, see NOTE1
+void QV_onIdle(void) { // NOTE: called with interrupts DISABLED, see NOTE1
     // toggle LED2 on and then off, see NOTE2
     P4OUT |=  LED2;        // turn LED2 on
     P4OUT &= ~LED2;        // turn LED2 off
@@ -153,7 +153,7 @@ void assert_failed(char const * const module, int_t const id) {
 //
 // NOTE2:
 // One of the LEDs is used to visualize the idle loop activity. The brightness
-// of the LED is proportional to the frequency of invcations of the idle loop.
+// of the LED is proportional to the frequency of invocations of the idle loop.
 // Please note that the LED is toggled with interrupts locked, so no interrupt
 // execution time contributes to the brightness of the User LED.
 //
diff --git a/examples/msp430/blinky_msp-exp430g2/README.md b/examples/msp430/blinky_msp-exp430g2/README.md
index dc3c2303..498bdb27 100644
--- a/examples/msp430/blinky_msp-exp430g2/README.md
+++ b/examples/msp430/blinky_msp-exp430g2/README.md
@@ -17,7 +17,7 @@ The QP/C framework is configured as follows:
 ## Minimal QP/C port
 
 The minimal QP/C configuration is NOT taken from the
-offical QP/C port to MSP430 because that port uses more
+official QP/C port to MSP430 because that port uses more
 features. Instead, the minimal port is co-located with
 this example in the qv_mini directory. Here are the files
 and most important QP configuration settings:
diff --git a/examples/msp430/blinky_msp-exp430g2/qv/bsp.c b/examples/msp430/blinky_msp-exp430g2/qv/bsp.c
index 842cc569..53b9bd1d 100644
--- a/examples/msp430/blinky_msp-exp430g2/qv/bsp.c
+++ b/examples/msp430/blinky_msp-exp430g2/qv/bsp.c
@@ -94,7 +94,7 @@ void QF_onStartup(void) {
     CCTL0 = CCIE;  // CCR0 interrupt enabled
 }
 //............................................................................
-void QV_onIdle(void) { // NOTE: called with interrutps DISABLED, see NOTE1
+void QV_onIdle(void) { // NOTE: called with interrupts DISABLED, see NOTE1
     // toggle LED2 on and then off, see NOTE2
     P1OUT |=  LED2;        // turn LED2 on
     P1OUT &= ~LED2;        // turn LED2 off
diff --git a/examples/msp430/dpp_msp-exp430f5529lp/dpp.qm b/examples/msp430/dpp_msp-exp430f5529lp/dpp.qm
index ac9f2bc9..b2b8aea4 100644
--- a/examples/msp430/dpp_msp-exp430f5529lp/dpp.qm
+++ b/examples/msp430/dpp_msp-exp430f5529lp/dpp.qm
@@ -257,7 +257,7 @@ for (uint8_t n = 0U; n < N_PHILO; ++n) {
      
      
      
-      // give permissions to eat...
+      // give permissions to eat...
 for (uint8_t n = 0U; n < N_PHILO; ++n) {
     if (me->isHungry[n]
         && (me->fork[left(n)] == FREE)
diff --git a/examples/msp430/dpp_msp-exp430f5529lp/qk/bsp.c b/examples/msp430/dpp_msp-exp430f5529lp/qk/bsp.c
index d2861896..aa515bba 100644
--- a/examples/msp430/dpp_msp-exp430f5529lp/qk/bsp.c
+++ b/examples/msp430/dpp_msp-exp430f5529lp/qk/bsp.c
@@ -223,7 +223,7 @@ void BSP_displayPhilStat(uint8_t n, char const *stat) {
 }
 //............................................................................
 void BSP_displayPaused(uint8_t const paused) {
-    // not enouhg LEDs to implement this feature
+    // not enough LEDs to implement this feature
     if (paused != 0U) {
         //P1OUT |=  LED1;
     }
@@ -361,7 +361,7 @@ QSTimeCtr QS_onGetTime(void) {  // invoked with interrupts DISABLED
     if ((TA0CTL & TAIFG) == 0U) {  // interrupt not pending?
         return QS_tickTime_ + TA0R;
     }
-    else { // the rollover occured, but the timerA_ISR did not run yet
+    else { // the rollover occurred, but the timerA_ISR did not run yet
         return QS_tickTime_
            + (((BSP_SMCLK/8U) + BSP_TICKS_PER_SEC/2U)/BSP_TICKS_PER_SEC) + 1U
            + TA0R;
diff --git a/examples/msp430/dpp_msp-exp430f5529lp/qv/bsp.c b/examples/msp430/dpp_msp-exp430f5529lp/qv/bsp.c
index 42819693..c6ed0d9a 100644
--- a/examples/msp430/dpp_msp-exp430f5529lp/qv/bsp.c
+++ b/examples/msp430/dpp_msp-exp430f5529lp/qv/bsp.c
@@ -200,7 +200,7 @@ void BSP_displayPhilStat(uint8_t n, char const *stat) {
 }
 //............................................................................
 void BSP_displayPaused(uint8_t const paused) {
-    // not enouhg LEDs to implement this feature
+    // not enough LEDs to implement this feature
     if (paused != 0U) {
         //P1OUT |=  LED1;
     }
@@ -238,7 +238,7 @@ void QF_onStartup(void) {
 void QF_onCleanup(void) {
 }
 //............................................................................
-void QV_onIdle(void) { // NOTE: called with interrutps DISABLED, see NOTE1
+void QV_onIdle(void) { // NOTE: called with interrupts DISABLED, see NOTE1
     // toggle LED2 on and then off, see NOTE2
     P4OUT |=  LED2;  // turn LED2 on
     P4OUT &= ~LED2;  // turn LED2 off
@@ -325,7 +325,7 @@ QSTimeCtr QS_onGetTime(void) {  // invoked with interrupts DISABLED
     if ((TA0CTL & TAIFG) == 0U) {  // interrupt not pending?
         return QS_tickTime_ + TA0R;
     }
-    else { // the rollover occured, but the timerA_ISR did not run yet
+    else { // the rollover occurred, but the timerA_ISR did not run yet
         return QS_tickTime_
            + (((BSP_SMCLK/8U) + BSP_TICKS_PER_SEC/2U)/BSP_TICKS_PER_SEC) + 1U
            + TA0R;
diff --git a/examples/pic32/dpp_microstick2-pic32/dpp.qm b/examples/pic32/dpp_microstick2-pic32/dpp.qm
index ac9f2bc9..b2b8aea4 100644
--- a/examples/pic32/dpp_microstick2-pic32/dpp.qm
+++ b/examples/pic32/dpp_microstick2-pic32/dpp.qm
@@ -257,7 +257,7 @@ for (uint8_t n = 0U; n < N_PHILO; ++n) {
      
      
      
-      // give permissions to eat...
+      // give permissions to eat...
 for (uint8_t n = 0U; n < N_PHILO; ++n) {
     if (me->isHungry[n]
         && (me->fork[left(n)] == FREE)
diff --git a/examples/pic32/dpp_microstick2-pic32/qk/xc32/Makefile b/examples/pic32/dpp_microstick2-pic32/qk/xc32/Makefile
index 17647f99..f026b295 100644
--- a/examples/pic32/dpp_microstick2-pic32/qk/xc32/Makefile
+++ b/examples/pic32/dpp_microstick2-pic32/qk/xc32/Makefile
@@ -22,7 +22,7 @@
 #     clean                    remove built files from a configuration
 #     clobber                  remove all built files
 #     all                      build all configurations
-#     help                     print help mesage
+#     help                     print help message
 #
 #  Targets .build-impl, .clean-impl, .clobber-impl, .all-impl, and
 #  .help-impl are implemented in nbproject/makefile-impl.mk.
diff --git a/examples/pic32/dpp_microstick2-pic32/qv/xc32/Makefile b/examples/pic32/dpp_microstick2-pic32/qv/xc32/Makefile
index 17647f99..f026b295 100644
--- a/examples/pic32/dpp_microstick2-pic32/qv/xc32/Makefile
+++ b/examples/pic32/dpp_microstick2-pic32/qv/xc32/Makefile
@@ -22,7 +22,7 @@
 #     clean                    remove built files from a configuration
 #     clobber                  remove all built files
 #     all                      build all configurations
-#     help                     print help mesage
+#     help                     print help message
 #
 #  Targets .build-impl, .clean-impl, .clobber-impl, .all-impl, and
 #  .help-impl are implemented in nbproject/makefile-impl.mk.
diff --git a/examples/posix-win32/calc/calc.qm b/examples/posix-win32/calc/calc.qm
index 6f26a07b..7f4d24ac 100644
--- a/examples/posix-win32/calc/calc.qm
+++ b/examples/posix-win32/calc/calc.qm
@@ -35,7 +35,7 @@
    
     // guard function to evaluate the current expression
 * taking into account the precedence of operands.
-* return: true if evaluation successfull
+* return: true if evaluation successful
 * false when error encountered
 
     
@@ -163,7 +163,7 @@ BSP_clear();
      
      
       // Error state after evaluation of an expression.
-This state can be exited only throgh the inherited C (Clear) event.
+This state can be exited only through the inherited C (Clear) event.
 
       BSP_message("error-ENTRY;");
       BSP_message("error-EXIT;");
diff --git a/examples/posix-win32/calc2/calc2.qm b/examples/posix-win32/calc2/calc2.qm
index fa7cee32..8f95c2dc 100644
--- a/examples/posix-win32/calc2/calc2.qm
+++ b/examples/posix-win32/calc2/calc2.qm
@@ -35,7 +35,7 @@
    
     // guard function to evaluate the current expression
 * taking into account the precedence of operands.
-* return: true if evaluation successfull
+* return: true if evaluation successful
 * false when error encountered
 
     
@@ -168,7 +168,7 @@ BSP_clear();
      
      
       // Error state after evaluation of an expression.
-This state can be exited only throgh the inherited C (Clear) event.
+This state can be exited only through the inherited C (Clear) event.
 
       BSP_message("error-ENTRY;");
       BSP_message("error-EXIT;");
diff --git a/examples/posix-win32/calc_sub/calc_sub.qm b/examples/posix-win32/calc_sub/calc_sub.qm
index 713ee74e..13134bb2 100644
--- a/examples/posix-win32/calc_sub/calc_sub.qm
+++ b/examples/posix-win32/calc_sub/calc_sub.qm
@@ -32,7 +32,7 @@
    
     // guard function to evaluate the current expression
 * taking into account the precedence of operands.
-* return: true if evaluation successfull
+* return: true if evaluation successful
 * false when error encountered
 
     
@@ -160,7 +160,7 @@ BSP_clear();
      
      
       // Error state after evaluation of an expression.
-This state can be exited only throgh the inherited C (Clear) event.
+This state can be exited only through the inherited C (Clear) event.
 
       BSP_message("error-ENTRY;");
       BSP_message("error-EXIT;");
diff --git a/examples/posix-win32/calc_sub/lint-plus/README.txt b/examples/posix-win32/calc_sub/lint-plus/README.txt
index d4bb2bbf..4ed3fcad 100644
--- a/examples/posix-win32/calc_sub/lint-plus/README.txt
+++ b/examples/posix-win32/calc_sub/lint-plus/README.txt
@@ -7,7 +7,7 @@ To "lint" the application, invoke the batch "lin.bat"  without parameters.
 Optionally, you can supply the parameter -dQ_SPY to include the QS
 instrumentation in the "linting" process.
 
-The output from the "linting" is saved in the fle "lin_out.log".
+The output from the "linting" is saved in the file "lin_out.log".
 
 ***
 NOTE: You need to adjust the symbol PCLP at the top of the lin.bat
diff --git a/examples/posix-win32/calc_sub/lint-plus/options.lnt b/examples/posix-win32/calc_sub/lint-plus/options.lnt
index e585c6d4..2cb4ed19 100644
--- a/examples/posix-win32/calc_sub/lint-plus/options.lnt
+++ b/examples/posix-win32/calc_sub/lint-plus/options.lnt
@@ -53,5 +53,5 @@ cpu.lnt             // for the chosen CPU
 qpc.lnt               // QP/C options
 
 //============================================================================
-// additional supporession rules for bulding this application
+// additional suppression rules for building this application
 
diff --git a/examples/posix-win32/dpp-posix/Makefile b/examples/posix-win32/dpp-posix/Makefile
index 607f7af2..a6910a77 100644
--- a/examples/posix-win32/dpp-posix/Makefile
+++ b/examples/posix-win32/dpp-posix/Makefile
@@ -123,7 +123,7 @@ $(error this example is for POSIX only and does not build or run on Windows)
 else
 
 # NOTE:
-# Ths example is only for multithreaded POSIX (NOT for POSIX-QV)
+# This example is only for multithreaded POSIX (NOT for POSIX-QV)
 #
 QP_PORT_DIR := $(QPCPP)/ports/posix
 
diff --git a/examples/posix-win32/dpp-posix/dpp.qm b/examples/posix-win32/dpp-posix/dpp.qm
index ac9f2bc9..b2b8aea4 100644
--- a/examples/posix-win32/dpp-posix/dpp.qm
+++ b/examples/posix-win32/dpp-posix/dpp.qm
@@ -257,7 +257,7 @@ for (uint8_t n = 0U; n < N_PHILO; ++n) {
      
      
      
-      // give permissions to eat...
+      // give permissions to eat...
 for (uint8_t n = 0U; n < N_PHILO; ++n) {
     if (me->isHungry[n]
         && (me->fork[left(n)] == FREE)
diff --git a/examples/posix-win32/dpp/dpp.qm b/examples/posix-win32/dpp/dpp.qm
index ac9f2bc9..b2b8aea4 100644
--- a/examples/posix-win32/dpp/dpp.qm
+++ b/examples/posix-win32/dpp/dpp.qm
@@ -257,7 +257,7 @@ for (uint8_t n = 0U; n < N_PHILO; ++n) {
      
      
      
-      // give permissions to eat...
+      // give permissions to eat...
 for (uint8_t n = 0U; n < N_PHILO; ++n) {
     if (me->isHungry[n]
         && (me->fork[left(n)] == FREE)
diff --git a/examples/posix-win32/dpp/qview/dpp.py b/examples/posix-win32/dpp/qview/dpp.py
index 2819c98c..958057cc 100644
--- a/examples/posix-win32/dpp/qview/dpp.py
+++ b/examples/posix-win32/dpp/qview/dpp.py
@@ -9,7 +9,7 @@
 # trace record QS_USER_00 (PHILO_STAT) produced when the status of
 # a Philo changes.
 #
-# NOTE: this is a desktop appliction, which you cannot reset (and restarted).
+# NOTE: this is a desktop application, which you cannot reset (and restarted).
 # Therefore, the desktop applications must be started *after* the QView is
 # already running and is attached to the QSPY host application.
 
@@ -52,7 +52,7 @@ class DPP:
         # to start with resetting the Target, to start clean with
         # Qs dictionaries, etc.
         #
-        # Howver, this is a desktop appliction, which you cannot reset
+        # However, this is a desktop application, which you cannot reset
         # (and restart). Therefore, the desktop applications must be started
         # *after* the QView is already running.
         #reset_target()
diff --git a/examples/posix-win32/dpp/qview/dpp1.py b/examples/posix-win32/dpp/qview/dpp1.py
index 9d86da4f..acd540a2 100644
--- a/examples/posix-win32/dpp/qview/dpp1.py
+++ b/examples/posix-win32/dpp/qview/dpp1.py
@@ -12,7 +12,7 @@
 # information about the addresses of the Philosopher objects and the states
 # of their state machines.
 #
-# NOTE: this is a desktop appliction, which you cannot reset (and restarted).
+# NOTE: this is a desktop application, which you cannot reset (and restarted).
 # Therefore, the desktop applications must be started *after* the QView is
 # already running and is attached to the QSPY host application.
 
@@ -55,7 +55,7 @@ class DPP:
         # to start with resetting the Target, to start clean with
         # Qs dictionaries, etc.
         #
-        # Howver, this is a desktop appliction, which you cannot reset
+        # However, this is a desktop application, which you cannot reset
         # (and restart). Therefore, the desktop applications must be started
         # *after* the QView is already running.
         #reset_target()
diff --git a/examples/posix-win32/dpp_comp/dpp-comp.qm b/examples/posix-win32/dpp_comp/dpp-comp.qm
index c37113b7..78e435ea 100644
--- a/examples/posix-win32/dpp_comp/dpp-comp.qm
+++ b/examples/posix-win32/dpp_comp/dpp-comp.qm
@@ -6,7 +6,7 @@ The model demonstrates the following features:
 
 1. Partitioning the application into Container and Components
 2. Packages for Container (Cont) and Components (Comp)
-3. External packages with speparate QM-package model files
+3. External packages with separate QM-package model files
 4. CompTimeEvt class for private time evnents of Components
 5. Container to Component communication via synchronous event dispatching
 6. Component to Container communication via asynchronous event posting using the LIFO policy.
@@ -315,7 +315,7 @@ me->fork[n] = FREE;
  
   
   
-   Specialized time event for components. The time evnet can be owned by a component and can dispatch itself to the component.
+   Specialized time event for components. The time event can be owned by a component and can dispatch itself to the component.
    
    
    
diff --git a/examples/posix-win32/reminder2/reminder2.qm b/examples/posix-win32/reminder2/reminder2.qm
index 5b3a95bd..1129210f 100644
--- a/examples/posix-win32/reminder2/reminder2.qm
+++ b/examples/posix-win32/reminder2/reminder2.qm
@@ -28,7 +28,7 @@ return me;
  
   
   
-   "Nmber Cruncher" AO
+   "Number Cruncher" AO
    
    
     // internal variable
@@ -192,7 +192,7 @@ void BSP_onKeyboardInput(uint8_t key) {
         case 'e': { // echo the progress so far
             // NOTE:
             // The following Q_NEW_X() allocation might potentially fail
-            // but this is acceptable becasue the "ECHO" event is not
+            // but this is acceptable because the "ECHO" event is not
             // considered critical. This code illustrates the Q_NEW_X()
             // API and its use.
             #ifdef QEVT_DYN_CTOR
diff --git a/examples/qutest/blinky/test/make_efm32 b/examples/qutest/blinky/test/make_efm32
index 09559acb..4f6e6175 100644
--- a/examples/qutest/blinky/test/make_efm32
+++ b/examples/qutest/blinky/test/make_efm32
@@ -197,7 +197,7 @@ endif
 # build options
 #
 
-# combine all the soruces...
+# combine all the sources...
 C_SRCS += $(QP_SRCS)
 ASM_SRCS += $(QP_ASMS)
 
diff --git a/examples/qutest/blinky/test/make_nucleo-h743zi b/examples/qutest/blinky/test/make_nucleo-h743zi
index 93d05348..388697a1 100644
--- a/examples/qutest/blinky/test/make_nucleo-h743zi
+++ b/examples/qutest/blinky/test/make_nucleo-h743zi
@@ -33,7 +33,7 @@
 ##############################################################################
 #
 # examples of invoking this Makefile:
-# make -f make_nucleo-l053r8 USB=e: # make, uplaod to USB drive, run the tests
+# make -f make_nucleo-l053r8 USB=e: # make, upload to USB drive, run the tests
 # make -f make_nucleo-l053r8 USB=f: TESTS=philo*.py  # make and run the selected tests
 # make -f make_nucleo-l053r8 HOST=localhost:7705 # connect to host:port
 # make -f make_nucleo-l053r8 norun   # only make but not run the tests
@@ -211,7 +211,7 @@ endif
 # build options
 #
 
-# combine all the soruces...
+# combine all the sources...
 C_SRCS += $(QP_SRCS)
 ASM_SRCS += $(QP_ASMS)
 
diff --git a/examples/qutest/blinky/test/make_nucleo-l053r8 b/examples/qutest/blinky/test/make_nucleo-l053r8
index aa7903fa..e3086413 100644
--- a/examples/qutest/blinky/test/make_nucleo-l053r8
+++ b/examples/qutest/blinky/test/make_nucleo-l053r8
@@ -33,7 +33,7 @@
 ##############################################################################
 #
 # examples of invoking this Makefile:
-# make -f make_nucleo-l053r8 USB=e: # make, uplaod to USB drive, run the tests
+# make -f make_nucleo-l053r8 USB=e: # make, upload to USB drive, run the tests
 # make -f make_nucleo-l053r8 USB=f: TESTS=philo*.py  # make and run the selected tests
 # make -f make_nucleo-l053r8 HOST=localhost:7705 # connect to host:port
 # make -f make_nucleo-l053r8 norun   # only make but not run the tests
@@ -196,7 +196,7 @@ endif
 # build options
 #
 
-# combine all the soruces...
+# combine all the sources...
 C_SRCS += $(QP_SRCS)
 ASM_SRCS += $(QP_ASMS)
 
diff --git a/examples/qutest/blinky/test/make_tm4c123 b/examples/qutest/blinky/test/make_tm4c123
index 18ea2da8..24211f7e 100644
--- a/examples/qutest/blinky/test/make_tm4c123
+++ b/examples/qutest/blinky/test/make_tm4c123
@@ -195,7 +195,7 @@ endif
 # build options
 #
 
-# combine all the soruces...
+# combine all the sources...
 C_SRCS += $(QP_SRCS)
 ASM_SRCS += $(QP_ASMS)
 
diff --git a/examples/qutest/dpp-comp/src/dpp-comp.qm b/examples/qutest/dpp-comp/src/dpp-comp.qm
index c37113b7..78e435ea 100644
--- a/examples/qutest/dpp-comp/src/dpp-comp.qm
+++ b/examples/qutest/dpp-comp/src/dpp-comp.qm
@@ -6,7 +6,7 @@ The model demonstrates the following features:
 
 1. Partitioning the application into Container and Components
 2. Packages for Container (Cont) and Components (Comp)
-3. External packages with speparate QM-package model files
+3. External packages with separate QM-package model files
 4. CompTimeEvt class for private time evnents of Components
 5. Container to Component communication via synchronous event dispatching
 6. Component to Container communication via asynchronous event posting using the LIFO policy.
@@ -315,7 +315,7 @@ me->fork[n] = FREE;
  
   
   
-   Specialized time event for components. The time evnet can be owned by a component and can dispatch itself to the component.
+   Specialized time event for components. The time event can be owned by a component and can dispatch itself to the component.
    
    
    
diff --git a/examples/qutest/dpp-comp/test_dpp/make_efm32 b/examples/qutest/dpp-comp/test_dpp/make_efm32
index 516bc69e..091f33b1 100644
--- a/examples/qutest/dpp-comp/test_dpp/make_efm32
+++ b/examples/qutest/dpp-comp/test_dpp/make_efm32
@@ -198,7 +198,7 @@ endif
 # build options
 #
 
-# combine all the soruces...
+# combine all the sources...
 C_SRCS += $(QP_SRCS)
 ASM_SRCS += $(QP_ASMS)
 
diff --git a/examples/qutest/dpp-comp/test_dpp/make_nucleo-l053r8 b/examples/qutest/dpp-comp/test_dpp/make_nucleo-l053r8
index 7476ad15..a35413a4 100644
--- a/examples/qutest/dpp-comp/test_dpp/make_nucleo-l053r8
+++ b/examples/qutest/dpp-comp/test_dpp/make_nucleo-l053r8
@@ -33,7 +33,7 @@
 ##############################################################################
 #
 # examples of invoking this Makefile:
-# make -f make_nucleo-l053r8 USB=e: # make, uplaod to USB drive, run the tests
+# make -f make_nucleo-l053r8 USB=e: # make, upload to USB drive, run the tests
 # make -f make_nucleo-l053r8 USB=f: TESTS=philo*.py  # make and run the selected tests
 # make -f make_nucleo-l053r8 HOST=localhost:7705 # connect to host:port
 # make -f make_nucleo-l053r8 norun   # only make but not run the tests
@@ -197,7 +197,7 @@ endif
 # build options
 #
 
-# combine all the soruces...
+# combine all the sources...
 C_SRCS += $(QP_SRCS)
 ASM_SRCS += $(QP_ASMS)
 
diff --git a/examples/qutest/dpp-comp/test_dpp/make_tm4c123 b/examples/qutest/dpp-comp/test_dpp/make_tm4c123
index 00ea96b3..aab66f40 100644
--- a/examples/qutest/dpp-comp/test_dpp/make_tm4c123
+++ b/examples/qutest/dpp-comp/test_dpp/make_tm4c123
@@ -196,7 +196,7 @@ endif
 # build options
 #
 
-# combine all the soruces...
+# combine all the sources...
 C_SRCS += $(QP_SRCS)
 ASM_SRCS += $(QP_ASMS)
 
diff --git a/examples/qutest/dpp-comp/test_table/make_tm4c123 b/examples/qutest/dpp-comp/test_table/make_tm4c123
index b83a3e04..688f72db 100644
--- a/examples/qutest/dpp-comp/test_table/make_tm4c123
+++ b/examples/qutest/dpp-comp/test_table/make_tm4c123
@@ -195,7 +195,7 @@ endif
 # build options
 #
 
-# combine all the soruces...
+# combine all the sources...
 C_SRCS += $(QP_SRCS)
 ASM_SRCS += $(QP_ASMS)
 
diff --git a/examples/qutest/dpp/src/dpp.qm b/examples/qutest/dpp/src/dpp.qm
index ac9f2bc9..b2b8aea4 100644
--- a/examples/qutest/dpp/src/dpp.qm
+++ b/examples/qutest/dpp/src/dpp.qm
@@ -257,7 +257,7 @@ for (uint8_t n = 0U; n < N_PHILO; ++n) {
      
      
      
-      // give permissions to eat...
+      // give permissions to eat...
 for (uint8_t n = 0U; n < N_PHILO; ++n) {
     if (me->isHungry[n]
         && (me->fork[left(n)] == FREE)
diff --git a/examples/qutest/dpp/test_dpp/make_efm32 b/examples/qutest/dpp/test_dpp/make_efm32
index 7667b70b..04225011 100644
--- a/examples/qutest/dpp/test_dpp/make_efm32
+++ b/examples/qutest/dpp/test_dpp/make_efm32
@@ -198,7 +198,7 @@ endif
 # build options
 #
 
-# combine all the soruces...
+# combine all the sources...
 C_SRCS += $(QP_SRCS)
 ASM_SRCS += $(QP_ASMS)
 
diff --git a/examples/qutest/dpp/test_dpp/make_nucleo-l053r8 b/examples/qutest/dpp/test_dpp/make_nucleo-l053r8
index 03a4ac6f..980dc3de 100644
--- a/examples/qutest/dpp/test_dpp/make_nucleo-l053r8
+++ b/examples/qutest/dpp/test_dpp/make_nucleo-l053r8
@@ -33,7 +33,7 @@
 ##############################################################################
 #
 # examples of invoking this Makefile:
-# make -f make_nucleo-l053r8 USB=e: # make, uplaod to USB drive, run the tests
+# make -f make_nucleo-l053r8 USB=e: # make, upload to USB drive, run the tests
 # make -f make_nucleo-l053r8 USB=f: TESTS=philo*.py  # make and run the selected tests
 # make -f make_nucleo-l053r8 HOST=localhost:7705 # connect to host:port
 # make -f make_nucleo-l053r8 norun   # only make but not run the tests
@@ -197,7 +197,7 @@ endif
 # build options
 #
 
-# combine all the soruces...
+# combine all the sources...
 C_SRCS += $(QP_SRCS)
 ASM_SRCS += $(QP_ASMS)
 
diff --git a/examples/qutest/dpp/test_dpp/make_tm4c123 b/examples/qutest/dpp/test_dpp/make_tm4c123
index cb6ccc2c..e3b07452 100644
--- a/examples/qutest/dpp/test_dpp/make_tm4c123
+++ b/examples/qutest/dpp/test_dpp/make_tm4c123
@@ -196,7 +196,7 @@ endif
 # build options
 #
 
-# combine all the soruces...
+# combine all the sources...
 C_SRCS += $(QP_SRCS)
 ASM_SRCS += $(QP_ASMS)
 
diff --git a/examples/qutest/dpp/test_philo/make_tm4c123 b/examples/qutest/dpp/test_philo/make_tm4c123
index 4af0df70..c73568dd 100644
--- a/examples/qutest/dpp/test_philo/make_tm4c123
+++ b/examples/qutest/dpp/test_philo/make_tm4c123
@@ -195,7 +195,7 @@ endif
 # build options
 #
 
-# combine all the soruces...
+# combine all the sources...
 C_SRCS += $(QP_SRCS)
 ASM_SRCS += $(QP_ASMS)
 
diff --git a/examples/qutest/dpp/test_table/make_efm32 b/examples/qutest/dpp/test_table/make_efm32
index e37bbcd7..85326ca3 100644
--- a/examples/qutest/dpp/test_table/make_efm32
+++ b/examples/qutest/dpp/test_table/make_efm32
@@ -197,7 +197,7 @@ endif
 # build options
 #
 
-# combine all the soruces...
+# combine all the sources...
 C_SRCS += $(QP_SRCS)
 ASM_SRCS += $(QP_ASMS)
 
diff --git a/examples/qutest/dpp/test_table/make_tm4c123 b/examples/qutest/dpp/test_table/make_tm4c123
index b83a3e04..688f72db 100644
--- a/examples/qutest/dpp/test_table/make_tm4c123
+++ b/examples/qutest/dpp/test_table/make_tm4c123
@@ -195,7 +195,7 @@ endif
 # build options
 #
 
-# combine all the soruces...
+# combine all the sources...
 C_SRCS += $(QP_SRCS)
 ASM_SRCS += $(QP_ASMS)
 
diff --git a/examples/qutest/evt_par/test/make_tm4c123 b/examples/qutest/evt_par/test/make_tm4c123
index 88509b3e..0788a218 100644
--- a/examples/qutest/evt_par/test/make_tm4c123
+++ b/examples/qutest/evt_par/test/make_tm4c123
@@ -194,7 +194,7 @@ endif
 # build options
 #
 
-# combine all the soruces...
+# combine all the sources...
 C_SRCS += $(QP_SRCS)
 ASM_SRCS += $(QP_ASMS)
 
diff --git a/examples/qutest/qhsmtst/test/make_efm32 b/examples/qutest/qhsmtst/test/make_efm32
index 4337d207..70032104 100644
--- a/examples/qutest/qhsmtst/test/make_efm32
+++ b/examples/qutest/qhsmtst/test/make_efm32
@@ -196,7 +196,7 @@ endif
 # build options
 #
 
-# combine all the soruces...
+# combine all the sources...
 C_SRCS += $(QP_SRCS)
 ASM_SRCS += $(QP_ASMS)
 
diff --git a/examples/qutest/qhsmtst/test/make_nucleo-l053r8 b/examples/qutest/qhsmtst/test/make_nucleo-l053r8
index 9813a810..de4666e5 100644
--- a/examples/qutest/qhsmtst/test/make_nucleo-l053r8
+++ b/examples/qutest/qhsmtst/test/make_nucleo-l053r8
@@ -33,7 +33,7 @@
 ##############################################################################
 #
 # examples of invoking this Makefile:
-# make -f make_nucleo-l053r8 USB=e: # make, uplaod to USB drive, run the tests
+# make -f make_nucleo-l053r8 USB=e: # make, upload to USB drive, run the tests
 # make -f make_nucleo-l053r8 USB=f: TESTS=philo*.py  # make and run the selected tests
 # make -f make_nucleo-l053r8 HOST=localhost:7705 # connect to host:port
 # make -f make_nucleo-l053r8 norun   # only make but not run the tests
@@ -195,7 +195,7 @@ endif
 # build options
 #
 
-# combine all the soruces...
+# combine all the sources...
 C_SRCS += $(QP_SRCS)
 ASM_SRCS += $(QP_ASMS)
 
diff --git a/examples/qutest/qhsmtst/test/make_tm4c123 b/examples/qutest/qhsmtst/test/make_tm4c123
index 23302b9f..9e573948 100644
--- a/examples/qutest/qhsmtst/test/make_tm4c123
+++ b/examples/qutest/qhsmtst/test/make_tm4c123
@@ -194,7 +194,7 @@ endif
 # build options
 #
 
-# combine all the soruces...
+# combine all the sources...
 C_SRCS += $(QP_SRCS)
 ASM_SRCS += $(QP_ASMS)
 
diff --git a/examples/qutest/qmsmtst/test/make_efm32 b/examples/qutest/qmsmtst/test/make_efm32
index b80545c1..e4ba0a54 100644
--- a/examples/qutest/qmsmtst/test/make_efm32
+++ b/examples/qutest/qmsmtst/test/make_efm32
@@ -196,7 +196,7 @@ endif
 # build options
 #
 
-# combine all the soruces...
+# combine all the sources...
 C_SRCS += $(QP_SRCS)
 ASM_SRCS += $(QP_ASMS)
 
diff --git a/examples/qutest/qmsmtst/test/make_nucleo-l053r8 b/examples/qutest/qmsmtst/test/make_nucleo-l053r8
index aa3b7069..08c82fec 100644
--- a/examples/qutest/qmsmtst/test/make_nucleo-l053r8
+++ b/examples/qutest/qmsmtst/test/make_nucleo-l053r8
@@ -33,7 +33,7 @@
 ##############################################################################
 #
 # examples of invoking this Makefile:
-# make -f make_nucleo-l053r8 USB=e: # make, uplaod to USB drive, run the tests
+# make -f make_nucleo-l053r8 USB=e: # make, upload to USB drive, run the tests
 # make -f make_nucleo-l053r8 USB=f: TESTS=philo*.py  # make and run the selected tests
 # make -f make_nucleo-l053r8 HOST=localhost:7705 # connect to host:port
 # make -f make_nucleo-l053r8 norun   # only make but not run the tests
@@ -195,7 +195,7 @@ endif
 # build options
 #
 
-# combine all the soruces...
+# combine all the sources...
 C_SRCS += $(QP_SRCS)
 ASM_SRCS += $(QP_ASMS)
 
diff --git a/examples/qutest/qmsmtst/test/make_tm4c123 b/examples/qutest/qmsmtst/test/make_tm4c123
index 5bfc84ca..b87d4fb5 100644
--- a/examples/qutest/qmsmtst/test/make_tm4c123
+++ b/examples/qutest/qmsmtst/test/make_tm4c123
@@ -194,7 +194,7 @@ endif
 # build options
 #
 
-# combine all the soruces...
+# combine all the sources...
 C_SRCS += $(QP_SRCS)
 ASM_SRCS += $(QP_ASMS)
 
diff --git a/examples/qutest/self_test/test/make_efm32 b/examples/qutest/self_test/test/make_efm32
index 06a75937..43f1f38a 100644
--- a/examples/qutest/self_test/test/make_efm32
+++ b/examples/qutest/self_test/test/make_efm32
@@ -195,7 +195,7 @@ endif
 # build options
 #
 
-# combine all the soruces...
+# combine all the sources...
 C_SRCS += $(QP_SRCS)
 ASM_SRCS += $(QP_ASMS)
 
diff --git a/examples/qutest/self_test/test/make_nucleo-l053r8 b/examples/qutest/self_test/test/make_nucleo-l053r8
index ebaf221f..a7cbdc13 100644
--- a/examples/qutest/self_test/test/make_nucleo-l053r8
+++ b/examples/qutest/self_test/test/make_nucleo-l053r8
@@ -33,7 +33,7 @@
 ##############################################################################
 #
 # examples of invoking this Makefile:
-# make -f make_nucleo-l053r8 USB=e: # make, uplaod to USB drive, run the tests
+# make -f make_nucleo-l053r8 USB=e: # make, upload to USB drive, run the tests
 # make -f make_nucleo-l053r8 USB=f: TESTS=philo*.py  # make and run the selected tests
 # make -f make_nucleo-l053r8 HOST=localhost:7705 # connect to host:port
 # make -f make_nucleo-l053r8 norun   # only make but not run the tests
@@ -194,7 +194,7 @@ endif
 # build options
 #
 
-# combine all the soruces...
+# combine all the sources...
 C_SRCS += $(QP_SRCS)
 ASM_SRCS += $(QP_ASMS)
 
diff --git a/examples/qutest/self_test/test/make_tm4c123 b/examples/qutest/self_test/test/make_tm4c123
index cc21a78b..9d52cc34 100644
--- a/examples/qutest/self_test/test/make_tm4c123
+++ b/examples/qutest/self_test/test/make_tm4c123
@@ -193,7 +193,7 @@ endif
 # build options
 #
 
-# combine all the soruces...
+# combine all the sources...
 C_SRCS += $(QP_SRCS)
 ASM_SRCS += $(QP_ASMS)
 
diff --git a/examples/qutest/start_seq/test/test_fixture.c b/examples/qutest/start_seq/test/test_fixture.c
index 76d34c19..95a1049f 100644
--- a/examples/qutest/start_seq/test/test_fixture.c
+++ b/examples/qutest/start_seq/test/test_fixture.c
@@ -44,7 +44,7 @@ int main(int argc, char *argv[]) {
 
     // initialize the QS software tracing
     if (QS_INIT(argc > 1 ? argv[1] : (void *)0) == 0U) {
-        Q_ERROR(); // no point in continuing if QS initialzation fails
+        Q_ERROR(); // no point in continuing if QS initialization fails
     }
 
     BSP_init(); // initialize the BSP
diff --git a/examples/qutest/start_seq/test/test_start_seq.py b/examples/qutest/start_seq/test/test_start_seq.py
index c7076a41..caae1fdf 100644
--- a/examples/qutest/start_seq/test/test_start_seq.py
+++ b/examples/qutest/start_seq/test/test_start_seq.py
@@ -3,11 +3,11 @@
 
 note('''
 This test group demonstrates testing of the start sequence.
-Specifically, a "Gizmo" AO needs to start either in the sate
+Specifically, a "Gizmo" AO needs to start either in the state
 "on_mains", when the AO detects at runtime that main power
 is available, or in the state "on_battery", when it is not.
 However, the state machine semantics does not allow guard
-conditions on the initial transition itself. A workaroudn is
+conditions on the initial transition itself. A workaround is
 to self-post a START event, which then triggers a transition
 with a guard.
 ''')
diff --git a/examples/qutest/unity_basic/test/make_efm32 b/examples/qutest/unity_basic/test/make_efm32
index 9549fd5c..c6239a36 100644
--- a/examples/qutest/unity_basic/test/make_efm32
+++ b/examples/qutest/unity_basic/test/make_efm32
@@ -196,7 +196,7 @@ endif
 # build options
 #
 
-# combine all the soruces...
+# combine all the sources...
 C_SRCS += $(QP_SRCS)
 ASM_SRCS += $(QP_ASMS)
 
diff --git a/examples/qutest/unity_basic/test/make_tm4c123 b/examples/qutest/unity_basic/test/make_tm4c123
index cd3741c5..6f14fda2 100644
--- a/examples/qutest/unity_basic/test/make_tm4c123
+++ b/examples/qutest/unity_basic/test/make_tm4c123
@@ -194,7 +194,7 @@ endif
 # build options
 #
 
-# combine all the soruces...
+# combine all the sources...
 C_SRCS += $(QP_SRCS)
 ASM_SRCS += $(QP_ASMS)
 
diff --git a/examples/qutest/unity_basic/test_unity/Makefile b/examples/qutest/unity_basic/test_unity/Makefile
index 26353b6a..57dc9a53 100644
--- a/examples/qutest/unity_basic/test_unity/Makefile
+++ b/examples/qutest/unity_basic/test_unity/Makefile
@@ -94,7 +94,7 @@ ifeq ($(QPC),)
 QPC := ../../../..
 endif
 
-# location of the QTOOLS directory (if not provided in an environemnt var.)
+# location of the QTOOLS directory (if not provided in an environment var.)
 ifeq ($(QTOOLS),)
 QTOOLS := c:/qp/qtools
 endif
diff --git a/examples/qutest/unity_ledbar/printf/Makefile b/examples/qutest/unity_ledbar/printf/Makefile
index c22aca96..fdd4c0bf 100644
--- a/examples/qutest/unity_ledbar/printf/Makefile
+++ b/examples/qutest/unity_ledbar/printf/Makefile
@@ -88,7 +88,7 @@ ifeq ($(QPC),)
 QPC := ../../../..
 endif
 
-# location of the QTOOLS directory (if not provided in an environemnt var.)
+# location of the QTOOLS directory (if not provided in an environment var.)
 ifeq ($(QTOOLS),)
 QTOOLS := c:/qp/qtools
 endif
diff --git a/examples/qutest/unity_ledbar/printf/spy_Led.c b/examples/qutest/unity_ledbar/printf/spy_Led.c
index 2961a5e3..1b66ad25 100644
--- a/examples/qutest/unity_ledbar/printf/spy_Led.c
+++ b/examples/qutest/unity_ledbar/printf/spy_Led.c
@@ -13,7 +13,7 @@ void Led_off(uint8_t index) {
     printf("Led_off %d\n", index);
 }
 
-// turns a given LED on and retruns the power drawn by it in [uW]
+// turns a given LED on and returns the power drawn by it in [uW]
 uint32_t Led_on(uint8_t index) {
     uint32_t ret = led_power[index];
     printf("Led_on %d %d\n", ret, index);
diff --git a/examples/qutest/unity_ledbar/qutest/make_efm32 b/examples/qutest/unity_ledbar/qutest/make_efm32
index 68f5f07a..dac7e321 100644
--- a/examples/qutest/unity_ledbar/qutest/make_efm32
+++ b/examples/qutest/unity_ledbar/qutest/make_efm32
@@ -197,7 +197,7 @@ endif
 # build options
 #
 
-# combine all the soruces...
+# combine all the sources...
 C_SRCS += $(QP_SRCS)
 ASM_SRCS += $(QP_ASMS)
 
diff --git a/examples/qutest/unity_ledbar/qutest/make_nucleo-l053r8 b/examples/qutest/unity_ledbar/qutest/make_nucleo-l053r8
index a67614c3..775c2b90 100644
--- a/examples/qutest/unity_ledbar/qutest/make_nucleo-l053r8
+++ b/examples/qutest/unity_ledbar/qutest/make_nucleo-l053r8
@@ -33,7 +33,7 @@
 ##############################################################################
 #
 # examples of invoking this Makefile:
-# make -f make_nucleo-l053r8 USB=e: # make, uplaod to USB drive, run the tests
+# make -f make_nucleo-l053r8 USB=e: # make, upload to USB drive, run the tests
 # make -f make_nucleo-l053r8 USB=f: TESTS=philo*.py  # make and run the selected tests
 # make -f make_nucleo-l053r8 HOST=localhost:7705 # connect to host:port
 # make -f make_nucleo-l053r8 norun   # only make but not run the tests
@@ -196,7 +196,7 @@ endif
 # build options
 #
 
-# combine all the soruces...
+# combine all the sources...
 C_SRCS += $(QP_SRCS)
 ASM_SRCS += $(QP_ASMS)
 
diff --git a/examples/qutest/unity_ledbar/qutest/make_tm4c123 b/examples/qutest/unity_ledbar/qutest/make_tm4c123
index ff931a39..e4b73112 100644
--- a/examples/qutest/unity_ledbar/qutest/make_tm4c123
+++ b/examples/qutest/unity_ledbar/qutest/make_tm4c123
@@ -195,7 +195,7 @@ endif
 # build options
 #
 
-# combine all the soruces...
+# combine all the sources...
 C_SRCS += $(QP_SRCS)
 ASM_SRCS += $(QP_ASMS)
 
diff --git a/examples/qutest/unity_ledbar/qutest/spy_led.c b/examples/qutest/unity_ledbar/qutest/spy_led.c
index ae7cc3d6..c00f2bcd 100644
--- a/examples/qutest/unity_ledbar/qutest/spy_led.c
+++ b/examples/qutest/unity_ledbar/qutest/spy_led.c
@@ -27,7 +27,7 @@ void Led_off(uint8_t index) {
     QS_END()
 }
 
-// turns a given LED on and retruns the power drawn by it in [uW]
+// turns a given LED on and returns the power drawn by it in [uW]
 uint32_t Led_on(uint8_t index) {
     uint32_t ret = led_power[index]; // assume
     //printf("Led_on %d %d\n", ret, index);
diff --git a/examples/qutest/unity_ledbar/src/Led.h b/examples/qutest/unity_ledbar/src/Led.h
index a272854b..97391b49 100644
--- a/examples/qutest/unity_ledbar/src/Led.h
+++ b/examples/qutest/unity_ledbar/src/Led.h
@@ -3,7 +3,7 @@
 
 enum { MAX_LED = 5 };
 
-// turns a given LED on and retruns the power drawn by it in uW
+// turns a given LED on and returns the power drawn by it in uW
 uint32_t Led_on(uint8_t index);
 
 // turns a given LED off
diff --git a/examples/qutest/unity_ledbar/test/Makefile b/examples/qutest/unity_ledbar/test/Makefile
index b7565fb6..1d1d0ff4 100644
--- a/examples/qutest/unity_ledbar/test/Makefile
+++ b/examples/qutest/unity_ledbar/test/Makefile
@@ -95,7 +95,7 @@ ifeq ($(QPC),)
 QPC := ../../../..
 endif
 
-# location of the QTOOLS directory (if not provided in an environemnt var.)
+# location of the QTOOLS directory (if not provided in an environment var.)
 ifeq ($(QTOOLS),)
 QTOOLS := c:/qp/qtools
 endif
diff --git a/examples/qutest/unity_ledbar/trace/spy_Led.c b/examples/qutest/unity_ledbar/trace/spy_Led.c
index ae7cc3d6..c00f2bcd 100644
--- a/examples/qutest/unity_ledbar/trace/spy_Led.c
+++ b/examples/qutest/unity_ledbar/trace/spy_Led.c
@@ -27,7 +27,7 @@ void Led_off(uint8_t index) {
     QS_END()
 }
 
-// turns a given LED on and retruns the power drawn by it in [uW]
+// turns a given LED on and returns the power drawn by it in [uW]
 uint32_t Led_on(uint8_t index) {
     uint32_t ret = led_power[index]; // assume
     //printf("Led_on %d %d\n", ret, index);
diff --git a/examples/qutest/unity_ledbar2/qutest/make_nucleo-l053r8 b/examples/qutest/unity_ledbar2/qutest/make_nucleo-l053r8
index 56d0ede7..07a651e5 100644
--- a/examples/qutest/unity_ledbar2/qutest/make_nucleo-l053r8
+++ b/examples/qutest/unity_ledbar2/qutest/make_nucleo-l053r8
@@ -33,7 +33,7 @@
 ##############################################################################
 #
 # examples of invoking this Makefile:
-# make -f make_nucleo-l053r8 USB=e: # make, uplaod to USB drive, run the tests
+# make -f make_nucleo-l053r8 USB=e: # make, upload to USB drive, run the tests
 # make -f make_nucleo-l053r8 USB=f: TESTS=philo*.py  # make and run the selected tests
 # make -f make_nucleo-l053r8 HOST=localhost:7705 # connect to host:port
 # make -f make_nucleo-l053r8 norun   # only make but not run the tests
@@ -197,7 +197,7 @@ endif
 # build options
 #
 
-# combine all the soruces...
+# combine all the sources...
 C_SRCS += $(QP_SRCS)
 ASM_SRCS += $(QP_ASMS)
 
diff --git a/examples/qutest/unity_ledbar2/qutest/spy_led.c b/examples/qutest/unity_ledbar2/qutest/spy_led.c
index ae7cc3d6..c00f2bcd 100644
--- a/examples/qutest/unity_ledbar2/qutest/spy_led.c
+++ b/examples/qutest/unity_ledbar2/qutest/spy_led.c
@@ -27,7 +27,7 @@ void Led_off(uint8_t index) {
     QS_END()
 }
 
-// turns a given LED on and retruns the power drawn by it in [uW]
+// turns a given LED on and returns the power drawn by it in [uW]
 uint32_t Led_on(uint8_t index) {
     uint32_t ret = led_power[index]; // assume
     //printf("Led_on %d %d\n", ret, index);
diff --git a/examples/qutest/unity_ledbar2/src/Led.h b/examples/qutest/unity_ledbar2/src/Led.h
index a272854b..97391b49 100644
--- a/examples/qutest/unity_ledbar2/src/Led.h
+++ b/examples/qutest/unity_ledbar2/src/Led.h
@@ -3,7 +3,7 @@
 
 enum { MAX_LED = 5 };
 
-// turns a given LED on and retruns the power drawn by it in uW
+// turns a given LED on and returns the power drawn by it in uW
 uint32_t Led_on(uint8_t index);
 
 // turns a given LED off
diff --git a/examples/qutest/unity_ledbar2/test/Makefile b/examples/qutest/unity_ledbar2/test/Makefile
index 3c1c4dc0..4614d83d 100644
--- a/examples/qutest/unity_ledbar2/test/Makefile
+++ b/examples/qutest/unity_ledbar2/test/Makefile
@@ -96,7 +96,7 @@ ifeq ($(QPC),)
 QPC := ../../../..
 endif
 
-# location of the QTOOLS directory (if not provided in an environemnt var.)
+# location of the QTOOLS directory (if not provided in an environment var.)
 ifeq ($(QTOOLS),)
 QTOOLS := c:/qp/qtools
 endif
diff --git a/examples/qutest/unity_mock/src/Led.h b/examples/qutest/unity_mock/src/Led.h
index a272854b..97391b49 100644
--- a/examples/qutest/unity_mock/src/Led.h
+++ b/examples/qutest/unity_mock/src/Led.h
@@ -3,7 +3,7 @@
 
 enum { MAX_LED = 5 };
 
-// turns a given LED on and retruns the power drawn by it in uW
+// turns a given LED on and returns the power drawn by it in uW
 uint32_t Led_on(uint8_t index);
 
 // turns a given LED off
diff --git a/examples/qutest/unity_mock/test/make_efm32 b/examples/qutest/unity_mock/test/make_efm32
index e7d79977..23e10196 100644
--- a/examples/qutest/unity_mock/test/make_efm32
+++ b/examples/qutest/unity_mock/test/make_efm32
@@ -197,7 +197,7 @@ endif
 # build options
 #
 
-# combine all the soruces...
+# combine all the sources...
 C_SRCS += $(QP_SRCS)
 ASM_SRCS += $(QP_ASMS)
 
diff --git a/examples/qutest/unity_mock/test/make_tm4c123 b/examples/qutest/unity_mock/test/make_tm4c123
index 874d6027..64997cb6 100644
--- a/examples/qutest/unity_mock/test/make_tm4c123
+++ b/examples/qutest/unity_mock/test/make_tm4c123
@@ -195,7 +195,7 @@ endif
 # build options
 #
 
-# combine all the soruces...
+# combine all the sources...
 C_SRCS += $(QP_SRCS)
 ASM_SRCS += $(QP_ASMS)
 
diff --git a/examples/qutest/unity_mock/test/spy_Led.c b/examples/qutest/unity_mock/test/spy_Led.c
index fb2d3026..13124f00 100644
--- a/examples/qutest/unity_mock/test/spy_Led.c
+++ b/examples/qutest/unity_mock/test/spy_Led.c
@@ -61,7 +61,7 @@ void Led_off(uint8_t index) {
     QS_END()
 }
 
-// turns a given LED on and retruns the power drawn by it in uW
+// turns a given LED on and returns the power drawn by it in uW
 uint32_t Led_on(uint8_t index) {
     QS_TEST_PROBE_DEF(&Led_on)
     uint32_t ret = led_power[index]; // assume
diff --git a/examples/qutest/unity_mock/test_unity/Makefile b/examples/qutest/unity_mock/test_unity/Makefile
index 52b058a1..ddfa4a0d 100644
--- a/examples/qutest/unity_mock/test_unity/Makefile
+++ b/examples/qutest/unity_mock/test_unity/Makefile
@@ -95,7 +95,7 @@ ifeq ($(QPC),)
 QPC := ../../../..
 endif
 
-# location of the QTOOLS directory (if not provided in an environemnt var.)
+# location of the QTOOLS directory (if not provided in an environment var.)
 ifeq ($(QTOOLS),)
 QTOOLS := c:/qp/qtools
 endif
diff --git a/examples/qutest/unity_strlen/qutest/make_efm32 b/examples/qutest/unity_strlen/qutest/make_efm32
index c02a4018..35a01b47 100644
--- a/examples/qutest/unity_strlen/qutest/make_efm32
+++ b/examples/qutest/unity_strlen/qutest/make_efm32
@@ -196,7 +196,7 @@ endif
 # build options
 #
 
-# combine all the soruces...
+# combine all the sources...
 C_SRCS += $(QP_SRCS)
 ASM_SRCS += $(QP_ASMS)
 
diff --git a/examples/qutest/unity_strlen/qutest/make_nucleo-l053r8 b/examples/qutest/unity_strlen/qutest/make_nucleo-l053r8
index d86beaa4..05de0b54 100644
--- a/examples/qutest/unity_strlen/qutest/make_nucleo-l053r8
+++ b/examples/qutest/unity_strlen/qutest/make_nucleo-l053r8
@@ -33,7 +33,7 @@
 ##############################################################################
 #
 # examples of invoking this Makefile:
-# make -f make_nucleo-l053r8 USB=e: # make, uplaod to USB drive, run the tests
+# make -f make_nucleo-l053r8 USB=e: # make, upload to USB drive, run the tests
 # make -f make_nucleo-l053r8 USB=f: TESTS=philo*.py  # make and run the selected tests
 # make -f make_nucleo-l053r8 HOST=localhost:7705 # connect to host:port
 # make -f make_nucleo-l053r8 norun   # only make but not run the tests
@@ -195,7 +195,7 @@ endif
 # build options
 #
 
-# combine all the soruces...
+# combine all the sources...
 C_SRCS += $(QP_SRCS)
 ASM_SRCS += $(QP_ASMS)
 
diff --git a/examples/qutest/unity_strlen/qutest/make_tm4c123 b/examples/qutest/unity_strlen/qutest/make_tm4c123
index 580678cd..114ab5aa 100644
--- a/examples/qutest/unity_strlen/qutest/make_tm4c123
+++ b/examples/qutest/unity_strlen/qutest/make_tm4c123
@@ -194,7 +194,7 @@ endif
 # build options
 #
 
-# combine all the soruces...
+# combine all the sources...
 C_SRCS += $(QP_SRCS)
 ASM_SRCS += $(QP_ASMS)
 
diff --git a/examples/qutest/unity_strlen/test/Makefile b/examples/qutest/unity_strlen/test/Makefile
index d516e2ba..938e3788 100644
--- a/examples/qutest/unity_strlen/test/Makefile
+++ b/examples/qutest/unity_strlen/test/Makefile
@@ -93,7 +93,7 @@ ifeq ($(QPC),)
 QPC := ../../../..
 endif
 
-# location of the QTOOLS directory (if not provided in an environemnt var.)
+# location of the QTOOLS directory (if not provided in an environment var.)
 ifeq ($(QTOOLS),)
 QTOOLS := c:/qp/qtools
 endif
diff --git a/examples/qwin-gui/dpp-gui/bsp.c b/examples/qwin-gui/dpp-gui/bsp.c
index dece3f0b..bdba3eeb 100644
--- a/examples/qwin-gui/dpp-gui/bsp.c
+++ b/examples/qwin-gui/dpp-gui/bsp.c
@@ -36,7 +36,7 @@
 #include "bsp.h"
 
 #include "qwin_gui.h" // QWIN GUI
-#include "resource.h" // GUI resource IDs generated by the resource editior
+#include "resource.h" // GUI resource IDs generated by the resource editor
 
 #include "safe_std.h" // portable "safe" / facilities
 
@@ -125,7 +125,7 @@ static LRESULT CALLBACK WndProc(HWND hWnd, UINT iMsg,
 {
     switch (iMsg) {
 
-        // Perform initialization upon cration of the main dialog window
+        // Perform initialization upon creation of the main dialog window
         // NOTE: Any child-windows are NOT created yet at this time, so
         // the GetDlgItem() function can't be used (it will return NULL).
         //
diff --git a/examples/qwin-gui/dpp-gui/dpp.qm b/examples/qwin-gui/dpp-gui/dpp.qm
index ac9f2bc9..b2b8aea4 100644
--- a/examples/qwin-gui/dpp-gui/dpp.qm
+++ b/examples/qwin-gui/dpp-gui/dpp.qm
@@ -257,7 +257,7 @@ for (uint8_t n = 0U; n < N_PHILO; ++n) {
      
      
      
-      // give permissions to eat...
+      // give permissions to eat...
 for (uint8_t n = 0U; n < N_PHILO; ++n) {
     if (me->isHungry[n]
         && (me->fork[left(n)] == FREE)
diff --git a/examples/qwin-gui/game-gui/bsp.c b/examples/qwin-gui/game-gui/bsp.c
index 19e87782..ae7a855c 100644
--- a/examples/qwin-gui/game-gui/bsp.c
+++ b/examples/qwin-gui/game-gui/bsp.c
@@ -36,7 +36,7 @@
 #include "bsp.h"
 
 #include "qwin_gui.h" // QWIN GUI
-#include "resource.h" // GUI resource IDs generated by the resource editior
+#include "resource.h" // GUI resource IDs generated by the resource editor
 
 #include "safe_std.h" // portable "safe" / facilities
 
@@ -534,14 +534,14 @@ bool BSP_doBitmapsOverlap(uint8_t bmp_id1, uint8_t x1, uint8_t y1,
 //............................................................................
 bool BSP_isWallHit(uint8_t bmp_id, uint8_t x, uint8_t y) {
     Bitmap const *bmp = &l_bitmap[bmp_id];
-    uint32_t shft = (x & 0x1FU);
+    uint32_t shift = (x & 0x1FU);
     uint32_t *walls = &l_walls[y][x >> 5];
     for (y = 0; y < bmp->height; ++y, walls += (BSP_SCREEN_WIDTH >> 5)) {
-        if (*walls & ((uint32_t)bmp->bits[y] << shft)) {
+        if (*walls & ((uint32_t)bmp->bits[y] << shift)) {
             return true;
         }
-        if (shft > 24U) {
-            if (*(walls + 1) & ((uint32_t)bmp->bits[y] >> (32U - shft))) {
+        if (shift > 24U) {
+            if (*(walls + 1) & ((uint32_t)bmp->bits[y] >> (32U - shift))) {
                 return true;
             }
         }
@@ -604,11 +604,11 @@ void BSP_randomSeed(uint32_t seed) {
 //............................................................................
 static void paintBits(uint8_t x, uint8_t y, uint8_t const *bits, uint8_t h) {
     uint32_t *fb = &l_fb[y][x >> 5];
-    uint32_t shft = (x & 0x1FU);
+    uint32_t shift = (x & 0x1FU);
     for (y = 0; y < h; ++y, fb += (BSP_SCREEN_WIDTH >> 5)) {
-        *fb |= ((uint32_t)bits[y] << shft);
-        if (shft > 24U) {
-            *(fb + 1) |= ((uint32_t)bits[y] >> (32U - shft));
+        *fb |= ((uint32_t)bits[y] << shift);
+        if (shift > 24U) {
+            *(fb + 1) |= ((uint32_t)bits[y] >> (32U - shift));
         }
     }
 }
@@ -617,17 +617,17 @@ static void paintBitsClear(uint8_t x, uint8_t y,
                            uint8_t const *bits, uint8_t h)
 {
     uint32_t *fb = &l_fb[y][x >> 5];
-    uint32_t shft = (x & 0x1FU);
-    uint32_t mask1 = ~((uint32_t)0xFFU << shft);
+    uint32_t shift = (x & 0x1FU);
+    uint32_t mask1 = ~((uint32_t)0xFFU << shift);
     uint32_t mask2;
-    if (shft > 24U) {
-        mask2 = ~(0xFFU >> (32U - shft));
+    if (shift > 24U) {
+        mask2 = ~(0xFFU >> (32U - shift));
     }
     for (y = 0; y < h; ++y, fb += (BSP_SCREEN_WIDTH >> 5)) {
-        *fb = ((*fb & mask1) | ((uint32_t)bits[y] << shft));
-        if (shft > 24U) {
+        *fb = ((*fb & mask1) | ((uint32_t)bits[y] << shift));
+        if (shift > 24U) {
             *(fb + 1) = ((*(fb + 1) & mask2)
-                | ((uint32_t)bits[y] >> (32U - shft)));
+                | ((uint32_t)bits[y] >> (32U - shift)));
         }
     }
 }
@@ -676,7 +676,7 @@ static LRESULT CALLBACK WndProc(HWND hWnd, UINT iMsg,
 {
     switch (iMsg) {
 
-        // Perform initialization upon cration of the main dialog window
+        // Perform initialization upon creation of the main dialog window
         // NOTE: Any child-windows are NOT created yet at this time, so
         // the GetDlgItem() function can't be used (it will return NULL).
         //
diff --git a/examples/qwin-gui/game-gui/game.qm b/examples/qwin-gui/game-gui/game.qm
index 55b3cc32..d6bca299 100644
--- a/examples/qwin-gui/game-gui/game.qm
+++ b/examples/qwin-gui/game-gui/game.qm
@@ -341,7 +341,7 @@ me->blink_ctr = 0U; // init the blink counter
 QTimeEvt_disarm(&me->screenTimeEvt);
       
       
-       me->blink_ctr ^= 1U; // toggle the blink cunter
+       me->blink_ctr ^= 1U; // toggle the blink counter
        
         
        
@@ -653,7 +653,7 @@ sev = Q_NEW(ScoreEvt, SCORE_SIG);
 sev->score = me->score;
 QACTIVE_POST(AO_Tunnel, (QEvt *)sev, me);
 
-// lauch the ship from the initial position
+// launch the ship from the initial position
 me->x = GAME_SHIP_X;
 me->y = (GAME_SHIP_Y << 2);
       
@@ -1392,7 +1392,7 @@ $define ${AOs::Missile}
 #define SHIP_WIDTH  5
 #define SHIP_HEIGHT 3
 
-// encapsulated delcaration of the Ship active object ----------------------
+// encapsulated declaration of the Ship active object ----------------------
 $declare ${AOs::Ship}
 
 // Public-scope objects ----------------------------------------------------
@@ -1428,7 +1428,7 @@ $define ${AOs::Tunnel}
 
 Q_DEFINE_THIS_FILE
 
-// encapsulated delcaration of the Mine1 HSM -------------------------------
+// encapsulated declaration of the Mine1 HSM -------------------------------
 $declare ${AOs::Mine1}
 
 // helper macro to provide the ID of this mine
@@ -1446,7 +1446,7 @@ $define ${AOs::Mine1}
 
 Q_DEFINE_THIS_FILE
 
-// encapsulated delcaration of the Mine2 HSM -------------------------------
+// encapsulated declaration of the Mine2 HSM -------------------------------
 $declare ${AOs::Mine2}
 
 // helper macro to provide the ID of this mine
diff --git a/examples/qwin-gui/game-gui/make.bat b/examples/qwin-gui/game-gui/make.bat
index b4a17512..80de968d 100644
--- a/examples/qwin-gui/game-gui/make.bat
+++ b/examples/qwin-gui/game-gui/make.bat
@@ -6,7 +6,7 @@
 ::
 @setlocal
 
-:: specifiy project and build configuration (Debug|Release|Spy)
+:: specify project and build configuration (Debug|Release|Spy)
 @set PROJ=game-gui
 @set CONF=Debug
 
diff --git a/examples/qwin-gui/game-gui/mine1.c b/examples/qwin-gui/game-gui/mine1.c
index 58f1964e..5ab87652 100644
--- a/examples/qwin-gui/game-gui/mine1.c
+++ b/examples/qwin-gui/game-gui/mine1.c
@@ -34,7 +34,7 @@
 
 Q_DEFINE_THIS_FILE
 
-// encapsulated delcaration of the Mine1 HSM -------------------------------
+// encapsulated declaration of the Mine1 HSM -------------------------------
 //$declare${AOs::Mine1} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
 
 //${AOs::Mine1} ..............................................................
diff --git a/examples/qwin-gui/game-gui/mine2.c b/examples/qwin-gui/game-gui/mine2.c
index 79e80c9d..c074435d 100644
--- a/examples/qwin-gui/game-gui/mine2.c
+++ b/examples/qwin-gui/game-gui/mine2.c
@@ -34,7 +34,7 @@
 
 Q_DEFINE_THIS_FILE
 
-// encapsulated delcaration of the Mine2 HSM -------------------------------
+// encapsulated declaration of the Mine2 HSM -------------------------------
 //$declare${AOs::Mine2} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
 
 //${AOs::Mine2} ..............................................................
diff --git a/examples/qwin-gui/game-gui/ship.c b/examples/qwin-gui/game-gui/ship.c
index c626dc1c..ec12902a 100644
--- a/examples/qwin-gui/game-gui/ship.c
+++ b/examples/qwin-gui/game-gui/ship.c
@@ -37,7 +37,7 @@
 #define SHIP_WIDTH  5
 #define SHIP_HEIGHT 3
 
-// encapsulated delcaration of the Ship active object ----------------------
+// encapsulated declaration of the Ship active object ----------------------
 //$declare${AOs::Ship} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
 
 //${AOs::Ship} ...............................................................
@@ -169,7 +169,7 @@ static QState Ship_flying(Ship * const me, QEvt const * const e) {
             sev->score = me->score;
             QACTIVE_POST(AO_Tunnel, (QEvt *)sev, me);
 
-            // lauch the ship from the initial position
+            // launch the ship from the initial position
             me->x = GAME_SHIP_X;
             me->y = (GAME_SHIP_Y << 2);
             status_ = Q_HANDLED();
diff --git a/examples/qwin-gui/game-gui/tunnel.c b/examples/qwin-gui/game-gui/tunnel.c
index b0852647..2ee6206f 100644
--- a/examples/qwin-gui/game-gui/tunnel.c
+++ b/examples/qwin-gui/game-gui/tunnel.c
@@ -381,7 +381,7 @@ static QState Tunnel_demo(Tunnel * const me, QEvt const * const e) {
         }
         //${AOs::Tunnel::SM::active::demo::BLINK_TIMEOUT}
         case BLINK_TIMEOUT_SIG: {
-            me->blink_ctr ^= 1U; // toggle the blink cunter
+            me->blink_ctr ^= 1U; // toggle the blink counter
             status_ = Q_HANDLED();
             break;
         }
diff --git a/examples/threadx/arm-cm/dpp_ek-tm4c123gxl/bsp.c b/examples/threadx/arm-cm/dpp_ek-tm4c123gxl/bsp.c
index 34d17893..0fea139f 100644
--- a/examples/threadx/arm-cm/dpp_ek-tm4c123gxl/bsp.c
+++ b/examples/threadx/arm-cm/dpp_ek-tm4c123gxl/bsp.c
@@ -307,7 +307,7 @@ void QF_onStartup(void) {
     tx_err = tx_thread_create(&idle_thread, // thread control block
         (CHAR *)("idle"),       // thread name
         &idle_thread_fun,       // thread function
-        0LU,                    // thread input (unsued)
+        0LU,                    // thread input (unused)
         idle_thread_stack,       // stack start
         sizeof(idle_thread_stack), // stack size in bytes
         TX_MAX_PRIORITIES - 1U, // ThreadX priority (LOWEST possible), NOTE1
diff --git a/examples/threadx/arm-cm/dpp_ek-tm4c123gxl/dpp.qm b/examples/threadx/arm-cm/dpp_ek-tm4c123gxl/dpp.qm
index ac9f2bc9..b2b8aea4 100644
--- a/examples/threadx/arm-cm/dpp_ek-tm4c123gxl/dpp.qm
+++ b/examples/threadx/arm-cm/dpp_ek-tm4c123gxl/dpp.qm
@@ -257,7 +257,7 @@ for (uint8_t n = 0U; n < N_PHILO; ++n) {
      
      
      
-      // give permissions to eat...
+      // give permissions to eat...
 for (uint8_t n = 0U; n < N_PHILO; ++n) {
     if (me->isHungry[n]
         && (me->fork[left(n)] == FREE)
diff --git a/examples/threadx/arm-cm/dpp_stm32f429-discovery/bsp.c b/examples/threadx/arm-cm/dpp_stm32f429-discovery/bsp.c
index a8cb4b9a..44b84725 100644
--- a/examples/threadx/arm-cm/dpp_stm32f429-discovery/bsp.c
+++ b/examples/threadx/arm-cm/dpp_stm32f429-discovery/bsp.c
@@ -342,7 +342,7 @@ void QF_onStartup(void) {
     tx_err = tx_thread_create(&idle_thread, // thread control block
         (CHAR *)("idle"), // thread name
         &idle_thread_fun,       // thread function
-        0LU,                    // thread input (unsued)
+        0LU,                    // thread input (unused)
         idle_thread_stack,       // stack start
         sizeof(idle_thread_stack), // stack size in bytes
         TX_MAX_PRIORITIES - 1U, // ThreadX priority (LOWEST possible), NOTE1
@@ -414,7 +414,7 @@ QSTimeCtr QS_onGetTime(void) { // NOTE: invoked with interrupts DISABLED
     if ((SysTick->CTRL & SysTick_CTRL_COUNTFLAG_Msk) == 0) { // not set?
         return QS_tickTime_ - (QSTimeCtr)SysTick->VAL;
     }
-    else { // the rollover occured, but the SysTick_ISR did not run yet
+    else { // the rollover occurred, but the SysTick_ISR did not run yet
         return QS_tickTime_ + QS_tickPeriod_ - (QSTimeCtr)SysTick->VAL;
     }
 }
diff --git a/examples/threadx/arm-cm/dpp_stm32f429-discovery/dpp.qm b/examples/threadx/arm-cm/dpp_stm32f429-discovery/dpp.qm
index ac9f2bc9..b2b8aea4 100644
--- a/examples/threadx/arm-cm/dpp_stm32f429-discovery/dpp.qm
+++ b/examples/threadx/arm-cm/dpp_stm32f429-discovery/dpp.qm
@@ -257,7 +257,7 @@ for (uint8_t n = 0U; n < N_PHILO; ++n) {
      
      
      
-      // give permissions to eat...
+      // give permissions to eat...
 for (uint8_t n = 0U; n < N_PHILO; ++n) {
     if (me->isHungry[n]
         && (me->fork[left(n)] == FREE)
diff --git a/examples/uc-os2/arm-cm/dpp_ek-tm4c123gxl/dpp.qm b/examples/uc-os2/arm-cm/dpp_ek-tm4c123gxl/dpp.qm
index ac9f2bc9..b2b8aea4 100644
--- a/examples/uc-os2/arm-cm/dpp_ek-tm4c123gxl/dpp.qm
+++ b/examples/uc-os2/arm-cm/dpp_ek-tm4c123gxl/dpp.qm
@@ -257,7 +257,7 @@ for (uint8_t n = 0U; n < N_PHILO; ++n) {
      
      
      
-      // give permissions to eat...
+      // give permissions to eat...
 for (uint8_t n = 0U; n < N_PHILO; ++n) {
     if (me->isHungry[n]
         && (me->fork[left(n)] == FREE)
diff --git a/examples/uc-os2/arm-cm/dpp_ek-tm4c123gxl/gnu/Makefile b/examples/uc-os2/arm-cm/dpp_ek-tm4c123gxl/gnu/Makefile
index 21a57af1..99db54b7 100644
--- a/examples/uc-os2/arm-cm/dpp_ek-tm4c123gxl/gnu/Makefile
+++ b/examples/uc-os2/arm-cm/dpp_ek-tm4c123gxl/gnu/Makefile
@@ -57,7 +57,7 @@ PROJECT     := dpp
 # project directories
 #
 
-# location of the QP/C framework (if not provided in an environemnt var.)
+# location of the QP/C framework (if not provided in an environment var.)
 ifeq ($(QPC),)
 QPC := ../../../../..
 endif
@@ -192,7 +192,7 @@ RM    := rm
 # build options for various configurations for ARM Cortex-M4F
 #
 
-# combine all the soruces...
+# combine all the sources...
 C_SRCS += $(QP_SRCS)
 C_SRCS += $(RTOS_SRCS)
 
diff --git a/examples/uc-os2/arm-cm/dpp_ek-tm4c123gxl/gnu/README.txt b/examples/uc-os2/arm-cm/dpp_ek-tm4c123gxl/gnu/README.txt
index ed9b6b94..80fe048b 100644
--- a/examples/uc-os2/arm-cm/dpp_ek-tm4c123gxl/gnu/README.txt
+++ b/examples/uc-os2/arm-cm/dpp_ek-tm4c123gxl/gnu/README.txt
@@ -31,7 +31,7 @@ to be adjusted in the provided Makefile, by editing the symbol: GNU_ARM.
 As described in the comment for this symbol, the GNU-ARM toolset is taken
 from: http://gnutoolchains.com/arm-eabi
 
-It is highly recommened to use the same GNU-ARM distribution, especially
+It is highly recommended to use the same GNU-ARM distribution, especially
 for ARM Cortex-M4F projects, due to the support for the hardware FPU
 (float-abi=hard).
 ***
diff --git a/examples/zephyr/blinky/README.md b/examples/zephyr/blinky/README.md
index f5bd96cd..24fd0dbd 100644
--- a/examples/zephyr/blinky/README.md
+++ b/examples/zephyr/blinky/README.md
@@ -3,7 +3,7 @@
 # Overview
 
 Blinks an on-board LED once per second. The blinking is performed
- by an Active Object (Blinky) wiht a state machine.
+ by an Active Object (Blinky) with a state machine.
 
 
 
diff --git a/examples/zephyr/dpp/src/dpp.qm b/examples/zephyr/dpp/src/dpp.qm
index ac9f2bc9..b2b8aea4 100644
--- a/examples/zephyr/dpp/src/dpp.qm
+++ b/examples/zephyr/dpp/src/dpp.qm
@@ -257,7 +257,7 @@ for (uint8_t n = 0U; n < N_PHILO; ++n) {
      
      
      
-      // give permissions to eat...
+      // give permissions to eat...
 for (uint8_t n = 0U; n < N_PHILO; ++n) {
     if (me->isHungry[n]
         && (me->fork[left(n)] == FREE)
diff --git a/include/qequeue.h b/include/qequeue.h
index 3aa01a0d..3b8ee672 100644
--- a/include/qequeue.h
+++ b/include/qequeue.h
@@ -3,7 +3,7 @@
 // Model: qpc.qm
 // File:  ${include::qequeue.h}
 //
-// This code has been generated by QM 5.3.0 .
+// This code has been generated by QM 6.1.1 .
 // DO NOT EDIT THIS FILE MANUALLY. All your changes will be lost.
 //
 // This code is covered by the following QP license:
@@ -102,16 +102,16 @@ void QEQueue_init(QEQueue * const me,
 bool QEQueue_post(QEQueue * const me,
     struct QEvt const * const e,
     uint_fast16_t const margin,
-    uint_fast8_t const qs_id);
+    uint_fast8_t const qsId);
 
 //! @public @memberof QEQueue
 void QEQueue_postLIFO(QEQueue * const me,
     struct QEvt const * const e,
-    uint_fast8_t const qs_id);
+    uint_fast8_t const qsId);
 
 //! @public @memberof QEQueue
 struct QEvt const * QEQueue_get(QEQueue * const me,
-    uint_fast8_t const qs_id);
+    uint_fast8_t const qsId);
 
 //! @public @memberof QEQueue
 static inline QEQueueCtr QEQueue_getNFree(QEQueue const * const me) {
diff --git a/include/qk.h b/include/qk.h
index fe36161c..c0ee30e5 100644
--- a/include/qk.h
+++ b/include/qk.h
@@ -3,7 +3,7 @@
 // Model: qpc.qm
 // File:  ${include::qk.h}
 //
-// This code has been generated by QM 5.3.0 .
+// This code has been generated by QM 6.1.1 .
 // DO NOT EDIT THIS FILE MANUALLY. All your changes will be lost.
 //
 // This code is covered by the following QP license:
@@ -204,12 +204,12 @@ void QK_activate_(void);
 #define QF_EPOOL_EVENT_SIZE_(p_) ((uint_fast16_t)(p_).blockSize)
 
 //${QF_EPOOL-impl::QF_EPOOL_GET_} ............................................
-#define QF_EPOOL_GET_(p_, e_, m_, qs_id_) \
-    ((e_) = (QEvt *)QMPool_get(&(p_), (m_), (qs_id_)))
+#define QF_EPOOL_GET_(p_, e_, m_, qsId_) \
+    ((e_) = (QEvt *)QMPool_get(&(p_), (m_), (qsId_)))
 
 //${QF_EPOOL-impl::QF_EPOOL_PUT_} ............................................
-#define QF_EPOOL_PUT_(p_, e_, qs_id_) \
-    (QMPool_put(&(p_), (e_), (qs_id_)))
+#define QF_EPOOL_PUT_(p_, e_, qsId_) \
+    (QMPool_put(&(p_), (e_), (qsId_)))
 //$enddecl${QF_EPOOL-impl} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 
 #endif // QP_IMPL
diff --git a/include/qmpool.h b/include/qmpool.h
index e48594f8..d079007b 100644
--- a/include/qmpool.h
+++ b/include/qmpool.h
@@ -3,7 +3,7 @@
 // Model: qpc.qm
 // File:  ${include::qmpool.h}
 //
-// This code has been generated by QM 5.3.0 .
+// This code has been generated by QM 6.1.1 .
 // DO NOT EDIT THIS FILE MANUALLY. All your changes will be lost.
 //
 // This code is covered by the following QP license:
@@ -131,12 +131,12 @@ void QMPool_init(QMPool * const me,
 //! @public @memberof QMPool
 void * QMPool_get(QMPool * const me,
     uint_fast16_t const margin,
-    uint_fast8_t const qs_id);
+    uint_fast8_t const qsId);
 
 //! @public @memberof QMPool
 void QMPool_put(QMPool * const me,
     void * const block,
-    uint_fast8_t const qs_id);
+    uint_fast8_t const qsId);
 //$enddecl${QF::QMPool} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 
 #endif  // QMPOOL_H_
diff --git a/include/qp.h b/include/qp.h
index 7af6ac36..9993135c 100644
--- a/include/qp.h
+++ b/include/qp.h
@@ -3,7 +3,7 @@
 // Model: qpc.qm
 // File:  ${include::qp.h}
 //
-// This code has been generated by QM 5.3.0 .
+// This code has been generated by QM 6.1.1 .
 // DO NOT EDIT THIS FILE MANUALLY. All your changes will be lost.
 //
 // This code is covered by the following QP license:
@@ -44,11 +44,11 @@
 #define QP_H_
 
 //============================================================================
-#define QP_VERSION     732U
-#define QP_VERSION_STR "7.3.2"
+#define QP_VERSION     733U
+#define QP_VERSION_STR "7.3.3"
 
-//! Encrypted  current QP release (7.3.2) and date (2023-12-14)
-#define QP_RELEASE     0x762F8843U
+//! Encrypted  current QP release (7.3.3) and date (2024-01-31)
+#define QP_RELEASE     0x70DEE7F2U
 
 //============================================================================
 //! @cond INTERNAL
@@ -184,7 +184,7 @@ static inline bool QEvt_verify_(QEvt const * const me) {
 }
 
 //! @private @memberof QEvt
-static inline uint_fast8_t QEvt_getPoolId_(QEvt const * const me) {
+static inline uint_fast8_t QEvt_getPoolNum_(QEvt const * const me) {
     return (uint_fast8_t)me->evtTag_ & 0x0FU;
 }
 
@@ -297,9 +297,9 @@ void QAsm_ctor(QAsm * const me);
 //${QEP::QAsmVtable} .........................................................
 struct QAsmVtable {
     void (*init)(QAsm * const me, void const * const e,
-                 uint_fast8_t const qs_id);
+                 uint_fast8_t const qsId);
     void (*dispatch)(QAsm * const me, QEvt const * const e,
-                     uint_fast8_t const qs_id);
+                     uint_fast8_t const qsId);
     bool (*isIn)(QAsm * const me, QStateHandler const s);
 
 #ifdef Q_SPY
@@ -327,13 +327,13 @@ void QHsm_ctor(QHsm * const me,
 void QHsm_init_(
     QAsm * const me,
     void const * const e,
-    uint_fast8_t const qs_id);
+    uint_fast8_t const qsId);
 
 //! @private @memberof QHsm
 void QHsm_dispatch_(
     QAsm * const me,
     QEvt const * const e,
-    uint_fast8_t const qs_id);
+    uint_fast8_t const qsId);
 
 #ifdef Q_SPY
 //! @private @memberof QHsm
@@ -362,7 +362,7 @@ QStateHandler QHsm_childState(QHsm * const me,
 int_fast8_t QHsm_tran_(
     QAsm * const me,
     QStateHandler * const path,
-    uint_fast8_t const qs_id);
+    uint_fast8_t const qsId);
 
 // protected:
 
@@ -390,7 +390,7 @@ void QMsm_ctor(QMsm * const me,
 void QMsm_init_(
     QAsm * const me,
     void const * const e,
-    uint_fast8_t const qs_id);
+    uint_fast8_t const qsId);
 
 // private:
 
@@ -398,7 +398,7 @@ void QMsm_init_(
 void QMsm_dispatch_(
     QAsm * const me,
     QEvt const * const e,
-    uint_fast8_t const qs_id);
+    uint_fast8_t const qsId);
 
 // public:
 
@@ -433,20 +433,20 @@ QMState const * QMsm_childStateObj(QMsm const * const me,
 QState QMsm_execTatbl_(
     QAsm * const me,
     QMTranActTable const * const tatbl,
-    uint_fast8_t const qs_id);
+    uint_fast8_t const qsId);
 
 //! @private @memberof QMsm
 void QMsm_exitToTranSource_(
     QAsm * const me,
     QMState const * const cs,
     QMState const * const ts,
-    uint_fast8_t const qs_id);
+    uint_fast8_t const qsId);
 
 //! @private @memberof QMsm
 QState QMsm_enterHistory_(
     QAsm * const me,
     QMState const *const hist,
-    uint_fast8_t const qs_id);
+    uint_fast8_t const qsId);
 //$enddecl${QEP} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 
 //$declare${QEP-macros} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
@@ -456,9 +456,9 @@ QState QMsm_enterHistory_(
 
 //${QEP-macros::QASM_INIT} ...................................................
 #ifdef Q_SPY
-#define QASM_INIT(me_, par_, qs_id_) do { \
+#define QASM_INIT(me_, par_, qsId_) do { \
     Q_ASSERT(((QAsm *)(me_))->vptr); \
-    (*((QAsm *)(me_))->vptr->init)((QAsm *)(me_), (par_), (qs_id_)); \
+    (*((QAsm *)(me_))->vptr->init)((QAsm *)(me_), (par_), (qsId_)); \
 } while (false)
 #endif // def Q_SPY
 
@@ -472,8 +472,8 @@ QState QMsm_enterHistory_(
 
 //${QEP-macros::QASM_DISPATCH} ...............................................
 #ifdef Q_SPY
-#define QASM_DISPATCH(me_, e_, qs_id_) \
-    (*((QAsm *)(me_))->vptr->dispatch)((QAsm *)(me_), (e_), (qs_id_))
+#define QASM_DISPATCH(me_, e_, qsId_) \
+    (*((QAsm *)(me_))->vptr->dispatch)((QAsm *)(me_), (e_), (qsId_))
 #endif // def Q_SPY
 
 //${QEP-macros::QASM_DISPATCH} ...............................................
@@ -909,7 +909,7 @@ void QActive_psInit(
 void QActive_publish_(
     QEvt const * const e,
     void const * const sender,
-    uint_fast8_t const qs_id);
+    uint_fast8_t const qsId);
 
 // protected:
 
@@ -1056,13 +1056,13 @@ void QTicker_ctor(QTicker * const me,
 void QTicker_init_(
     QAsm * const me,
     void const * const par,
-    uint_fast8_t const qs_id);
+    uint_fast8_t const qsId);
 
 //! @private @memberof QTicker
 void QTicker_dispatch_(
     QAsm * const me,
     QEvt const * const e,
-    uint_fast8_t const qs_id);
+    uint_fast8_t const qsId);
 
 //! @private @memberof QTicker
 void QTicker_trig_(
@@ -1120,7 +1120,7 @@ uint_fast16_t QF_poolGetMaxBlockSize(void);
 
 //${QF::QF-dyn::getPoolMin} ..................................................
 //! @static @public @memberof QF
-uint_fast16_t QF_getPoolMin(uint_fast8_t const poolId);
+uint_fast16_t QF_getPoolMin(uint_fast8_t const poolNum);
 
 //${QF::QF-dyn::newX_} .......................................................
 //! @static @private @memberof QF
diff --git a/include/qp_pkg.h b/include/qp_pkg.h
index 9dc4c0b6..37928bdf 100644
--- a/include/qp_pkg.h
+++ b/include/qp_pkg.h
@@ -3,7 +3,7 @@
 // Model: qpc.qm
 // File:  ${include::qp_pkg.h}
 //
-// This code has been generated by QM 5.3.0 .
+// This code has been generated by QM 6.1.1 .
 // DO NOT EDIT THIS FILE MANUALLY. All your changes will be lost.
 //
 // This code is covered by the following QP license:
diff --git a/include/qpc.h b/include/qpc.h
index d4ae9cda..ae3fc079 100644
--- a/include/qpc.h
+++ b/include/qpc.h
@@ -3,7 +3,7 @@
 // Model: qpc.qm
 // File:  ${include::qpc.h}
 //
-// This code has been generated by QM 5.3.0 .
+// This code has been generated by QM 6.1.1 .
 // DO NOT EDIT THIS FILE MANUALLY. All your changes will be lost.
 //
 // This code is covered by the following QP license:
@@ -123,10 +123,10 @@ static inline void QF_psInit(
 }
 
 //! @deprecated instead use: QASM_INIT()
-#define QHSM_INIT(me_, par_, qs_id_)   QASM_INIT((me_), (par_), (qs_id_))
+#define QHSM_INIT(me_, par_, qsId_)   QASM_INIT((me_), (par_), (qsId_))
 
 //! @deprecated instead use: QASM_DISPATCH()
-#define QHSM_DISPATCH(me_, e_, qs_id_) QASM_DISPATCH((me_), (e_), (qs_id_))
+#define QHSM_DISPATCH(me_, e_, qsId_) QASM_DISPATCH((me_), (e_), (qsId_))
 
 //! @deprecated instead use: QASM_IS_IN()
 #define QHsm_isIn(me_, state_)         QHsm_isIn_((QAsm *)(me_), (state_))
@@ -195,10 +195,10 @@ static inline void QF_psInit(
 #if (QP_API_VERSION < 580)
 
 //! @deprecated instead use: QASM_INIT()
-#define QMSM_INIT(me_, par_, qs_id_)   QASM_INIT((me_), (par_), (qs_id_))
+#define QMSM_INIT(me_, par_, qsId_)   QASM_INIT((me_), (par_), (qsId_))
 
 //! @deprecated instead use: QASM_DISPATCH()
-#define QMSM_DISPATCH(me_, e_, qs_id_) QASM_DISPATCH((me_), (e_), (qs_id_))
+#define QMSM_DISPATCH(me_, e_, qsId_) QASM_DISPATCH((me_), (e_), (qsId_))
 
 #endif // QP_API_VERSION < 580
 #endif // QP_API_VERSION < 660
diff --git a/include/qs.h b/include/qs.h
index d4921857..faae20d0 100644
--- a/include/qs.h
+++ b/include/qs.h
@@ -3,7 +3,7 @@
 // Model: qpc.qm
 // File:  ${include::qs.h}
 //
-// This code has been generated by QM 5.3.0 .
+// This code has been generated by QM 6.1.1 .
 // DO NOT EDIT THIS FILE MANUALLY. All your changes will be lost.
 //
 // This code is covered by the following QP license:
@@ -326,11 +326,11 @@ extern QS_Filter QS_filt_;
 #define QS_GLB_FILTER(rec_) (QS_glbFilter_((int_fast16_t)(rec_)))
 
 //${QS-macros::QS_LOC_FILTER} ................................................
-#define QS_LOC_FILTER(qs_id_) (QS_locFilter_((int_fast16_t)(qs_id_)))
+#define QS_LOC_FILTER(qsId_) (QS_locFilter_((int_fast16_t)(qsId_)))
 
 //${QS-macros::QS_BEGIN_ID} ..................................................
-#define QS_BEGIN_ID(rec_, qs_id_) \
-if (QS_GLB_CHECK_(rec_) && QS_LOC_CHECK_(qs_id_)) { \
+#define QS_BEGIN_ID(rec_, qsId_) \
+if (QS_GLB_CHECK_(rec_) && QS_LOC_CHECK_(qsId_)) { \
     QS_CRIT_STAT \
     QS_CRIT_ENTRY(); \
     QS_MEM_SYS(); \
@@ -348,8 +348,8 @@ if (QS_GLB_CHECK_(rec_) && QS_LOC_CHECK_(qs_id_)) { \
 #define QS_FLUSH() (QS_onFlush())
 
 //${QS-macros::QS_BEGIN_INCRIT} ..............................................
-#define QS_BEGIN_INCRIT(rec_, qs_id_) \
-if (QS_GLB_CHECK_(rec_) && QS_LOC_CHECK_(qs_id_)) { \
+#define QS_BEGIN_INCRIT(rec_, qsId_) \
+if (QS_GLB_CHECK_(rec_) && QS_LOC_CHECK_(qsId_)) { \
     QS_beginRec_((uint_fast8_t)(rec_)); \
     QS_TIME_PRE_(); {
 
@@ -364,9 +364,9 @@ if (QS_GLB_CHECK_(rec_) && QS_LOC_CHECK_(qs_id_)) { \
           & ((uint_fast8_t)1U << ((uint_fast8_t)(rec_) & 7U))) != 0U)
 
 //${QS-macros::QS_LOC_CHECK_} ................................................
-#define QS_LOC_CHECK_(qs_id_) \
-    (((uint_fast8_t)QS_filt_.loc[(uint_fast8_t)(qs_id_) >> 3U] \
-          & ((uint_fast8_t)1U << ((uint_fast8_t)(qs_id_) & 7U))) != 0U)
+#define QS_LOC_CHECK_(qsId_) \
+    (((uint_fast8_t)QS_filt_.loc[(uint_fast8_t)(qsId_) >> 3U] \
+          & ((uint_fast8_t)1U << ((uint_fast8_t)(qsId_) & 7U))) != 0U)
 
 //${QS-macros::QS_REC_DONE} ..................................................
 #ifndef QS_REC_DONE
@@ -897,7 +897,7 @@ void QHsmDummy_ctor(QHsmDummy * const me);
 void QHsmDummy_init_(
     QAsm * const me,
     void const * const par,
-    uint_fast8_t const qs_id);
+    uint_fast8_t const qsId);
 
 // private:
 
@@ -905,7 +905,7 @@ void QHsmDummy_init_(
 void QHsmDummy_dispatch_(
     QAsm * const me,
     QEvt const * const e,
-    uint_fast8_t const qs_id);
+    uint_fast8_t const qsId);
 //$enddecl${QS::QUTest-stub::QHsmDummy} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 //$declare${QS::QUTest-stub::QActiveDummy} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
 
@@ -928,13 +928,13 @@ void QActiveDummy_ctor(QActiveDummy * const me);
 void QActiveDummy_init_(
     QAsm * const me,
     void const * const par,
-    uint_fast8_t const qs_id);
+    uint_fast8_t const qsId);
 
 //! @private @memberof QActiveDummy
 void QActiveDummy_dispatch_(
     QAsm * const me,
     QEvt const * const e,
-    uint_fast8_t const qs_id);
+    uint_fast8_t const qsId);
 
 //! @private @memberof QActiveDummy
 bool QActiveDummy_fakePost_(
diff --git a/include/qs_dummy.h b/include/qs_dummy.h
index 648b0fff..45850a71 100644
--- a/include/qs_dummy.h
+++ b/include/qs_dummy.h
@@ -3,7 +3,7 @@
 // Model: qpc.qm
 // File:  ${include::qs_dummy.h}
 //
-// This code has been generated by QM 5.3.0 .
+// This code has been generated by QM 6.1.1 .
 // DO NOT EDIT THIS FILE MANUALLY. All your changes will be lost.
 //
 // This code is covered by the following QP license:
@@ -55,14 +55,14 @@
 #define QS_EXIT()                       ((void)0)
 #define QS_DUMP()                       ((void)0)
 #define QS_GLB_FILTER(rec_)             ((void)0)
-#define QS_LOC_FILTER(qs_id_)           ((void)0)
+#define QS_LOC_FILTER(qsId_)           ((void)0)
 
 #define QS_GET_BYTE(pByte_)             ((uint16_t)0xFFFFU)
 #define QS_GET_BLOCK(pSize_)            ((uint8_t *)0)
 
-#define QS_BEGIN_ID(rec_, qs_id_)       if (false) {
+#define QS_BEGIN_ID(rec_, qsId_)       if (false) {
 #define QS_END()                        }
-#define QS_BEGIN_INCRIT(rec_, qs_id_)   if (false) {
+#define QS_BEGIN_INCRIT(rec_, qsId_)   if (false) {
 #define QS_END_INCRIT()                 }
 
 #define QS_I8(width_, data_)            ((void)0)
@@ -104,7 +104,7 @@
 // interface used only for internal implementation, but not in applications
 #ifdef QP_IMPL
     // predefined QS trace records
-    #define QS_BEGIN_PRE_(rec_, qs_id_) if (false) {
+    #define QS_BEGIN_PRE_(rec_, qsId_) if (false) {
     #define QS_END_PRE_()        }
     #define QS_U8_PRE_(data_)           ((void)0)
     #define QS_2U8_PRE_(data1_, data2_) ((void)0)
diff --git a/include/qs_pkg.h b/include/qs_pkg.h
index 71bdcd4b..1bfcfa3b 100644
--- a/include/qs_pkg.h
+++ b/include/qs_pkg.h
@@ -3,7 +3,7 @@
 // Model: qpc.qm
 // File:  ${include::qs_pkg.h}
 //
-// This code has been generated by QM 5.3.0 .
+// This code has been generated by QM 6.1.1 .
 // DO NOT EDIT THIS FILE MANUALLY. All your changes will be lost.
 //
 // This code is covered by the following QP license:
@@ -74,8 +74,8 @@ enum QSpyRxRecords {
 #define QS_GOOD_CHKSUM 0xFFU
 
 //----------------------------------------------------------------------------
-#define QS_BEGIN_PRE_(rec_, qs_id_) \
-    if (QS_GLB_CHECK_(rec_) && QS_LOC_CHECK_(qs_id_)) { \
+#define QS_BEGIN_PRE_(rec_, qsId_) \
+    if (QS_GLB_CHECK_(rec_) && QS_LOC_CHECK_(qsId_)) { \
         QS_beginRec_((uint_fast8_t)(rec_));
 #define QS_END_PRE_()           QS_endRec_(); }
 
diff --git a/include/qsafe.h b/include/qsafe.h
index 39ebb11c..0540a96b 100644
--- a/include/qsafe.h
+++ b/include/qsafe.h
@@ -3,7 +3,7 @@
 // Model: qpc.qm
 // File:  ${include::qsafe.h}
 //
-// This code has been generated by QM 5.3.0 .
+// This code has been generated by QM 6.1.1 .
 // DO NOT EDIT THIS FILE MANUALLY. All your changes will be lost.
 //
 // This code is covered by the following QP license:
diff --git a/include/qstamp.h b/include/qstamp.h
index 5f9a925a..06765606 100644
--- a/include/qstamp.h
+++ b/include/qstamp.h
@@ -3,7 +3,7 @@
 // Model: qpc.qm
 // File:  ${include::qstamp.h}
 //
-// This code has been generated by QM 5.3.0 .
+// This code has been generated by QM 6.1.1 .
 // DO NOT EDIT THIS FILE MANUALLY. All your changes will be lost.
 //
 // This code is covered by the following QP license:
diff --git a/include/qv.h b/include/qv.h
index 50046a1b..e907930a 100644
--- a/include/qv.h
+++ b/include/qv.h
@@ -3,7 +3,7 @@
 // Model: qpc.qm
 // File:  ${include::qv.h}
 //
-// This code has been generated by QM 5.3.0 .
+// This code has been generated by QM 6.1.1 .
 // DO NOT EDIT THIS FILE MANUALLY. All your changes will be lost.
 //
 // This code is covered by the following QP license:
@@ -141,12 +141,12 @@ void QV_onIdle(void);
 #define QF_EPOOL_EVENT_SIZE_(p_) ((uint_fast16_t)(p_).blockSize)
 
 //${QF_EPOOL-impl::QF_EPOOL_GET_} ............................................
-#define QF_EPOOL_GET_(p_, e_, m_, qs_id_) \
-    ((e_) = (QEvt *)QMPool_get(&(p_), (m_), (qs_id_)))
+#define QF_EPOOL_GET_(p_, e_, m_, qsId_) \
+    ((e_) = (QEvt *)QMPool_get(&(p_), (m_), (qsId_)))
 
 //${QF_EPOOL-impl::QF_EPOOL_PUT_} ............................................
-#define QF_EPOOL_PUT_(p_, e_, qs_id_) \
-    (QMPool_put(&(p_), (e_), (qs_id_)))
+#define QF_EPOOL_PUT_(p_, e_, qsId_) \
+    (QMPool_put(&(p_), (e_), (qsId_)))
 //$enddecl${QF_EPOOL-impl} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 
 #endif // QP_IMPL
diff --git a/include/qxk.h b/include/qxk.h
index 153814eb..d4155208 100644
--- a/include/qxk.h
+++ b/include/qxk.h
@@ -3,7 +3,7 @@
 // Model: qpc.qm
 // File:  ${include::qxk.h}
 //
-// This code has been generated by QM 5.3.0 .
+// This code has been generated by QM 6.1.1 .
 // DO NOT EDIT THIS FILE MANUALLY. All your changes will be lost.
 //
 // This code is covered by the following QP license:
@@ -379,12 +379,12 @@ void QXMutex_unlock(QXMutex * const me);
 #define QF_EPOOL_EVENT_SIZE_(p_) ((uint_fast16_t)(p_).blockSize)
 
 //${QF_EPOOL-impl::QF_EPOOL_GET_} ............................................
-#define QF_EPOOL_GET_(p_, e_, m_, qs_id_) \
-    ((e_) = (QEvt *)QMPool_get(&(p_), (m_), (qs_id_)))
+#define QF_EPOOL_GET_(p_, e_, m_, qsId_) \
+    ((e_) = (QEvt *)QMPool_get(&(p_), (m_), (qsId_)))
 
 //${QF_EPOOL-impl::QF_EPOOL_PUT_} ............................................
-#define QF_EPOOL_PUT_(p_, e_, qs_id_) \
-    (QMPool_put(&(p_), (e_), (qs_id_)))
+#define QF_EPOOL_PUT_(p_, e_, qsId_) \
+    (QMPool_put(&(p_), (e_), (qsId_)))
 //$enddecl${QF_EPOOL-impl} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 
 enum QXK_TimeoutSigs {
diff --git a/ports/arm-cm/qk/armclang/qk_port.c b/ports/arm-cm/qk/armclang/qk_port.c
index e0ad0a10..04302874 100644
--- a/ports/arm-cm/qk/armclang/qk_port.c
+++ b/ports/arm-cm/qk/armclang/qk_port.c
@@ -79,7 +79,7 @@ char const QF_port_module_[] = "qk_port";
 //
 // description:
 // On ARMv6-M, interrupts are disabled with the PRIMASK register.
-// On ARMv7-M and higer, interrupts are disabled *selectively* with the
+// On ARMv7-M and higher, interrupts are disabled *selectively* with the
 // BASEPRI register.
 // Additionally, the function also asserts that the interrupts are
 // NOT disabled upon the entry to the function.
@@ -108,7 +108,7 @@ __asm volatile (
 //
 // description:
 // On ARMv6-M, interrupts are enabled with the PRIMASK register.
-// On ARMv7-M and higer, interrupts are enabled with the BASEPRI register.
+// On ARMv7-M and higher, interrupts are enabled with the BASEPRI register.
 // Additionally, the function also asserts that the interrupts ARE
 // disabled upon the entry to the function.
 __attribute__ ((naked, weak)) void QF_int_enable_(void) {
@@ -140,7 +140,7 @@ __asm volatile (
 // description:
 // On ARMv6-M, critical section is entered by disabling interrupts
 // with the PRIMASK register.
-// On ARMv7-M and higer, critical section is entered by disabling
+// On ARMv7-M and higher, critical section is entered by disabling
 // interrupts *selectively* with the BASEPRI register.
 // Additionally, the function also asserts that the interrupts are
 // NOT disabled upon the entry to the function.
@@ -173,7 +173,7 @@ __asm volatile (
 // description:
 // On ARMv6-M, critical section is exited by enabling interrupts
 // with the PRIMASK register.
-// On ARMv7-M and higer, critical section is exited by enabling
+// On ARMv7-M and higher, critical section is exited by enabling
 // interrupts with the BASEPRI register.
 // Additionally, the function also asserts that the interrupts ARE
 // disabled upon the entry to the function.
@@ -245,7 +245,7 @@ void QK_init(void) {
 #endif                  //--------- QK IRQ specified
 
 #ifdef __ARM_FP         //--------- if VFP available...
-    // make sure that the FPU is enabled by seting CP10 & CP11 Full Access
+    // make sure that the FPU is enabled by setting CP10 & CP11 Full Access
     SCB_CPACR = (SCB_CPACR | ((3UL << 20U) | (3UL << 22U)));
 
     // FPU automatic state preservation (ASPEN) lazy stacking (LSPEN)
diff --git a/ports/arm-cm/qk/config/qp_config.h b/ports/arm-cm/qk/config/qp_config.h
index 6f4e1d1a..afba2176 100644
--- a/ports/arm-cm/qk/config/qp_config.h
+++ b/ports/arm-cm/qk/config/qp_config.h
@@ -113,7 +113,7 @@
 
 // Maximum # event pools (QF_MAX_EPOOL)
 // <0=>0 no event pools
-// <1=>1 <2=>2 <3=>3 (deafult) <4=>4 <5=>5
+// <1=>1 <2=>2 <3=>3 (default) <4=>4 <5=>5
 // <6=>6 <7=>7 <8=>8 <9=>9 <10=>10 <11=>11
 // <12=>12 <13=>13 <14=>14 <15=>15
 // Maximum # Event Pools <1..15>
diff --git a/ports/arm-cm/qk/gnu/qk_port.c b/ports/arm-cm/qk/gnu/qk_port.c
index 22490343..b2873b86 100644
--- a/ports/arm-cm/qk/gnu/qk_port.c
+++ b/ports/arm-cm/qk/gnu/qk_port.c
@@ -27,8 +27,8 @@
 // 
 // 
 //============================================================================
-//! @date Last updated on: 2023-12-03
-//! @version Last updated for: @ref qpc_7_3_1
+//! @date Last updated on: 2024-01-30
+//! @version Last updated for: @ref qpc_7_3_3
 //!
 //! @file
 //! @brief QK/C port to ARM Cortex-M, GNU-ARM
@@ -79,7 +79,7 @@ char const QF_port_module_[] = "qk_port";
 //
 // description:
 // On ARMv6-M, interrupts are disabled with the PRIMASK register.
-// On ARMv7-M and higer, interrupts are disabled *selectively* with the
+// On ARMv7-M and higher, interrupts are disabled *selectively* with the
 // BASEPRI register.
 // Additionally, the function also asserts that the interrupts are
 // NOT disabled upon the entry to the function.
@@ -108,7 +108,7 @@ __asm volatile (
 //
 // description:
 // On ARMv6-M, interrupts are enabled with the PRIMASK register.
-// On ARMv7-M and higer, interrupts are enabled with the BASEPRI register.
+// On ARMv7-M and higher, interrupts are enabled with the BASEPRI register.
 // Additionally, the function also asserts that the interrupts ARE
 // disabled upon the entry to the function.
 __attribute__ ((naked, weak)) void QF_int_enable_(void) {
@@ -140,7 +140,7 @@ __asm volatile (
 // description:
 // On ARMv6-M, critical section is entered by disabling interrupts
 // with the PRIMASK register.
-// On ARMv7-M and higer, critical section is entered by disabling
+// On ARMv7-M and higher, critical section is entered by disabling
 // interrupts *selectively* with the BASEPRI register.
 // Additionally, the function also asserts that the interrupts are
 // NOT disabled upon the entry to the function.
@@ -173,7 +173,7 @@ __asm volatile (
 // description:
 // On ARMv6-M, critical section is exited by enabling interrupts
 // with the PRIMASK register.
-// On ARMv7-M and higer, critical section is exited by enabling
+// On ARMv7-M and higher, critical section is exited by enabling
 // interrupts with the BASEPRI register.
 // Additionally, the function also asserts that the interrupts ARE
 // disabled upon the entry to the function.
@@ -245,7 +245,7 @@ void QK_init(void) {
 #endif                  //--------- QK IRQ specified
 
 #ifdef __ARM_FP         //--------- if VFP available...
-    // make sure that the FPU is enabled by seting CP10 & CP11 Full Access
+    // make sure that the FPU is enabled by setting CP10 & CP11 Full Access
     SCB_CPACR = (SCB_CPACR | ((3UL << 20U) | (3UL << 22U)));
 
     // FPU automatic state preservation (ASPEN) lazy stacking (LSPEN)
@@ -417,6 +417,7 @@ __asm volatile (
 // flags in the PSR.
 __attribute__ ((naked, optimize("-fno-stack-protector")))
 uint_fast8_t QF_qlog2(uint32_t x) {
+    Q_UNUSED_PAR(x);
 __asm volatile (
     "  MOV     r1,#0            \n"
 #if (QF_MAX_ACTIVE > 16U)
diff --git a/ports/arm-cm/qk/iar/qk_port.c b/ports/arm-cm/qk/iar/qk_port.c
index 784e5732..b6ab1e80 100644
--- a/ports/arm-cm/qk/iar/qk_port.c
+++ b/ports/arm-cm/qk/iar/qk_port.c
@@ -83,7 +83,7 @@ char const QF_port_module_[] = "qk_port";
 //
 // description:
 // On ARMv6-M, interrupts are disabled with the PRIMASK register.
-// On ARMv7-M and higer, interrupts are disabled *selectively* with the
+// On ARMv7-M and higher, interrupts are disabled *selectively* with the
 // BASEPRI register.
 // Additionally, the function also asserts that the interrupts are
 // NOT disabled upon the entry to the function.
@@ -112,7 +112,7 @@ __asm volatile (
 //
 // description:
 // On ARMv6-M, interrupts are enabled with the PRIMASK register.
-// On ARMv7-M and higer, interrupts are enabled with the BASEPRI register.
+// On ARMv7-M and higher, interrupts are enabled with the BASEPRI register.
 // Additionally, the function also asserts that the interrupts ARE
 // disabled upon the entry to the function.
 void QF_int_enable_(void) {
@@ -144,7 +144,7 @@ __asm volatile (
 // description:
 // On ARMv6-M, critical section is entered by disabling interrupts
 // with the PRIMASK register.
-// On ARMv7-M and higer, critical section is entered by disabling
+// On ARMv7-M and higher, critical section is entered by disabling
 // interrupts *selectively* with the BASEPRI register.
 // Additionally, the function also asserts that the interrupts are
 // NOT disabled upon the entry to the function.
@@ -177,7 +177,7 @@ __asm volatile (
 // description:
 // On ARMv6-M, critical section is exited by enabling interrupts
 // with the PRIMASK register.
-// On ARMv7-M and higer, critical section is exited by enabling
+// On ARMv7-M and higher, critical section is exited by enabling
 // interrupts with the BASEPRI register.
 // Additionally, the function also asserts that the interrupts ARE
 // disabled upon the entry to the function.
@@ -249,7 +249,7 @@ void QK_init(void) {
 #endif                  //--------- QK IRQ specified
 
 #ifdef __ARM_FP         //--------- if VFP available...
-    // make sure that the FPU is enabled by seting CP10 & CP11 Full Access
+    // make sure that the FPU is enabled by setting CP10 & CP11 Full Access
     SCB_CPACR = (SCB_CPACR | ((3UL << 20U) | (3UL << 22U)));
 
     // FPU automatic state preservation (ASPEN) lazy stacking (LSPEN)
diff --git a/ports/arm-cm/qutest/qp_port.h b/ports/arm-cm/qutest/qp_port.h
index 0febfc48..7f496141 100644
--- a/ports/arm-cm/qutest/qp_port.h
+++ b/ports/arm-cm/qutest/qp_port.h
@@ -89,10 +89,10 @@
     #define QF_EPOOL_INIT_(p_, poolSto_, poolSize_, evtSize_) \
         (QMPool_init(&(p_), (poolSto_), (poolSize_), (evtSize_)))
     #define QF_EPOOL_EVENT_SIZE_(p_)  ((uint_fast16_t)(p_).blockSize)
-    #define QF_EPOOL_GET_(p_, e_, m_, qs_id_) \
-        ((e_) = (QEvt *)QMPool_get(&(p_), (m_), (qs_id_)))
-    #define QF_EPOOL_PUT_(p_, e_, qs_id_) \
-        (QMPool_put(&(p_), (e_), (qs_id_)))
+    #define QF_EPOOL_GET_(p_, e_, m_, qsId_) \
+        ((e_) = (QEvt *)QMPool_get(&(p_), (m_), (qsId_)))
+    #define QF_EPOOL_PUT_(p_, e_, qsId_) \
+        (QMPool_put(&(p_), (e_), (qsId_)))
 
 #endif // QP_IMPL
 
diff --git a/ports/arm-cm/qv/armclang/qv_port.c b/ports/arm-cm/qv/armclang/qv_port.c
index 09aaccea..5df26371 100644
--- a/ports/arm-cm/qv/armclang/qv_port.c
+++ b/ports/arm-cm/qv/armclang/qv_port.c
@@ -67,7 +67,7 @@ char const QF_port_module_[] = "qv_port";
 //
 // description:
 // On ARMv6-M, interrupts are disabled with the PRIMASK register.
-// On ARMv7-M and higer, interrupts are disabled *selectively* with the
+// On ARMv7-M and higher, interrupts are disabled *selectively* with the
 // BASEPRI register.
 // Additionally, the function also asserts that the interrupts are
 // NOT disabled upon the entry to the function.
@@ -96,7 +96,7 @@ __asm volatile (
 //
 // description:
 // On ARMv6-M, interrupts are enabled with the PRIMASK register.
-// On ARMv7-M and higer, interrupts are enabled with the BASEPRI register.
+// On ARMv7-M and higher, interrupts are enabled with the BASEPRI register.
 // Additionally, the function also asserts that the interrupts ARE
 // disabled upon the entry to the function.
 __attribute__ ((naked, weak)) void QF_int_enable_(void) {
@@ -128,7 +128,7 @@ __asm volatile (
 // description:
 // On ARMv6-M, critical section is entered by disabling interrupts
 // with the PRIMASK register.
-// On ARMv7-M and higer, critical section is entered by disabling
+// On ARMv7-M and higher, critical section is entered by disabling
 // interrupts *selectively* with the BASEPRI register.
 // Additionally, the function also asserts that the interrupts are
 // NOT disabled upon the entry to the function.
@@ -161,7 +161,7 @@ __asm volatile (
 // description:
 // On ARMv6-M, critical section is exited by enabling interrupts
 // with the PRIMASK register.
-// On ARMv7-M and higer, critical section is exited by enabling
+// On ARMv7-M and higher, critical section is exited by enabling
 // interrupts with the BASEPRI register.
 // Additionally, the function also asserts that the interrupts ARE
 // disabled upon the entry to the function.
@@ -223,7 +223,7 @@ void QV_init(void) {
 #endif                  //--------- ARMv7-M or higher
 
 #ifdef __ARM_FP         //--------- if VFP available...
-    // make sure that the FPU is enabled by seting CP10 & CP11 Full Access
+    // make sure that the FPU is enabled by setting CP10 & CP11 Full Access
     SCB_CPACR = (SCB_CPACR | ((3UL << 20U) | (3UL << 22U)));
 
     // FPU automatic state preservation (ASPEN) lazy stacking (LSPEN)
diff --git a/ports/arm-cm/qv/config/qp_config.h b/ports/arm-cm/qv/config/qp_config.h
index 05234feb..bb382fbb 100644
--- a/ports/arm-cm/qv/config/qp_config.h
+++ b/ports/arm-cm/qv/config/qp_config.h
@@ -113,7 +113,7 @@
 
 // Maximum # event pools (QF_MAX_EPOOL)
 // <0=>0 no event pools
-// <1=>1 <2=>2 <3=>3 (deafult) <4=>4 <5=>5
+// <1=>1 <2=>2 <3=>3 (default) <4=>4 <5=>5
 // <6=>6 <7=>7 <8=>8 <9=>9 <10=>10 <11=>11
 // <12=>12 <13=>13 <14=>14 <15=>15
 // Maximum # Event Pools <1..15>
diff --git a/ports/arm-cm/qv/gnu/qv_port.c b/ports/arm-cm/qv/gnu/qv_port.c
index c2658614..f58549b1 100644
--- a/ports/arm-cm/qv/gnu/qv_port.c
+++ b/ports/arm-cm/qv/gnu/qv_port.c
@@ -67,7 +67,7 @@ char const QF_port_module_[] = "qv_port";
 //
 // description:
 // On ARMv6-M, interrupts are disabled with the PRIMASK register.
-// On ARMv7-M and higer, interrupts are disabled *selectively* with the
+// On ARMv7-M and higher, interrupts are disabled *selectively* with the
 // BASEPRI register.
 // Additionally, the function also asserts that the interrupts are
 // NOT disabled upon the entry to the function.
@@ -96,7 +96,7 @@ __asm volatile (
 //
 // description:
 // On ARMv6-M, interrupts are enabled with the PRIMASK register.
-// On ARMv7-M and higer, interrupts are enabled with the BASEPRI register.
+// On ARMv7-M and higher, interrupts are enabled with the BASEPRI register.
 // Additionally, the function also asserts that the interrupts ARE
 // disabled upon the entry to the function.
 __attribute__ ((naked, weak)) void QF_int_enable_(void) {
@@ -128,7 +128,7 @@ __asm volatile (
 // description:
 // On ARMv6-M, critical section is entered by disabling interrupts
 // with the PRIMASK register.
-// On ARMv7-M and higer, critical section is entered by disabling
+// On ARMv7-M and higher, critical section is entered by disabling
 // interrupts *selectively* with the BASEPRI register.
 // Additionally, the function also asserts that the interrupts are
 // NOT disabled upon the entry to the function.
@@ -161,7 +161,7 @@ __asm volatile (
 // description:
 // On ARMv6-M, critical section is exited by enabling interrupts
 // with the PRIMASK register.
-// On ARMv7-M and higer, critical section is exited by enabling
+// On ARMv7-M and higher, critical section is exited by enabling
 // interrupts with the BASEPRI register.
 // Additionally, the function also asserts that the interrupts ARE
 // disabled upon the entry to the function.
@@ -223,7 +223,7 @@ void QV_init(void) {
 #endif                  //--------- ARMv7-M or higher
 
 #ifdef __ARM_FP         //--------- if VFP available...
-    // make sure that the FPU is enabled by seting CP10 & CP11 Full Access
+    // make sure that the FPU is enabled by setting CP10 & CP11 Full Access
     SCB_CPACR = (SCB_CPACR | ((3UL << 20U) | (3UL << 22U)));
 
     // FPU automatic state preservation (ASPEN) lazy stacking (LSPEN)
diff --git a/ports/arm-cm/qv/iar/qv_port.c b/ports/arm-cm/qv/iar/qv_port.c
index b0673edd..ea61168e 100644
--- a/ports/arm-cm/qv/iar/qv_port.c
+++ b/ports/arm-cm/qv/iar/qv_port.c
@@ -72,7 +72,7 @@ char const QF_port_module_[] = "qv_port";
 //
 // description:
 // On ARMv6-M, interrupts are disabled with the PRIMASK register.
-// On ARMv7-M and higer, interrupts are disabled *selectively* with the
+// On ARMv7-M and higher, interrupts are disabled *selectively* with the
 // BASEPRI register.
 // Additionally, the function also asserts that the interrupts are
 // NOT disabled upon the entry to the function.
@@ -101,7 +101,7 @@ __asm volatile (
 //
 // description:
 // On ARMv6-M, interrupts are enabled with the PRIMASK register.
-// On ARMv7-M and higer, interrupts are enabled with the BASEPRI register.
+// On ARMv7-M and higher, interrupts are enabled with the BASEPRI register.
 // Additionally, the function also asserts that the interrupts ARE
 // disabled upon the entry to the function.
 void QF_int_enable_(void) {
@@ -133,7 +133,7 @@ __asm volatile (
 // description:
 // On ARMv6-M, critical section is entered by disabling interrupts
 // with the PRIMASK register.
-// On ARMv7-M and higer, critical section is entered by disabling
+// On ARMv7-M and higher, critical section is entered by disabling
 // interrupts *selectively* with the BASEPRI register.
 // Additionally, the function also asserts that the interrupts are
 // NOT disabled upon the entry to the function.
@@ -166,7 +166,7 @@ __asm volatile (
 // description:
 // On ARMv6-M, critical section is exited by enabling interrupts
 // with the PRIMASK register.
-// On ARMv7-M and higer, critical section is exited by enabling
+// On ARMv7-M and higher, critical section is exited by enabling
 // interrupts with the BASEPRI register.
 // Additionally, the function also asserts that the interrupts ARE
 // disabled upon the entry to the function.
@@ -228,7 +228,7 @@ void QV_init(void) {
 #endif                  //--------- ARMv7-M or higher
 
 #ifdef __ARM_FP         //--------- if VFP available...
-    // make sure that the FPU is enabled by seting CP10 & CP11 Full Access
+    // make sure that the FPU is enabled by setting CP10 & CP11 Full Access
     SCB_CPACR = (SCB_CPACR | ((3UL << 20U) | (3UL << 22U)));
 
     // FPU automatic state preservation (ASPEN) lazy stacking (LSPEN)
diff --git a/ports/arm-cm/qxk/armclang/qxk_port.c b/ports/arm-cm/qxk/armclang/qxk_port.c
index 95a64901..e5e308eb 100644
--- a/ports/arm-cm/qxk/armclang/qxk_port.c
+++ b/ports/arm-cm/qxk/armclang/qxk_port.c
@@ -159,7 +159,7 @@ char const QF_port_module_[] = "qxk_port";
 //
 // description:
 // On ARMv6-M, interrupts are disabled with the PRIMASK register.
-// On ARMv7-M and higer, interrupts are disabled *selectively* with the
+// On ARMv7-M and higher, interrupts are disabled *selectively* with the
 // BASEPRI register.
 // Additionally, the function also asserts that the interrupts are
 // NOT disabled upon the entry to the function.
@@ -188,7 +188,7 @@ __asm volatile (
 //
 // description:
 // On ARMv6-M, interrupts are enabled with the PRIMASK register.
-// On ARMv7-M and higer, interrupts are enabled with the BASEPRI register.
+// On ARMv7-M and higher, interrupts are enabled with the BASEPRI register.
 // Additionally, the function also asserts that the interrupts ARE
 // disabled upon the entry to the function.
 //
@@ -224,7 +224,7 @@ __asm volatile (
 // description:
 // On ARMv6-M, critical section is entered by disabling interrupts
 // with the PRIMASK register.
-// On ARMv7-M and higer, critical section is entered by disabling
+// On ARMv7-M and higher, critical section is entered by disabling
 // interrupts *selectively* with the BASEPRI register.
 // Additionally, the function also asserts that the interrupts are
 // NOT disabled upon the entry to the function.
@@ -257,7 +257,7 @@ __asm volatile (
 // description:
 // On ARMv6-M, critical section is exited by enabling interrupts
 // with the PRIMASK register.
-// On ARMv7-M and higer, critical section is exited by enabling
+// On ARMv7-M and higher, critical section is exited by enabling
 // interrupts with the BASEPRI register.
 // Additionally, the function also asserts that the interrupts ARE
 // disabled upon the entry to the function.
@@ -329,7 +329,7 @@ void QXK_init(void) {
 #endif                  //--------- QXK IRQ specified
 
 #ifdef __ARM_FP         //--------- if VFP available...
-    // make sure that the FPU is enabled by seting CP10 & CP11 Full Access
+    // make sure that the FPU is enabled by setting CP10 & CP11 Full Access
     SCB_CPACR = (SCB_CPACR | ((3UL << 20U) | (3UL << 22U)));
 
     // FPU automatic state preservation (ASPEN) lazy stacking (LSPEN)
@@ -394,7 +394,7 @@ __asm volatile (
     "  BNE     PendSV_save_ex   \n" // branch if (current thread is extended)
 
     "  CMP     r2,#0            \n" // (QXK_priv_.next->osObject != 0)?
-    "  BNE     PendSV_save_ao   \n" // branch if (next tread is extended)
+    "  BNE     PendSV_save_ao   \n" // branch if (next thread is extended)
 
     "PendSV_activate:           \n"
 #ifdef __ARM_FP         //--------- if VFP available...
diff --git a/ports/arm-cm/qxk/config/qp_config.h b/ports/arm-cm/qxk/config/qp_config.h
index 5cb75eea..ac7dfd1e 100644
--- a/ports/arm-cm/qxk/config/qp_config.h
+++ b/ports/arm-cm/qxk/config/qp_config.h
@@ -113,7 +113,7 @@
 
 // Maximum # event pools (QF_MAX_EPOOL)
 // <0=>0 no event pools
-// <1=>1 <2=>2 <3=>3 (deafult) <4=>4 <5=>5
+// <1=>1 <2=>2 <3=>3 (default) <4=>4 <5=>5
 // <6=>6 <7=>7 <8=>8 <9=>9 <10=>10 <11=>11
 // <12=>12 <13=>13 <14=>14 <15=>15
 // Maximum # Event Pools <1..15>
diff --git a/ports/arm-cm/qxk/gnu/qxk_port.c b/ports/arm-cm/qxk/gnu/qxk_port.c
index e6c227af..c7638291 100644
--- a/ports/arm-cm/qxk/gnu/qxk_port.c
+++ b/ports/arm-cm/qxk/gnu/qxk_port.c
@@ -27,8 +27,8 @@
 // 
 // 
 //============================================================================
-//! @date Last updated on: 2023-12-04
-//! @version Last updated for: @ref qpc_7_3_1
+//! @date Last updated on: 2024-01-30
+//! @version Last updated for: @ref qpc_7_3_3
 //!
 //! @file
 //! @brief QXK/C port to ARM Cortex-M, GNU-ARM
@@ -159,7 +159,7 @@ char const QF_port_module_[] = "qxk_port";
 //
 // description:
 // On ARMv6-M, interrupts are disabled with the PRIMASK register.
-// On ARMv7-M and higer, interrupts are disabled *selectively* with the
+// On ARMv7-M and higher, interrupts are disabled *selectively* with the
 // BASEPRI register.
 // Additionally, the function also asserts that the interrupts are
 // NOT disabled upon the entry to the function.
@@ -188,7 +188,7 @@ __asm volatile (
 //
 // description:
 // On ARMv6-M, interrupts are enabled with the PRIMASK register.
-// On ARMv7-M and higer, interrupts are enabled with the BASEPRI register.
+// On ARMv7-M and higher, interrupts are enabled with the BASEPRI register.
 // Additionally, the function also asserts that the interrupts ARE
 // disabled upon the entry to the function.
 //
@@ -224,7 +224,7 @@ __asm volatile (
 // description:
 // On ARMv6-M, critical section is entered by disabling interrupts
 // with the PRIMASK register.
-// On ARMv7-M and higer, critical section is entered by disabling
+// On ARMv7-M and higher, critical section is entered by disabling
 // interrupts *selectively* with the BASEPRI register.
 // Additionally, the function also asserts that the interrupts are
 // NOT disabled upon the entry to the function.
@@ -257,7 +257,7 @@ __asm volatile (
 // description:
 // On ARMv6-M, critical section is exited by enabling interrupts
 // with the PRIMASK register.
-// On ARMv7-M and higer, critical section is exited by enabling
+// On ARMv7-M and higher, critical section is exited by enabling
 // interrupts with the BASEPRI register.
 // Additionally, the function also asserts that the interrupts ARE
 // disabled upon the entry to the function.
@@ -329,7 +329,7 @@ void QXK_init(void) {
 #endif                  //--------- QXK IRQ specified
 
 #ifdef __ARM_FP         //--------- if VFP available...
-    // make sure that the FPU is enabled by seting CP10 & CP11 Full Access
+    // make sure that the FPU is enabled by setting CP10 & CP11 Full Access
     SCB_CPACR = (SCB_CPACR | ((3UL << 20U) | (3UL << 22U)));
 
     // FPU automatic state preservation (ASPEN) lazy stacking (LSPEN)
@@ -399,7 +399,7 @@ __asm volatile (
     "  BNE     PendSV_save_ex   \n" // branch if (current thread is extended)
 
     "  CMP     r2,#0            \n" // (QXK_priv_.next->osObject != 0)?
-    "  BNE     PendSV_save_ao   \n" // branch if (next tread is extended)
+    "  BNE     PendSV_save_ao   \n" // branch if (next thread is extended)
 
     "PendSV_activate:           \n"
 #ifdef __ARM_FP         //--------- if VFP available...
@@ -769,6 +769,7 @@ __asm volatile (
 // flags in the PSR.
 __attribute__ ((naked, optimize("-fno-stack-protector")))
 uint_fast8_t QF_qlog2(uint32_t x) {
+    Q_UNUSED_PAR(x);
 __asm volatile (
     "  MOV     r1,#0            \n"
 #if (QF_MAX_ACTIVE > 16U)
diff --git a/ports/arm-cm/qxk/iar/qxk_port.c b/ports/arm-cm/qxk/iar/qxk_port.c
index 9b2f62cf..207fdc16 100644
--- a/ports/arm-cm/qxk/iar/qxk_port.c
+++ b/ports/arm-cm/qxk/iar/qxk_port.c
@@ -163,7 +163,7 @@ char const QF_port_module_[] = "qxk_port";
 //
 // description:
 // On ARMv6-M, interrupts are disabled with the PRIMASK register.
-// On ARMv7-M and higer, interrupts are disabled *selectively* with the
+// On ARMv7-M and higher, interrupts are disabled *selectively* with the
 // BASEPRI register.
 // Additionally, the function also asserts that the interrupts are
 // NOT disabled upon the entry to the function.
@@ -192,7 +192,7 @@ __asm volatile (
 //
 // description:
 // On ARMv6-M, interrupts are enabled with the PRIMASK register.
-// On ARMv7-M and higer, interrupts are enabled with the BASEPRI register.
+// On ARMv7-M and higher, interrupts are enabled with the BASEPRI register.
 // Additionally, the function also asserts that the interrupts ARE
 // disabled upon the entry to the function.
 //
@@ -228,7 +228,7 @@ __asm volatile (
 // description:
 // On ARMv6-M, critical section is entered by disabling interrupts
 // with the PRIMASK register.
-// On ARMv7-M and higer, critical section is entered by disabling
+// On ARMv7-M and higher, critical section is entered by disabling
 // interrupts *selectively* with the BASEPRI register.
 // Additionally, the function also asserts that the interrupts are
 // NOT disabled upon the entry to the function.
@@ -261,7 +261,7 @@ __asm volatile (
 // description:
 // On ARMv6-M, critical section is exited by enabling interrupts
 // with the PRIMASK register.
-// On ARMv7-M and higer, critical section is exited by enabling
+// On ARMv7-M and higher, critical section is exited by enabling
 // interrupts with the BASEPRI register.
 // Additionally, the function also asserts that the interrupts ARE
 // disabled upon the entry to the function.
@@ -333,7 +333,7 @@ void QXK_init(void) {
 #endif                  //--------- QXK IRQ specified
 
 #ifdef __ARM_FP         //--------- if VFP available...
-    // make sure that the FPU is enabled by seting CP10 & CP11 Full Access
+    // make sure that the FPU is enabled by setting CP10 & CP11 Full Access
     SCB_CPACR = (SCB_CPACR | ((3UL << 20U) | (3UL << 22U)));
 
     // FPU automatic state preservation (ASPEN) lazy stacking (LSPEN)
@@ -398,7 +398,7 @@ __asm volatile (
     "  BNE     PendSV_save_ex   \n" // branch if (current thread is extended)
 
     "  CMP     r2,#0            \n" // (QXK_priv_.next->osObject != 0)?
-    "  BNE     PendSV_save_ao   \n" // branch if (next tread is extended)
+    "  BNE     PendSV_save_ao   \n" // branch if (next thread is extended)
 
     "PendSV_activate:           \n"
 #ifdef __ARM_FP         //--------- if VFP available...
diff --git a/ports/arm-cr/qk/config/qp_config.h b/ports/arm-cr/qk/config/qp_config.h
index a6525c1f..edb231a8 100644
--- a/ports/arm-cr/qk/config/qp_config.h
+++ b/ports/arm-cr/qk/config/qp_config.h
@@ -113,7 +113,7 @@
 
 // Maximum # event pools (QF_MAX_EPOOL)
 // <0=>0 no event pools
-// <1=>1 <2=>2 <3=>3 (deafult) <4=>4 <5=>5
+// <1=>1 <2=>2 <3=>3 (default) <4=>4 <5=>5
 // <6=>6 <7=>7 <8=>8 <9=>9 <10=>10 <11=>11
 // <12=>12 <13=>13 <14=>14 <15=>15
 // Maximum # Event Pools <1..15>
diff --git a/ports/arm-cr/qv/config/qp_config.h b/ports/arm-cr/qv/config/qp_config.h
index ef220ec0..5fe3ec55 100644
--- a/ports/arm-cr/qv/config/qp_config.h
+++ b/ports/arm-cr/qv/config/qp_config.h
@@ -113,7 +113,7 @@
 
 // Maximum # event pools (QF_MAX_EPOOL)
 // <0=>0 no event pools
-// <1=>1 <2=>2 <3=>3 (deafult) <4=>4 <5=>5
+// <1=>1 <2=>2 <3=>3 (default) <4=>4 <5=>5
 // <6=>6 <7=>7 <8=>8 <9=>9 <10=>10 <11=>11
 // <12=>12 <13=>13 <14=>14 <15=>15
 // Maximum # Event Pools <1..15>
diff --git a/ports/config/qp_config.h b/ports/config/qp_config.h
index e1870735..f902a015 100644
--- a/ports/config/qp_config.h
+++ b/ports/config/qp_config.h
@@ -113,7 +113,7 @@
 
 // Maximum # event pools (QF_MAX_EPOOL)
 // <0=>0 no event pools
-// <1=>1 <2=>2 <3=>3 (deafult) <4=>4 <5=>5
+// <1=>1 <2=>2 <3=>3 (default) <4=>4 <5=>5
 // <6=>6 <7=>7 <8=>8 <9=>9 <10=>10 <11=>11
 // <12=>12 <13=>13 <14=>14 <15=>15
 // Maximum # Event Pools <1..15>
diff --git a/ports/embos/qf_port.c b/ports/embos/qf_port.c
index 3d54714c..8b6cfe8d 100644
--- a/ports/embos/qf_port.c
+++ b/ports/embos/qf_port.c
@@ -120,7 +120,7 @@ void QActive_start_(QActive * const me, QPrioSpec const prioSpec,
     (*me->super.vptr->init)(&me->super, par, me->prio);
     QS_FLUSH(); // flush the trace buffer to the host
 
-    // The embOS priority of the AO thread can be specificed in two ways:
+    // The embOS priority of the AO thread can be specified in two ways:
     //
     // 1. Implictily based on the AO's priority (embOS uses the same
     //    priority numbering scheme as QP). This option is chosen when
@@ -133,7 +133,7 @@ void QActive_start_(QActive * const me, QPrioSpec const prioSpec,
     //
     //    NOTE: The explicit embOS priority is NOT sanity-checked,
     //    so it is the responsibility of the application to ensure that
-    //    it is consistent witht the AO's priority. An example of
+    //    it is consistent with the AO's priority. An example of
     //    inconsistent setting would be assigning embOS priorities that
     //    would result in a different relative priritization of AO's threads
     //    than indicated by the AO priorities assigned.
@@ -211,12 +211,12 @@ bool QActive_post_(QActive * const me, QEvt const * const e,
             QS_OBJ_PRE_(sender); // the sender object
             QS_SIG_PRE_(e->sig); // the signal of the event
             QS_OBJ_PRE_(me);     // this active object (recipient)
-            QS_2U8_PRE_(QEvt_getPoolId_(e), e->refCtr_); // pool-Id&ref-Count
+            QS_2U8_PRE_(QEvt_getPoolNum_(e), e->refCtr_); // pool-Id&ref-Count
             QS_EQC_PRE_(nFree);  // # free entries
             QS_EQC_PRE_(0U);     // min # free entries (unknown)
         QS_END_PRE_()
 
-        if (QEvt_getPoolId_(e) != 0U) { // is it a pool event?
+        if (QEvt_getPoolNum_(e) != 0U) { // is it a pool event?
             QEvt_refCtr_inc_(e); // increment the reference counter
         }
         QF_CRIT_EXIT();
@@ -234,7 +234,7 @@ bool QActive_post_(QActive * const me, QEvt const * const e,
             QS_OBJ_PRE_(sender); // the sender object
             QS_SIG_PRE_(e->sig); // the signal of the event
             QS_OBJ_PRE_(me);     // this active object (recipient)
-            QS_2U8_PRE_(QEvt_getPoolId_(e), e->refCtr_); // pool-Id&ref-Count
+            QS_2U8_PRE_(QEvt_getPoolNum_(e), e->refCtr_); // pool-Id&ref-Count
             QS_EQC_PRE_(nFree);  // # free entries
             QS_EQC_PRE_(margin); // margin requested
         QS_END_PRE_()
@@ -253,12 +253,12 @@ void QActive_postLIFO_(QActive * const me, QEvt const * const e) {
         QS_TIME_PRE_();          // timestamp
         QS_SIG_PRE_(e->sig);     // the signal of this event
         QS_OBJ_PRE_(me);         // this active object
-        QS_2U8_PRE_(QEvt_getPoolId_(e), e->refCtr_); // pool-Id&ref-Count
+        QS_2U8_PRE_(QEvt_getPoolNum_(e), e->refCtr_); // pool-Id&ref-Count
         QS_EQC_PRE_(me->eQueue.maxMsg - me->eQueue.nofMsg); // # free
         QS_EQC_PRE_(0U);         // min # free entries (unknown)
     QS_END_PRE_()
 
-    if (QEvt_getPoolId_(e) != 0U) { // is it a pool event?
+    if (QEvt_getPoolNum_(e) != 0U) { // is it a pool event?
         QEvt_refCtr_inc_(e); // increment the reference counter
     }
     QF_CRIT_EXIT();
@@ -281,7 +281,7 @@ QEvt const *QActive_get_(QActive * const me) {
         QS_TIME_PRE_();          // timestamp
         QS_SIG_PRE_(e->sig);     // the signal of this event
         QS_OBJ_PRE_(me);         // this active object
-        QS_2U8_PRE_(QEvt_getPoolId_(e), e->refCtr_); // pool-Id&ref-Count
+        QS_2U8_PRE_(QEvt_getPoolNum_(e), e->refCtr_); // pool-Id&ref-Count
         QS_EQC_PRE_(me->eQueue.maxMsg - me->eQueue.nofMsg);// # free
     QS_END_PRE_()
     QS_CRIT_EXIT();
diff --git a/ports/embos/qp_port.h b/ports/embos/qp_port.h
index 3bcf6ce6..f3113223 100644
--- a/ports/embos/qp_port.h
+++ b/ports/embos/qp_port.h
@@ -98,10 +98,10 @@ enum EmbOS_TaskAttrs {
     #define QF_EPOOL_INIT_(p_, poolSto_, poolSize_, evtSize_) \
         (QMPool_init(&(p_), (poolSto_), (poolSize_), (evtSize_)))
     #define QF_EPOOL_EVENT_SIZE_(p_)  ((uint_fast16_t)(p_).blockSize)
-    #define QF_EPOOL_GET_(p_, e_, m_, qs_id_) \
-        ((e_) = (QEvt *)QMPool_get(&(p_), (m_), (qs_id_)))
-    #define QF_EPOOL_PUT_(p_, e_, qs_id_) \
-        (QMPool_put(&(p_), (e_), (qs_id_)))
+    #define QF_EPOOL_GET_(p_, e_, m_, qsId_) \
+        ((e_) = (QEvt *)QMPool_get(&(p_), (m_), (qsId_)))
+    #define QF_EPOOL_PUT_(p_, e_, qsId_) \
+        (QMPool_put(&(p_), (e_), (qsId_)))
 
 #endif // QP_IMPL
 
diff --git a/ports/esp-idf/README.md b/ports/esp-idf/README.md
index f9ef6bdd..38911ea1 100644
--- a/ports/esp-idf/README.md
+++ b/ports/esp-idf/README.md
@@ -4,7 +4,7 @@ IoT Framework, which is loosely based on the [FreeRTOS kernel][2].
 
 ---------------------------------------------------------------------------
 # About QP/C Port to ESP-IDF
-"Experimental" means that the port has not been thouroughly tested at
+"Experimental" means that the port has not been thoroughly tested at
 Quantum Leaps and no working examples are provided.
 
 
diff --git a/ports/esp-idf/qf_port.c b/ports/esp-idf/qf_port.c
index 0487b3c0..b38743bd 100644
--- a/ports/esp-idf/qf_port.c
+++ b/ports/esp-idf/qf_port.c
@@ -162,9 +162,9 @@ void QActive_start_(QActive * const me,
                              ? (char const *)me->thread.pxDummy1
                              : (char const *)"AO";
 
-    // The FreeRTOS priority of the AO thread can be specificed in two ways:
+    // The FreeRTOS priority of the AO thread can be specified in two ways:
     //
-    // 1. Implictily based on the AO's priority (by the forumla specified
+    // 1. Implictily based on the AO's priority (by the formula specified
     //    in the macro FREERTOS_TASK_PRIO(), see qp_port.h). This option
     //    is chosen, when the higher-byte of the prioSpec parameter is set
     //    to zero.
@@ -176,7 +176,7 @@ void QActive_start_(QActive * const me,
     //
     //    NOTE: The explicit FreeRTOS priority is NOT sanity-checked,
     //    so it is the responsibility of the application to ensure that
-    //    it is consistent witht the AO's priority. An example of
+    //    it is consistent with the AO's priority. An example of
     //    inconsistent setting would be assigning FreeRTOS priorities that
     //    would result in a different relative priritization of AO's threads
     //    than indicated by the AO priorities assigned.
@@ -263,12 +263,12 @@ bool IRAM_ATTR QActive_post_(QActive * const me, QEvt const * const e,
             QS_OBJ_PRE_(sender); // the sender object
             QS_SIG_PRE_(e->sig); // the signal of the event
             QS_OBJ_PRE_(me);     // this active object (recipient)
-            QS_2U8_PRE_(QEvt_getPoolId_(e), e->refCtr_); // pool Id&ref Count
+            QS_2U8_PRE_(QEvt_getPoolNum_(e), e->refCtr_); // poolNum & refCtr
             QS_EQC_PRE_((QEQueueCtr)nFree); // # free entries
             QS_EQC_PRE_(0U);     // min # free entries (unknown)
         QS_END_PRE_()
 
-        if (QEvt_getPoolId_(e) != 0U) { // is it a pool event?
+        if (QEvt_getPoolNum_(e) != 0U) { // is it a pool event?
             QEvt_refCtr_inc_(e); // increment the reference counter
         }
         QF_CRIT_EXIT();
@@ -287,7 +287,7 @@ bool IRAM_ATTR QActive_post_(QActive * const me, QEvt const * const e,
             QS_OBJ_PRE_(sender); // the sender object
             QS_SIG_PRE_(e->sig); // the signal of the event
             QS_OBJ_PRE_(me);     // this active object (recipient)
-            QS_2U8_PRE_(QEvt_getPoolId_(e), e->refCtr_); // pool Id&ref Count
+            QS_2U8_PRE_(QEvt_getPoolNum_(e), e->refCtr_); // poolNum & refCtr
             QS_EQC_PRE_((QEQueueCtr)nFree); // # free entries
             QS_EQC_PRE_(margin); // margin requested
         QS_END_PRE_()
@@ -305,12 +305,12 @@ void IRAM_ATTR QActive_postLIFO_(QActive * const me, QEvt const * const e) {
         QS_TIME_PRE_();          // timestamp
         QS_SIG_PRE_(e->sig);     // the signal of this event
         QS_OBJ_PRE_(me);         // this active object
-        QS_2U8_PRE_(QEvt_getPoolId_(e), e->refCtr_); // pool Id&ref Count
+        QS_2U8_PRE_(QEvt_getPoolNum_(e), e->refCtr_); // poolNum & refCtr
         QS_EQC_PRE_((QEQueueCtr)FREERTOS_QUEUE_GET_FREE(me)); // # free
         QS_EQC_PRE_(0U);         // min # free entries (unknown)
     QS_END_PRE_()
 
-    if (QEvt_getPoolId_(e) != 0U) { // is it a pool event?
+    if (QEvt_getPoolNum_(e) != 0U) { // is it a pool event?
         QEvt_refCtr_inc_(e); // increment the reference counter
     }
     QF_CRIT_EXIT();
@@ -334,7 +334,7 @@ QEvt const *QActive_get_(QActive * const me) {
         QS_TIME_PRE_();          // timestamp
         QS_SIG_PRE_(e->sig);     // the signal of this event
         QS_OBJ_PRE_(me);         // this active object
-        QS_2U8_PRE_(QEvt_getPoolId_(e), e->refCtr_); // pool Id&ref Count
+        QS_2U8_PRE_(QEvt_getPoolNum_(e), e->refCtr_); // poolNum & refCtr
         QS_EQC_PRE_((QEQueueCtr)FREERTOS_QUEUE_GET_FREE(me)); // # free
     QS_END_PRE_()
     QS_CRIT_EXIT();
@@ -378,12 +378,12 @@ bool IRAM_ATTR QActive_postFromISR_(QActive * const me, QEvt const * const e,
             QS_OBJ_PRE_(sender); // the sender object
             QS_SIG_PRE_(e->sig); // the signal of the event
             QS_OBJ_PRE_(me);     // this active object (recipient)
-            QS_2U8_PRE_(QEvt_getPoolId_(e), e->refCtr_); // pool Id&ref Count
+            QS_2U8_PRE_(QEvt_getPoolNum_(e), e->refCtr_); // poolNum & refCtr
             QS_EQC_PRE_(nFree);  // # free entries available
             QS_EQC_PRE_(0U);     // min # free entries (unknown)
         QS_END_PRE_()
 
-        if (QEvt_getPoolId_(e) != 0U) { // is it a pool event?
+        if (QEvt_getPoolNum_(e) != 0U) { // is it a pool event?
             QEvt_refCtr_inc_(e); // increment the reference counter
         }
         portEXIT_CRITICAL_ISR(&QF_esp32mux);
@@ -404,7 +404,7 @@ bool IRAM_ATTR QActive_postFromISR_(QActive * const me, QEvt const * const e,
             QS_OBJ_PRE_(sender); // the sender object
             QS_SIG_PRE_(e->sig); // the signal of the event
             QS_OBJ_PRE_(me);     // this active object (recipient)
-            QS_2U8_PRE_(QEvt_getPoolId_(e), e->refCtr_); // pool Id&ref Count
+            QS_2U8_PRE_(QEvt_getPoolNum_(e), e->refCtr_); // poolNum & refCtr
             QS_EQC_PRE_(nFree);  // # free entries available
             QS_EQC_PRE_(margin); // margin requested
         QS_END_PRE_()
@@ -434,11 +434,11 @@ void IRAM_ATTR QActive_publishFromISR_(QEvt const * const e,
         QS_TIME_PRE_();          // the timestamp
         QS_OBJ_PRE_(sender);     // the sender object
         QS_SIG_PRE_(sig);        // the signal of the event
-        QS_2U8_PRE_(QEvt_getPoolId_(e), e->refCtr_);// pool-Id & ref-Count
+        QS_2U8_PRE_(QEvt_getPoolNum_(e), e->refCtr_);// pool-Id & ref-Count
     QS_END_PRE_()
 
     // is it a dynamic event?
-    if (QEvt_getPoolId_(e) != 0U) {
+    if (QEvt_getPoolNum_(e) != 0U) {
         // NOTE: The reference counter of a dynamic event is incremented to
         // prevent premature recycling of the event while the multicasting
         // is still in progress. At the end of the function, the garbage
@@ -585,7 +585,7 @@ void IRAM_ATTR QTimeEvt_tickFromISR_(uint_fast8_t const tickRate,
 QEvt IRAM_ATTR *QF_newXFromISR_(uint_fast16_t const evtSize,
                       uint_fast16_t const margin, enum_t const sig)
 {
-    // find the poolId that fits the requested event size ...
+    // find the poolNum that fits the requested event size ...
     uint_fast8_t idx;
     for (idx = 0U; idx < QF_priv_.maxPool_; ++idx) {
         if (evtSize <= QF_EPOOL_EVENT_SIZE_(QF_priv_.ePool_[idx])) {
@@ -646,7 +646,7 @@ QEvt IRAM_ATTR *QF_newXFromISR_(uint_fast16_t const evtSize,
 //............................................................................
 void IRAM_ATTR QF_gcFromISR(QEvt const * const e) {
     // is it a dynamic event?
-    if (QEvt_getPoolId_(e) != 0U) {
+    if (QEvt_getPoolNum_(e) != 0U) {
         portENTER_CRITICAL_ISR(&QF_esp32mux);
 
         // isn't this the last ref?
@@ -654,22 +654,22 @@ void IRAM_ATTR QF_gcFromISR(QEvt const * const e) {
             QEvt_refCtr_dec_(e); // decrement the ref counter
 
             QS_BEGIN_PRE_(QS_QF_GC_ATTEMPT,
-                          (uint_fast8_t)QEvt_getPoolId_(e))
+                          (uint_fast8_t)QEvt_getPoolNum_(e))
                 QS_TIME_PRE_();      // timestamp
                 QS_SIG_PRE_(e->sig); // the signal of the event
-                QS_2U8_PRE_(QEvt_getPoolId_(e), e->refCtr_);//pool-Id&ref-Count
+                QS_2U8_PRE_(QEvt_getPoolNum_(e), e->refCtr_);//pool-Id&ref-Count
             QS_END_PRE_()
 
             portEXIT_CRITICAL_ISR(&QF_esp32mux);
         }
         // this is the last reference to this event, recycle it
         else {
-            uint_fast8_t idx = (uint_fast8_t)QEvt_getPoolId_(e) - 1U;
+            uint_fast8_t idx = (uint_fast8_t)QEvt_getPoolNum_(e) - 1U;
 
-            QS_BEGIN_PRE_(QS_QF_GC, (uint_fast8_t)QEvt_getPoolId_(e))
+            QS_BEGIN_PRE_(QS_QF_GC, (uint_fast8_t)QEvt_getPoolNum_(e))
                 QS_TIME_PRE_();         // timestamp
                 QS_SIG_PRE_(e->sig);    // the signal of the event
-                QS_2U8_PRE_(QEvt_getPoolId_(e), e->refCtr_);//pool-Id&ref-Count
+                QS_2U8_PRE_(QEvt_getPoolNum_(e), e->refCtr_);//pool-Id&ref-Count
             QS_END_PRE_()
 
             // pool ID must be in range
@@ -680,7 +680,7 @@ void IRAM_ATTR QF_gcFromISR(QEvt const * const e) {
 #ifdef Q_SPY
             // cast 'const' away in (QEvt *)e is OK because it's a pool event
             QMPool_putFromISR(&QF_priv_.ePool_[idx], (QEvt *)e,
-                              (uint_fast8_t)QS_EP_ID + QEvt_getPoolId_(e));
+                              (uint_fast8_t)QS_EP_ID + QEvt_getPoolNum_(e));
 #else
             QMPool_putFromISR(&QF_priv_.ePool_[idx], (QEvt *)e, 0U);
 #endif
@@ -689,10 +689,10 @@ void IRAM_ATTR QF_gcFromISR(QEvt const * const e) {
 }
 //............................................................................
 void IRAM_ATTR QMPool_putFromISR(QMPool * const me, void *b,
-                                 uint_fast8_t const qs_id)
+                                 uint_fast8_t const qsId)
 {
 #ifndef Q_SPY
-    Q_UNUSED_PAR(qs_id);
+    Q_UNUSED_PAR(qsId);
 #endif
 
     QFreeBlock * const fb = (QFreeBlock *)block;
@@ -713,7 +713,7 @@ void IRAM_ATTR QMPool_putFromISR(QMPool * const me, void *b,
     me->free_head = block; // set as new head of the free list
     ++me->nFree;           // one more free block in this pool
 
-    QS_BEGIN_PRE_(QS_QF_MPOOL_PUT, qs_id)
+    QS_BEGIN_PRE_(QS_QF_MPOOL_PUT, qsId)
         QS_TIME_PRE_();         // timestamp
         QS_OBJ_PRE_(me);        // this memory pool
         QS_MPC_PRE_(me->nFree); // the number of free blocks in the pool
@@ -723,10 +723,10 @@ void IRAM_ATTR QMPool_putFromISR(QMPool * const me, void *b,
 }
 //............................................................................
 void *QMPool_getFromISR(QMPool * const me, uint_fast16_t const margin,
-                        uint_fast8_t const qs_id)
+                        uint_fast8_t const qsId)
 {
 #ifndef Q_SPY
-    Q_UNUSED_PAR(qs_id);
+    Q_UNUSED_PAR(qsId);
 #endif
 
     portENTER_CRITICAL_ISR(&QF_esp32mux);
@@ -772,7 +772,7 @@ void *QMPool_getFromISR(QMPool * const me, uint_fast16_t const margin,
 
         me->free_head = fb_next; // set the head to the next free block
 
-        QS_BEGIN_PRE_(QS_QF_MPOOL_GET, qs_id)
+        QS_BEGIN_PRE_(QS_QF_MPOOL_GET, qsId)
             QS_TIME_PRE_();         // timestamp
             QS_OBJ_PRE_(me);        // this memory pool
             QS_MPC_PRE_(me->nFree); // # free blocks in the pool
@@ -782,7 +782,7 @@ void *QMPool_getFromISR(QMPool * const me, uint_fast16_t const margin,
     else { // don't have enough free blocks at this point
         fb = (QFreeBlock *)0;
 
-        QS_BEGIN_PRE_(QS_QF_MPOOL_GET_ATTEMPT, qs_id)
+        QS_BEGIN_PRE_(QS_QF_MPOOL_GET_ATTEMPT, qsId)
             QS_TIME_PRE_();         // timestamp
             QS_OBJ_PRE_(me);        // this memory pool
             QS_MPC_PRE_(me->nFree); // # free blocks in the pool
diff --git a/ports/esp-idf/qp_port.h b/ports/esp-idf/qp_port.h
index ed5f6667..732abe94 100644
--- a/ports/esp-idf/qp_port.h
+++ b/ports/esp-idf/qp_port.h
@@ -171,9 +171,9 @@ QEvt *QF_newXFromISR_(uint_fast16_t const evtSize,
                       uint_fast16_t const margin, enum_t const sig);
 
 void *QMPool_getFromISR(QMPool * const me, uint_fast16_t const margin,
-                        uint_fast8_t const qs_id);
+                        uint_fast8_t const qsId);
 void QMPool_putFromISR(QMPool * const me, void *block,
-                        uint_fast8_t const qs_id);
+                        uint_fast8_t const qsId);
 
 enum FreeRTOS_TaskAttrs {
     TASK_NAME_ATTR
@@ -212,10 +212,10 @@ enum FreeRTOS_TaskAttrs {
     #define QF_EPOOL_INIT_(p_, poolSto_, poolSize_, evtSize_) \
         (QMPool_init(&(p_), (poolSto_), (poolSize_), (evtSize_)))
     #define QF_EPOOL_EVENT_SIZE_(p_)  ((uint_fast16_t)(p_).blockSize)
-    #define QF_EPOOL_GET_(p_, e_, m_, qs_id_) \
-        ((e_) = (QEvt *)QMPool_get(&(p_), (m_), (qs_id_)))
-    #define QF_EPOOL_PUT_(p_, e_, qs_id_) \
-        (QMPool_put(&(p_), (e_), (qs_id_)))
+    #define QF_EPOOL_GET_(p_, e_, m_, qsId_) \
+        ((e_) = (QEvt *)QMPool_get(&(p_), (m_), (qsId_)))
+    #define QF_EPOOL_PUT_(p_, e_, qsId_) \
+        (QMPool_put(&(p_), (e_), (qsId_)))
 
 #endif // QP_IMPL
 
@@ -224,7 +224,7 @@ enum FreeRTOS_TaskAttrs {
 // This is the "experimental" port to the [Espressif ESP-IDF][1]
 // IoT Framework, which is loosely based on the [FreeRTOS kernel][2].
 //
-// "Experimental" means that the port has not been thouroughly tested at
+// "Experimental" means that the port has not been thoroughly tested at
 // Quantum Leaps and no working examples are provided.
 //
 // The [Espressif ESP-IDF][1] is based on a significantly changed version
diff --git a/ports/freertos/qf_port.c b/ports/freertos/qf_port.c
index 3042be11..cef9685d 100644
--- a/ports/freertos/qf_port.c
+++ b/ports/freertos/qf_port.c
@@ -165,9 +165,9 @@ void QActive_start_(QActive * const me,
                              ? (char const *)me->thread.pxDummy1
                              : (char const *)"AO";
 
-    // The FreeRTOS priority of the AO thread can be specificed in two ways:
+    // The FreeRTOS priority of the AO thread can be specified in two ways:
     //
-    // 1. Implictily based on the AO's priority (by the forumla specified
+    // 1. Implictily based on the AO's priority (by the formula specified
     //    in the macro FREERTOS_TASK_PRIO(), see qp_port.h). This option
     //    is chosen, when the higher-byte of the prioSpec parameter is set
     //    to zero.
@@ -179,7 +179,7 @@ void QActive_start_(QActive * const me,
     //
     //    NOTE: The explicit FreeRTOS priority is NOT sanity-checked,
     //    so it is the responsibility of the application to ensure that
-    //    it is consistent witht the AO's priority. An example of
+    //    it is consistent with the AO's priority. An example of
     //    inconsistent setting would be assigning FreeRTOS priorities that
     //    would result in a different relative priritization of AO's threads
     //    than indicated by the AO priorities assigned.
@@ -265,12 +265,12 @@ bool QActive_post_(QActive * const me, QEvt const * const e,
             QS_OBJ_PRE_(sender); // the sender object
             QS_SIG_PRE_(e->sig); // the signal of the event
             QS_OBJ_PRE_(me);     // this active object (recipient)
-            QS_2U8_PRE_(QEvt_getPoolId_(e), e->refCtr_); // pool Id&ref Count
+            QS_2U8_PRE_(QEvt_getPoolNum_(e), e->refCtr_); // poolNum & refCtr
             QS_EQC_PRE_((QEQueueCtr)nFree); // # free entries
             QS_EQC_PRE_(0U);     // min # free entries (unknown)
         QS_END_PRE_()
 
-        if (QEvt_getPoolId_(e) != 0U) { // is it a pool event?
+        if (QEvt_getPoolNum_(e) != 0U) { // is it a pool event?
             QEvt_refCtr_inc_(e); // increment the reference counter
         }
         QF_CRIT_EXIT();
@@ -289,7 +289,7 @@ bool QActive_post_(QActive * const me, QEvt const * const e,
             QS_OBJ_PRE_(sender); // the sender object
             QS_SIG_PRE_(e->sig); // the signal of the event
             QS_OBJ_PRE_(me);     // this active object (recipient)
-            QS_2U8_PRE_(QEvt_getPoolId_(e), e->refCtr_); // pool Id&ref Count
+            QS_2U8_PRE_(QEvt_getPoolNum_(e), e->refCtr_); // poolNum & refCtr
             QS_EQC_PRE_((QEQueueCtr)nFree); // # free entries
             QS_EQC_PRE_(margin); // margin requested
         QS_END_PRE_()
@@ -307,12 +307,12 @@ void QActive_postLIFO_(QActive * const me, QEvt const * const e) {
         QS_TIME_PRE_();          // timestamp
         QS_SIG_PRE_(e->sig);     // the signal of this event
         QS_OBJ_PRE_(me);         // this active object
-        QS_2U8_PRE_(QEvt_getPoolId_(e), e->refCtr_); // pool Id&ref Count
+        QS_2U8_PRE_(QEvt_getPoolNum_(e), e->refCtr_); // poolNum & refCtr
         QS_EQC_PRE_((QEQueueCtr)FREERTOS_QUEUE_GET_FREE(me)); // # free
         QS_EQC_PRE_(0U);         // min # free entries (unknown)
     QS_END_PRE_()
 
-    if (QEvt_getPoolId_(e) != 0U) { // is it a pool event?
+    if (QEvt_getPoolNum_(e) != 0U) { // is it a pool event?
         QEvt_refCtr_inc_(e); // increment the reference counter
     }
     QF_CRIT_EXIT();
@@ -336,7 +336,7 @@ QEvt const *QActive_get_(QActive * const me) {
         QS_TIME_PRE_();          // timestamp
         QS_SIG_PRE_(e->sig);     // the signal of this event
         QS_OBJ_PRE_(me);         // this active object
-        QS_2U8_PRE_(QEvt_getPoolId_(e), e->refCtr_); // pool Id&ref Count
+        QS_2U8_PRE_(QEvt_getPoolNum_(e), e->refCtr_); // poolNum & refCtr
         QS_EQC_PRE_((QEQueueCtr)FREERTOS_QUEUE_GET_FREE(me)); // # free
     QS_END_PRE_()
     QS_CRIT_EXIT();
@@ -380,12 +380,12 @@ bool QActive_postFromISR_(QActive * const me, QEvt const * const e,
             QS_OBJ_PRE_(sender); // the sender object
             QS_SIG_PRE_(e->sig); // the signal of the event
             QS_OBJ_PRE_(me);     // this active object (recipient)
-            QS_2U8_PRE_(QEvt_getPoolId_(e), e->refCtr_); // pool Id&ref Count
+            QS_2U8_PRE_(QEvt_getPoolNum_(e), e->refCtr_); // poolNum & refCtr
             QS_EQC_PRE_(nFree);  // # free entries available
             QS_EQC_PRE_(0U);     // min # free entries (unknown)
         QS_END_PRE_()
 
-        if (QEvt_getPoolId_(e) != 0U) { // is it a pool event?
+        if (QEvt_getPoolNum_(e) != 0U) { // is it a pool event?
             QEvt_refCtr_inc_(e); // increment the reference counter
         }
         portCLEAR_INTERRUPT_MASK_FROM_ISR(uxSavedInterruptStatus);
@@ -406,7 +406,7 @@ bool QActive_postFromISR_(QActive * const me, QEvt const * const e,
             QS_OBJ_PRE_(sender); // the sender object
             QS_SIG_PRE_(e->sig); // the signal of the event
             QS_OBJ_PRE_(me);     // this active object (recipient)
-            QS_2U8_PRE_(QEvt_getPoolId_(e), e->refCtr_); // pool Id&ref Count
+            QS_2U8_PRE_(QEvt_getPoolNum_(e), e->refCtr_); // poolNum & refCtr
             QS_EQC_PRE_(nFree);  // # free entries available
             QS_EQC_PRE_(margin); // margin requested
         QS_END_PRE_()
@@ -436,11 +436,11 @@ void QActive_publishFromISR_(QEvt const * const e,
         QS_TIME_PRE_();          // the timestamp
         QS_OBJ_PRE_(sender);     // the sender object
         QS_SIG_PRE_(sig);        // the signal of the event
-        QS_2U8_PRE_(QEvt_getPoolId_(e), e->refCtr_);// pool-Id & ref-Count
+        QS_2U8_PRE_(QEvt_getPoolNum_(e), e->refCtr_);// pool-Id & ref-Count
     QS_END_PRE_()
 
     // is it a dynamic event?
-    if (QEvt_getPoolId_(e) != 0U) {
+    if (QEvt_getPoolNum_(e) != 0U) {
         // NOTE: The reference counter of a dynamic event is incremented to
         // prevent premature recycling of the event while the multicasting
         // is still in progress. At the end of the function, the garbage
@@ -587,7 +587,7 @@ void QTimeEvt_tickFromISR_(uint_fast8_t const tickRate,
 QEvt *QF_newXFromISR_(uint_fast16_t const evtSize,
                       uint_fast16_t const margin, enum_t const sig)
 {
-    // find the poolId that fits the requested event size ...
+    // find the poolNum that fits the requested event size ...
     uint_fast8_t idx;
     for (idx = 0U; idx < QF_priv_.maxPool_; ++idx) {
         if (evtSize <= QF_EPOOL_EVENT_SIZE_(QF_priv_.ePool_[idx])) {
@@ -648,7 +648,7 @@ QEvt *QF_newXFromISR_(uint_fast16_t const evtSize,
 //............................................................................
 void QF_gcFromISR(QEvt const * const e) {
     // is it a dynamic event?
-    if (QEvt_getPoolId_(e) != 0U) {
+    if (QEvt_getPoolNum_(e) != 0U) {
         UBaseType_t uxSavedInterruptStatus = portSET_INTERRUPT_MASK_FROM_ISR();
 
         // isn't this the last ref?
@@ -656,22 +656,22 @@ void QF_gcFromISR(QEvt const * const e) {
             QEvt_refCtr_dec_(e); // decrement the ref counter
 
             QS_BEGIN_PRE_(QS_QF_GC_ATTEMPT,
-                          (uint_fast8_t)QEvt_getPoolId_(e))
+                          (uint_fast8_t)QEvt_getPoolNum_(e))
                 QS_TIME_PRE_();      // timestamp
                 QS_SIG_PRE_(e->sig); // the signal of the event
-                QS_2U8_PRE_(QEvt_getPoolId_(e), e->refCtr_);//pool-Id&ref-Count
+                QS_2U8_PRE_(QEvt_getPoolNum_(e), e->refCtr_);//pool-Id&ref-Count
             QS_END_PRE_()
 
             portCLEAR_INTERRUPT_MASK_FROM_ISR(uxSavedInterruptStatus);
         }
         // this is the last reference to this event, recycle it
         else {
-            uint_fast8_t idx = (uint_fast8_t)QEvt_getPoolId_(e) - 1U;
+            uint_fast8_t idx = (uint_fast8_t)QEvt_getPoolNum_(e) - 1U;
 
-            QS_BEGIN_PRE_(QS_QF_GC, (uint_fast8_t)QEvt_getPoolId_(e))
+            QS_BEGIN_PRE_(QS_QF_GC, (uint_fast8_t)QEvt_getPoolNum_(e))
                 QS_TIME_PRE_();         // timestamp
                 QS_SIG_PRE_(e->sig);    // the signal of the event
-                QS_2U8_PRE_(QEvt_getPoolId_(e), e->refCtr_);//pool-Id&ref-Count
+                QS_2U8_PRE_(QEvt_getPoolNum_(e), e->refCtr_);//pool-Id&ref-Count
             QS_END_PRE_()
 
             // pool ID must be in range
@@ -682,7 +682,7 @@ void QF_gcFromISR(QEvt const * const e) {
 #ifdef Q_SPY
             // cast 'const' away in (QEvt *)e is OK because it's a pool event
             QMPool_putFromISR(&QF_priv_.ePool_[idx], (QEvt *)e,
-                              (uint_fast8_t)QS_EP_ID + QEvt_getPoolId_(e));
+                              (uint_fast8_t)QS_EP_ID + QEvt_getPoolNum_(e));
 #else
             QMPool_putFromISR(&QF_priv_.ePool_[idx], (QEvt *)e, 0U);
 #endif
@@ -691,10 +691,10 @@ void QF_gcFromISR(QEvt const * const e) {
 }
 //............................................................................
 void QMPool_putFromISR(QMPool * const me, void *block,
-                        uint_fast8_t const qs_id)
+                        uint_fast8_t const qsId)
 {
 #ifndef Q_SPY
-    Q_UNUSED_PAR(qs_id);
+    Q_UNUSED_PAR(qsId);
 #endif
 
     QFreeBlock * const fb = (QFreeBlock *)block;
@@ -715,7 +715,7 @@ void QMPool_putFromISR(QMPool * const me, void *block,
     me->free_head = fb; // set as new head of the free list
     ++me->nFree;        // one more free block in this pool
 
-    QS_BEGIN_PRE_(QS_QF_MPOOL_PUT, qs_id)
+    QS_BEGIN_PRE_(QS_QF_MPOOL_PUT, qsId)
         QS_TIME_PRE_();         // timestamp
         QS_OBJ_PRE_(me);        // this memory pool
         QS_MPC_PRE_(me->nFree); // the number of free blocks in the pool
@@ -725,10 +725,10 @@ void QMPool_putFromISR(QMPool * const me, void *block,
 }
 //............................................................................
 void *QMPool_getFromISR(QMPool * const me, uint_fast16_t const margin,
-                        uint_fast8_t const qs_id)
+                        uint_fast8_t const qsId)
 {
 #ifndef Q_SPY
-    Q_UNUSED_PAR(qs_id);
+    Q_UNUSED_PAR(qsId);
 #endif
 
     UBaseType_t uxSavedInterruptStatus = portSET_INTERRUPT_MASK_FROM_ISR();
@@ -774,7 +774,7 @@ void *QMPool_getFromISR(QMPool * const me, uint_fast16_t const margin,
 
         me->free_head = fb_next; // set the head to the next free block
 
-        QS_BEGIN_PRE_(QS_QF_MPOOL_GET, qs_id)
+        QS_BEGIN_PRE_(QS_QF_MPOOL_GET, qsId)
             QS_TIME_PRE_();         // timestamp
             QS_OBJ_PRE_(me);        // this memory pool
             QS_MPC_PRE_(me->nFree); // # free blocks in the pool
@@ -784,7 +784,7 @@ void *QMPool_getFromISR(QMPool * const me, uint_fast16_t const margin,
     else { // don't have enough free blocks at this point
         fb = (QFreeBlock *)0;
 
-        QS_BEGIN_PRE_(QS_QF_MPOOL_GET_ATTEMPT, qs_id)
+        QS_BEGIN_PRE_(QS_QF_MPOOL_GET_ATTEMPT, qsId)
             QS_TIME_PRE_();         // timestamp
             QS_OBJ_PRE_(me);        // this memory pool
             QS_MPC_PRE_(me->nFree); // # free blocks in the pool
diff --git a/ports/freertos/qp_port.h b/ports/freertos/qp_port.h
index 19af867c..62abfac4 100644
--- a/ports/freertos/qp_port.h
+++ b/ports/freertos/qp_port.h
@@ -160,9 +160,9 @@ QEvt *QF_newXFromISR_(uint_fast16_t const evtSize,
                       uint_fast16_t const margin, enum_t const sig);
 
 void *QMPool_getFromISR(QMPool * const me, uint_fast16_t const margin,
-                        uint_fast8_t const qs_id);
+                        uint_fast8_t const qsId);
 void QMPool_putFromISR(QMPool * const me, void *block,
-                        uint_fast8_t const qs_id);
+                        uint_fast8_t const qsId);
 
 enum FreeRTOS_TaskAttrs {
     TASK_NAME_ATTR
@@ -201,10 +201,10 @@ enum FreeRTOS_TaskAttrs {
     #define QF_EPOOL_INIT_(p_, poolSto_, poolSize_, evtSize_) \
         (QMPool_init(&(p_), (poolSto_), (poolSize_), (evtSize_)))
     #define QF_EPOOL_EVENT_SIZE_(p_)  ((uint_fast16_t)(p_).blockSize)
-    #define QF_EPOOL_GET_(p_, e_, m_, qs_id_) \
-        ((e_) = (QEvt *)QMPool_get(&(p_), (m_), (qs_id_)))
-    #define QF_EPOOL_PUT_(p_, e_, qs_id_) \
-        (QMPool_put(&(p_), (e_), (qs_id_)))
+    #define QF_EPOOL_GET_(p_, e_, m_, qsId_) \
+        ((e_) = (QEvt *)QMPool_get(&(p_), (m_), (qsId_)))
+    #define QF_EPOOL_PUT_(p_, e_, qsId_) \
+        (QMPool_put(&(p_), (e_), (qsId_)))
 
 #endif // QP_IMPL
 
diff --git a/ports/lint-plus/qpc.lnt b/ports/lint-plus/qpc.lnt
index 2d6a87b1..cb9681b8 100644
--- a/ports/lint-plus/qpc.lnt
+++ b/ports/lint-plus/qpc.lnt
@@ -43,7 +43,7 @@
  -qxk.h,
  -qs.h)
 
-// Functinal Safety (FuSa) System --------------------------------------------
+// Functional Safety (FuSa) System --------------------------------------------
 
 // "no return" semantics for error/failure callbacks
 -sem(Q_onError, r_no)
diff --git a/ports/lint-plus/std.lnt b/ports/lint-plus/std.lnt
index 5e6957c7..722f7106 100644
--- a/ports/lint-plus/std.lnt
+++ b/ports/lint-plus/std.lnt
@@ -27,7 +27,6 @@
 //!
 //! @file
 //! @brief PC-Lint-Plus standard option file
-//! @ingroup lint
 
 // message formatting options...
 -hF1            // output: a single line
diff --git a/ports/msp430/qutest/qp_port.h b/ports/msp430/qutest/qp_port.h
index 9ffe295b..c6f3b044 100644
--- a/ports/msp430/qutest/qp_port.h
+++ b/ports/msp430/qutest/qp_port.h
@@ -104,10 +104,10 @@
     #define QF_EPOOL_INIT_(p_, poolSto_, poolSize_, evtSize_) \
         (QMPool_init(&(p_), (poolSto_), (poolSize_), (evtSize_)))
     #define QF_EPOOL_EVENT_SIZE_(p_)  ((uint_fast16_t)(p_).blockSize)
-    #define QF_EPOOL_GET_(p_, e_, m_, qs_id_) \
-        ((e_) = (QEvt *)QMPool_get(&(p_), (m_), (qs_id_)))
-    #define QF_EPOOL_PUT_(p_, e_, qs_id_) \
-        (QMPool_put(&(p_), (e_), (qs_id_)))
+    #define QF_EPOOL_GET_(p_, e_, m_, qsId_) \
+        ((e_) = (QEvt *)QMPool_get(&(p_), (m_), (qsId_)))
+    #define QF_EPOOL_PUT_(p_, e_, qsId_) \
+        (QMPool_put(&(p_), (e_), (qsId_)))
 
 #endif // QP_IMPL
 
diff --git a/ports/pic32/qutest/xc32/qp_port.h b/ports/pic32/qutest/xc32/qp_port.h
index f505488d..799f8e7d 100644
--- a/ports/pic32/qutest/xc32/qp_port.h
+++ b/ports/pic32/qutest/xc32/qp_port.h
@@ -96,9 +96,9 @@
     #define QF_EPOOL_INIT_(p_, poolSto_, poolSize_, evtSize_) \
         (QMPool_init(&(p_), (poolSto_), (poolSize_), (evtSize_)))
     #define QF_EPOOL_EVENT_SIZE_(p_)  ((uint_fast16_t)(p_).blockSize)
-    #define QF_EPOOL_GET_(p_, e_, m_, qs_id_) \
-        ((e_) = (QEvt *)QMPool_get(&(p_), (m_), (qs_id_)))
-    #define QF_EPOOL_PUT_(p_, e_, qs_id_) (QMPool_put(&(p_), (e_), (qs_id_)))
+    #define QF_EPOOL_GET_(p_, e_, m_, qsId_) \
+        ((e_) = (QEvt *)QMPool_get(&(p_), (m_), (qsId_)))
+    #define QF_EPOOL_PUT_(p_, e_, qsId_) (QMPool_put(&(p_), (e_), (qsId_)))
 
 #endif // QP_IMPL
 
diff --git a/ports/posix-qutest/README.md b/ports/posix-qutest/README.md
deleted file mode 100644
index fc2423e7..00000000
--- a/ports/posix-qutest/README.md
+++ /dev/null
@@ -1,5 +0,0 @@
-# POSIX port for the QUTest unit testing harness
-
-Documentation for this port is available in the QP/C Manual at:
-
-- https://www.state-machine.com/qpc/posix-qutest.html
diff --git a/ports/posix-qutest/qp_port.h b/ports/posix-qutest/qp_port.h
index a8863560..0f413313 100644
--- a/ports/posix-qutest/qp_port.h
+++ b/ports/posix-qutest/qp_port.h
@@ -94,10 +94,10 @@
     #define QF_EPOOL_INIT_(p_, poolSto_, poolSize_, evtSize_) \
         (QMPool_init(&(p_), (poolSto_), (poolSize_), (evtSize_)))
     #define QF_EPOOL_EVENT_SIZE_(p_)  ((uint_fast16_t)(p_).blockSize)
-    #define QF_EPOOL_GET_(p_, e_, m_, qs_id_) \
-        ((e_) = (QEvt *)QMPool_get(&(p_), (m_), (qs_id_)))
-    #define QF_EPOOL_PUT_(p_, e_, qs_id_) \
-        (QMPool_put(&(p_), (e_), (qs_id_)))
+    #define QF_EPOOL_GET_(p_, e_, m_, qsId_) \
+        ((e_) = (QEvt *)QMPool_get(&(p_), (m_), (qsId_)))
+    #define QF_EPOOL_PUT_(p_, e_, qsId_) \
+        (QMPool_put(&(p_), (e_), (qsId_)))
 
 #endif // QP_IMPL
 
diff --git a/ports/posix-qv/qf_port.c b/ports/posix-qv/qf_port.c
index 6e0ad04b..89e2fc36 100644
--- a/ports/posix-qv/qf_port.c
+++ b/ports/posix-qv/qf_port.c
@@ -180,7 +180,7 @@ int QF_run(void) {
 
         // SCHED_FIFO corresponds to real-time preemptive priority-based
         // scheduler.
-        // NOTE: This scheduling policy requires the superuser priviledges
+        // NOTE: This scheduling policy requires the superuser privileges
         pthread_attr_setschedpolicy (&attr, SCHED_FIFO);
         pthread_attr_setinheritsched(&attr, PTHREAD_EXPLICIT_SCHED);
         pthread_attr_setdetachstate (&attr, PTHREAD_CREATE_DETACHED);
diff --git a/ports/posix-qv/qp_port.h b/ports/posix-qv/qp_port.h
index de009827..3e6f5aad 100644
--- a/ports/posix-qv/qp_port.h
+++ b/ports/posix-qv/qp_port.h
@@ -109,10 +109,10 @@ int QF_consoleWaitForKey(void);
     #define QF_EPOOL_INIT_(p_, poolSto_, poolSize_, evtSize_) \
         (QMPool_init(&(p_), (poolSto_), (poolSize_), (evtSize_)))
     #define QF_EPOOL_EVENT_SIZE_(p_)  ((uint_fast16_t)(p_).blockSize)
-    #define QF_EPOOL_GET_(p_, e_, m_, qs_id_) \
-        ((e_) = (QEvt *)QMPool_get(&(p_), (m_), (qs_id_)))
-    #define QF_EPOOL_PUT_(p_, e_, qs_id_) \
-        (QMPool_put(&(p_), (e_), (qs_id_)))
+    #define QF_EPOOL_GET_(p_, e_, m_, qsId_) \
+        ((e_) = (QEvt *)QMPool_get(&(p_), (m_), (qsId_)))
+    #define QF_EPOOL_PUT_(p_, e_, qsId_) \
+        (QMPool_put(&(p_), (e_), (qsId_)))
 
     #include  // POSIX-thread API
 
@@ -134,7 +134,7 @@ int QF_consoleWaitForKey(void);
 //
 // These functions are implemented in the qf_port.c module, where they
 // manipulate the file-scope POSIX mutex object l_critSectMutex_
-// to protect all critical sections. Using the single mutex for all crtical
+// to protect all critical sections. Using the single mutex for all critical
 // section guarantees that only one thread at a time can execute inside a
 // critical section. This prevents race conditions and data corruption.
 //
diff --git a/ports/posix/qp_port.h b/ports/posix/qp_port.h
index 5cace26a..e3b1c019 100644
--- a/ports/posix/qp_port.h
+++ b/ports/posix/qp_port.h
@@ -109,10 +109,10 @@ int QF_consoleWaitForKey(void);
     #define QF_EPOOL_INIT_(p_, poolSto_, poolSize_, evtSize_) \
         (QMPool_init(&(p_), (poolSto_), (poolSize_), (evtSize_)))
     #define QF_EPOOL_EVENT_SIZE_(p_)  ((uint_fast16_t)(p_).blockSize)
-    #define QF_EPOOL_GET_(p_, e_, m_, qs_id_) \
-        ((e_) = (QEvt *)QMPool_get(&(p_), (m_), (qs_id_)))
-    #define QF_EPOOL_PUT_(p_, e_, qs_id_) \
-        (QMPool_put(&(p_), (e_), (qs_id_)))
+    #define QF_EPOOL_GET_(p_, e_, m_, qsId_) \
+        ((e_) = (QEvt *)QMPool_get(&(p_), (m_), (qsId_)))
+    #define QF_EPOOL_PUT_(p_, e_, qsId_) \
+        (QMPool_put(&(p_), (e_), (qsId_)))
 
     // mutex for QF critical section
     extern pthread_mutex_t QF_critSectMutex_;
@@ -132,7 +132,7 @@ int QF_consoleWaitForKey(void);
 //
 // These functions are implemented in the qf_port.c module, where they
 // manipulate the file-scope POSIX mutex object QF_critSectMutex_
-// to protect all critical sections. Using the single mutex for all crtical
+// to protect all critical sections. Using the single mutex for all critical
 // section guarantees that only one thread at a time can execute inside a
 // critical section. This prevents race conditions and data corruption.
 //
diff --git a/ports/qube/qp_port.h b/ports/qube/qp_port.h
index 06b88cfe..316c5c77 100644
--- a/ports/qube/qp_port.h
+++ b/ports/qube/qp_port.h
@@ -100,10 +100,10 @@ extern uint_fast8_t QF_intLock_;
     #define QF_EPOOL_INIT_(p_, poolSto_, poolSize_, evtSize_) \
         (QMPool_init(&(p_), (poolSto_), (poolSize_), (evtSize_)))
     #define QF_EPOOL_EVENT_SIZE_(p_)  ((uint_fast16_t)(p_).blockSize)
-    #define QF_EPOOL_GET_(p_, e_, m_, qs_id_) \
-        ((e_) = (QEvt *)QMPool_get(&(p_), (m_), (qs_id_)))
-    #define QF_EPOOL_PUT_(p_, e_, qs_id_) \
-        (QMPool_put(&(p_), (e_), (qs_id_)))
+    #define QF_EPOOL_GET_(p_, e_, m_, qsId_) \
+        ((e_) = (QEvt *)QMPool_get(&(p_), (m_), (qsId_)))
+    #define QF_EPOOL_PUT_(p_, e_, qsId_) \
+        (QMPool_put(&(p_), (e_), (qsId_)))
 
     #include "qp_pkg.h" // internal QP interface
 
diff --git a/ports/threadx/qf_port.c b/ports/threadx/qf_port.c
index fcc758c6..82cf0cf1 100644
--- a/ports/threadx/qf_port.c
+++ b/ports/threadx/qf_port.c
@@ -165,12 +165,12 @@ bool QActive_post_(QActive * const me, QEvt const * const e,
             QS_OBJ_PRE_(sender);  // the sender object
             QS_SIG_PRE_(e->sig);  // the signal of the event
             QS_OBJ_PRE_(me);      // this active object (recipient)
-            QS_2U8_PRE_(QEvt_getPoolId_(e), e->refCtr_); // pool-Id&ref-Count
+            QS_2U8_PRE_(QEvt_getPoolNum_(e), e->refCtr_); // pool-Id&ref-Count
             QS_EQC_PRE_(nFree);   // # free entries available
             QS_EQC_PRE_(0U);      // min # free entries (unknown)
         QS_END_PRE_()
 
-        if (QEvt_getPoolId_(e) != 0U) { // is it a pool event?
+        if (QEvt_getPoolNum_(e) != 0U) { // is it a pool event?
             QEvt_refCtr_inc_(e); // increment the reference counter
         }
         QF_CRIT_EXIT();
@@ -189,7 +189,7 @@ bool QActive_post_(QActive * const me, QEvt const * const e,
             QS_OBJ_PRE_(sender);  // the sender object
             QS_SIG_PRE_(e->sig);  // the signal of the event
             QS_OBJ_PRE_(me);      // this active object (recipient)
-            QS_2U8_PRE_(QEvt_getPoolId_(e), e->refCtr_); // pool-Id&ref-Count
+            QS_2U8_PRE_(QEvt_getPoolNum_(e), e->refCtr_); // pool-Id&ref-Count
             QS_EQC_PRE_(nFree);   // # free entries available
             QS_EQC_PRE_(0U);      // min # free entries (unknown)
         QS_END_PRE_()
@@ -208,12 +208,12 @@ void QActive_postLIFO_(QActive * const me, QEvt const * const e) {
         QS_TIME_PRE_();       // timestamp
         QS_SIG_PRE_(e->sig);  // the signal of this event
         QS_OBJ_PRE_(me);      // this active object
-        QS_2U8_PRE_(QEvt_getPoolId_(e), e->refCtr_); // pool-Id&ref-Count
+        QS_2U8_PRE_(QEvt_getPoolNum_(e), e->refCtr_); // pool-Id&ref-Count
         QS_EQC_PRE_(me->eQueue.tx_queue_available_storage); // # free
         QS_EQC_PRE_(0U);      // min # free entries (unknown)
     QS_END_PRE_()
 
-    if (QEvt_getPoolId_(e) != 0U) { // is it a pool event?
+    if (QEvt_getPoolNum_(e) != 0U) { // is it a pool event?
         QEvt_refCtr_inc_(e); // increment the reference counter
     }
     QF_CRIT_EXIT();
@@ -238,7 +238,7 @@ QEvt const *QActive_get_(QActive * const me) {
         QS_TIME_PRE_();       // timestamp
         QS_SIG_PRE_(e->sig);  // the signal of this event
         QS_OBJ_PRE_(me);      // this active object
-        QS_2U8_PRE_(QEvt_getPoolId_(e), e->refCtr_); // pool-Id&ref-Count
+        QS_2U8_PRE_(QEvt_getPoolNum_(e), e->refCtr_); // pool-Id&ref-Count
         QS_EQC_PRE_(me->eQueue.tx_queue_available_storage);// # free
     QS_END_PRE_()
     QF_CRIT_EXIT();
diff --git a/ports/threadx/qp_port.h b/ports/threadx/qp_port.h
index 57c313b2..69c30128 100644
--- a/ports/threadx/qp_port.h
+++ b/ports/threadx/qp_port.h
@@ -108,10 +108,10 @@ enum ThreadX_ThreadAttrs {
     #define QF_EPOOL_INIT_(p_, poolSto_, poolSize_, evtSize_) \
         (QMPool_init(&(p_), (poolSto_), (poolSize_), (evtSize_)))
     #define QF_EPOOL_EVENT_SIZE_(p_)  ((uint_fast16_t)(p_).blockSize)
-    #define QF_EPOOL_GET_(p_, e_, m_, qs_id_) \
-        ((e_) = (QEvt *)QMPool_get(&(p_), (m_), (qs_id_)))
-    #define QF_EPOOL_PUT_(p_, e_, qs_id_) \
-        (QMPool_put(&(p_), (e_), (qs_id_)))
+    #define QF_EPOOL_GET_(p_, e_, m_, qsId_) \
+        ((e_) = (QEvt *)QMPool_get(&(p_), (m_), (qsId_)))
+    #define QF_EPOOL_PUT_(p_, e_, qsId_) \
+        (QMPool_put(&(p_), (e_), (qsId_)))
 
 #endif // QP_IMPL
 
diff --git a/ports/uc-os2/qf_port.c b/ports/uc-os2/qf_port.c
index 0c53f84e..4c8e993a 100644
--- a/ports/uc-os2/qf_port.c
+++ b/ports/uc-os2/qf_port.c
@@ -109,7 +109,7 @@ void QActive_start_(QActive * const me, QPrioSpec const prioSpec,
     QS_FLUSH(); // flush the trace buffer to the host
 
     // map from QP to uC-OS2 priority
-    // The uC-OS2 priority of the AO thread can be specificed in two ways:
+    // The uC-OS2 priority of the AO thread can be specified in two ways:
     //
     // 1. Implictily based on the AO's priority (uC-OS2 uses the reverse
     //    priority numbering scheme than QP). This option is chosen when
@@ -122,7 +122,7 @@ void QActive_start_(QActive * const me, QPrioSpec const prioSpec,
     //
     //    NOTE: The explicit uC-OS2 priority is NOT sanity-checked,
     //    so it is the responsibility of the application to ensure that
-    //    it is consistent witht the AO's priority. An example of
+    //    it is consistent with the AO's priority. An example of
     //    inconsistent setting would be assigning uC-OS2 priorities that
     //    would result in a different relative priritization of AO's threads
     //    than indicated by the AO priorities assigned.
@@ -215,12 +215,12 @@ bool QActive_post_(QActive * const me, QEvt const * const e,
             QS_OBJ_PRE_(sender); // the sender object
             QS_SIG_PRE_(e->sig); // the signal of the event
             QS_OBJ_PRE_(me);     // this active object (recipient)
-            QS_2U8_PRE_(QEvt_getPoolId_(e), e->refCtr_);// pool-Id & ref-Count
+            QS_2U8_PRE_(QEvt_getPoolNum_(e), e->refCtr_);// pool-Id & ref-Count
             QS_EQC_PRE_(nFree);  // # free entries
             QS_EQC_PRE_(0U);     // min # free entries (unknown)
         QS_END_PRE_()
 
-        if (QEvt_getPoolId_(e) != 0U) {  // is it a pool event?
+        if (QEvt_getPoolNum_(e) != 0U) {  // is it a pool event?
             QEvt_refCtr_inc_(e); // increment the reference counter
         }
 
@@ -240,7 +240,7 @@ bool QActive_post_(QActive * const me, QEvt const * const e,
             QS_OBJ_PRE_(sender); // the sender object
             QS_SIG_PRE_(e->sig); // the signal of the event
             QS_OBJ_PRE_(me);     // this active object (recipient)
-            QS_2U8_PRE_(QEvt_getPoolId_(e), e->refCtr_);// pool-Id & ref-Count
+            QS_2U8_PRE_(QEvt_getPoolNum_(e), e->refCtr_);// pool-Id & ref-Count
             QS_EQC_PRE_(nFree);  // # free entries available
             QS_EQC_PRE_(margin); // margin requested
         QS_END_PRE_()
@@ -259,13 +259,13 @@ void QActive_postLIFO_(QActive * const me, QEvt const * const e) {
         QS_TIME_PRE_();      // timestamp
         QS_SIG_PRE_(e->sig); // the signal of this event
         QS_OBJ_PRE_(me);     // this active object
-        QS_2U8_PRE_(QEvt_getPoolId_(e), e->refCtr_); // pool-Id & ref-Count
+        QS_2U8_PRE_(QEvt_getPoolNum_(e), e->refCtr_); // pool-Id & ref-Count
         QS_EQC_PRE_(((OS_Q *)me->eQueue)->OSQSize
                      - ((OS_Q *)me->eQueue)->OSQEntries); // # free entries
         QS_EQC_PRE_(0U);     // min # free entries (unknown)
     QS_END_PRE_()
 
-    if (QEvt_getPoolId_(e) != 0U) {  // is it a pool event?
+    if (QEvt_getPoolNum_(e) != 0U) {  // is it a pool event?
         QEvt_refCtr_inc_(e); // increment the reference counter
     }
     QF_CRIT_EXIT();
@@ -290,7 +290,7 @@ QEvt const *QActive_get_(QActive * const me) {
         QS_TIME_PRE_();      // timestamp
         QS_SIG_PRE_(e->sig); // the signal of this event
         QS_OBJ_PRE_(me);     // this active object
-        QS_2U8_PRE_(QEvt_getPoolId_(e), e->refCtr_); // pool-Id & ref-Count
+        QS_2U8_PRE_(QEvt_getPoolNum_(e), e->refCtr_); // pool-Id & ref-Count
         QS_EQC_PRE_(((OS_Q *)me->eQueue)->OSQSize
                     - ((OS_Q *)me->eQueue)->OSQEntries); // # free entries
     QS_END_PRE_()
diff --git a/ports/uc-os2/qp_port.h b/ports/uc-os2/qp_port.h
index 2c746ac5..56e75d00 100644
--- a/ports/uc-os2/qp_port.h
+++ b/ports/uc-os2/qp_port.h
@@ -98,10 +98,10 @@ enum UCOS2_TaskAttrs {
     #define QF_EPOOL_INIT_(p_, poolSto_, poolSize_, evtSize_) \
         (QMPool_init(&(p_), (poolSto_), (poolSize_), (evtSize_)))
     #define QF_EPOOL_EVENT_SIZE_(p_)  ((uint_fast16_t)(p_).blockSize)
-    #define QF_EPOOL_GET_(p_, e_, m_, qs_id_) \
-        ((e_) = (QEvt *)QMPool_get(&(p_), (m_), (qs_id_)))
-    #define QF_EPOOL_PUT_(p_, e_, qs_id_) \
-        (QMPool_put(&(p_), (e_), (qs_id_)))
+    #define QF_EPOOL_GET_(p_, e_, m_, qsId_) \
+        ((e_) = (QEvt *)QMPool_get(&(p_), (m_), (qsId_)))
+    #define QF_EPOOL_PUT_(p_, e_, qsId_) \
+        (QMPool_put(&(p_), (e_), (qsId_)))
 
 #endif // QP_IMPL
 
diff --git a/ports/win32-qutest/qp_port.h b/ports/win32-qutest/qp_port.h
index f1e93598..e800e2cc 100644
--- a/ports/win32-qutest/qp_port.h
+++ b/ports/win32-qutest/qp_port.h
@@ -126,10 +126,10 @@
     #define QF_EPOOL_INIT_(p_, poolSto_, poolSize_, evtSize_) \
         (QMPool_init(&(p_), (poolSto_), (poolSize_), (evtSize_)))
     #define QF_EPOOL_EVENT_SIZE_(p_)  ((uint_fast16_t)(p_).blockSize)
-    #define QF_EPOOL_GET_(p_, e_, m_, qs_id_) \
-        ((e_) = (QEvt *)QMPool_get(&(p_), (m_), (qs_id_)))
-    #define QF_EPOOL_PUT_(p_, e_, qs_id_) \
-        (QMPool_put(&(p_), (e_), (qs_id_)))
+    #define QF_EPOOL_GET_(p_, e_, m_, qsId_) \
+        ((e_) = (QEvt *)QMPool_get(&(p_), (m_), (qsId_)))
+    #define QF_EPOOL_PUT_(p_, e_, qsId_) \
+        (QMPool_put(&(p_), (e_), (qsId_)))
 
 #endif // QP_IMPL
 
diff --git a/ports/win32-qv/qp_port.h b/ports/win32-qv/qp_port.h
index f32c55b2..f2cf8b2a 100644
--- a/ports/win32-qv/qp_port.h
+++ b/ports/win32-qv/qp_port.h
@@ -149,10 +149,10 @@ int QF_consoleWaitForKey(void);
     #define QF_EPOOL_INIT_(p_, poolSto_, poolSize_, evtSize_) \
         (QMPool_init(&(p_), (poolSto_), (poolSize_), (evtSize_)))
     #define QF_EPOOL_EVENT_SIZE_(p_)  ((uint_fast16_t)(p_).blockSize)
-    #define QF_EPOOL_GET_(p_, e_, m_, qs_id_) \
-        ((e_) = (QEvt *)QMPool_get(&(p_), (m_), (qs_id_)))
-    #define QF_EPOOL_PUT_(p_, e_, qs_id_) \
-        (QMPool_put(&(p_), (e_), (qs_id_)))
+    #define QF_EPOOL_GET_(p_, e_, m_, qsId_) \
+        ((e_) = (QEvt *)QMPool_get(&(p_), (m_), (qsId_)))
+    #define QF_EPOOL_PUT_(p_, e_, qsId_) \
+        (QMPool_put(&(p_), (e_), (qsId_)))
 
     // Minimum required Windows version is Windows-XP or newer (0x0501)
     #ifdef WINVER
diff --git a/ports/win32/qp_port.h b/ports/win32/qp_port.h
index b322a309..df06f61b 100644
--- a/ports/win32/qp_port.h
+++ b/ports/win32/qp_port.h
@@ -144,10 +144,10 @@ int QF_consoleWaitForKey(void);
     #define QF_EPOOL_INIT_(p_, poolSto_, poolSize_, evtSize_) \
         (QMPool_init(&(p_), (poolSto_), (poolSize_), (evtSize_)))
     #define QF_EPOOL_EVENT_SIZE_(p_)  ((uint_fast16_t)(p_).blockSize)
-    #define QF_EPOOL_GET_(p_, e_, m_, qs_id_) \
-        ((e_) = (QEvt *)QMPool_get(&(p_), (m_), (qs_id_)))
-    #define QF_EPOOL_PUT_(p_, e_, qs_id_) \
-        (QMPool_put(&(p_), (e_), (qs_id_)))
+    #define QF_EPOOL_GET_(p_, e_, m_, qsId_) \
+        ((e_) = (QEvt *)QMPool_get(&(p_), (m_), (qsId_)))
+    #define QF_EPOOL_PUT_(p_, e_, qsId_) \
+        (QMPool_put(&(p_), (e_), (qsId_)))
 
     // Minimum required Windows version is Windows-XP or newer (0x0501)
     #ifdef WINVER
diff --git a/qpc.md5 b/qpc.md5
index 6c83f0e5..4b00f130 100644
--- a/qpc.md5
+++ b/qpc.md5
@@ -1,74 +1,74 @@
-90fc8a980af695bfa3f988013add92d3 *qpc.qm
-6cc951a51c096b15fb4bd5bbe6858f5c *include/qequeue.h
-09cc5d96f3104f0e4e9a97a1a97f50cc *include/qk.h
-c0f2b4afbe4ad5b3c983d13a2aef8286 *include/qmpool.h
-ffd2bb1a17621dd96d1818453d3d7007 *include/qp.h
-839a5d76aaf1295e2de5bb244969f797 *include/qp_pkg.h
-9744614cdf886408baecbe3e25c93bd1 *include/qpc.h
-4fd36843783d0ef22edab24c1d4e8a84 *include/qs.h
-9f1a378f4d3da832ab82d6852854790f *include/qs_dummy.h
-2cd5e647af390579448fe43c4e14cd66 *include/qs_pkg.h
-2a36b08d4f3ec92da6ae6f7c18ad83ca *include/qsafe.h
-7579f1ca5b11222be505572dbb503611 *include/qstamp.h
-9d37db5c9d302e467d959d1f503c98b1 *include/qv.h
-e62d2e1a594016cd6abeb202acc1df22 *include/qxk.h
-aa4beb0c1c489d339f81acdf97fa02ed *src/qf/qep_hsm.c
-e6f86be36d260d4d29eacf2e5cf96af6 *src/qf/qep_msm.c
-719f0b4942629f3a1c7ccaeb0bb9f899 *src/qf/qf_act.c
-1df4ac38d5b5dd4db072803289844b34 *src/qf/qf_actq.c
-6f9aa15e2a7520b5e3109e6ed4577f9f *src/qf/qf_defer.c
-c8566cd72695b34dd8dbb3cc4181495b *src/qf/qf_dyn.c
-66fb9f47942a9531993a608e419033da *src/qf/qf_mem.c
-c7212f7311a26fa254d27c05a5e114dd *src/qf/qf_ps.c
-611e2e312e81fd4641efa440566ed7b5 *src/qf/qf_qact.c
-727c67bd41ce3df2a0bb0c56e1626159 *src/qf/qf_qeq.c
-c794ac103dbd43249bc468d5bfbeb0f5 *src/qf/qf_qmact.c
-d94385d52a42a10a89ed8dd0c04d03ba *src/qf/qf_time.c
-5154d4020f0aa85b3f88010539891a1a *src/qk/qk.c
-88d9f4f833f51932d903ec5d2f0b419d *src/qs/qs.c
-43467d9dca59bcc1f4c1448423c9f537 *src/qs/qs_64bit.c
-42ece61af726200df85aca054fb69372 *src/qs/qs_fp.c
-5d8d31897278491e20ae9c1af346a931 *src/qs/qs_rx.c
-f6ef223fdf21a5ef90adb9df128f6a8f *src/qs/qstamp.c
-beed46faa74b149daed4fc21f5566fb5 *src/qs/qutest.c
-ce6a8898d316894034d05a4aca855927 *src/qv/qv.c
-0c0eada51c939f24e355ec27bf94e654 *src/qxk/qxk.c
-62030a8233e326ca50b6a8b64fe2aaca *src/qxk/qxk_mutex.c
-ed71aaed42e2456c5ea7104d2e07e86b *src/qxk/qxk_sema.c
-a8f8dcfaa7e640b124810ed98d7d9d83 *src/qxk/qxk_xthr.c
-873d55917e4e42f50f3efc6b9a1ad2b7 *ports/arm-cm/qk/armclang/qk_port.c
+8f57ad06ae82e52288164c731756cfae *qpc.qm
+f71fdc0261b7d7e1693f7cf92b269fc0 *include/qequeue.h
+57b1efebccde23a26f9d11e822ec379f *include/qk.h
+807f80a7a39be52083010803f76b4f05 *include/qmpool.h
+964486b8759f24c3f9cb6c0316e81fdc *include/qp.h
+e7b6c999b10d91f5c1adf1fde500e452 *include/qp_pkg.h
+37d55c70130d7829f2b7a25c900e9512 *include/qpc.h
+87627d74247ab8df33a6dba061dcbb84 *include/qs.h
+66f8bd1303a72346f52fbcccfd363586 *include/qs_dummy.h
+fad2d5ccd173e6374f4bce243709eef7 *include/qs_pkg.h
+c33f022827668e991f2b9f212493036e *include/qsafe.h
+990a963045e6485091658b0eea0a9dbd *include/qstamp.h
+431c6e320c14f0b02dbc78e2d49f6431 *include/qv.h
+7845e9391f7a94311fd849da56abd8a1 *include/qxk.h
+55345b1f15c31a8aea30f70f619c71ea *src/qf/qep_hsm.c
+5a4d0c5209d3761dff037ad9dd2304ca *src/qf/qep_msm.c
+762cba96738f7e3fe4ebd66659542b30 *src/qf/qf_act.c
+78ad6e00669d2888ceef6e6d84e83e55 *src/qf/qf_actq.c
+858f4abf264ab69734b4df56b0bfa739 *src/qf/qf_defer.c
+6b6af500d498521cb754651ba7118f03 *src/qf/qf_dyn.c
+bc3e5d7fcb172fee6881f993160502eb *src/qf/qf_mem.c
+4642cd0eaf88ca3012439bb95a43d8b8 *src/qf/qf_ps.c
+5a1d0999864f48a688d34e9273868e8b *src/qf/qf_qact.c
+a34020507dc261f49eaaaf2062dcb81d *src/qf/qf_qeq.c
+f9867335faa23f0b57c921c8882e7a52 *src/qf/qf_qmact.c
+b0531b1989555c6b7d128e112f4f3c39 *src/qf/qf_time.c
+f5b5ef77f45d50a6450efd85995287c7 *src/qk/qk.c
+ce79546bbd75aa7d1b5cb60ef0868d92 *src/qs/qs.c
+9091ffd15f7ec791076091bb17eec5fc *src/qs/qs_64bit.c
+730d9bea159722e5d2c225e01b5c7875 *src/qs/qs_fp.c
+d980e9cceeea9d49f926fb11cd6ba2d6 *src/qs/qs_rx.c
+80a31dfc0e24839342fe193779401e7b *src/qs/qstamp.c
+53ab2ae396c90e41045b019cdfea21b5 *src/qs/qutest.c
+df8818b82672a7b9b2daa6a73e52036f *src/qv/qv.c
+8d2e28ffb1c8c670924de4c987fb35df *src/qxk/qxk.c
+f65131e2a680cc2f419f43437e1f873a *src/qxk/qxk_mutex.c
+214032bca5ddd45690cf3ca67f9f86c3 *src/qxk/qxk_sema.c
+c72e1cc89263ebda9462ca6fb8b04326 *src/qxk/qxk_xthr.c
+8f1b876266fb274386670d94d0ba0fa2 *ports/arm-cm/qk/armclang/qk_port.c
 5fcbb1d62dcc33ad8e0f38dfcf6f88a3 *ports/arm-cm/qk/armclang/qp_port.h
 f6c251ec335af215b842ff2ef686e93f *ports/arm-cm/qk/armclang/qs_port.h
-76ac27ae7b33b9c84561c6140cf2fa89 *ports/arm-cm/qk/config/qp_config.h
-c8c8942455818922dd8cc2bb21fe136d *ports/arm-cm/qk/gnu/qk_port.c
+5112a0c22478899fe2f06136257b4f14 *ports/arm-cm/qk/config/qp_config.h
+116b6f9ac224fe5d60f0bfe0f8a4f9f0 *ports/arm-cm/qk/gnu/qk_port.c
 12847297533c3226ccf66f189df8b4ca *ports/arm-cm/qk/gnu/qp_port.h
 f6c251ec335af215b842ff2ef686e93f *ports/arm-cm/qk/gnu/qs_port.h
-5a13a1e828e51ab70749b65bac2da6e7 *ports/arm-cm/qk/iar/qk_port.c
+ca7328d9e59618ce34a118d936e1b269 *ports/arm-cm/qk/iar/qk_port.c
 a5152099566e2b5f43787d67d5d86aef *ports/arm-cm/qk/iar/qp_port.h
 f6c251ec335af215b842ff2ef686e93f *ports/arm-cm/qk/iar/qs_port.h
 a13c0887eb882d089ec5cb57c8f755ac *ports/arm-cm/qv/armclang/qp_port.h
 f6c251ec335af215b842ff2ef686e93f *ports/arm-cm/qv/armclang/qs_port.h
-8aa1d92d93bbc54bbc881a0ecc035860 *ports/arm-cm/qv/armclang/qv_port.c
-6dc814aae7a65a6c9f151c6c2d077e16 *ports/arm-cm/qv/config/qp_config.h
+277f97c6a850930b54c02e83a99e9663 *ports/arm-cm/qv/armclang/qv_port.c
+b69e5ac1cde60ce0eda00d853048270e *ports/arm-cm/qv/config/qp_config.h
 6213045e2390e7a59644f40e1aaa189c *ports/arm-cm/qv/gnu/qp_port.h
 f6c251ec335af215b842ff2ef686e93f *ports/arm-cm/qv/gnu/qs_port.h
-5094485a6b14856ea14f523be704d56a *ports/arm-cm/qv/gnu/qv_port.c
+1c87a822c4d802784342b58803261cdc *ports/arm-cm/qv/gnu/qv_port.c
 517ee111b0df9926e6ba3d30be5210ea *ports/arm-cm/qv/iar/qp_port.h
 f6c251ec335af215b842ff2ef686e93f *ports/arm-cm/qv/iar/qs_port.h
-13e57e92ba30ab8bb697a914cabcffcb *ports/arm-cm/qv/iar/qv_port.c
+867217f77f0c6cdb0a82a964a7027510 *ports/arm-cm/qv/iar/qv_port.c
 40058ac0609321670e6e7816670e97af *ports/arm-cm/qxk/armclang/qp_port.h
 f6c251ec335af215b842ff2ef686e93f *ports/arm-cm/qxk/armclang/qs_port.h
-ae587133b180bdb5506d18faf64e9b52 *ports/arm-cm/qxk/armclang/qxk_port.c
-d71bcb2761640bf3e95da47972805ad8 *ports/arm-cm/qxk/config/qp_config.h
+666a153de8cd8b7747531199d1bcbde1 *ports/arm-cm/qxk/armclang/qxk_port.c
+31c4cd8ad90ea6517df1d4054033fe03 *ports/arm-cm/qxk/config/qp_config.h
 35ec850c15f42e2eab924d06bf2d4165 *ports/arm-cm/qxk/gnu/qp_port.h
 a0699895649b5d644e4068794b0e94dc *ports/arm-cm/qxk/gnu/qs_port.h
-fca301449f83a519a3c7e311da25303b *ports/arm-cm/qxk/gnu/qxk_port.c
+d31561dc804f1394bc19ef218bd491f9 *ports/arm-cm/qxk/gnu/qxk_port.c
 9145c3ae665b20e224bd91406668754c *ports/arm-cm/qxk/iar/qp_port.h
 f6c251ec335af215b842ff2ef686e93f *ports/arm-cm/qxk/iar/qs_port.h
-baa978074b1e87bcd5c227ca9a7445ca *ports/arm-cm/qxk/iar/qxk_port.c
-f2a30b03ee9c2c0e1133976ee1e14b72 *ports/arm-cm/qutest/qp_port.h
+9ac3d417ea66352f7ab8dd724e448ff5 *ports/arm-cm/qxk/iar/qxk_port.c
+b08b183d0275dbf6b55c46b94523a1a2 *ports/arm-cm/qutest/qp_port.h
 c755db99d10db142bcb98018f55e2b7a *ports/arm-cm/qutest/qs_port.h
-435664bf6d59fd321cdab9bc59f3225d *ports/arm-cr/qk/config/qp_config.h
+829261756c701d26e742005c59cd25f7 *ports/arm-cr/qk/config/qp_config.h
 957f53c5d716ee9f88d4d8b7418f8757 *ports/arm-cr/qk/gnu/qp_port.h
 2d756fbf15d4c00837320a329eddf065 *ports/arm-cr/qk/gnu/qs_port.h
 6a6a54ca44b045c2977cfaf621d32836 *ports/arm-cr/qk/iar/qp_port.h
@@ -85,51 +85,50 @@ e7b34d68bbf61b9e5c1706c8c2e2b4d3 *ports/arm-cr/qv/iar/qp_port.h
 dd181f9664fbe39a2900b99493a06191 *ports/msp430/qk/qs_port.h
 3c7664e8ee8739bdd42bda3020ce5364 *ports/msp430/qv/qp_port.h
 dd181f9664fbe39a2900b99493a06191 *ports/msp430/qv/qs_port.h
-36e96bdca741c0fcde6562d843998861 *ports/msp430/qutest/qp_port.h
+07306e4b15b72b175365e26568ea6e3d *ports/msp430/qutest/qp_port.h
 dd181f9664fbe39a2900b99493a06191 *ports/msp430/qutest/qs_port.h
 c2ed34e686a5ac9afe06026731247bf4 *ports/pic32/qk/xc32/qk_port.c
 e9dbc68a7233a4303a068b562be12049 *ports/pic32/qk/xc32/qp_port.h
 2d756fbf15d4c00837320a329eddf065 *ports/pic32/qk/xc32/qs_port.h
 ab9eacbab706ff105144eddecde681e0 *ports/pic32/qv/xc32/qp_port.h
 2d756fbf15d4c00837320a329eddf065 *ports/pic32/qv/xc32/qs_port.h
-91ca74cbac601ea77b9ffac46c44d68c *ports/pic32/qutest/xc32/qp_port.h
+33c16b6ecad7187219fc6195fbd566da *ports/pic32/qutest/xc32/qp_port.h
 2d756fbf15d4c00837320a329eddf065 *ports/pic32/qutest/xc32/qs_port.h
-bd9096e08c29f2b0fd2a5e83743d89df *ports/config/qp_config.h
-2f9351770bf8fb3a7c41a98dc13f46f6 *ports/embos/qf_port.c
-e858f83bd95f19d41443810e209befdc *ports/embos/qp_port.h
+3d35c4a4377708ef2493dfd4e63e074a *ports/config/qp_config.h
+acf19d8d939b7e12fca90be762e7c377 *ports/embos/qf_port.c
+d5f7e75934bd283d4fa239afee096e78 *ports/embos/qp_port.h
 75df7abe15807abb5e7bf5ec08116aff *ports/embos/qs_port.h
-959e595357a0c62b7b3c6dde08c887d0 *ports/freertos/qf_port.c
-2f23e1356ef64095771c4dcc896e7890 *ports/freertos/qp_port.h
+21610b5e0eaccb85d82c7edb74fc32dc *ports/freertos/qf_port.c
+672615c0e1e9daab9aec12c300682f58 *ports/freertos/qp_port.h
 2d756fbf15d4c00837320a329eddf065 *ports/freertos/qs_port.h
-318b73a8a574b8c2c9f212402f8d0d7b *ports/threadx/qf_port.c
-52331cb3732a082bbda9fba6b6d8564b *ports/threadx/qp_port.h
+b80df6c2ee6fc3ec6d7a4bf08963ec01 *ports/threadx/qf_port.c
+74570b4afbf0281af9638778781bda0b *ports/threadx/qp_port.h
 96a132818a53ac1c6e46ace36dc75663 *ports/threadx/qs_port.h
 97dbc9c6b8b0c2b46499b9070688dd3c *ports/threadx/README.md
-4c2ef995035b4c902d9429c5b4e5e0b0 *ports/uc-os2/qf_port.c
-b5f2aef2bd916c0c35eebb3b1e55bc7a *ports/uc-os2/qp_port.h
+cc34f3f5ffa004831362473563cd345a *ports/uc-os2/qf_port.c
+b9be2bca2c48d39a43e4b3d059376b6a *ports/uc-os2/qp_port.h
 96a132818a53ac1c6e46ace36dc75663 *ports/uc-os2/qs_port.h
 6ce09e456ded120d13d73a92e022fa3d *ports/qep-only/qp_port.h
 f26311a1912e214477781255c7c71834 *ports/qep-only/safe_std.h
 a414bb9f4041c7922665be37ec0d956b *ports/posix/qf_port.c
-daa86cfb2a67ff8679ac4921ac0ba542 *ports/posix/qp_port.h
+0b352c2c249025bf2170da1511a86f7a *ports/posix/qp_port.h
 5902d6c50e3d3e87c4cbeb66485c01c9 *ports/posix/qs_port.c
 306c23ae37e9b02f2f37f2d21331f28d *ports/posix/qs_port.h
 6690cf3899e6461ed7604dba13cf7520 *ports/posix/README.md
 f26311a1912e214477781255c7c71834 *ports/posix/safe_std.h
-bf05c408b544eec04afa8d53c5a423b7 *ports/posix-qv/qf_port.c
-b54e6fd734021f59024c255ed857b569 *ports/posix-qv/qp_port.h
+22f52ec6aa8747480be913beb48c878b *ports/posix-qv/qf_port.c
+1b3dd279c28c5deaf2cb19ebc9752afe *ports/posix-qv/qp_port.h
 94d91c859c62fd464f6ce61c9d4e82b1 *ports/posix-qv/qs_port.c
 306c23ae37e9b02f2f37f2d21331f28d *ports/posix-qv/qs_port.h
 a39965a1d1c41b224c8f328c9e28999b *ports/posix-qv/README.md
 f26311a1912e214477781255c7c71834 *ports/posix-qv/safe_std.h
-0c4c8b4b614528d34e4d8be10836d5c9 *ports/posix-qutest/qp_port.h
+2ec8125e0cbaf03c06c679d698ec6a32 *ports/posix-qutest/qp_port.h
 306c23ae37e9b02f2f37f2d21331f28d *ports/posix-qutest/qs_port.h
 8b594d58ad38f7584f8c5338a3301c4e *ports/posix-qutest/qutest_port.c
-7ad8c6857cb58384a1d124f48c0d7501 *ports/posix-qutest/README.md
 f26311a1912e214477781255c7c71834 *ports/posix-qutest/safe_std.h
 cd0040a8cc2c6051b2f8ea42f798d601 *ports/win32/Makefile
 c5f08f89a2e411deba21ae2b74ffe2b5 *ports/win32/qf_port.c
-d3d1743ecb60a4d464310da0238c07e0 *ports/win32/qp_port.h
+f38ed7afd094da1b58b743a0801481da *ports/win32/qp_port.h
 89eb564328782d13956434f5d6a00ebf *ports/win32/qs_port.c
 018ec5ae698a31c6fb0f2c002194c5bd *ports/win32/qs_port.h
 635a4a93c62e4b3501c5e3371a08cd65 *ports/win32/qwin_gui.c
@@ -137,14 +136,14 @@ a8f227294c6673a22b050e1165a911e3 *ports/win32/qwin_gui.h
 9af4450a3685e578e1774e5b707f6692 *ports/win32/README.md
 f26311a1912e214477781255c7c71834 *ports/win32/safe_std.h
 646ee957d104969de8723498b412dd73 *ports/win32-qv/qf_port.c
-0a699a7aaaa710eb7a6670389d698aa0 *ports/win32-qv/qp_port.h
+5a695487a4a7d57f1d68f0815e751ad7 *ports/win32-qv/qp_port.h
 89eb564328782d13956434f5d6a00ebf *ports/win32-qv/qs_port.c
 018ec5ae698a31c6fb0f2c002194c5bd *ports/win32-qv/qs_port.h
 c935dbe9f32dd4d0584d4b47bc734d19 *ports/win32-qv/qwin_gui.c
 37499e3a99c8c38d52d9b61be19319b7 *ports/win32-qv/qwin_gui.h
 4cb22092a4b28d1c1b2efc1e58900b99 *ports/win32-qv/README.md
 f26311a1912e214477781255c7c71834 *ports/win32-qv/safe_std.h
-b7e27e6064994b2ac28de538fc980e0c *ports/win32-qutest/qp_port.h
+f9f1dfd9b7c2f0ce7b2c5928da09b123 *ports/win32-qutest/qp_port.h
 018ec5ae698a31c6fb0f2c002194c5bd *ports/win32-qutest/qs_port.h
 90efc263d134af535c528d7b88a7bb1e *ports/win32-qutest/qutest_port.c
 faed3388f63c9ec3dca2a5c6cf808a95 *ports/win32-qutest/README.md
@@ -152,7 +151,8 @@ f26311a1912e214477781255c7c71834 *ports/win32-qutest/safe_std.h
 2d72fa12f8a0c05bd23c0fc4fa41838c *zephyr/CMakeLists.txt
 1c41081d80b88d187161f56605d1ea64 *zephyr/Kconfig
 2140500a5b230057a2a6ed4b613f6353 *zephyr/module.yml
-194564d5aa6b66d01ec1e8d39482889e *zephyr/qf_port.c
-b00a40d7a66418fd8e7cae14babdc2b5 *zephyr/qp_port.h
+f167809c37f879a55cbc113e0e4d6ef6 *zephyr/qf_port.c
+0076e0da63938ff838dd5736b6a309da *zephyr/qp-zephyr.jpg
+4332e3b86722b1ccfed1dd134889fcac *zephyr/qp_port.h
 64b537ae433a0d0c0949c4bca7b45603 *zephyr/qs_port.h
-7079ec76204f2aab68c2202b9e9070c3 *zephyr/README.md
+ba08c605b0c369326884f9006464666f *zephyr/README.md
diff --git a/qpc.qm b/qpc.qm
index 6f0c76d6..19fedab9 100644
--- a/qpc.qm
+++ b/qpc.qm
@@ -1,5 +1,5 @@
 
-
+
  QP/C Real-Time Embedded Framework (RTEF)
 This model is used to generate the whole QP/C source code.
 
@@ -292,7 +292,7 @@ return me;
        && ((me->evtTag_ & 0xF0U) == QEVT_MARKER);
    
    
-   
+   
     const
     //! @private @memberof QEvt
 
@@ -420,9 +420,9 @@ me->temp.fun  = Q_STATE_CAST(0);
   
    {
     void (*init)(QAsm * const me, void const * const e,
-                 uint_fast8_t const qs_id);
+                 uint_fast8_t const qsId);
     void (*dispatch)(QAsm * const me, QEvt const * const e,
-                     uint_fast8_t const qs_id);
+                     uint_fast8_t const qsId);
     bool (*isIn)(QAsm * const me, QStateHandler const s);
 
 #ifdef Q_SPY
@@ -466,8 +466,8 @@ me->super.temp.fun  = initial;
     
     
     
-    
-    
+    
+    
     QF_CRIT_STAT
 
 #ifdef Q_SPY
@@ -484,7 +484,7 @@ else {
     QS_CRIT_EXIT();
 }
 #else
-Q_UNUSED_PAR(qs_id);
+Q_UNUSED_PAR(qsId);
 #endif
 
 QStateHandler t = me->state.fun;
@@ -503,7 +503,7 @@ QF_CRIT_ENTRY();
 Q_ASSERT_INCRIT(210, r == Q_RET_TRAN);
 
 QS_MEM_SYS();
-QS_BEGIN_PRE_(QS_QEP_STATE_INIT, qs_id)
+QS_BEGIN_PRE_(QS_QEP_STATE_INIT, qsId)
     QS_OBJ_PRE_(me);           // this state machine object
     QS_FUN_PRE_(t);            // the source state
     QS_FUN_PRE_(me->temp.fun); // the target of the initial tran.
@@ -535,7 +535,7 @@ do {
         if (QHSM_RESERVED_EVT_(path[ip], Q_ENTRY_SIG)
             == Q_RET_HANDLED)
         {
-            QS_STATE_ENTRY_(path[ip], qs_id);
+            QS_STATE_ENTRY_(path[ip], qsId);
         }
         --ip;
     } while (ip >= 0);
@@ -548,7 +548,7 @@ do {
     if (r == Q_RET_TRAN) {
         QS_CRIT_ENTRY();
         QS_MEM_SYS();
-        QS_BEGIN_PRE_(QS_QEP_STATE_INIT, qs_id)
+        QS_BEGIN_PRE_(QS_QEP_STATE_INIT, qsId)
             QS_OBJ_PRE_(me);           // this state machine object
             QS_FUN_PRE_(t);            // the source state
             QS_FUN_PRE_(me->temp.fun); // the target of the initial tran.
@@ -562,7 +562,7 @@ do {
 
 QS_CRIT_ENTRY();
 QS_MEM_SYS();
-QS_BEGIN_PRE_(QS_QEP_INIT_TRAN, qs_id)
+QS_BEGIN_PRE_(QS_QEP_INIT_TRAN, qsId)
     QS_TIME_PRE_();    // time stamp
     QS_OBJ_PRE_(me);   // this state machine object
     QS_FUN_PRE_(t);    // the new active state
@@ -584,10 +584,10 @@ me->temp.uint = ~me->state.uint;
     
     
     
-    
-    
+    
+    
     #ifndef Q_SPY
-Q_UNUSED_PAR(qs_id);
+Q_UNUSED_PAR(qsId);
 #endif
 
 QStateHandler s = me->state.fun;
@@ -600,7 +600,7 @@ Q_REQUIRE_INCRIT(300, (s != Q_STATE_CAST(0))
 Q_REQUIRE_INCRIT(302, QEvt_verify_(e));
 
 QS_MEM_SYS();
-QS_BEGIN_PRE_(QS_QEP_DISPATCH, qs_id)
+QS_BEGIN_PRE_(QS_QEP_DISPATCH, qsId)
     QS_TIME_PRE_();      // time stamp
     QS_SIG_PRE_(e->sig); // the signal of the event
     QS_OBJ_PRE_(me);     // this state machine object
@@ -621,7 +621,7 @@ do {
 
         QS_CRIT_ENTRY();
         QS_MEM_SYS();
-        QS_BEGIN_PRE_(QS_QEP_UNHANDLED, qs_id)
+        QS_BEGIN_PRE_(QS_QEP_UNHANDLED, qsId)
             QS_SIG_PRE_(e->sig); // the signal of the event
             QS_OBJ_PRE_(me);     // this state machine object
             QS_FUN_PRE_(s);      // the current state
@@ -644,18 +644,18 @@ if (r >= Q_RET_TRAN) { // regular tran. taken?
     for (; t != s; t = me->temp.fun) {
         // exit from t
         if (QHSM_RESERVED_EVT_(t, Q_EXIT_SIG) == Q_RET_HANDLED) {
-            QS_STATE_EXIT_(t, qs_id);
+            QS_STATE_EXIT_(t, qsId);
             // find superstate of t
             (void)QHSM_RESERVED_EVT_(t, Q_EMPTY_SIG);
         }
     }
-    int_fast8_t ip = QHsm_tran_(me, path, qs_id); // take the tran.
+    int_fast8_t ip = QHsm_tran_(me, path, qsId); // take the tran.
 
 #ifdef Q_SPY
     if (r == Q_RET_TRAN_HIST) {
         QS_CRIT_ENTRY();
         QS_MEM_SYS();
-        QS_BEGIN_PRE_(QS_QEP_TRAN_HIST, qs_id)
+        QS_BEGIN_PRE_(QS_QEP_TRAN_HIST, qsId)
             QS_OBJ_PRE_(me);      // this state machine object
             QS_FUN_PRE_(t);       // the source of the tran.
             QS_FUN_PRE_(path[0]); // the target of the tran. to history
@@ -671,7 +671,7 @@ if (r >= Q_RET_TRAN) { // regular tran. taken?
         if (QHSM_RESERVED_EVT_(path[ip], Q_ENTRY_SIG)
             == Q_RET_HANDLED)
         {
-            QS_STATE_ENTRY_(path[ip], qs_id);
+            QS_STATE_ENTRY_(path[ip], qsId);
         }
     }
     t = path[0];      // stick the target into register
@@ -682,7 +682,7 @@ if (r >= Q_RET_TRAN) { // regular tran. taken?
 
         QS_CRIT_ENTRY();
         QS_MEM_SYS();
-        QS_BEGIN_PRE_(QS_QEP_STATE_INIT, qs_id)
+        QS_BEGIN_PRE_(QS_QEP_STATE_INIT, qsId)
             QS_OBJ_PRE_(me);           // this state machine object
             QS_FUN_PRE_(t);            // the source (pseudo)state
             QS_FUN_PRE_(me->temp.fun); // the target of the tran.
@@ -715,7 +715,7 @@ if (r >= Q_RET_TRAN) { // regular tran. taken?
             if (QHSM_RESERVED_EVT_(path[ip], Q_ENTRY_SIG)
                 == Q_RET_HANDLED)
             {
-                QS_STATE_ENTRY_(path[ip], qs_id);
+                QS_STATE_ENTRY_(path[ip], qsId);
             }
             --ip;
         } while (ip >= 0);
@@ -725,7 +725,7 @@ if (r >= Q_RET_TRAN) { // regular tran. taken?
 
     QS_CRIT_ENTRY();
     QS_MEM_SYS();
-    QS_BEGIN_PRE_(QS_QEP_TRAN, qs_id)
+    QS_BEGIN_PRE_(QS_QEP_TRAN, qsId)
         QS_TIME_PRE_();      // time stamp
         QS_SIG_PRE_(e->sig); // the signal of the event
         QS_OBJ_PRE_(me);     // this state machine object
@@ -740,7 +740,7 @@ if (r >= Q_RET_TRAN) { // regular tran. taken?
 else if (r == Q_RET_HANDLED) {
     QS_CRIT_ENTRY();
     QS_MEM_SYS();
-    QS_BEGIN_PRE_(QS_QEP_INTERN_TRAN, qs_id)
+    QS_BEGIN_PRE_(QS_QEP_INTERN_TRAN, qsId)
         QS_TIME_PRE_();      // time stamp
         QS_SIG_PRE_(e->sig); // the signal of the event
         QS_OBJ_PRE_(me);     // this state machine object
@@ -752,7 +752,7 @@ else if (r == Q_RET_HANDLED) {
 else {
     QS_CRIT_ENTRY();
     QS_MEM_SYS();
-    QS_BEGIN_PRE_(QS_QEP_IGNORED, qs_id)
+    QS_BEGIN_PRE_(QS_QEP_IGNORED, qsId)
         QS_TIME_PRE_();      // time stamp
         QS_SIG_PRE_(e->sig); // the signal of the event
         QS_OBJ_PRE_(me);     // this state machine object
@@ -872,10 +872,10 @@ return child; // return the child
     
     
     
-    
-    
+    
+    
     #ifndef Q_SPY
-Q_UNUSED_PAR(qs_id);
+Q_UNUSED_PAR(qsId);
 #endif
 
 int_fast8_t ip = -1; // tran. entry path index
@@ -887,7 +887,7 @@ QF_CRIT_STAT
 if (s == t) {
     // exit source s
     if (QHSM_RESERVED_EVT_(s, Q_EXIT_SIG) == Q_RET_HANDLED) {
-        QS_STATE_EXIT_(s, qs_id);
+        QS_STATE_EXIT_(s, qsId);
     }
     ip = 0; // enter the target
 }
@@ -909,7 +909,7 @@ else {
         if (me->temp.fun == t) {
             // exit source s
             if (QHSM_RESERVED_EVT_(s, Q_EXIT_SIG) == Q_RET_HANDLED) {
-                QS_STATE_EXIT_(s, qs_id);
+                QS_STATE_EXIT_(s, qsId);
             }
             ip = 0; // enter the target
         }
@@ -918,7 +918,7 @@ else {
             if (me->temp.fun == path[0]) {
                 // exit source s
                 if (QHSM_RESERVED_EVT_(s, Q_EXIT_SIG) == Q_RET_HANDLED) {
-                    QS_STATE_EXIT_(s, qs_id);
+                    QS_STATE_EXIT_(s, qsId);
                 }
             }
             else {
@@ -960,7 +960,7 @@ else {
                     if (QHSM_RESERVED_EVT_(s, Q_EXIT_SIG)
                         == Q_RET_HANDLED)
                     {
-                        QS_STATE_EXIT_(s, qs_id);
+                        QS_STATE_EXIT_(s, qsId);
                     }
 
                     // (f) check the rest of source->super
@@ -988,7 +988,7 @@ else {
                             if (QHSM_RESERVED_EVT_(t, Q_EXIT_SIG)
                                 == Q_RET_HANDLED)
                             {
-                                QS_STATE_EXIT_(t, qs_id);
+                                QS_STATE_EXIT_(t, qsId);
                                 // find superstate of t
                                 (void)QHSM_RESERVED_EVT_(t, Q_EMPTY_SIG);
                             }
@@ -1032,7 +1032,7 @@ return Q_RET_IGNORED; // the top state ignores all events
    //! @class QMsm
 //! @extends QAsm
 
-State machine implementation strategy requring support
+State machine implementation strategy requiring support
 of a code generating tool and generally NOT suitable
 for manual coding
    
@@ -1064,10 +1064,10 @@ me->super.temp.fun  = initial;      // the initial tran. handler
     
     
     
-    
-    
+    
+    
     #ifndef Q_SPY
-Q_UNUSED_PAR(qs_id);
+Q_UNUSED_PAR(qsId);
 #endif
 
 QF_CRIT_STAT
@@ -1085,7 +1085,7 @@ QF_CRIT_ENTRY();
 Q_ASSERT_INCRIT(210, r == Q_RET_TRAN_INIT);
 
 QS_MEM_SYS();
-QS_BEGIN_PRE_(QS_QEP_STATE_INIT, qs_id)
+QS_BEGIN_PRE_(QS_QEP_STATE_INIT, qsId)
     QS_OBJ_PRE_(me); // this state machine object
     QS_FUN_PRE_(me->state.obj->stateHandler);          // source state
     QS_FUN_PRE_(me->temp.tatbl->target->stateHandler); // target state
@@ -1100,12 +1100,12 @@ me->state.obj = me->temp.tatbl->target;
 // drill down into the state hierarchy with initial transitions...
 do {
     // execute the tran. table
-    r = QMsm_execTatbl_(me, me->temp.tatbl, qs_id);
+    r = QMsm_execTatbl_(me, me->temp.tatbl, qsId);
 } while (r >= Q_RET_TRAN_INIT);
 
 QS_CRIT_ENTRY();
 QS_MEM_SYS();
-QS_BEGIN_PRE_(QS_QEP_INIT_TRAN, qs_id)
+QS_BEGIN_PRE_(QS_QEP_INIT_TRAN, qsId)
     QS_TIME_PRE_();    // time stamp
     QS_OBJ_PRE_(me);   // this state machine object
     QS_FUN_PRE_(me->state.obj->stateHandler); // the new current state
@@ -1126,10 +1126,10 @@ me->temp.uint = ~me->state.uint;
     
     
     
-    
-    
+    
+    
     #ifndef Q_SPY
-Q_UNUSED_PAR(qs_id);
+Q_UNUSED_PAR(qsId);
 #endif
 
 QMState const *s = me->state.obj; // store the current state
@@ -1142,7 +1142,7 @@ Q_REQUIRE_INCRIT(300, (s != (QMState *)0)
 Q_REQUIRE_INCRIT(302, QEvt_verify_(e));
 
 QS_MEM_SYS();
-QS_BEGIN_PRE_(QS_QEP_DISPATCH, qs_id)
+QS_BEGIN_PRE_(QS_QEP_DISPATCH, qsId)
     QS_TIME_PRE_();               // time stamp
     QS_SIG_PRE_(e->sig);          // the signal of the event
     QS_OBJ_PRE_(me);              // this state machine object
@@ -1175,7 +1175,7 @@ do {
         Q_ASSERT_INCRIT(310, r == Q_RET_UNHANDLED);
 
         QS_MEM_SYS();
-        QS_BEGIN_PRE_(QS_QEP_UNHANDLED, qs_id)
+        QS_BEGIN_PRE_(QS_QEP_UNHANDLED, qsId)
             QS_SIG_PRE_(e->sig);  // the signal of the event
             QS_OBJ_PRE_(me);      // this state machine object
             QS_FUN_PRE_(t->stateHandler); // the current state
@@ -1206,17 +1206,17 @@ if (r >= Q_RET_TRAN) { // any kind of tran. taken?
         // was TRAN, TRAN_INIT, or TRAN_EP taken?
         if (r <= Q_RET_TRAN_EP) {
             me->temp.obj = (QMState *)0; // clear
-            QMsm_exitToTranSource_(me, s, t, qs_id);
-            r = QMsm_execTatbl_(me, tatbl, qs_id);
+            QMsm_exitToTranSource_(me, s, t, qsId);
+            r = QMsm_execTatbl_(me, tatbl, qsId);
             s = me->state.obj;
         }
         // was a tran. segment to history taken?
         else if (r == Q_RET_TRAN_HIST) {
             tmp.obj = me->state.obj; // save history
             me->state.obj = s; // restore the original state
-            QMsm_exitToTranSource_(me, s, t, qs_id);
-            (void)QMsm_execTatbl_(me, tatbl, qs_id);
-            r = QMsm_enterHistory_(me, tmp.obj, qs_id);
+            QMsm_exitToTranSource_(me, s, t, qsId);
+            (void)QMsm_execTatbl_(me, tatbl, qsId);
+            r = QMsm_enterHistory_(me, tmp.obj, qsId);
             s = me->state.obj;
         }
         else {
@@ -1232,9 +1232,9 @@ if (r >= Q_RET_TRAN) { // any kind of tran. taken?
 #ifdef Q_SPY
                 tmp.tatbl = me->temp.tatbl; // save me->temp
 #endif // Q_SPY
-                QMsm_exitToTranSource_(me, s, t, qs_id);
+                QMsm_exitToTranSource_(me, s, t, qsId);
                 // take the tran-to-XP segment inside submachine
-                (void)QMsm_execTatbl_(me, tatbl, qs_id);
+                (void)QMsm_execTatbl_(me, tatbl, qsId);
                 s = me->state.obj;
 #ifdef Q_SPY
                 me->temp.tatbl = tmp.tatbl; // restore me->temp
@@ -1244,9 +1244,9 @@ if (r >= Q_RET_TRAN) { // any kind of tran. taken?
                 tmp.obj = me->state.obj; // save the history
                 me->state.obj = s; // restore the original state
                 s = me->temp.obj; // save me->temp
-                QMsm_exitToTranSource_(me, me->state.obj, t, qs_id);
+                QMsm_exitToTranSource_(me, me->state.obj, t, qsId);
                 // take the tran-to-XP segment inside submachine
-                (void)QMsm_execTatbl_(me, tatbl, qs_id);
+                (void)QMsm_execTatbl_(me, tatbl, qsId);
 #ifdef Q_SPY
                 me->temp.obj = s; // restore me->temp
 #endif // Q_SPY
@@ -1267,7 +1267,7 @@ if (r >= Q_RET_TRAN) { // any kind of tran. taken?
 
     QS_CRIT_ENTRY();
     QS_MEM_SYS();
-    QS_BEGIN_PRE_(QS_QEP_TRAN, qs_id)
+    QS_BEGIN_PRE_(QS_QEP_TRAN, qsId)
         QS_TIME_PRE_();                 // time stamp
         QS_SIG_PRE_(e->sig);            // the signal of the event
         QS_OBJ_PRE_(me);                // this state machine object
@@ -1286,7 +1286,7 @@ else if (r == Q_RET_HANDLED) {
     Q_ASSERT_INCRIT(340, t != (QMState *)0);
 
     QS_MEM_SYS();
-    QS_BEGIN_PRE_(QS_QEP_INTERN_TRAN, qs_id)
+    QS_BEGIN_PRE_(QS_QEP_INTERN_TRAN, qsId)
         QS_TIME_PRE_();                 // time stamp
         QS_SIG_PRE_(e->sig);            // the signal of the event
         QS_OBJ_PRE_(me);                // this state machine object
@@ -1300,7 +1300,7 @@ else if (r == Q_RET_HANDLED) {
 else if (t == (QMState *)0) {
     QS_CRIT_ENTRY();
     QS_MEM_SYS();
-    QS_BEGIN_PRE_(QS_QEP_IGNORED, qs_id)
+    QS_BEGIN_PRE_(QS_QEP_IGNORED, qsId)
         QS_TIME_PRE_();                 // time stamp
         QS_SIG_PRE_(e->sig);            // the signal of the event
         QS_OBJ_PRE_(me);                // this state machine object
@@ -1440,10 +1440,10 @@ return child; // return the child
     
     
     
-    
-    
+    
+    
     #ifndef Q_SPY
-Q_UNUSED_PAR(qs_id);
+Q_UNUSED_PAR(qsId);
 #endif
 
 QF_CRIT_STAT
@@ -1463,33 +1463,33 @@ for (QActionHandler const *a = &tatbl->act[0];
     QS_CRIT_ENTRY();
     QS_MEM_SYS();
     if (r == Q_RET_ENTRY) {
-        QS_BEGIN_PRE_(QS_QEP_STATE_ENTRY, qs_id)
+        QS_BEGIN_PRE_(QS_QEP_STATE_ENTRY, qsId)
             QS_OBJ_PRE_(me); // this state machine object
             QS_FUN_PRE_(me->temp.obj->stateHandler); // entered state
         QS_END_PRE_()
     }
     else if (r == Q_RET_EXIT) {
-        QS_BEGIN_PRE_(QS_QEP_STATE_EXIT, qs_id)
+        QS_BEGIN_PRE_(QS_QEP_STATE_EXIT, qsId)
             QS_OBJ_PRE_(me); // this state machine object
             QS_FUN_PRE_(me->temp.obj->stateHandler); // exited state
         QS_END_PRE_()
     }
     else if (r == Q_RET_TRAN_INIT) {
-        QS_BEGIN_PRE_(QS_QEP_STATE_INIT, qs_id)
+        QS_BEGIN_PRE_(QS_QEP_STATE_INIT, qsId)
             QS_OBJ_PRE_(me); // this state machine object
             QS_FUN_PRE_(tatbl->target->stateHandler);          // source
             QS_FUN_PRE_(me->temp.tatbl->target->stateHandler); // target
         QS_END_PRE_()
     }
     else if (r == Q_RET_TRAN_EP) {
-        QS_BEGIN_PRE_(QS_QEP_TRAN_EP, qs_id)
+        QS_BEGIN_PRE_(QS_QEP_TRAN_EP, qsId)
             QS_OBJ_PRE_(me); // this state machine object
             QS_FUN_PRE_(tatbl->target->stateHandler);          // source
             QS_FUN_PRE_(me->temp.tatbl->target->stateHandler); // target
         QS_END_PRE_()
     }
     else if (r == Q_RET_TRAN_XP) {
-        QS_BEGIN_PRE_(QS_QEP_TRAN_XP, qs_id)
+        QS_BEGIN_PRE_(QS_QEP_TRAN_XP, qsId)
             QS_OBJ_PRE_(me); // this state machine object
             QS_FUN_PRE_(tatbl->target->stateHandler);          // source
             QS_FUN_PRE_(me->temp.tatbl->target->stateHandler); // target
@@ -1519,10 +1519,10 @@ return r;
     
     
     
-    
-    
+    
+    
     #ifndef Q_SPY
-Q_UNUSED_PAR(qs_id);
+Q_UNUSED_PAR(qsId);
 #endif
 
 QF_CRIT_STAT
@@ -1537,7 +1537,7 @@ while (s != ts) {
 
         QS_CRIT_ENTRY();
         QS_MEM_SYS();
-        QS_BEGIN_PRE_(QS_QEP_STATE_EXIT, qs_id)
+        QS_BEGIN_PRE_(QS_QEP_STATE_EXIT, qsId)
             QS_OBJ_PRE_(me);              // this state machine object
             QS_FUN_PRE_(s->stateHandler); // the exited state handler
         QS_END_PRE_()
@@ -1564,10 +1564,10 @@ while (s != ts) {
     
     
     
-    
-    
+    
+    
     #ifndef Q_SPY
-Q_UNUSED_PAR(qs_id);
+Q_UNUSED_PAR(qsId);
 #endif
 
 QMState const *s = hist;
@@ -1578,7 +1578,7 @@ QF_CRIT_STAT
 
 QS_CRIT_ENTRY();
 QS_MEM_SYS();
-QS_BEGIN_PRE_(QS_QEP_TRAN_HIST, qs_id)
+QS_BEGIN_PRE_(QS_QEP_TRAN_HIST, qsId)
     QS_OBJ_PRE_(me);                 // this state machine object
     QS_FUN_PRE_(ts->stateHandler);   // source state handler
     QS_FUN_PRE_(hist->stateHandler); // target state handler
@@ -1608,7 +1608,7 @@ while (i > 0) {
 
     QS_CRIT_ENTRY();
     QS_MEM_SYS();
-    QS_BEGIN_PRE_(QS_QEP_STATE_ENTRY, qs_id)
+    QS_BEGIN_PRE_(QS_QEP_STATE_ENTRY, qsId)
         QS_OBJ_PRE_(me);
         QS_FUN_PRE_(epath[i]->stateHandler); // entered state handler
     QS_END_PRE_()
@@ -1645,11 +1645,11 @@ return r;
    
    
    
-   
-   
+   
+   
    do { \
     Q_ASSERT(((QAsm *)(me_))->vptr); \
-    (*((QAsm *)(me_))->vptr->init)((QAsm *)(me_), (par_), (qs_id_)); \
+    (*((QAsm *)(me_))->vptr->init)((QAsm *)(me_), (par_), (qsId_)); \
 } while (false)
   
   
@@ -1671,10 +1671,10 @@ return r;
    
    
    
-   
-   
+   
+   
    \
-    (*((QAsm *)(me_))->vptr->dispatch)((QAsm *)(me_), (e_), (qs_id_))
+    (*((QAsm *)(me_))->vptr->dispatch)((QAsm *)(me_), (e_), (qsId_))
   
   
   
@@ -2345,7 +2345,7 @@ else {
 }
 
 // is it a mutable event?
-if (QEvt_getPoolId_(e) != 0U) {
+if (QEvt_getPoolNum_(e) != 0U) {
     QEvt_refCtr_inc_(e); // increment the reference counter
 }
 
@@ -2362,7 +2362,7 @@ if (status) { // can post the event?
         QS_OBJ_PRE_(sender);  // the sender object
         QS_SIG_PRE_(e->sig);  // the signal of the event
         QS_OBJ_PRE_(me);      // this active object (recipient)
-        QS_2U8_PRE_(QEvt_getPoolId_(e), e->refCtr_); // poolId & refCtr
+        QS_2U8_PRE_(QEvt_getPoolNum_(e), e->refCtr_); // poolNum & refCtr
         QS_EQC_PRE_(nFree);   // # free entries
         QS_EQC_PRE_(me->eQueue.nMin); // min # free entries
     QS_END_PRE_()
@@ -2411,7 +2411,7 @@ else { // cannot post the event
         QS_OBJ_PRE_(sender);  // the sender object
         QS_SIG_PRE_(e->sig);  // the signal of the event
         QS_OBJ_PRE_(me);      // this active object (recipient)
-        QS_2U8_PRE_(QEvt_getPoolId_(e), e->refCtr_); // poolId & refCtr
+        QS_2U8_PRE_(QEvt_getPoolNum_(e), e->refCtr_); // poolNum & refCtr
         QS_EQC_PRE_(nFree);   // # free entries
         QS_EQC_PRE_(margin);  // margin requested
     QS_END_PRE_()
@@ -2474,7 +2474,7 @@ QS_TEST_PROBE_ID(1,
 
 Q_REQUIRE_INCRIT(201, nFree != 0U);
 
-if (QEvt_getPoolId_(e) != 0U) { // is it a mutable event?
+if (QEvt_getPoolNum_(e) != 0U) { // is it a mutable event?
     QEvt_refCtr_inc_(e); // increment the reference counter
 }
 
@@ -2488,7 +2488,7 @@ QS_BEGIN_PRE_(QS_QF_ACTIVE_POST_LIFO, me->prio)
     QS_TIME_PRE_();       // timestamp
     QS_SIG_PRE_(e->sig);  // the signal of this event
     QS_OBJ_PRE_(me);      // this active object
-    QS_2U8_PRE_(QEvt_getPoolId_(e), e->refCtr_);// poolId & refCtr
+    QS_2U8_PRE_(QEvt_getPoolNum_(e), e->refCtr_);// poolNum & refCtr
     QS_EQC_PRE_(nFree);   // # free entries
     QS_EQC_PRE_(me->eQueue.nMin); // min # free entries
 QS_END_PRE_()
@@ -2548,7 +2548,7 @@ if (nFree <= me->eQueue.end) { // any events in the ring buffer?
         QS_TIME_PRE_();       // timestamp
         QS_SIG_PRE_(e->sig);  // the signal of this event
         QS_OBJ_PRE_(me);      // this active object
-        QS_2U8_PRE_(QEvt_getPoolId_(e), e->refCtr_); // poolId & refCtr
+        QS_2U8_PRE_(QEvt_getPoolNum_(e), e->refCtr_); // poolNum & refCtr
         QS_EQC_PRE_(nFree);   // # free entries
     QS_END_PRE_()
 }
@@ -2562,7 +2562,7 @@ else {
         QS_TIME_PRE_();       // timestamp
         QS_SIG_PRE_(e->sig);  // the signal of this event
         QS_OBJ_PRE_(me);      // this active object
-        QS_2U8_PRE_(QEvt_getPoolId_(e), e->refCtr_); // poolId & refCtr
+        QS_2U8_PRE_(QEvt_getPoolNum_(e), e->refCtr_); // poolNum & refCtr
     QS_END_PRE_()
 }
 
@@ -2600,11 +2600,11 @@ for (enum_t sig = 0; sig < maxSignal; ++sig) {
     
     
     
-    
-    
+    
+    
     #ifndef Q_SPY
 Q_UNUSED_PAR(sender);
-Q_UNUSED_PAR(qs_id);
+Q_UNUSED_PAR(qsId);
 #endif
 
 QSignal const sig = e->sig;
@@ -2618,15 +2618,15 @@ Q_REQUIRE_INCRIT(202,
     QPSet_verify_(&QActive_subscrList_[sig].set,
                   &QActive_subscrList_[sig].set_dis));
 
-QS_BEGIN_PRE_(QS_QF_PUBLISH, qs_id)
+QS_BEGIN_PRE_(QS_QF_PUBLISH, qsId)
     QS_TIME_PRE_();          // the timestamp
     QS_OBJ_PRE_(sender);     // the sender object
     QS_SIG_PRE_(sig);        // the signal of the event
-    QS_2U8_PRE_(QEvt_getPoolId_(e), e->refCtr_); // poolId & refCtr
+    QS_2U8_PRE_(QEvt_getPoolNum_(e), e->refCtr_); // poolNum & refCtr
 QS_END_PRE_()
 
 // is it a mutable event?
-if (QEvt_getPoolId_(e) != 0U) {
+if (QEvt_getPoolNum_(e) != 0U) {
     // NOTE: The reference counter of a mutable event is incremented to
     // prevent premature recycling of the event while the multicasting
     // is still in progress. At the end of the function, the garbage
@@ -2835,7 +2835,7 @@ QS_BEGIN_PRE_(QS_QF_ACTIVE_DEFER, me->prio)
     QS_OBJ_PRE_(me);     // this active object
     QS_OBJ_PRE_(eq);     // the deferred queue
     QS_SIG_PRE_(e->sig); // the signal of the event
-    QS_2U8_PRE_(QEvt_getPoolId_(e), e->refCtr_); // poolId & refCtr
+    QS_2U8_PRE_(QEvt_getPoolNum_(e), e->refCtr_); // poolNum & refCtr
 QS_END_PRE_()
 QS_MEM_APP();
 QS_CRIT_EXIT();
@@ -2859,7 +2859,7 @@ if (e != (QEvt *)0) { // event available?
     QF_CRIT_ENTRY();
     QF_MEM_SYS();
 
-    if (QEvt_getPoolId_(e) != 0U) { // is it a mutable event?
+    if (QEvt_getPoolNum_(e) != 0U) { // is it a mutable event?
 
         // after posting to the AO's queue the event must be referenced
         // at least twice: once in the deferred event queue (eq->get()
@@ -2877,7 +2877,7 @@ if (e != (QEvt *)0) { // event available?
         QS_OBJ_PRE_(me);     // this active object
         QS_OBJ_PRE_(eq);     // the deferred queue
         QS_SIG_PRE_(e->sig); // the signal of the event
-        QS_2U8_PRE_(QEvt_getPoolId_(e), e->refCtr_); // poolId & refCtr
+        QS_2U8_PRE_(QEvt_getPoolNum_(e), e->refCtr_); // poolNum & refCtr
     QS_END_PRE_()
 
     QF_MEM_APP();
@@ -3037,7 +3037,7 @@ me->interval = 0U;
                    = ((uint_fast8_t)me->super.refCtr_ & QTE_TICK_RATE);
 QTimeEvtCtr const ctr = me->ctr;
 #ifdef Q_SPY
-uint_fast8_t const qs_id = ((QActive *)(me->act))->prio;
+uint_fast8_t const qsId = ((QActive *)(me->act))->prio;
 #endif
 
 QF_CRIT_STAT
@@ -3074,7 +3074,7 @@ if ((me->super.refCtr_ & QTE_IS_LINKED) == 0U) {
     QTimeEvt_timeEvtHead_[tickRate].act = me;
 }
 
-QS_BEGIN_PRE_(QS_QF_TIMEEVT_ARM, qs_id)
+QS_BEGIN_PRE_(QS_QF_TIMEEVT_ARM, qsId)
     QS_TIME_PRE_();        // timestamp
     QS_OBJ_PRE_(me);       // this time event object
     QS_OBJ_PRE_(me->act);  // the active object
@@ -3092,7 +3092,7 @@ QF_CRIT_EXIT();
 
 //! @public @memberof QTimeEvt
     #ifdef Q_SPY
-uint_fast8_t const qs_id = QACTIVE_CAST_(me->act)->prio;
+uint_fast8_t const qsId = QACTIVE_CAST_(me->act)->prio;
 #endif
 
 QF_CRIT_STAT
@@ -3105,7 +3105,7 @@ if (me->ctr != 0U) {
     wasArmed = true;
     me->super.refCtr_ |= QTE_WAS_DISARMED;
 
-    QS_BEGIN_PRE_(QS_QF_TIMEEVT_DISARM, qs_id)
+    QS_BEGIN_PRE_(QS_QF_TIMEEVT_DISARM, qsId)
         QS_TIME_PRE_();            // timestamp
         QS_OBJ_PRE_(me);           // this time event object
         QS_OBJ_PRE_(me->act);      // the target AO
@@ -3120,7 +3120,7 @@ else { // the time event was already disarmed automatically
     wasArmed = false;
     me->super.refCtr_ &= (uint8_t)(~QTE_WAS_DISARMED & 0xFFU);
 
-    QS_BEGIN_PRE_(QS_QF_TIMEEVT_DISARM_ATTEMPT, qs_id)
+    QS_BEGIN_PRE_(QS_QF_TIMEEVT_DISARM_ATTEMPT, qsId)
         QS_TIME_PRE_();            // timestamp
         QS_OBJ_PRE_(me);           // this time event object
         QS_OBJ_PRE_(me->act);      // the target AO
@@ -3143,7 +3143,7 @@ return wasArmed;
     uint_fast8_t const tickRate
                    = (uint_fast8_t)me->super.refCtr_ & QTE_TICK_RATE;
 #ifdef Q_SPY
-uint_fast8_t const qs_id = ((QActive *)(me->act))->prio;
+uint_fast8_t const qsId = ((QActive *)(me->act))->prio;
 #endif
 
 QF_CRIT_STAT
@@ -3186,7 +3186,7 @@ else { // the time event was armed
 }
 me->ctr = nTicks; // re-load the tick counter (shift the phasing)
 
-QS_BEGIN_PRE_(QS_QF_TIMEEVT_REARM, qs_id)
+QS_BEGIN_PRE_(QS_QF_TIMEEVT_REARM, qsId)
     QS_TIME_PRE_();            // timestamp
     QS_OBJ_PRE_(me);           // this time event object
     QS_OBJ_PRE_(me->act);      // the target AO
@@ -3440,11 +3440,11 @@ me->super.eQueue.head = (QEQueueCtr)tickRate;
     
     
     
-    
-    
+    
+    
     Q_UNUSED_PAR(me);
 Q_UNUSED_PAR(par);
-Q_UNUSED_PAR(qs_id);
+Q_UNUSED_PAR(qsId);
 
 QF_CRIT_STAT
 QF_CRIT_ENTRY();
@@ -3464,10 +3464,10 @@ QF_CRIT_EXIT();
     
     
     
-    
-    
+    
+    
     Q_UNUSED_PAR(e);
-Q_UNUSED_PAR(qs_id);
+Q_UNUSED_PAR(qsId);
 
 QF_CRIT_STAT
 QF_CRIT_ENTRY();
@@ -3516,7 +3516,7 @@ QS_BEGIN_PRE_(QS_QF_ACTIVE_POST, me->prio)
     QS_OBJ_PRE_(sender); // the sender object
     QS_SIG_PRE_(0U);     // the signal of the event
     QS_OBJ_PRE_(me);     // this active object
-    QS_2U8_PRE_(0U, 0U); // poolId & refCtr
+    QS_2U8_PRE_(0U, 0U); // poolNum & refCtr
     QS_EQC_PRE_(0U);     // # free entries
     QS_EQC_PRE_(0U);     // min # free entries
 QS_END_PRE_()
@@ -3589,10 +3589,10 @@ me->nMin     = me->nFree;
     
     
     
-    
-    
+    
+    
     #ifndef Q_SPY
-Q_UNUSED_PAR(qs_id);
+Q_UNUSED_PAR(qsId);
 #endif
 
 QF_CRIT_STAT
@@ -3609,7 +3609,7 @@ if (((margin == QF_NO_MARGIN) && (nFree > 0U))
     || (nFree > (QEQueueCtr)margin))
 {
     // is it a mutable event?
-    if (QEvt_getPoolId_(e) != 0U) {
+    if (QEvt_getPoolNum_(e) != 0U) {
         QEvt_refCtr_inc_(e); // increment the reference counter
     }
 
@@ -3619,11 +3619,11 @@ if (((margin == QF_NO_MARGIN) && (nFree > 0U))
         me->nMin = nFree; // update minimum so far
     }
 
-    QS_BEGIN_PRE_(QS_QF_EQUEUE_POST, qs_id)
+    QS_BEGIN_PRE_(QS_QF_EQUEUE_POST, qsId)
         QS_TIME_PRE_();        // timestamp
         QS_SIG_PRE_(e->sig);   // the signal of this event
         QS_OBJ_PRE_(me);       // this queue object
-        QS_2U8_PRE_(QEvt_getPoolId_(e), e->refCtr_); // poolId & refCtr
+        QS_2U8_PRE_(QEvt_getPoolNum_(e), e->refCtr_); // poolNum & refCtr
         QS_EQC_PRE_(nFree);    // # free entries
         QS_EQC_PRE_(me->nMin); // min # free entries
     QS_END_PRE_()
@@ -3646,11 +3646,11 @@ else { // event cannot be posted
     // dropping events must be acceptable
     Q_ASSERT_INCRIT(210, margin != QF_NO_MARGIN);
 
-    QS_BEGIN_PRE_(QS_QF_EQUEUE_POST_ATTEMPT, qs_id)
+    QS_BEGIN_PRE_(QS_QF_EQUEUE_POST_ATTEMPT, qsId)
         QS_TIME_PRE_();        // timestamp
         QS_SIG_PRE_(e->sig);   // the signal of this event
         QS_OBJ_PRE_(me);       // this queue object
-        QS_2U8_PRE_(QEvt_getPoolId_(e), e->refCtr_); // poolId & refCtr
+        QS_2U8_PRE_(QEvt_getPoolNum_(e), e->refCtr_); // poolNum & refCtr
         QS_EQC_PRE_(nFree);    // # free entries
         QS_EQC_PRE_(margin);   // margin requested
     QS_END_PRE_()
@@ -3670,10 +3670,10 @@ return status;
 //! @public @memberof QEQueue
     
     
-    
-    
+    
+    
     #ifndef Q_SPY
-Q_UNUSED_PAR(qs_id);
+Q_UNUSED_PAR(qsId);
 #endif
 
 QF_CRIT_STAT
@@ -3684,7 +3684,7 @@ QEQueueCtr nFree = me->nFree; // get volatile into temporary
 
 Q_REQUIRE_INCRIT(300, nFree != 0U);
 
-if (QEvt_getPoolId_(e) != 0U) { // is it a mutable event?
+if (QEvt_getPoolNum_(e) != 0U) { // is it a mutable event?
     QEvt_refCtr_inc_(e); // increment the reference counter
 }
 
@@ -3694,11 +3694,11 @@ if (me->nMin > nFree) {
     me->nMin = nFree; // update minimum so far
 }
 
-QS_BEGIN_PRE_(QS_QF_EQUEUE_POST_LIFO, qs_id)
+QS_BEGIN_PRE_(QS_QF_EQUEUE_POST_LIFO, qsId)
     QS_TIME_PRE_();         // timestamp
     QS_SIG_PRE_(e->sig);    // the signal of this event
     QS_OBJ_PRE_(me);        // this queue object
-    QS_2U8_PRE_(QEvt_getPoolId_(e), e->refCtr_); // poolId & refCtr
+    QS_2U8_PRE_(QEvt_getPoolNum_(e), e->refCtr_); // poolNum & refCtr
     QS_EQC_PRE_(nFree);     // # free entries
     QS_EQC_PRE_(me->nMin);  // min # free entries
 QS_END_PRE_()
@@ -3722,10 +3722,10 @@ QF_CRIT_EXIT();
     //! @public @memberof QEQueue
 
 //! @public @memberof QEQueue
-    
-    
+    
+    
     #ifndef Q_SPY
-Q_UNUSED_PAR(qs_id);
+Q_UNUSED_PAR(qsId);
 #endif
 
 QF_CRIT_STAT
@@ -3747,11 +3747,11 @@ if (e != (QEvt *)0) { // was the queue not empty?
         }
         --me->tail;
 
-        QS_BEGIN_PRE_(QS_QF_EQUEUE_GET, qs_id)
+        QS_BEGIN_PRE_(QS_QF_EQUEUE_GET, qsId)
             QS_TIME_PRE_();      // timestamp
             QS_SIG_PRE_(e->sig); // the signal of this event
             QS_OBJ_PRE_(me);     // this queue object
-            QS_2U8_PRE_(QEvt_getPoolId_(e), e->refCtr_); // poolId & refCtr
+            QS_2U8_PRE_(QEvt_getPoolNum_(e), e->refCtr_); // poolNum & refCtr
             QS_EQC_PRE_(nFree);  // # free entries
         QS_END_PRE_()
     }
@@ -3761,11 +3761,11 @@ if (e != (QEvt *)0) { // was the queue not empty?
         // all entries in the queue must be free (+1 for fronEvt)
         Q_ASSERT_INCRIT(410, nFree == (me->end + 1U));
 
-        QS_BEGIN_PRE_(QS_QF_EQUEUE_GET_LAST, qs_id)
+        QS_BEGIN_PRE_(QS_QF_EQUEUE_GET_LAST, qsId)
             QS_TIME_PRE_();      // timestamp
             QS_SIG_PRE_(e->sig); // the signal of this event
             QS_OBJ_PRE_(me);     // this queue object
-            QS_2U8_PRE_(QEvt_getPoolId_(e), e->refCtr_); // poolId & refCtr
+            QS_2U8_PRE_(QEvt_getPoolNum_(e), e->refCtr_); // poolNum & refCtr
         QS_END_PRE_()
     }
 }
@@ -3912,10 +3912,10 @@ QF_CRIT_EXIT();
 //! @public @memberof QMPool
     
     
-    
-    
+    
+    
     #ifndef Q_SPY
-Q_UNUSED_PAR(qs_id);
+Q_UNUSED_PAR(qsId);
 #endif
 
 QF_CRIT_STAT
@@ -3962,7 +3962,7 @@ if (me->nFree > (QMPoolCtr)margin) {
 
     me->free_head = fb_next; // set the head to the next free block
 
-    QS_BEGIN_PRE_(QS_QF_MPOOL_GET, qs_id)
+    QS_BEGIN_PRE_(QS_QF_MPOOL_GET, qsId)
         QS_TIME_PRE_();         // timestamp
         QS_OBJ_PRE_(me);        // this memory pool
         QS_MPC_PRE_(me->nFree); // # of free blocks in the pool
@@ -3972,7 +3972,7 @@ if (me->nFree > (QMPoolCtr)margin) {
 else { // don't have enough free blocks at this point
     fb = (QFreeBlock *)0;
 
-    QS_BEGIN_PRE_(QS_QF_MPOOL_GET_ATTEMPT, qs_id)
+    QS_BEGIN_PRE_(QS_QF_MPOOL_GET_ATTEMPT, qsId)
         QS_TIME_PRE_();         // timestamp
         QS_OBJ_PRE_(me);        // this memory pool
         QS_MPC_PRE_(me->nFree); // # of free blocks in the pool
@@ -3992,10 +3992,10 @@ return fb; // return the block or NULL pointer to the caller
 //! @public @memberof QMPool
     
     
-    
-    
+    
+    
     #ifndef Q_SPY
-Q_UNUSED_PAR(qs_id);
+Q_UNUSED_PAR(qsId);
 #endif
 
 QFreeBlock * const fb = (QFreeBlock *)block;
@@ -4017,7 +4017,7 @@ me->free_head = block;
 
 ++me->nFree; // one more free block in this pool
 
-QS_BEGIN_PRE_(QS_QF_MPOOL_PUT, qs_id)
+QS_BEGIN_PRE_(QS_QF_MPOOL_PUT, qsId)
     QS_TIME_PRE_();         // timestamp
     QS_OBJ_PRE_(me);        // this memory pool
     QS_MPC_PRE_(me->nFree); // the # free blocks in the pool
@@ -4138,32 +4138,32 @@ return min;
     
     
     
-    uint_fast8_t const poolId = QF_priv_.maxPool_;
+    uint_fast8_t const poolNum = QF_priv_.maxPool_;
 
 // see precondition{qf_dyn,200} and precondition{qf_dyn,201}
 QF_CRIT_STAT
 QF_CRIT_ENTRY();
 QF_MEM_SYS();
 
-Q_REQUIRE_INCRIT(200, poolId < QF_MAX_EPOOL);
-if (poolId > 0U) {
+Q_REQUIRE_INCRIT(200, poolNum < QF_MAX_EPOOL);
+if (poolNum > 0U) {
     Q_REQUIRE_INCRIT(201,
-        QF_EPOOL_EVENT_SIZE_(QF_priv_.ePool_[poolId - 1U]) < evtSize);
+        QF_EPOOL_EVENT_SIZE_(QF_priv_.ePool_[poolNum - 1U]) < evtSize);
 }
-QF_priv_.maxPool_ = poolId + 1U; // one more pool
+QF_priv_.maxPool_ = poolNum + 1U; // one more pool
 
 QF_MEM_APP();
 QF_CRIT_EXIT();
 
 // perform the port-dependent initialization of the event-pool
-QF_EPOOL_INIT_(QF_priv_.ePool_[poolId], poolSto, poolSize, evtSize);
+QF_EPOOL_INIT_(QF_priv_.ePool_[poolNum], poolSto, poolSize, evtSize);
 
 #ifdef Q_SPY
 // generate the object-dictionary entry for the initialized pool
 {
     uint8_t obj_name[9] = "EvtPool?";
-    obj_name[7] = (uint8_t)((uint8_t)'0' + poolId + 1U);
-    QS_obj_dict_pre_(&QF_priv_.ePool_[poolId], (char const *)obj_name);
+    obj_name[7] = (uint8_t)((uint8_t)'0' + poolNum + 1U);
+    QS_obj_dict_pre_(&QF_priv_.ePool_[poolNum], (char const *)obj_name);
 }
 #endif // Q_SPY
    
@@ -4179,16 +4179,16 @@ QF_EPOOL_INIT_(QF_priv_.ePool_[poolId], poolSto, poolSize, evtSize);
     //! @static @public @memberof QF
 
 //! @static @public @memberof QF
-    
-    
+    
+    
     QF_CRIT_STAT
 QF_CRIT_ENTRY();
 QF_MEM_SYS();
 
-Q_REQUIRE_INCRIT(400, (poolId <= QF_MAX_EPOOL)
-                  && (0U < poolId) && (poolId <= QF_priv_.maxPool_));
+Q_REQUIRE_INCRIT(400, (poolNum <= QF_MAX_EPOOL)
+                  && (0U < poolNum) && (poolNum <= QF_priv_.maxPool_));
 
-uint_fast16_t const min = (uint_fast16_t)QF_priv_.ePool_[poolId - 1U].nMin;
+uint_fast16_t const min = (uint_fast16_t)QF_priv_.ePool_[poolNum - 1U].nMin;
 
 QF_MEM_APP();
 QF_CRIT_EXIT();
@@ -4211,18 +4211,18 @@ QF_CRIT_ENTRY();
 QF_MEM_SYS();
 
 // find the pool id that fits the requested event size...
-uint_fast8_t poolId = 0U; // zero-based poolId initially
-for (; poolId < QF_priv_.maxPool_; ++poolId) {
-    if (evtSize <= QF_EPOOL_EVENT_SIZE_(QF_priv_.ePool_[poolId])) {
+uint_fast8_t poolNum = 0U; // zero-based poolNum initially
+for (; poolNum < QF_priv_.maxPool_; ++poolNum) {
+    if (evtSize <= QF_EPOOL_EVENT_SIZE_(QF_priv_.ePool_[poolNum])) {
         break;
     }
 }
 
 // precondition:
 // - cannot run out of registered pools
-Q_REQUIRE_INCRIT(300, poolId < QF_priv_.maxPool_);
+Q_REQUIRE_INCRIT(300, poolNum < QF_priv_.maxPool_);
 
-++poolId; // convert to 1-based poolId
+++poolNum; // convert to 1-based poolNum
 
 QF_MEM_APP();
 QF_CRIT_EXIT();
@@ -4230,23 +4230,23 @@ QF_CRIT_EXIT();
 // get event e (port-dependent)...
 QEvt *e;
 #ifdef Q_SPY
-QF_EPOOL_GET_(QF_priv_.ePool_[poolId - 1U], e,
+QF_EPOOL_GET_(QF_priv_.ePool_[poolNum - 1U], e,
               ((margin != QF_NO_MARGIN) ? margin : 0U),
-              (uint_fast8_t)QS_EP_ID + poolId);
+              (uint_fast8_t)QS_EP_ID + poolNum);
 #else
-QF_EPOOL_GET_(QF_priv_.ePool_[poolId - 1U], e,
+QF_EPOOL_GET_(QF_priv_.ePool_[poolNum - 1U], e,
               ((margin != QF_NO_MARGIN) ? margin : 0U), 0U);
 #endif
 
 if (e != (QEvt *)0) { // was e allocated correctly?
     e->sig     = (QSignal)sig; // set the signal
     e->refCtr_ = 0U; // initialize the reference counter to 0
-    e->evtTag_ = (uint8_t)(QEVT_MARKER | poolId);
+    e->evtTag_ = (uint8_t)(QEVT_MARKER | poolNum);
 
     QS_CRIT_ENTRY();
     QS_MEM_SYS();
     QS_BEGIN_PRE_(QS_QF_NEW,
-            (uint_fast8_t)QS_EP_ID + poolId)
+            (uint_fast8_t)QS_EP_ID + poolNum)
         QS_TIME_PRE_();        // timestamp
         QS_EVS_PRE_(evtSize);  // the size of the event
         QS_SIG_PRE_(sig);      // the signal of the event
@@ -4264,7 +4264,7 @@ else { // event was not allocated
 
     QS_MEM_SYS();
     QS_BEGIN_PRE_(QS_QF_NEW_ATTEMPT,
-            (uint_fast8_t)QS_EP_ID + poolId)
+            (uint_fast8_t)QS_EP_ID + poolNum)
         QS_TIME_PRE_();        // timestamp
         QS_EVS_PRE_(evtSize);  // the size of the event
         QS_SIG_PRE_(sig);      // the signal of the event
@@ -4289,18 +4289,18 @@ return e;
 QF_CRIT_ENTRY();
 Q_REQUIRE_INCRIT(402, QEvt_verify_(e));
 
-uint_fast8_t const poolId = QEvt_getPoolId_(e);
+uint_fast8_t const poolNum = QEvt_getPoolNum_(e);
 
-if (poolId != 0U) { // is it a pool event (mutable)?
+if (poolNum != 0U) { // is it a pool event (mutable)?
     QF_MEM_SYS();
 
     if (e->refCtr_ > 1U) { // isn't this the last reference?
 
         QS_BEGIN_PRE_(QS_QF_GC_ATTEMPT,
-                (uint_fast8_t)QS_EP_ID + poolId)
+                (uint_fast8_t)QS_EP_ID + poolNum)
             QS_TIME_PRE_();       // timestamp
             QS_SIG_PRE_(e->sig);  // the signal of the event
-            QS_2U8_PRE_(poolId, e->refCtr_); // poolId & refCtr
+            QS_2U8_PRE_(poolNum, e->refCtr_); // poolNum & refCtr
         QS_END_PRE_()
 
         QEvt_refCtr_dec_(e); // decrement the ref counter
@@ -4311,25 +4311,25 @@ if (poolId != 0U) { // is it a pool event (mutable)?
     else { // this is the last reference to this event, recycle it
 
         QS_BEGIN_PRE_(QS_QF_GC,
-                (uint_fast8_t)QS_EP_ID + poolId)
+                (uint_fast8_t)QS_EP_ID + poolNum)
             QS_TIME_PRE_();       // timestamp
             QS_SIG_PRE_(e->sig);  // the signal of the event
-            QS_2U8_PRE_(poolId, e->refCtr_); // poolId & refCtr
+            QS_2U8_PRE_(poolNum, e->refCtr_); // poolNum & refCtr
         QS_END_PRE_()
 
         // pool number must be in range
-        Q_ASSERT_INCRIT(410, (poolId <= QF_priv_.maxPool_)
-                              && (poolId <= QF_MAX_EPOOL));
+        Q_ASSERT_INCRIT(410, (poolNum <= QF_priv_.maxPool_)
+                              && (poolNum <= QF_MAX_EPOOL));
         QF_MEM_APP();
         QF_CRIT_EXIT();
 
         // NOTE: casting 'const' away is legit because it's a pool event
 #ifdef Q_SPY
-        QF_EPOOL_PUT_(QF_priv_.ePool_[poolId - 1U],
+        QF_EPOOL_PUT_(QF_priv_.ePool_[poolNum - 1U],
             (QEvt *)e,
-            (uint_fast8_t)QS_EP_ID + poolId);
+            (uint_fast8_t)QS_EP_ID + poolNum);
 #else
-        QF_EPOOL_PUT_(QF_priv_.ePool_[poolId - 1U],
+        QF_EPOOL_PUT_(QF_priv_.ePool_[poolNum - 1U],
             (QEvt *)e, 0U);
 #endif
     }
@@ -4356,19 +4356,19 @@ QF_CRIT_ENTRY();
 
 Q_REQUIRE_INCRIT(502, QEvt_verify_(e));
 
-uint_fast8_t const poolId = QEvt_getPoolId_(e);
+uint_fast8_t const poolNum = QEvt_getPoolNum_(e);
 
-Q_REQUIRE_INCRIT(500, (poolId != 0U)
+Q_REQUIRE_INCRIT(500, (poolNum != 0U)
     && (evtRef == (void *)0));
 
 QEvt_refCtr_inc_(e); // increments the ref counter
 
 QS_MEM_SYS();
 QS_BEGIN_PRE_(QS_QF_NEW_REF,
-        (uint_fast8_t)QS_EP_ID + poolId)
+        (uint_fast8_t)QS_EP_ID + poolNum)
     QS_TIME_PRE_();       // timestamp
     QS_SIG_PRE_(e->sig);  // the signal of the event
-    QS_2U8_PRE_(poolId, e->refCtr_); // poolId & refCtr
+    QS_2U8_PRE_(poolNum, e->refCtr_); // poolNum & refCtr
 QS_END_PRE_()
 QS_MEM_APP();
 
@@ -4390,15 +4390,15 @@ QF_CRIT_ENTRY();
 Q_REQUIRE_INCRIT(602, QEvt_verify_(e));
 
 #ifdef Q_SPY
-uint_fast8_t const poolId = QEvt_getPoolId_(e);
+uint_fast8_t const poolNum = QEvt_getPoolNum_(e);
 #endif
 
 QS_MEM_SYS();
 QS_BEGIN_PRE_(QS_QF_DELETE_REF,
-        (uint_fast8_t)QS_EP_ID + poolId)
+        (uint_fast8_t)QS_EP_ID + poolNum)
     QS_TIME_PRE_();       // timestamp
     QS_SIG_PRE_(e->sig);  // the signal of the event
-    QS_2U8_PRE_(poolId, e->refCtr_); // poolId & refCtr
+    QS_2U8_PRE_(poolNum, e->refCtr_); // poolNum & refCtr
 QS_END_PRE_()
 QS_MEM_APP();
 
@@ -4697,10 +4697,10 @@ QF_gc(e); // recycle the referenced event
    
    
    
-   
-   
+   
+   
    \
-    ((e_) = (QEvt *)QMPool_get(&(p_), (m_), (qs_id_)))
+    ((e_) = (QEvt *)QMPool_get(&(p_), (m_), (qsId_)))
   
   
   
@@ -4708,10 +4708,10 @@ QF_gc(e); // recycle the referenced event
    
    
    
-   
-   
+   
+   
    \
-    (QMPool_put(&(p_), (e_), (qs_id_)))
+    (QMPool_put(&(p_), (e_), (qsId_)))
   
  
  
@@ -5204,7 +5204,7 @@ if (prevCeil != 0xFFU) {
     //! @static @private @memberof QK
 
 //! @static @private @memberof QK
-    // NOTE: this function is entered with iterrupts DISABLED
+    // NOTE: this function is entered with interrupts DISABLED
 
 Q_REQUIRE_INCRIT(402, QPSet_verify_(&QK_priv_.readySet,
                                     &QK_priv_.readySet_dis));
@@ -5249,7 +5249,7 @@ return p;
     //! @static @private @memberof QK
 
 //! @static @private @memberof QK
-    // NOTE: this function is entered with iterrupts DISABLED
+    // NOTE: this function is entered with interrupts DISABLED
 
 uint_fast8_t const prio_in = QK_priv_.actPrio; // save initial prio.
 uint_fast8_t p = QK_priv_.nextPrio; // next prio to run
@@ -5739,7 +5739,7 @@ if (stat != 0xFFU) {
 
     // find if any threads should be run after unlocking the scheduler
     if (QXK_sched_() != 0U) { // activation needed?
-        QXK_activate_(); // synchronously activate basic-thred(s)
+        QXK_activate_(); // synchronously activate basic-thread(s)
     }
 
     QF_MEM_APP();
@@ -6128,7 +6128,7 @@ if (stkSto == (void *)0) { // starting basic thread (AO)?
     QF_MEM_SYS();
     if (QXK_priv_.lockCeil <= QF_MAX_ACTIVE) { // scheduler running?
         if (QXK_sched_() != 0U) { // activation needed?
-            QXK_activate_(); // synchronously activate basic-thred(s)
+            QXK_activate_(); // synchronously activate basic-thread(s)
         }
     }
     QF_MEM_APP();
@@ -6346,7 +6346,7 @@ if (thr->super.eQueue.frontEvt != (QEvt *)0) {
             QS_TIME_PRE_();      // timestamp
             QS_SIG_PRE_(e->sig); // the signal of this event
             QS_OBJ_PRE_(&thr->super); // this active object
-            QS_2U8_PRE_(QEvt_getPoolId_(e), e->refCtr_); // poolId & refCtr
+            QS_2U8_PRE_(QEvt_getPoolNum_(e), e->refCtr_); // poolNum & refCtr
             QS_EQC_PRE_(nFree);  // # free entries
         QS_END_PRE_()
     }
@@ -6360,7 +6360,7 @@ if (thr->super.eQueue.frontEvt != (QEvt *)0) {
             QS_TIME_PRE_();      // timestamp
             QS_SIG_PRE_(e->sig); // the signal of this event
             QS_OBJ_PRE_(&thr->super); // this active object
-            QS_2U8_PRE_(QEvt_getPoolId_(e), e->refCtr_); // poolId & refCtr
+            QS_2U8_PRE_(QEvt_getPoolNum_(e), e->refCtr_); // poolNum & refCtr
         QS_END_PRE_()
     }
 }
@@ -6696,7 +6696,7 @@ if (QPSet_notEmpty(&me->waitSet)) {
     QXThread * const thr =
         QXK_PTR_CAST_(QXThread*, QActive_registry_[p]);
 
-    // assert that the tread:
+    // assert that the thread:
     // - must be registered in QF;
     // - must be extended; and
     // - must be blocked on this semaphore;
@@ -7153,7 +7153,7 @@ if (me->ao.eQueue.nFree == 1U) {
 
     // schedule the next thread if multitasking started
     if (QXK_sched_() != 0U) { // activation needed?
-        QXK_activate_(); // synchronously activate basic-thred(s)
+        QXK_activate_(); // synchronously activate basic-thread(s)
     }
 }
 else { // releasing one level of nested mutex lock
@@ -7600,7 +7600,7 @@ QS_endRec_();
 // produce the reset record to inform QSPY of a new session
 QS_target_info_pre_(0xFFU);
 
-// hold off flushing after successfull initialization (see QS_INIT())
+// hold off flushing after successful initialization (see QS_INIT())
    
    
    
@@ -8157,8 +8157,8 @@ me->super.vptr = &vtable;  // hook the vptr
      
      
      
-     
-     
+     
+     
      Q_UNUSED_PAR(par);
 
 #ifdef Q_SPY
@@ -8171,7 +8171,7 @@ if ((QS_priv_.flags & 0x01U) == 0U) {
 QS_CRIT_STAT
 QS_CRIT_ENTRY();
 QS_MEM_SYS();
-QS_BEGIN_PRE_(QS_QEP_STATE_INIT, qs_id)
+QS_BEGIN_PRE_(QS_QEP_STATE_INIT, qsId)
     QS_OBJ_PRE_(me);            // this state machine object
     QS_FUN_PRE_(me->state.fun); // the source state
     QS_FUN_PRE_(me->temp.fun);  // the target of the initial tran.
@@ -8188,12 +8188,12 @@ QS_CRIT_EXIT();
      
      
      
-     
-     
+     
+     
      QS_CRIT_STAT
 QS_CRIT_ENTRY();
 QS_MEM_SYS();
-QS_BEGIN_PRE_(QS_QEP_DISPATCH, qs_id)
+QS_BEGIN_PRE_(QS_QEP_DISPATCH, qsId)
     QS_TIME_PRE_();             // time stamp
     QS_SIG_PRE_(e->sig);        // the signal of the event
     QS_OBJ_PRE_(me);            // this state machine object
@@ -8234,9 +8234,9 @@ me->super.super.vptr = &vtable;  // hook the vptr
      
      
      
-     
-     
-     Q_UNUSED_PAR(qs_id);
+     
+     
+     Q_UNUSED_PAR(qsId);
 
 QHsmDummy_init_(me, par, ((QActive const *)me)->prio);
     
@@ -8249,9 +8249,9 @@ QHsmDummy_init_(me, par, ((QActive const *)me)->prio);
      
      
      
-     
-     
-     Q_UNUSED_PAR(qs_id);
+     
+     
+     Q_UNUSED_PAR(qsId);
 
 QHsmDummy_dispatch_(me, e, ((QActive const *)me)->prio);
     
@@ -8285,7 +8285,7 @@ QS_TEST_PROBE_ID(1,
 )
 
 // is it a mutable event?
-if (QEvt_getPoolId_(e) != 0U) {
+if (QEvt_getPoolNum_(e) != 0U) {
     QEvt_refCtr_inc_(e);
 }
 
@@ -8296,7 +8296,7 @@ QS_BEGIN_PRE_(rec, me->prio)
     QS_OBJ_PRE_(sender); // the sender object
     QS_SIG_PRE_(e->sig); // the signal of the event
     QS_OBJ_PRE_(me);     // this active object
-    QS_2U8_PRE_(QEvt_getPoolId_(e), e->refCtr_); // poolId & refCtr
+    QS_2U8_PRE_(QEvt_getPoolNum_(e), e->refCtr_); // poolNum & refCtr
     QS_EQC_PRE_(0U);     // # free entries
     QS_EQC_PRE_(margin); // margin requested
 QS_END_PRE_()
@@ -8339,7 +8339,7 @@ QS_TEST_PROBE_ID(1,
 )
 
 // is it a mutable event?
-if (QEvt_getPoolId_(e) != 0U) {
+if (QEvt_getPoolNum_(e) != 0U) {
     QEvt_refCtr_inc_(e);
 }
 
@@ -8347,7 +8347,7 @@ QS_BEGIN_PRE_(QS_QF_ACTIVE_POST_LIFO, me->prio)
     QS_TIME_PRE_();      // timestamp
     QS_SIG_PRE_(e->sig); // the signal of this event
     QS_OBJ_PRE_(me);     // this active object
-    QS_2U8_PRE_(QEvt_getPoolId_(e), e->refCtr_); // poolId & refCtr
+    QS_2U8_PRE_(QEvt_getPoolNum_(e), e->refCtr_); // poolNum & refCtr
     QS_EQC_PRE_(0U);     // # free entries
     QS_EQC_PRE_(0U);     // min # free entries
 QS_END_PRE_()
@@ -8397,18 +8397,18 @@ QF_gc(e);
   
   
   
-   
-   
-   (QS_locFilter_((int_fast16_t)(qs_id_)))
+   
+   
+   (QS_locFilter_((int_fast16_t)(qsId_)))
   
   
   
    
    
-   
-   
+   
+   
    \
-if (QS_GLB_CHECK_(rec_) && QS_LOC_CHECK_(qs_id_)) { \
+if (QS_GLB_CHECK_(rec_) && QS_LOC_CHECK_(qsId_)) { \
     QS_CRIT_STAT \
     QS_CRIT_ENTRY(); \
     QS_MEM_SYS(); \
@@ -8431,10 +8431,10 @@ if (QS_GLB_CHECK_(rec_) && QS_LOC_CHECK_(qs_id_)) { \
   
    
    
-   
-   
+   
+   
    \
-if (QS_GLB_CHECK_(rec_) && QS_LOC_CHECK_(qs_id_)) { \
+if (QS_GLB_CHECK_(rec_) && QS_LOC_CHECK_(qsId_)) { \
     QS_beginRec_((uint_fast8_t)(rec_)); \
     QS_TIME_PRE_(); {
   
@@ -8454,11 +8454,11 @@ if (QS_GLB_CHECK_(rec_) && QS_LOC_CHECK_(qs_id_)) { \
   
   
   
-   
-   
+   
+   
    \
-    (((uint_fast8_t)QS_filt_.loc[(uint_fast8_t)(qs_id_) >> 3U] \
-          & ((uint_fast8_t)1U << ((uint_fast8_t)(qs_id_) & 7U))) != 0U)
+    (((uint_fast8_t)QS_filt_.loc[(uint_fast8_t)(qsId_) >> 3U] \
+          & ((uint_fast8_t)1U << ((uint_fast8_t)(qsId_) & 7U))) != 0U)
   
   
   
@@ -8835,11 +8835,11 @@ $declare1 ${QP-FuSa}
 #define QP_H_
 
 //============================================================================
-#define QP_VERSION     732U
-#define QP_VERSION_STR "7.3.2"
+#define QP_VERSION     733U
+#define QP_VERSION_STR "7.3.3"
 
-//! Encrypted  current QP release (7.3.2) and date (2023-12-14)
-#define QP_RELEASE     0x762F8843U
+//! Encrypted  current QP release (7.3.3) and date (2024-01-31)
+#define QP_RELEASE     0x70DEE7F2U
 
 //============================================================================
 //! @cond INTERNAL
@@ -9309,14 +9309,14 @@ $declare ${QS::QUTest-stub::QActiveDummy}
 #define QS_EXIT()                       ((void)0)
 #define QS_DUMP()                       ((void)0)
 #define QS_GLB_FILTER(rec_)             ((void)0)
-#define QS_LOC_FILTER(qs_id_)           ((void)0)
+#define QS_LOC_FILTER(qsId_)           ((void)0)
 
 #define QS_GET_BYTE(pByte_)             ((uint16_t)0xFFFFU)
 #define QS_GET_BLOCK(pSize_)            ((uint8_t *)0)
 
-#define QS_BEGIN_ID(rec_, qs_id_)       if (false) {
+#define QS_BEGIN_ID(rec_, qsId_)       if (false) {
 #define QS_END()                        }
-#define QS_BEGIN_INCRIT(rec_, qs_id_)   if (false) {
+#define QS_BEGIN_INCRIT(rec_, qsId_)   if (false) {
 #define QS_END_INCRIT()                 }
 
 #define QS_I8(width_, data_)            ((void)0)
@@ -9358,7 +9358,7 @@ $declare ${QS::QUTest-stub::QActiveDummy}
 // interface used only for internal implementation, but not in applications
 #ifdef QP_IMPL
     // predefined QS trace records
-    #define QS_BEGIN_PRE_(rec_, qs_id_) if (false) {
+    #define QS_BEGIN_PRE_(rec_, qsId_) if (false) {
     #define QS_END_PRE_()        }
     #define QS_U8_PRE_(data_)           ((void)0)
     #define QS_2U8_PRE_(data1_, data2_) ((void)0)
@@ -9425,8 +9425,8 @@ enum QSpyRxRecords {
 #define QS_GOOD_CHKSUM 0xFFU
 
 //----------------------------------------------------------------------------
-#define QS_BEGIN_PRE_(rec_, qs_id_) \
-    if (QS_GLB_CHECK_(rec_) && QS_LOC_CHECK_(qs_id_)) { \
+#define QS_BEGIN_PRE_(rec_, qsId_) \
+    if (QS_GLB_CHECK_(rec_) && QS_LOC_CHECK_(qsId_)) { \
         QS_beginRec_((uint_fast8_t)(rec_));
 #define QS_END_PRE_()           QS_endRec_(); }
 
@@ -9621,10 +9621,10 @@ static inline void QF_psInit(
 }
 
 //! @deprecated instead use: QASM_INIT()
-#define QHSM_INIT(me_, par_, qs_id_)   QASM_INIT((me_), (par_), (qs_id_))
+#define QHSM_INIT(me_, par_, qsId_)   QASM_INIT((me_), (par_), (qsId_))
 
 //! @deprecated instead use: QASM_DISPATCH()
-#define QHSM_DISPATCH(me_, e_, qs_id_) QASM_DISPATCH((me_), (e_), (qs_id_))
+#define QHSM_DISPATCH(me_, e_, qsId_) QASM_DISPATCH((me_), (e_), (qsId_))
 
 //! @deprecated instead use: QASM_IS_IN()
 #define QHsm_isIn(me_, state_)         QHsm_isIn_((QAsm *)(me_), (state_))
@@ -9693,10 +9693,10 @@ static inline void QF_psInit(
 #if (QP_API_VERSION < 580)
 
 //! @deprecated instead use: QASM_INIT()
-#define QMSM_INIT(me_, par_, qs_id_)   QASM_INIT((me_), (par_), (qs_id_))
+#define QMSM_INIT(me_, par_, qsId_)   QASM_INIT((me_), (par_), (qsId_))
 
 //! @deprecated instead use: QASM_DISPATCH()
-#define QMSM_DISPATCH(me_, e_, qs_id_) QASM_DISPATCH((me_), (e_), (qs_id_))
+#define QMSM_DISPATCH(me_, e_, qsId_) QASM_DISPATCH((me_), (e_), (qsId_))
 
 #endif // QP_API_VERSION < 580
 #endif // QP_API_VERSION < 660
@@ -9747,10 +9747,10 @@ enum {
     ((*(state_))(me, &QEvt_reserved_[(sig_)]))
 
 // helper macro to trace state entry
-#define QS_STATE_ENTRY_(state_, qs_id_)         \
+#define QS_STATE_ENTRY_(state_, qsId_)         \
     QS_CRIT_ENTRY();                            \
     QS_MEM_SYS();                               \
-    QS_BEGIN_PRE_(QS_QEP_STATE_ENTRY, (qs_id_)) \
+    QS_BEGIN_PRE_(QS_QEP_STATE_ENTRY, (qsId_)) \
         QS_OBJ_PRE_(me);                        \
         QS_FUN_PRE_(state_);                    \
     QS_END_PRE_()                               \
@@ -9758,10 +9758,10 @@ enum {
     QS_CRIT_EXIT()
 
 // helper macro to trace state exit
-#define QS_STATE_EXIT_(state_, qs_id_)          \
+#define QS_STATE_EXIT_(state_, qsId_)          \
     QS_CRIT_ENTRY();                            \
     QS_MEM_SYS();                               \
-    QS_BEGIN_PRE_(QS_QEP_STATE_EXIT, (qs_id_))  \
+    QS_BEGIN_PRE_(QS_QEP_STATE_EXIT, (qsId_))  \
         QS_OBJ_PRE_(me);                        \
         QS_FUN_PRE_(state_);                    \
     QS_END_PRE_()                               \
@@ -10409,10 +10409,10 @@ void QS_glbFilter_(int_fast16_t const filter) {
 //............................................................................
 void QS_locFilter_(int_fast16_t const filter) {
     bool const isRemove = (filter < 0);
-    uint8_t const qs_id = isRemove ? (uint8_t)(-filter) : (uint8_t)filter;
+    uint8_t const qsId = isRemove ? (uint8_t)(-filter) : (uint8_t)filter;
     uint8_t const tmp = (isRemove ? 0x00U : 0xFFU);
     uint_fast8_t i;
-    switch (qs_id) {
+    switch (qsId) {
         case (uint8_t)QS_ALL_IDS:
             // set all local filters (partially unrolled loop)
             for (i = 0U; i < Q_DIM(QS_filt_.loc); i += 4U) {
@@ -10445,16 +10445,16 @@ void QS_locFilter_(int_fast16_t const filter) {
         default: {
             QS_CRIT_STAT
             QS_CRIT_ENTRY();
-            // qs_id must be in range
-            Q_ASSERT_INCRIT(310, qs_id < 0x7FU);
+            // qsId must be in range
+            Q_ASSERT_INCRIT(310, qsId < 0x7FU);
             QS_CRIT_EXIT();
             if (isRemove) {
-                QS_filt_.loc[qs_id >> 3U]
-                    &= (uint8_t)(~(1U << (qs_id & 7U)) & 0xFFU);
+                QS_filt_.loc[qsId >> 3U]
+                    &= (uint8_t)(~(1U << (qsId & 7U)) & 0xFFU);
             }
             else {
-                QS_filt_.loc[qs_id >> 3U]
-                    |= (1U << (qs_id & 7U));
+                QS_filt_.loc[qsId >> 3U]
+                    |= (1U << (qsId & 7U));
             }
             break;
         }
@@ -11141,7 +11141,7 @@ void QS_f64_fmt_(
     QSCtr const end     = QS_priv_.end;
     uint32_t i;
 
-    // static constant untion to detect endianness of the machine
+    // static constant union to detect endianness of the machine
     static union U32Rep {
         uint32_t u32;
         uint8_t  u8;
@@ -11986,7 +11986,7 @@ static void QS_rxHandleGoodFrame_(uint8_t const state) {
                 // dispatch to the current SM object
                 if (QS_rxPriv_.currObj[SM_OBJ] != (void *)0) {
                     // increment the ref-ctr to simulate the situation
-                    // when the event is just retreived from a queue.
+                    // when the event is just retrieved from a queue.
                     // This is expected for the following QF_gc() call.
                     ++l_rx.var.evt.e->refCtr_;
 
@@ -12002,7 +12002,7 @@ static void QS_rxHandleGoodFrame_(uint8_t const state) {
                 // init the current SM object"
                 if (QS_rxPriv_.currObj[SM_OBJ] != (void *)0) {
                     // increment the ref-ctr to simulate the situation
-                    // when the event is just retreived from a queue.
+                    // when the event is just retrieved from a queue.
                     // This is expected for the following QF_gc() call.
                     ++l_rx.var.evt.e->refCtr_;
 
@@ -12271,7 +12271,7 @@ uint32_t QS_getTestProbe_(QSpyFunPtr const api) {
             }
             QS_MEM_APP();
             QS_CRIT_EXIT();
-            break; // we are done (Test-Probe retreived)
+            break; // we are done (Test-Probe retrieved)
         }
     }
     return data;
diff --git a/src/qf/qep_hsm.c b/src/qf/qep_hsm.c
index 1499ef79..ba3cc6b2 100644
--- a/src/qf/qep_hsm.c
+++ b/src/qf/qep_hsm.c
@@ -3,7 +3,7 @@
 // Model: qpc.qm
 // File:  ${src::qf::qep_hsm.c}
 //
-// This code has been generated by QM 5.3.0 .
+// This code has been generated by QM 6.1.1 .
 // DO NOT EDIT THIS FILE MANUALLY. All your changes will be lost.
 //
 // This code is covered by the following QP license:
@@ -90,10 +90,10 @@ enum {
     ((*(state_))(me, &QEvt_reserved_[(sig_)]))
 
 // helper macro to trace state entry
-#define QS_STATE_ENTRY_(state_, qs_id_)         \
+#define QS_STATE_ENTRY_(state_, qsId_)         \
     QS_CRIT_ENTRY();                            \
     QS_MEM_SYS();                               \
-    QS_BEGIN_PRE_(QS_QEP_STATE_ENTRY, (qs_id_)) \
+    QS_BEGIN_PRE_(QS_QEP_STATE_ENTRY, (qsId_)) \
         QS_OBJ_PRE_(me);                        \
         QS_FUN_PRE_(state_);                    \
     QS_END_PRE_()                               \
@@ -101,10 +101,10 @@ enum {
     QS_CRIT_EXIT()
 
 // helper macro to trace state exit
-#define QS_STATE_EXIT_(state_, qs_id_)          \
+#define QS_STATE_EXIT_(state_, qsId_)          \
     QS_CRIT_ENTRY();                            \
     QS_MEM_SYS();                               \
-    QS_BEGIN_PRE_(QS_QEP_STATE_EXIT, (qs_id_))  \
+    QS_BEGIN_PRE_(QS_QEP_STATE_EXIT, (qsId_))  \
         QS_OBJ_PRE_(me);                        \
         QS_FUN_PRE_(state_);                    \
     QS_END_PRE_()                               \
@@ -141,7 +141,7 @@ void QHsm_ctor(QHsm * const me,
 void QHsm_init_(
     QAsm * const me,
     void const * const e,
-    uint_fast8_t const qs_id)
+    uint_fast8_t const qsId)
 {
     QF_CRIT_STAT
 
@@ -159,7 +159,7 @@ void QHsm_init_(
         QS_CRIT_EXIT();
     }
     #else
-    Q_UNUSED_PAR(qs_id);
+    Q_UNUSED_PAR(qsId);
     #endif
 
     QStateHandler t = me->state.fun;
@@ -178,7 +178,7 @@ void QHsm_init_(
     Q_ASSERT_INCRIT(210, r == Q_RET_TRAN);
 
     QS_MEM_SYS();
-    QS_BEGIN_PRE_(QS_QEP_STATE_INIT, qs_id)
+    QS_BEGIN_PRE_(QS_QEP_STATE_INIT, qsId)
         QS_OBJ_PRE_(me);           // this state machine object
         QS_FUN_PRE_(t);            // the source state
         QS_FUN_PRE_(me->temp.fun); // the target of the initial tran.
@@ -210,7 +210,7 @@ void QHsm_init_(
             if (QHSM_RESERVED_EVT_(path[ip], Q_ENTRY_SIG)
                 == Q_RET_HANDLED)
             {
-                QS_STATE_ENTRY_(path[ip], qs_id);
+                QS_STATE_ENTRY_(path[ip], qsId);
             }
             --ip;
         } while (ip >= 0);
@@ -223,7 +223,7 @@ void QHsm_init_(
         if (r == Q_RET_TRAN) {
             QS_CRIT_ENTRY();
             QS_MEM_SYS();
-            QS_BEGIN_PRE_(QS_QEP_STATE_INIT, qs_id)
+            QS_BEGIN_PRE_(QS_QEP_STATE_INIT, qsId)
                 QS_OBJ_PRE_(me);           // this state machine object
                 QS_FUN_PRE_(t);            // the source state
                 QS_FUN_PRE_(me->temp.fun); // the target of the initial tran.
@@ -237,7 +237,7 @@ void QHsm_init_(
 
     QS_CRIT_ENTRY();
     QS_MEM_SYS();
-    QS_BEGIN_PRE_(QS_QEP_INIT_TRAN, qs_id)
+    QS_BEGIN_PRE_(QS_QEP_INIT_TRAN, qsId)
         QS_TIME_PRE_();    // time stamp
         QS_OBJ_PRE_(me);   // this state machine object
         QS_FUN_PRE_(t);    // the new active state
@@ -256,10 +256,10 @@ void QHsm_init_(
 void QHsm_dispatch_(
     QAsm * const me,
     QEvt const * const e,
-    uint_fast8_t const qs_id)
+    uint_fast8_t const qsId)
 {
     #ifndef Q_SPY
-    Q_UNUSED_PAR(qs_id);
+    Q_UNUSED_PAR(qsId);
     #endif
 
     QStateHandler s = me->state.fun;
@@ -272,7 +272,7 @@ void QHsm_dispatch_(
     Q_REQUIRE_INCRIT(302, QEvt_verify_(e));
 
     QS_MEM_SYS();
-    QS_BEGIN_PRE_(QS_QEP_DISPATCH, qs_id)
+    QS_BEGIN_PRE_(QS_QEP_DISPATCH, qsId)
         QS_TIME_PRE_();      // time stamp
         QS_SIG_PRE_(e->sig); // the signal of the event
         QS_OBJ_PRE_(me);     // this state machine object
@@ -293,7 +293,7 @@ void QHsm_dispatch_(
 
             QS_CRIT_ENTRY();
             QS_MEM_SYS();
-            QS_BEGIN_PRE_(QS_QEP_UNHANDLED, qs_id)
+            QS_BEGIN_PRE_(QS_QEP_UNHANDLED, qsId)
                 QS_SIG_PRE_(e->sig); // the signal of the event
                 QS_OBJ_PRE_(me);     // this state machine object
                 QS_FUN_PRE_(s);      // the current state
@@ -316,18 +316,18 @@ void QHsm_dispatch_(
         for (; t != s; t = me->temp.fun) {
             // exit from t
             if (QHSM_RESERVED_EVT_(t, Q_EXIT_SIG) == Q_RET_HANDLED) {
-                QS_STATE_EXIT_(t, qs_id);
+                QS_STATE_EXIT_(t, qsId);
                 // find superstate of t
                 (void)QHSM_RESERVED_EVT_(t, Q_EMPTY_SIG);
             }
         }
-        int_fast8_t ip = QHsm_tran_(me, path, qs_id); // take the tran.
+        int_fast8_t ip = QHsm_tran_(me, path, qsId); // take the tran.
 
     #ifdef Q_SPY
         if (r == Q_RET_TRAN_HIST) {
             QS_CRIT_ENTRY();
             QS_MEM_SYS();
-            QS_BEGIN_PRE_(QS_QEP_TRAN_HIST, qs_id)
+            QS_BEGIN_PRE_(QS_QEP_TRAN_HIST, qsId)
                 QS_OBJ_PRE_(me);      // this state machine object
                 QS_FUN_PRE_(t);       // the source of the tran.
                 QS_FUN_PRE_(path[0]); // the target of the tran. to history
@@ -343,7 +343,7 @@ void QHsm_dispatch_(
             if (QHSM_RESERVED_EVT_(path[ip], Q_ENTRY_SIG)
                 == Q_RET_HANDLED)
             {
-                QS_STATE_ENTRY_(path[ip], qs_id);
+                QS_STATE_ENTRY_(path[ip], qsId);
             }
         }
         t = path[0];      // stick the target into register
@@ -354,7 +354,7 @@ void QHsm_dispatch_(
 
             QS_CRIT_ENTRY();
             QS_MEM_SYS();
-            QS_BEGIN_PRE_(QS_QEP_STATE_INIT, qs_id)
+            QS_BEGIN_PRE_(QS_QEP_STATE_INIT, qsId)
                 QS_OBJ_PRE_(me);           // this state machine object
                 QS_FUN_PRE_(t);            // the source (pseudo)state
                 QS_FUN_PRE_(me->temp.fun); // the target of the tran.
@@ -387,7 +387,7 @@ void QHsm_dispatch_(
                 if (QHSM_RESERVED_EVT_(path[ip], Q_ENTRY_SIG)
                     == Q_RET_HANDLED)
                 {
-                    QS_STATE_ENTRY_(path[ip], qs_id);
+                    QS_STATE_ENTRY_(path[ip], qsId);
                 }
                 --ip;
             } while (ip >= 0);
@@ -397,7 +397,7 @@ void QHsm_dispatch_(
 
         QS_CRIT_ENTRY();
         QS_MEM_SYS();
-        QS_BEGIN_PRE_(QS_QEP_TRAN, qs_id)
+        QS_BEGIN_PRE_(QS_QEP_TRAN, qsId)
             QS_TIME_PRE_();      // time stamp
             QS_SIG_PRE_(e->sig); // the signal of the event
             QS_OBJ_PRE_(me);     // this state machine object
@@ -412,7 +412,7 @@ void QHsm_dispatch_(
     else if (r == Q_RET_HANDLED) {
         QS_CRIT_ENTRY();
         QS_MEM_SYS();
-        QS_BEGIN_PRE_(QS_QEP_INTERN_TRAN, qs_id)
+        QS_BEGIN_PRE_(QS_QEP_INTERN_TRAN, qsId)
             QS_TIME_PRE_();      // time stamp
             QS_SIG_PRE_(e->sig); // the signal of the event
             QS_OBJ_PRE_(me);     // this state machine object
@@ -424,7 +424,7 @@ void QHsm_dispatch_(
     else {
         QS_CRIT_ENTRY();
         QS_MEM_SYS();
-        QS_BEGIN_PRE_(QS_QEP_IGNORED, qs_id)
+        QS_BEGIN_PRE_(QS_QEP_IGNORED, qsId)
             QS_TIME_PRE_();      // time stamp
             QS_SIG_PRE_(e->sig); // the signal of the event
             QS_OBJ_PRE_(me);     // this state machine object
@@ -529,10 +529,10 @@ QStateHandler QHsm_childState(QHsm * const me,
 int_fast8_t QHsm_tran_(
     QAsm * const me,
     QStateHandler * const path,
-    uint_fast8_t const qs_id)
+    uint_fast8_t const qsId)
 {
     #ifndef Q_SPY
-    Q_UNUSED_PAR(qs_id);
+    Q_UNUSED_PAR(qsId);
     #endif
 
     int_fast8_t ip = -1; // tran. entry path index
@@ -544,7 +544,7 @@ int_fast8_t QHsm_tran_(
     if (s == t) {
         // exit source s
         if (QHSM_RESERVED_EVT_(s, Q_EXIT_SIG) == Q_RET_HANDLED) {
-            QS_STATE_EXIT_(s, qs_id);
+            QS_STATE_EXIT_(s, qsId);
         }
         ip = 0; // enter the target
     }
@@ -566,7 +566,7 @@ int_fast8_t QHsm_tran_(
             if (me->temp.fun == t) {
                 // exit source s
                 if (QHSM_RESERVED_EVT_(s, Q_EXIT_SIG) == Q_RET_HANDLED) {
-                    QS_STATE_EXIT_(s, qs_id);
+                    QS_STATE_EXIT_(s, qsId);
                 }
                 ip = 0; // enter the target
             }
@@ -575,7 +575,7 @@ int_fast8_t QHsm_tran_(
                 if (me->temp.fun == path[0]) {
                     // exit source s
                     if (QHSM_RESERVED_EVT_(s, Q_EXIT_SIG) == Q_RET_HANDLED) {
-                        QS_STATE_EXIT_(s, qs_id);
+                        QS_STATE_EXIT_(s, qsId);
                     }
                 }
                 else {
@@ -617,7 +617,7 @@ int_fast8_t QHsm_tran_(
                         if (QHSM_RESERVED_EVT_(s, Q_EXIT_SIG)
                             == Q_RET_HANDLED)
                         {
-                            QS_STATE_EXIT_(s, qs_id);
+                            QS_STATE_EXIT_(s, qsId);
                         }
 
                         // (f) check the rest of source->super
@@ -645,7 +645,7 @@ int_fast8_t QHsm_tran_(
                                 if (QHSM_RESERVED_EVT_(t, Q_EXIT_SIG)
                                     == Q_RET_HANDLED)
                                 {
-                                    QS_STATE_EXIT_(t, qs_id);
+                                    QS_STATE_EXIT_(t, qsId);
                                     // find superstate of t
                                     (void)QHSM_RESERVED_EVT_(t, Q_EMPTY_SIG);
                                 }
diff --git a/src/qf/qep_msm.c b/src/qf/qep_msm.c
index eadf5b39..74215aa9 100644
--- a/src/qf/qep_msm.c
+++ b/src/qf/qep_msm.c
@@ -3,7 +3,7 @@
 // Model: qpc.qm
 // File:  ${src::qf::qep_msm.c}
 //
-// This code has been generated by QM 5.3.0 .
+// This code has been generated by QM 6.1.1 .
 // DO NOT EDIT THIS FILE MANUALLY. All your changes will be lost.
 //
 // This code is covered by the following QP license:
@@ -113,10 +113,10 @@ void QMsm_ctor(QMsm * const me,
 void QMsm_init_(
     QAsm * const me,
     void const * const e,
-    uint_fast8_t const qs_id)
+    uint_fast8_t const qsId)
 {
     #ifndef Q_SPY
-    Q_UNUSED_PAR(qs_id);
+    Q_UNUSED_PAR(qsId);
     #endif
 
     QF_CRIT_STAT
@@ -134,7 +134,7 @@ void QMsm_init_(
     Q_ASSERT_INCRIT(210, r == Q_RET_TRAN_INIT);
 
     QS_MEM_SYS();
-    QS_BEGIN_PRE_(QS_QEP_STATE_INIT, qs_id)
+    QS_BEGIN_PRE_(QS_QEP_STATE_INIT, qsId)
         QS_OBJ_PRE_(me); // this state machine object
         QS_FUN_PRE_(me->state.obj->stateHandler);          // source state
         QS_FUN_PRE_(me->temp.tatbl->target->stateHandler); // target state
@@ -149,12 +149,12 @@ void QMsm_init_(
     // drill down into the state hierarchy with initial transitions...
     do {
         // execute the tran. table
-        r = QMsm_execTatbl_(me, me->temp.tatbl, qs_id);
+        r = QMsm_execTatbl_(me, me->temp.tatbl, qsId);
     } while (r >= Q_RET_TRAN_INIT);
 
     QS_CRIT_ENTRY();
     QS_MEM_SYS();
-    QS_BEGIN_PRE_(QS_QEP_INIT_TRAN, qs_id)
+    QS_BEGIN_PRE_(QS_QEP_INIT_TRAN, qsId)
         QS_TIME_PRE_();    // time stamp
         QS_OBJ_PRE_(me);   // this state machine object
         QS_FUN_PRE_(me->state.obj->stateHandler); // the new current state
@@ -172,10 +172,10 @@ void QMsm_init_(
 void QMsm_dispatch_(
     QAsm * const me,
     QEvt const * const e,
-    uint_fast8_t const qs_id)
+    uint_fast8_t const qsId)
 {
     #ifndef Q_SPY
-    Q_UNUSED_PAR(qs_id);
+    Q_UNUSED_PAR(qsId);
     #endif
 
     QMState const *s = me->state.obj; // store the current state
@@ -188,7 +188,7 @@ void QMsm_dispatch_(
     Q_REQUIRE_INCRIT(302, QEvt_verify_(e));
 
     QS_MEM_SYS();
-    QS_BEGIN_PRE_(QS_QEP_DISPATCH, qs_id)
+    QS_BEGIN_PRE_(QS_QEP_DISPATCH, qsId)
         QS_TIME_PRE_();               // time stamp
         QS_SIG_PRE_(e->sig);          // the signal of the event
         QS_OBJ_PRE_(me);              // this state machine object
@@ -221,7 +221,7 @@ void QMsm_dispatch_(
             Q_ASSERT_INCRIT(310, r == Q_RET_UNHANDLED);
 
             QS_MEM_SYS();
-            QS_BEGIN_PRE_(QS_QEP_UNHANDLED, qs_id)
+            QS_BEGIN_PRE_(QS_QEP_UNHANDLED, qsId)
                 QS_SIG_PRE_(e->sig);  // the signal of the event
                 QS_OBJ_PRE_(me);      // this state machine object
                 QS_FUN_PRE_(t->stateHandler); // the current state
@@ -252,17 +252,17 @@ void QMsm_dispatch_(
             // was TRAN, TRAN_INIT, or TRAN_EP taken?
             if (r <= Q_RET_TRAN_EP) {
                 me->temp.obj = (QMState *)0; // clear
-                QMsm_exitToTranSource_(me, s, t, qs_id);
-                r = QMsm_execTatbl_(me, tatbl, qs_id);
+                QMsm_exitToTranSource_(me, s, t, qsId);
+                r = QMsm_execTatbl_(me, tatbl, qsId);
                 s = me->state.obj;
             }
             // was a tran. segment to history taken?
             else if (r == Q_RET_TRAN_HIST) {
                 tmp.obj = me->state.obj; // save history
                 me->state.obj = s; // restore the original state
-                QMsm_exitToTranSource_(me, s, t, qs_id);
-                (void)QMsm_execTatbl_(me, tatbl, qs_id);
-                r = QMsm_enterHistory_(me, tmp.obj, qs_id);
+                QMsm_exitToTranSource_(me, s, t, qsId);
+                (void)QMsm_execTatbl_(me, tatbl, qsId);
+                r = QMsm_enterHistory_(me, tmp.obj, qsId);
                 s = me->state.obj;
             }
             else {
@@ -278,9 +278,9 @@ void QMsm_dispatch_(
     #ifdef Q_SPY
                     tmp.tatbl = me->temp.tatbl; // save me->temp
     #endif // Q_SPY
-                    QMsm_exitToTranSource_(me, s, t, qs_id);
+                    QMsm_exitToTranSource_(me, s, t, qsId);
                     // take the tran-to-XP segment inside submachine
-                    (void)QMsm_execTatbl_(me, tatbl, qs_id);
+                    (void)QMsm_execTatbl_(me, tatbl, qsId);
                     s = me->state.obj;
     #ifdef Q_SPY
                     me->temp.tatbl = tmp.tatbl; // restore me->temp
@@ -290,9 +290,9 @@ void QMsm_dispatch_(
                     tmp.obj = me->state.obj; // save the history
                     me->state.obj = s; // restore the original state
                     s = me->temp.obj; // save me->temp
-                    QMsm_exitToTranSource_(me, me->state.obj, t, qs_id);
+                    QMsm_exitToTranSource_(me, me->state.obj, t, qsId);
                     // take the tran-to-XP segment inside submachine
-                    (void)QMsm_execTatbl_(me, tatbl, qs_id);
+                    (void)QMsm_execTatbl_(me, tatbl, qsId);
     #ifdef Q_SPY
                     me->temp.obj = s; // restore me->temp
     #endif // Q_SPY
@@ -313,7 +313,7 @@ void QMsm_dispatch_(
 
         QS_CRIT_ENTRY();
         QS_MEM_SYS();
-        QS_BEGIN_PRE_(QS_QEP_TRAN, qs_id)
+        QS_BEGIN_PRE_(QS_QEP_TRAN, qsId)
             QS_TIME_PRE_();                 // time stamp
             QS_SIG_PRE_(e->sig);            // the signal of the event
             QS_OBJ_PRE_(me);                // this state machine object
@@ -332,7 +332,7 @@ void QMsm_dispatch_(
         Q_ASSERT_INCRIT(340, t != (QMState *)0);
 
         QS_MEM_SYS();
-        QS_BEGIN_PRE_(QS_QEP_INTERN_TRAN, qs_id)
+        QS_BEGIN_PRE_(QS_QEP_INTERN_TRAN, qsId)
             QS_TIME_PRE_();                 // time stamp
             QS_SIG_PRE_(e->sig);            // the signal of the event
             QS_OBJ_PRE_(me);                // this state machine object
@@ -346,7 +346,7 @@ void QMsm_dispatch_(
     else if (t == (QMState *)0) {
         QS_CRIT_ENTRY();
         QS_MEM_SYS();
-        QS_BEGIN_PRE_(QS_QEP_IGNORED, qs_id)
+        QS_BEGIN_PRE_(QS_QEP_IGNORED, qsId)
             QS_TIME_PRE_();                 // time stamp
             QS_SIG_PRE_(e->sig);            // the signal of the event
             QS_OBJ_PRE_(me);                // this state machine object
@@ -462,10 +462,10 @@ QMState const * QMsm_childStateObj(QMsm const * const me,
 QState QMsm_execTatbl_(
     QAsm * const me,
     QMTranActTable const * const tatbl,
-    uint_fast8_t const qs_id)
+    uint_fast8_t const qsId)
 {
     #ifndef Q_SPY
-    Q_UNUSED_PAR(qs_id);
+    Q_UNUSED_PAR(qsId);
     #endif
 
     QF_CRIT_STAT
@@ -485,33 +485,33 @@ QState QMsm_execTatbl_(
         QS_CRIT_ENTRY();
         QS_MEM_SYS();
         if (r == Q_RET_ENTRY) {
-            QS_BEGIN_PRE_(QS_QEP_STATE_ENTRY, qs_id)
+            QS_BEGIN_PRE_(QS_QEP_STATE_ENTRY, qsId)
                 QS_OBJ_PRE_(me); // this state machine object
                 QS_FUN_PRE_(me->temp.obj->stateHandler); // entered state
             QS_END_PRE_()
         }
         else if (r == Q_RET_EXIT) {
-            QS_BEGIN_PRE_(QS_QEP_STATE_EXIT, qs_id)
+            QS_BEGIN_PRE_(QS_QEP_STATE_EXIT, qsId)
                 QS_OBJ_PRE_(me); // this state machine object
                 QS_FUN_PRE_(me->temp.obj->stateHandler); // exited state
             QS_END_PRE_()
         }
         else if (r == Q_RET_TRAN_INIT) {
-            QS_BEGIN_PRE_(QS_QEP_STATE_INIT, qs_id)
+            QS_BEGIN_PRE_(QS_QEP_STATE_INIT, qsId)
                 QS_OBJ_PRE_(me); // this state machine object
                 QS_FUN_PRE_(tatbl->target->stateHandler);          // source
                 QS_FUN_PRE_(me->temp.tatbl->target->stateHandler); // target
             QS_END_PRE_()
         }
         else if (r == Q_RET_TRAN_EP) {
-            QS_BEGIN_PRE_(QS_QEP_TRAN_EP, qs_id)
+            QS_BEGIN_PRE_(QS_QEP_TRAN_EP, qsId)
                 QS_OBJ_PRE_(me); // this state machine object
                 QS_FUN_PRE_(tatbl->target->stateHandler);          // source
                 QS_FUN_PRE_(me->temp.tatbl->target->stateHandler); // target
             QS_END_PRE_()
         }
         else if (r == Q_RET_TRAN_XP) {
-            QS_BEGIN_PRE_(QS_QEP_TRAN_XP, qs_id)
+            QS_BEGIN_PRE_(QS_QEP_TRAN_XP, qsId)
                 QS_OBJ_PRE_(me); // this state machine object
                 QS_FUN_PRE_(tatbl->target->stateHandler);          // source
                 QS_FUN_PRE_(me->temp.tatbl->target->stateHandler); // target
@@ -537,10 +537,10 @@ void QMsm_exitToTranSource_(
     QAsm * const me,
     QMState const * const cs,
     QMState const * const ts,
-    uint_fast8_t const qs_id)
+    uint_fast8_t const qsId)
 {
     #ifndef Q_SPY
-    Q_UNUSED_PAR(qs_id);
+    Q_UNUSED_PAR(qsId);
     #endif
 
     QF_CRIT_STAT
@@ -555,7 +555,7 @@ void QMsm_exitToTranSource_(
 
             QS_CRIT_ENTRY();
             QS_MEM_SYS();
-            QS_BEGIN_PRE_(QS_QEP_STATE_EXIT, qs_id)
+            QS_BEGIN_PRE_(QS_QEP_STATE_EXIT, qsId)
                 QS_OBJ_PRE_(me);              // this state machine object
                 QS_FUN_PRE_(s->stateHandler); // the exited state handler
             QS_END_PRE_()
@@ -579,10 +579,10 @@ void QMsm_exitToTranSource_(
 QState QMsm_enterHistory_(
     QAsm * const me,
     QMState const *const hist,
-    uint_fast8_t const qs_id)
+    uint_fast8_t const qsId)
 {
     #ifndef Q_SPY
-    Q_UNUSED_PAR(qs_id);
+    Q_UNUSED_PAR(qsId);
     #endif
 
     QMState const *s = hist;
@@ -593,7 +593,7 @@ QState QMsm_enterHistory_(
 
     QS_CRIT_ENTRY();
     QS_MEM_SYS();
-    QS_BEGIN_PRE_(QS_QEP_TRAN_HIST, qs_id)
+    QS_BEGIN_PRE_(QS_QEP_TRAN_HIST, qsId)
         QS_OBJ_PRE_(me);                 // this state machine object
         QS_FUN_PRE_(ts->stateHandler);   // source state handler
         QS_FUN_PRE_(hist->stateHandler); // target state handler
@@ -623,7 +623,7 @@ QState QMsm_enterHistory_(
 
         QS_CRIT_ENTRY();
         QS_MEM_SYS();
-        QS_BEGIN_PRE_(QS_QEP_STATE_ENTRY, qs_id)
+        QS_BEGIN_PRE_(QS_QEP_STATE_ENTRY, qsId)
             QS_OBJ_PRE_(me);
             QS_FUN_PRE_(epath[i]->stateHandler); // entered state handler
         QS_END_PRE_()
diff --git a/src/qf/qf_act.c b/src/qf/qf_act.c
index ce8def49..a04c0cd6 100644
--- a/src/qf/qf_act.c
+++ b/src/qf/qf_act.c
@@ -3,7 +3,7 @@
 // Model: qpc.qm
 // File:  ${src::qf::qf_act.c}
 //
-// This code has been generated by QM 5.3.0 .
+// This code has been generated by QM 6.1.1 .
 // DO NOT EDIT THIS FILE MANUALLY. All your changes will be lost.
 //
 // This code is covered by the following QP license:
diff --git a/src/qf/qf_actq.c b/src/qf/qf_actq.c
index 508bda32..26fca881 100644
--- a/src/qf/qf_actq.c
+++ b/src/qf/qf_actq.c
@@ -3,7 +3,7 @@
 // Model: qpc.qm
 // File:  ${src::qf::qf_actq.c}
 //
-// This code has been generated by QM 5.3.0 .
+// This code has been generated by QM 6.1.1 .
 // DO NOT EDIT THIS FILE MANUALLY. All your changes will be lost.
 //
 // This code is covered by the following QP license:
@@ -117,7 +117,7 @@ bool QActive_post_(QActive * const me,
     }
 
     // is it a mutable event?
-    if (QEvt_getPoolId_(e) != 0U) {
+    if (QEvt_getPoolNum_(e) != 0U) {
         QEvt_refCtr_inc_(e); // increment the reference counter
     }
 
@@ -134,7 +134,7 @@ bool QActive_post_(QActive * const me,
             QS_OBJ_PRE_(sender);  // the sender object
             QS_SIG_PRE_(e->sig);  // the signal of the event
             QS_OBJ_PRE_(me);      // this active object (recipient)
-            QS_2U8_PRE_(QEvt_getPoolId_(e), e->refCtr_); // poolId & refCtr
+            QS_2U8_PRE_(QEvt_getPoolNum_(e), e->refCtr_); // poolNum & refCtr
             QS_EQC_PRE_(nFree);   // # free entries
             QS_EQC_PRE_(me->eQueue.nMin); // min # free entries
         QS_END_PRE_()
@@ -183,7 +183,7 @@ bool QActive_post_(QActive * const me,
             QS_OBJ_PRE_(sender);  // the sender object
             QS_SIG_PRE_(e->sig);  // the signal of the event
             QS_OBJ_PRE_(me);      // this active object (recipient)
-            QS_2U8_PRE_(QEvt_getPoolId_(e), e->refCtr_); // poolId & refCtr
+            QS_2U8_PRE_(QEvt_getPoolNum_(e), e->refCtr_); // poolNum & refCtr
             QS_EQC_PRE_(nFree);   // # free entries
             QS_EQC_PRE_(margin);  // margin requested
         QS_END_PRE_()
@@ -247,7 +247,7 @@ void QActive_postLIFO_(QActive * const me,
 
     Q_REQUIRE_INCRIT(201, nFree != 0U);
 
-    if (QEvt_getPoolId_(e) != 0U) { // is it a mutable event?
+    if (QEvt_getPoolNum_(e) != 0U) { // is it a mutable event?
         QEvt_refCtr_inc_(e); // increment the reference counter
     }
 
@@ -261,7 +261,7 @@ void QActive_postLIFO_(QActive * const me,
         QS_TIME_PRE_();       // timestamp
         QS_SIG_PRE_(e->sig);  // the signal of this event
         QS_OBJ_PRE_(me);      // this active object
-        QS_2U8_PRE_(QEvt_getPoolId_(e), e->refCtr_);// poolId & refCtr
+        QS_2U8_PRE_(QEvt_getPoolNum_(e), e->refCtr_);// poolNum & refCtr
         QS_EQC_PRE_(nFree);   // # free entries
         QS_EQC_PRE_(me->eQueue.nMin); // min # free entries
     QS_END_PRE_()
@@ -322,7 +322,7 @@ QEvt const * QActive_get_(QActive * const me) {
             QS_TIME_PRE_();       // timestamp
             QS_SIG_PRE_(e->sig);  // the signal of this event
             QS_OBJ_PRE_(me);      // this active object
-            QS_2U8_PRE_(QEvt_getPoolId_(e), e->refCtr_); // poolId & refCtr
+            QS_2U8_PRE_(QEvt_getPoolNum_(e), e->refCtr_); // poolNum & refCtr
             QS_EQC_PRE_(nFree);   // # free entries
         QS_END_PRE_()
     }
@@ -336,7 +336,7 @@ QEvt const * QActive_get_(QActive * const me) {
             QS_TIME_PRE_();       // timestamp
             QS_SIG_PRE_(e->sig);  // the signal of this event
             QS_OBJ_PRE_(me);      // this active object
-            QS_2U8_PRE_(QEvt_getPoolId_(e), e->refCtr_); // poolId & refCtr
+            QS_2U8_PRE_(QEvt_getPoolNum_(e), e->refCtr_); // poolNum & refCtr
         QS_END_PRE_()
     }
 
@@ -393,11 +393,11 @@ void QTicker_ctor(QTicker * const me,
 void QTicker_init_(
     QAsm * const me,
     void const * const par,
-    uint_fast8_t const qs_id)
+    uint_fast8_t const qsId)
 {
     Q_UNUSED_PAR(me);
     Q_UNUSED_PAR(par);
-    Q_UNUSED_PAR(qs_id);
+    Q_UNUSED_PAR(qsId);
 
     QF_CRIT_STAT
     QF_CRIT_ENTRY();
@@ -414,10 +414,10 @@ void QTicker_init_(
 void QTicker_dispatch_(
     QAsm * const me,
     QEvt const * const e,
-    uint_fast8_t const qs_id)
+    uint_fast8_t const qsId)
 {
     Q_UNUSED_PAR(e);
-    Q_UNUSED_PAR(qs_id);
+    Q_UNUSED_PAR(qsId);
 
     QF_CRIT_STAT
     QF_CRIT_ENTRY();
@@ -464,7 +464,7 @@ void QTicker_trig_(
         QS_OBJ_PRE_(sender); // the sender object
         QS_SIG_PRE_(0U);     // the signal of the event
         QS_OBJ_PRE_(me);     // this active object
-        QS_2U8_PRE_(0U, 0U); // poolId & refCtr
+        QS_2U8_PRE_(0U, 0U); // poolNum & refCtr
         QS_EQC_PRE_(0U);     // # free entries
         QS_EQC_PRE_(0U);     // min # free entries
     QS_END_PRE_()
diff --git a/src/qf/qf_defer.c b/src/qf/qf_defer.c
index 393c83ab..118598d0 100644
--- a/src/qf/qf_defer.c
+++ b/src/qf/qf_defer.c
@@ -3,7 +3,7 @@
 // Model: qpc.qm
 // File:  ${src::qf::qf_defer.c}
 //
-// This code has been generated by QM 5.3.0 .
+// This code has been generated by QM 6.1.1 .
 // DO NOT EDIT THIS FILE MANUALLY. All your changes will be lost.
 //
 // This code is covered by the following QP license:
@@ -78,7 +78,7 @@ bool QActive_defer(QActive const * const me,
         QS_OBJ_PRE_(me);     // this active object
         QS_OBJ_PRE_(eq);     // the deferred queue
         QS_SIG_PRE_(e->sig); // the signal of the event
-        QS_2U8_PRE_(QEvt_getPoolId_(e), e->refCtr_); // poolId & refCtr
+        QS_2U8_PRE_(QEvt_getPoolNum_(e), e->refCtr_); // poolNum & refCtr
     QS_END_PRE_()
     QS_MEM_APP();
     QS_CRIT_EXIT();
@@ -103,7 +103,7 @@ bool QActive_recall(QActive * const me,
         QF_CRIT_ENTRY();
         QF_MEM_SYS();
 
-        if (QEvt_getPoolId_(e) != 0U) { // is it a mutable event?
+        if (QEvt_getPoolNum_(e) != 0U) { // is it a mutable event?
 
             // after posting to the AO's queue the event must be referenced
             // at least twice: once in the deferred event queue (eq->get()
@@ -121,7 +121,7 @@ bool QActive_recall(QActive * const me,
             QS_OBJ_PRE_(me);     // this active object
             QS_OBJ_PRE_(eq);     // the deferred queue
             QS_SIG_PRE_(e->sig); // the signal of the event
-            QS_2U8_PRE_(QEvt_getPoolId_(e), e->refCtr_); // poolId & refCtr
+            QS_2U8_PRE_(QEvt_getPoolNum_(e), e->refCtr_); // poolNum & refCtr
         QS_END_PRE_()
 
         QF_MEM_APP();
diff --git a/src/qf/qf_dyn.c b/src/qf/qf_dyn.c
index 40e42f3c..0b78521e 100644
--- a/src/qf/qf_dyn.c
+++ b/src/qf/qf_dyn.c
@@ -3,7 +3,7 @@
 // Model: qpc.qm
 // File:  ${src::qf::qf_dyn.c}
 //
-// This code has been generated by QM 5.3.0 .
+// This code has been generated by QM 6.1.1 .
 // DO NOT EDIT THIS FILE MANUALLY. All your changes will be lost.
 //
 // This code is covered by the following QP license:
@@ -71,32 +71,32 @@ void QF_poolInit(
     uint_fast32_t const poolSize,
     uint_fast16_t const evtSize)
 {
-    uint_fast8_t const poolId = QF_priv_.maxPool_;
+    uint_fast8_t const poolNum = QF_priv_.maxPool_;
 
     // see precondition{qf_dyn,200} and precondition{qf_dyn,201}
     QF_CRIT_STAT
     QF_CRIT_ENTRY();
     QF_MEM_SYS();
 
-    Q_REQUIRE_INCRIT(200, poolId < QF_MAX_EPOOL);
-    if (poolId > 0U) {
+    Q_REQUIRE_INCRIT(200, poolNum < QF_MAX_EPOOL);
+    if (poolNum > 0U) {
         Q_REQUIRE_INCRIT(201,
-            QF_EPOOL_EVENT_SIZE_(QF_priv_.ePool_[poolId - 1U]) < evtSize);
+            QF_EPOOL_EVENT_SIZE_(QF_priv_.ePool_[poolNum - 1U]) < evtSize);
     }
-    QF_priv_.maxPool_ = poolId + 1U; // one more pool
+    QF_priv_.maxPool_ = poolNum + 1U; // one more pool
 
     QF_MEM_APP();
     QF_CRIT_EXIT();
 
     // perform the port-dependent initialization of the event-pool
-    QF_EPOOL_INIT_(QF_priv_.ePool_[poolId], poolSto, poolSize, evtSize);
+    QF_EPOOL_INIT_(QF_priv_.ePool_[poolNum], poolSto, poolSize, evtSize);
 
     #ifdef Q_SPY
     // generate the object-dictionary entry for the initialized pool
     {
         uint8_t obj_name[9] = "EvtPool?";
-        obj_name[7] = (uint8_t)((uint8_t)'0' + poolId + 1U);
-        QS_obj_dict_pre_(&QF_priv_.ePool_[poolId], (char const *)obj_name);
+        obj_name[7] = (uint8_t)((uint8_t)'0' + poolNum + 1U);
+        QS_obj_dict_pre_(&QF_priv_.ePool_[poolNum], (char const *)obj_name);
     }
     #endif // Q_SPY
 }
@@ -109,15 +109,15 @@ uint_fast16_t QF_poolGetMaxBlockSize(void) {
 
 //${QF::QF-dyn::getPoolMin} ..................................................
 //! @static @public @memberof QF
-uint_fast16_t QF_getPoolMin(uint_fast8_t const poolId) {
+uint_fast16_t QF_getPoolMin(uint_fast8_t const poolNum) {
     QF_CRIT_STAT
     QF_CRIT_ENTRY();
     QF_MEM_SYS();
 
-    Q_REQUIRE_INCRIT(400, (poolId <= QF_MAX_EPOOL)
-                      && (0U < poolId) && (poolId <= QF_priv_.maxPool_));
+    Q_REQUIRE_INCRIT(400, (poolNum <= QF_MAX_EPOOL)
+                      && (0U < poolNum) && (poolNum <= QF_priv_.maxPool_));
 
-    uint_fast16_t const min = (uint_fast16_t)QF_priv_.ePool_[poolId - 1U].nMin;
+    uint_fast16_t const min = (uint_fast16_t)QF_priv_.ePool_[poolNum - 1U].nMin;
 
     QF_MEM_APP();
     QF_CRIT_EXIT();
@@ -137,18 +137,18 @@ QEvt * QF_newX_(
     QF_MEM_SYS();
 
     // find the pool id that fits the requested event size...
-    uint_fast8_t poolId = 0U; // zero-based poolId initially
-    for (; poolId < QF_priv_.maxPool_; ++poolId) {
-        if (evtSize <= QF_EPOOL_EVENT_SIZE_(QF_priv_.ePool_[poolId])) {
+    uint_fast8_t poolNum = 0U; // zero-based poolNum initially
+    for (; poolNum < QF_priv_.maxPool_; ++poolNum) {
+        if (evtSize <= QF_EPOOL_EVENT_SIZE_(QF_priv_.ePool_[poolNum])) {
             break;
         }
     }
 
     // precondition:
     // - cannot run out of registered pools
-    Q_REQUIRE_INCRIT(300, poolId < QF_priv_.maxPool_);
+    Q_REQUIRE_INCRIT(300, poolNum < QF_priv_.maxPool_);
 
-    ++poolId; // convert to 1-based poolId
+    ++poolNum; // convert to 1-based poolNum
 
     QF_MEM_APP();
     QF_CRIT_EXIT();
@@ -156,23 +156,23 @@ QEvt * QF_newX_(
     // get event e (port-dependent)...
     QEvt *e;
     #ifdef Q_SPY
-    QF_EPOOL_GET_(QF_priv_.ePool_[poolId - 1U], e,
+    QF_EPOOL_GET_(QF_priv_.ePool_[poolNum - 1U], e,
                   ((margin != QF_NO_MARGIN) ? margin : 0U),
-                  (uint_fast8_t)QS_EP_ID + poolId);
+                  (uint_fast8_t)QS_EP_ID + poolNum);
     #else
-    QF_EPOOL_GET_(QF_priv_.ePool_[poolId - 1U], e,
+    QF_EPOOL_GET_(QF_priv_.ePool_[poolNum - 1U], e,
                   ((margin != QF_NO_MARGIN) ? margin : 0U), 0U);
     #endif
 
     if (e != (QEvt *)0) { // was e allocated correctly?
         e->sig     = (QSignal)sig; // set the signal
         e->refCtr_ = 0U; // initialize the reference counter to 0
-        e->evtTag_ = (uint8_t)(QEVT_MARKER | poolId);
+        e->evtTag_ = (uint8_t)(QEVT_MARKER | poolNum);
 
         QS_CRIT_ENTRY();
         QS_MEM_SYS();
         QS_BEGIN_PRE_(QS_QF_NEW,
-                (uint_fast8_t)QS_EP_ID + poolId)
+                (uint_fast8_t)QS_EP_ID + poolNum)
             QS_TIME_PRE_();        // timestamp
             QS_EVS_PRE_(evtSize);  // the size of the event
             QS_SIG_PRE_(sig);      // the signal of the event
@@ -190,7 +190,7 @@ QEvt * QF_newX_(
 
         QS_MEM_SYS();
         QS_BEGIN_PRE_(QS_QF_NEW_ATTEMPT,
-                (uint_fast8_t)QS_EP_ID + poolId)
+                (uint_fast8_t)QS_EP_ID + poolNum)
             QS_TIME_PRE_();        // timestamp
             QS_EVS_PRE_(evtSize);  // the size of the event
             QS_SIG_PRE_(sig);      // the signal of the event
@@ -212,18 +212,18 @@ void QF_gc(QEvt const * const e) {
     QF_CRIT_ENTRY();
     Q_REQUIRE_INCRIT(402, QEvt_verify_(e));
 
-    uint_fast8_t const poolId = QEvt_getPoolId_(e);
+    uint_fast8_t const poolNum = QEvt_getPoolNum_(e);
 
-    if (poolId != 0U) { // is it a pool event (mutable)?
+    if (poolNum != 0U) { // is it a pool event (mutable)?
         QF_MEM_SYS();
 
         if (e->refCtr_ > 1U) { // isn't this the last reference?
 
             QS_BEGIN_PRE_(QS_QF_GC_ATTEMPT,
-                    (uint_fast8_t)QS_EP_ID + poolId)
+                    (uint_fast8_t)QS_EP_ID + poolNum)
                 QS_TIME_PRE_();       // timestamp
                 QS_SIG_PRE_(e->sig);  // the signal of the event
-                QS_2U8_PRE_(poolId, e->refCtr_); // poolId & refCtr
+                QS_2U8_PRE_(poolNum, e->refCtr_); // poolNum & refCtr
             QS_END_PRE_()
 
             QEvt_refCtr_dec_(e); // decrement the ref counter
@@ -234,25 +234,25 @@ void QF_gc(QEvt const * const e) {
         else { // this is the last reference to this event, recycle it
 
             QS_BEGIN_PRE_(QS_QF_GC,
-                    (uint_fast8_t)QS_EP_ID + poolId)
+                    (uint_fast8_t)QS_EP_ID + poolNum)
                 QS_TIME_PRE_();       // timestamp
                 QS_SIG_PRE_(e->sig);  // the signal of the event
-                QS_2U8_PRE_(poolId, e->refCtr_); // poolId & refCtr
+                QS_2U8_PRE_(poolNum, e->refCtr_); // poolNum & refCtr
             QS_END_PRE_()
 
             // pool number must be in range
-            Q_ASSERT_INCRIT(410, (poolId <= QF_priv_.maxPool_)
-                                  && (poolId <= QF_MAX_EPOOL));
+            Q_ASSERT_INCRIT(410, (poolNum <= QF_priv_.maxPool_)
+                                  && (poolNum <= QF_MAX_EPOOL));
             QF_MEM_APP();
             QF_CRIT_EXIT();
 
             // NOTE: casting 'const' away is legit because it's a pool event
     #ifdef Q_SPY
-            QF_EPOOL_PUT_(QF_priv_.ePool_[poolId - 1U],
+            QF_EPOOL_PUT_(QF_priv_.ePool_[poolNum - 1U],
                 (QEvt *)e,
-                (uint_fast8_t)QS_EP_ID + poolId);
+                (uint_fast8_t)QS_EP_ID + poolNum);
     #else
-            QF_EPOOL_PUT_(QF_priv_.ePool_[poolId - 1U],
+            QF_EPOOL_PUT_(QF_priv_.ePool_[poolNum - 1U],
                 (QEvt *)e, 0U);
     #endif
         }
@@ -277,19 +277,19 @@ QEvt const * QF_newRef_(
 
     Q_REQUIRE_INCRIT(502, QEvt_verify_(e));
 
-    uint_fast8_t const poolId = QEvt_getPoolId_(e);
+    uint_fast8_t const poolNum = QEvt_getPoolNum_(e);
 
-    Q_REQUIRE_INCRIT(500, (poolId != 0U)
+    Q_REQUIRE_INCRIT(500, (poolNum != 0U)
         && (evtRef == (void *)0));
 
     QEvt_refCtr_inc_(e); // increments the ref counter
 
     QS_MEM_SYS();
     QS_BEGIN_PRE_(QS_QF_NEW_REF,
-            (uint_fast8_t)QS_EP_ID + poolId)
+            (uint_fast8_t)QS_EP_ID + poolNum)
         QS_TIME_PRE_();       // timestamp
         QS_SIG_PRE_(e->sig);  // the signal of the event
-        QS_2U8_PRE_(poolId, e->refCtr_); // poolId & refCtr
+        QS_2U8_PRE_(poolNum, e->refCtr_); // poolNum & refCtr
     QS_END_PRE_()
     QS_MEM_APP();
 
@@ -308,15 +308,15 @@ void QF_deleteRef_(void const * const evtRef) {
     Q_REQUIRE_INCRIT(602, QEvt_verify_(e));
 
     #ifdef Q_SPY
-    uint_fast8_t const poolId = QEvt_getPoolId_(e);
+    uint_fast8_t const poolNum = QEvt_getPoolNum_(e);
     #endif
 
     QS_MEM_SYS();
     QS_BEGIN_PRE_(QS_QF_DELETE_REF,
-            (uint_fast8_t)QS_EP_ID + poolId)
+            (uint_fast8_t)QS_EP_ID + poolNum)
         QS_TIME_PRE_();       // timestamp
         QS_SIG_PRE_(e->sig);  // the signal of the event
-        QS_2U8_PRE_(poolId, e->refCtr_); // poolId & refCtr
+        QS_2U8_PRE_(poolNum, e->refCtr_); // poolNum & refCtr
     QS_END_PRE_()
     QS_MEM_APP();
 
diff --git a/src/qf/qf_mem.c b/src/qf/qf_mem.c
index a88b8d5d..85789c4d 100644
--- a/src/qf/qf_mem.c
+++ b/src/qf/qf_mem.c
@@ -3,7 +3,7 @@
 // Model: qpc.qm
 // File:  ${src::qf::qf_mem.c}
 //
-// This code has been generated by QM 5.3.0 .
+// This code has been generated by QM 6.1.1 .
 // DO NOT EDIT THIS FILE MANUALLY. All your changes will be lost.
 //
 // This code is covered by the following QP license:
@@ -127,10 +127,10 @@ void QMPool_init(QMPool * const me,
 //! @public @memberof QMPool
 void * QMPool_get(QMPool * const me,
     uint_fast16_t const margin,
-    uint_fast8_t const qs_id)
+    uint_fast8_t const qsId)
 {
     #ifndef Q_SPY
-    Q_UNUSED_PAR(qs_id);
+    Q_UNUSED_PAR(qsId);
     #endif
 
     QF_CRIT_STAT
@@ -177,7 +177,7 @@ void * QMPool_get(QMPool * const me,
 
         me->free_head = fb_next; // set the head to the next free block
 
-        QS_BEGIN_PRE_(QS_QF_MPOOL_GET, qs_id)
+        QS_BEGIN_PRE_(QS_QF_MPOOL_GET, qsId)
             QS_TIME_PRE_();         // timestamp
             QS_OBJ_PRE_(me);        // this memory pool
             QS_MPC_PRE_(me->nFree); // # of free blocks in the pool
@@ -187,7 +187,7 @@ void * QMPool_get(QMPool * const me,
     else { // don't have enough free blocks at this point
         fb = (QFreeBlock *)0;
 
-        QS_BEGIN_PRE_(QS_QF_MPOOL_GET_ATTEMPT, qs_id)
+        QS_BEGIN_PRE_(QS_QF_MPOOL_GET_ATTEMPT, qsId)
             QS_TIME_PRE_();         // timestamp
             QS_OBJ_PRE_(me);        // this memory pool
             QS_MPC_PRE_(me->nFree); // # of free blocks in the pool
@@ -205,10 +205,10 @@ void * QMPool_get(QMPool * const me,
 //! @public @memberof QMPool
 void QMPool_put(QMPool * const me,
     void * const block,
-    uint_fast8_t const qs_id)
+    uint_fast8_t const qsId)
 {
     #ifndef Q_SPY
-    Q_UNUSED_PAR(qs_id);
+    Q_UNUSED_PAR(qsId);
     #endif
 
     QFreeBlock * const fb = (QFreeBlock *)block;
@@ -230,7 +230,7 @@ void QMPool_put(QMPool * const me,
 
     ++me->nFree; // one more free block in this pool
 
-    QS_BEGIN_PRE_(QS_QF_MPOOL_PUT, qs_id)
+    QS_BEGIN_PRE_(QS_QF_MPOOL_PUT, qsId)
         QS_TIME_PRE_();         // timestamp
         QS_OBJ_PRE_(me);        // this memory pool
         QS_MPC_PRE_(me->nFree); // the # free blocks in the pool
diff --git a/src/qf/qf_ps.c b/src/qf/qf_ps.c
index 737a04a1..294b4a51 100644
--- a/src/qf/qf_ps.c
+++ b/src/qf/qf_ps.c
@@ -3,7 +3,7 @@
 // Model: qpc.qm
 // File:  ${src::qf::qf_ps.c}
 //
-// This code has been generated by QM 5.3.0 .
+// This code has been generated by QM 6.1.1 .
 // DO NOT EDIT THIS FILE MANUALLY. All your changes will be lost.
 //
 // This code is covered by the following QP license:
@@ -96,11 +96,11 @@ void QActive_psInit(
 void QActive_publish_(
     QEvt const * const e,
     void const * const sender,
-    uint_fast8_t const qs_id)
+    uint_fast8_t const qsId)
 {
     #ifndef Q_SPY
     Q_UNUSED_PAR(sender);
-    Q_UNUSED_PAR(qs_id);
+    Q_UNUSED_PAR(qsId);
     #endif
 
     QSignal const sig = e->sig;
@@ -114,15 +114,15 @@ void QActive_publish_(
         QPSet_verify_(&QActive_subscrList_[sig].set,
                       &QActive_subscrList_[sig].set_dis));
 
-    QS_BEGIN_PRE_(QS_QF_PUBLISH, qs_id)
+    QS_BEGIN_PRE_(QS_QF_PUBLISH, qsId)
         QS_TIME_PRE_();          // the timestamp
         QS_OBJ_PRE_(sender);     // the sender object
         QS_SIG_PRE_(sig);        // the signal of the event
-        QS_2U8_PRE_(QEvt_getPoolId_(e), e->refCtr_); // poolId & refCtr
+        QS_2U8_PRE_(QEvt_getPoolNum_(e), e->refCtr_); // poolNum & refCtr
     QS_END_PRE_()
 
     // is it a mutable event?
-    if (QEvt_getPoolId_(e) != 0U) {
+    if (QEvt_getPoolNum_(e) != 0U) {
         // NOTE: The reference counter of a mutable event is incremented to
         // prevent premature recycling of the event while the multicasting
         // is still in progress. At the end of the function, the garbage
diff --git a/src/qf/qf_qact.c b/src/qf/qf_qact.c
index c9e4e1f3..6664bb0f 100644
--- a/src/qf/qf_qact.c
+++ b/src/qf/qf_qact.c
@@ -3,7 +3,7 @@
 // Model: qpc.qm
 // File:  ${src::qf::qf_qact.c}
 //
-// This code has been generated by QM 5.3.0 .
+// This code has been generated by QM 6.1.1 .
 // DO NOT EDIT THIS FILE MANUALLY. All your changes will be lost.
 //
 // This code is covered by the following QP license:
diff --git a/src/qf/qf_qeq.c b/src/qf/qf_qeq.c
index 438df8d0..0697e7ce 100644
--- a/src/qf/qf_qeq.c
+++ b/src/qf/qf_qeq.c
@@ -3,7 +3,7 @@
 // Model: qpc.qm
 // File:  ${src::qf::qf_qeq.c}
 //
-// This code has been generated by QM 5.3.0 .
+// This code has been generated by QM 6.1.1 .
 // DO NOT EDIT THIS FILE MANUALLY. All your changes will be lost.
 //
 // This code is covered by the following QP license:
@@ -87,10 +87,10 @@ void QEQueue_init(QEQueue * const me,
 bool QEQueue_post(QEQueue * const me,
     struct QEvt const * const e,
     uint_fast16_t const margin,
-    uint_fast8_t const qs_id)
+    uint_fast8_t const qsId)
 {
     #ifndef Q_SPY
-    Q_UNUSED_PAR(qs_id);
+    Q_UNUSED_PAR(qsId);
     #endif
 
     QF_CRIT_STAT
@@ -107,7 +107,7 @@ bool QEQueue_post(QEQueue * const me,
         || (nFree > (QEQueueCtr)margin))
     {
         // is it a mutable event?
-        if (QEvt_getPoolId_(e) != 0U) {
+        if (QEvt_getPoolNum_(e) != 0U) {
             QEvt_refCtr_inc_(e); // increment the reference counter
         }
 
@@ -117,11 +117,11 @@ bool QEQueue_post(QEQueue * const me,
             me->nMin = nFree; // update minimum so far
         }
 
-        QS_BEGIN_PRE_(QS_QF_EQUEUE_POST, qs_id)
+        QS_BEGIN_PRE_(QS_QF_EQUEUE_POST, qsId)
             QS_TIME_PRE_();        // timestamp
             QS_SIG_PRE_(e->sig);   // the signal of this event
             QS_OBJ_PRE_(me);       // this queue object
-            QS_2U8_PRE_(QEvt_getPoolId_(e), e->refCtr_); // poolId & refCtr
+            QS_2U8_PRE_(QEvt_getPoolNum_(e), e->refCtr_); // poolNum & refCtr
             QS_EQC_PRE_(nFree);    // # free entries
             QS_EQC_PRE_(me->nMin); // min # free entries
         QS_END_PRE_()
@@ -144,11 +144,11 @@ bool QEQueue_post(QEQueue * const me,
         // dropping events must be acceptable
         Q_ASSERT_INCRIT(210, margin != QF_NO_MARGIN);
 
-        QS_BEGIN_PRE_(QS_QF_EQUEUE_POST_ATTEMPT, qs_id)
+        QS_BEGIN_PRE_(QS_QF_EQUEUE_POST_ATTEMPT, qsId)
             QS_TIME_PRE_();        // timestamp
             QS_SIG_PRE_(e->sig);   // the signal of this event
             QS_OBJ_PRE_(me);       // this queue object
-            QS_2U8_PRE_(QEvt_getPoolId_(e), e->refCtr_); // poolId & refCtr
+            QS_2U8_PRE_(QEvt_getPoolNum_(e), e->refCtr_); // poolNum & refCtr
             QS_EQC_PRE_(nFree);    // # free entries
             QS_EQC_PRE_(margin);   // margin requested
         QS_END_PRE_()
@@ -166,10 +166,10 @@ bool QEQueue_post(QEQueue * const me,
 //! @public @memberof QEQueue
 void QEQueue_postLIFO(QEQueue * const me,
     struct QEvt const * const e,
-    uint_fast8_t const qs_id)
+    uint_fast8_t const qsId)
 {
     #ifndef Q_SPY
-    Q_UNUSED_PAR(qs_id);
+    Q_UNUSED_PAR(qsId);
     #endif
 
     QF_CRIT_STAT
@@ -180,7 +180,7 @@ void QEQueue_postLIFO(QEQueue * const me,
 
     Q_REQUIRE_INCRIT(300, nFree != 0U);
 
-    if (QEvt_getPoolId_(e) != 0U) { // is it a mutable event?
+    if (QEvt_getPoolNum_(e) != 0U) { // is it a mutable event?
         QEvt_refCtr_inc_(e); // increment the reference counter
     }
 
@@ -190,11 +190,11 @@ void QEQueue_postLIFO(QEQueue * const me,
         me->nMin = nFree; // update minimum so far
     }
 
-    QS_BEGIN_PRE_(QS_QF_EQUEUE_POST_LIFO, qs_id)
+    QS_BEGIN_PRE_(QS_QF_EQUEUE_POST_LIFO, qsId)
         QS_TIME_PRE_();         // timestamp
         QS_SIG_PRE_(e->sig);    // the signal of this event
         QS_OBJ_PRE_(me);        // this queue object
-        QS_2U8_PRE_(QEvt_getPoolId_(e), e->refCtr_); // poolId & refCtr
+        QS_2U8_PRE_(QEvt_getPoolNum_(e), e->refCtr_); // poolNum & refCtr
         QS_EQC_PRE_(nFree);     // # free entries
         QS_EQC_PRE_(me->nMin);  // min # free entries
     QS_END_PRE_()
@@ -217,10 +217,10 @@ void QEQueue_postLIFO(QEQueue * const me,
 //${QF::QEQueue::get} ........................................................
 //! @public @memberof QEQueue
 struct QEvt const * QEQueue_get(QEQueue * const me,
-    uint_fast8_t const qs_id)
+    uint_fast8_t const qsId)
 {
     #ifndef Q_SPY
-    Q_UNUSED_PAR(qs_id);
+    Q_UNUSED_PAR(qsId);
     #endif
 
     QF_CRIT_STAT
@@ -242,11 +242,11 @@ struct QEvt const * QEQueue_get(QEQueue * const me,
             }
             --me->tail;
 
-            QS_BEGIN_PRE_(QS_QF_EQUEUE_GET, qs_id)
+            QS_BEGIN_PRE_(QS_QF_EQUEUE_GET, qsId)
                 QS_TIME_PRE_();      // timestamp
                 QS_SIG_PRE_(e->sig); // the signal of this event
                 QS_OBJ_PRE_(me);     // this queue object
-                QS_2U8_PRE_(QEvt_getPoolId_(e), e->refCtr_); // poolId & refCtr
+                QS_2U8_PRE_(QEvt_getPoolNum_(e), e->refCtr_); // poolNum & refCtr
                 QS_EQC_PRE_(nFree);  // # free entries
             QS_END_PRE_()
         }
@@ -256,11 +256,11 @@ struct QEvt const * QEQueue_get(QEQueue * const me,
             // all entries in the queue must be free (+1 for fronEvt)
             Q_ASSERT_INCRIT(410, nFree == (me->end + 1U));
 
-            QS_BEGIN_PRE_(QS_QF_EQUEUE_GET_LAST, qs_id)
+            QS_BEGIN_PRE_(QS_QF_EQUEUE_GET_LAST, qsId)
                 QS_TIME_PRE_();      // timestamp
                 QS_SIG_PRE_(e->sig); // the signal of this event
                 QS_OBJ_PRE_(me);     // this queue object
-                QS_2U8_PRE_(QEvt_getPoolId_(e), e->refCtr_); // poolId & refCtr
+                QS_2U8_PRE_(QEvt_getPoolNum_(e), e->refCtr_); // poolNum & refCtr
             QS_END_PRE_()
         }
     }
diff --git a/src/qf/qf_qmact.c b/src/qf/qf_qmact.c
index f109d63e..41b8f3e6 100644
--- a/src/qf/qf_qmact.c
+++ b/src/qf/qf_qmact.c
@@ -3,7 +3,7 @@
 // Model: qpc.qm
 // File:  ${src::qf::qf_qmact.c}
 //
-// This code has been generated by QM 5.3.0 .
+// This code has been generated by QM 6.1.1 .
 // DO NOT EDIT THIS FILE MANUALLY. All your changes will be lost.
 //
 // This code is covered by the following QP license:
diff --git a/src/qf/qf_time.c b/src/qf/qf_time.c
index 959066c5..7688c4cb 100644
--- a/src/qf/qf_time.c
+++ b/src/qf/qf_time.c
@@ -3,7 +3,7 @@
 // Model: qpc.qm
 // File:  ${src::qf::qf_time.c}
 //
-// This code has been generated by QM 5.3.0 .
+// This code has been generated by QM 6.1.1 .
 // DO NOT EDIT THIS FILE MANUALLY. All your changes will be lost.
 //
 // This code is covered by the following QP license:
@@ -102,7 +102,7 @@ void QTimeEvt_armX(QTimeEvt * const me,
                        = ((uint_fast8_t)me->super.refCtr_ & QTE_TICK_RATE);
     QTimeEvtCtr const ctr = me->ctr;
     #ifdef Q_SPY
-    uint_fast8_t const qs_id = ((QActive *)(me->act))->prio;
+    uint_fast8_t const qsId = ((QActive *)(me->act))->prio;
     #endif
 
     QF_CRIT_STAT
@@ -139,7 +139,7 @@ void QTimeEvt_armX(QTimeEvt * const me,
         QTimeEvt_timeEvtHead_[tickRate].act = me;
     }
 
-    QS_BEGIN_PRE_(QS_QF_TIMEEVT_ARM, qs_id)
+    QS_BEGIN_PRE_(QS_QF_TIMEEVT_ARM, qsId)
         QS_TIME_PRE_();        // timestamp
         QS_OBJ_PRE_(me);       // this time event object
         QS_OBJ_PRE_(me->act);  // the active object
@@ -156,7 +156,7 @@ void QTimeEvt_armX(QTimeEvt * const me,
 //! @public @memberof QTimeEvt
 bool QTimeEvt_disarm(QTimeEvt * const me) {
     #ifdef Q_SPY
-    uint_fast8_t const qs_id = QACTIVE_CAST_(me->act)->prio;
+    uint_fast8_t const qsId = QACTIVE_CAST_(me->act)->prio;
     #endif
 
     QF_CRIT_STAT
@@ -169,7 +169,7 @@ bool QTimeEvt_disarm(QTimeEvt * const me) {
         wasArmed = true;
         me->super.refCtr_ |= QTE_WAS_DISARMED;
 
-        QS_BEGIN_PRE_(QS_QF_TIMEEVT_DISARM, qs_id)
+        QS_BEGIN_PRE_(QS_QF_TIMEEVT_DISARM, qsId)
             QS_TIME_PRE_();            // timestamp
             QS_OBJ_PRE_(me);           // this time event object
             QS_OBJ_PRE_(me->act);      // the target AO
@@ -184,7 +184,7 @@ bool QTimeEvt_disarm(QTimeEvt * const me) {
         wasArmed = false;
         me->super.refCtr_ &= (uint8_t)(~QTE_WAS_DISARMED & 0xFFU);
 
-        QS_BEGIN_PRE_(QS_QF_TIMEEVT_DISARM_ATTEMPT, qs_id)
+        QS_BEGIN_PRE_(QS_QF_TIMEEVT_DISARM_ATTEMPT, qsId)
             QS_TIME_PRE_();            // timestamp
             QS_OBJ_PRE_(me);           // this time event object
             QS_OBJ_PRE_(me->act);      // the target AO
@@ -206,7 +206,7 @@ bool QTimeEvt_rearm(QTimeEvt * const me,
     uint_fast8_t const tickRate
                        = (uint_fast8_t)me->super.refCtr_ & QTE_TICK_RATE;
     #ifdef Q_SPY
-    uint_fast8_t const qs_id = ((QActive *)(me->act))->prio;
+    uint_fast8_t const qsId = ((QActive *)(me->act))->prio;
     #endif
 
     QF_CRIT_STAT
@@ -249,7 +249,7 @@ bool QTimeEvt_rearm(QTimeEvt * const me,
     }
     me->ctr = nTicks; // re-load the tick counter (shift the phasing)
 
-    QS_BEGIN_PRE_(QS_QF_TIMEEVT_REARM, qs_id)
+    QS_BEGIN_PRE_(QS_QF_TIMEEVT_REARM, qsId)
         QS_TIME_PRE_();            // timestamp
         QS_OBJ_PRE_(me);           // this time event object
         QS_OBJ_PRE_(me->act);      // the target AO
diff --git a/src/qk/qk.c b/src/qk/qk.c
index dd28db05..22f38269 100644
--- a/src/qk/qk.c
+++ b/src/qk/qk.c
@@ -3,7 +3,7 @@
 // Model: qpc.qm
 // File:  ${src::qk::qk.c}
 //
-// This code has been generated by QM 5.3.0 .
+// This code has been generated by QM 6.1.1 .
 // DO NOT EDIT THIS FILE MANUALLY. All your changes will be lost.
 //
 // This code is covered by the following QP license:
@@ -146,7 +146,7 @@ void QK_schedUnlock(QSchedStatus const prevCeil) {
 //${QK::QK-base::sched_} .....................................................
 //! @static @private @memberof QK
 uint_fast8_t QK_sched_(void) {
-    // NOTE: this function is entered with iterrupts DISABLED
+    // NOTE: this function is entered with interrupts DISABLED
 
     Q_REQUIRE_INCRIT(402, QPSet_verify_(&QK_priv_.readySet,
                                         &QK_priv_.readySet_dis));
@@ -190,7 +190,7 @@ uint_fast8_t QK_sched_(void) {
 //${QK::QK-base::activate_} ..................................................
 //! @static @private @memberof QK
 void QK_activate_(void) {
-    // NOTE: this function is entered with iterrupts DISABLED
+    // NOTE: this function is entered with interrupts DISABLED
 
     uint_fast8_t const prio_in = QK_priv_.actPrio; // save initial prio.
     uint_fast8_t p = QK_priv_.nextPrio; // next prio to run
diff --git a/src/qs/qs.c b/src/qs/qs.c
index e80a5778..ba2af173 100644
--- a/src/qs/qs.c
+++ b/src/qs/qs.c
@@ -3,7 +3,7 @@
 // Model: qpc.qm
 // File:  ${src::qs::qs.c}
 //
-// This code has been generated by QM 5.3.0 .
+// This code has been generated by QM 6.1.1 .
 // DO NOT EDIT THIS FILE MANUALLY. All your changes will be lost.
 //
 // This code is covered by the following QP license:
@@ -87,7 +87,7 @@ void QS_initBuf(
     // produce the reset record to inform QSPY of a new session
     QS_target_info_pre_(0xFFU);
 
-    // hold off flushing after successfull initialization (see QS_INIT())
+    // hold off flushing after successful initialization (see QS_INIT())
 }
 
 //${QS::QS-TX::getByte} ......................................................
@@ -371,10 +371,10 @@ void QS_glbFilter_(int_fast16_t const filter) {
 //............................................................................
 void QS_locFilter_(int_fast16_t const filter) {
     bool const isRemove = (filter < 0);
-    uint8_t const qs_id = isRemove ? (uint8_t)(-filter) : (uint8_t)filter;
+    uint8_t const qsId = isRemove ? (uint8_t)(-filter) : (uint8_t)filter;
     uint8_t const tmp = (isRemove ? 0x00U : 0xFFU);
     uint_fast8_t i;
-    switch (qs_id) {
+    switch (qsId) {
         case (uint8_t)QS_ALL_IDS:
             // set all local filters (partially unrolled loop)
             for (i = 0U; i < Q_DIM(QS_filt_.loc); i += 4U) {
@@ -407,16 +407,16 @@ void QS_locFilter_(int_fast16_t const filter) {
         default: {
             QS_CRIT_STAT
             QS_CRIT_ENTRY();
-            // qs_id must be in range
-            Q_ASSERT_INCRIT(310, qs_id < 0x7FU);
+            // qsId must be in range
+            Q_ASSERT_INCRIT(310, qsId < 0x7FU);
             QS_CRIT_EXIT();
             if (isRemove) {
-                QS_filt_.loc[qs_id >> 3U]
-                    &= (uint8_t)(~(1U << (qs_id & 7U)) & 0xFFU);
+                QS_filt_.loc[qsId >> 3U]
+                    &= (uint8_t)(~(1U << (qsId & 7U)) & 0xFFU);
             }
             else {
-                QS_filt_.loc[qs_id >> 3U]
-                    |= (1U << (qs_id & 7U));
+                QS_filt_.loc[qsId >> 3U]
+                    |= (1U << (qsId & 7U));
             }
             break;
         }
diff --git a/src/qs/qs_64bit.c b/src/qs/qs_64bit.c
index 940a7b54..70716dc7 100644
--- a/src/qs/qs_64bit.c
+++ b/src/qs/qs_64bit.c
@@ -3,7 +3,7 @@
 // Model: qpc.qm
 // File:  ${src::qs::qs_64bit.c}
 //
-// This code has been generated by QM 5.3.0 .
+// This code has been generated by QM 6.1.1 .
 // DO NOT EDIT THIS FILE MANUALLY. All your changes will be lost.
 //
 // This code is covered by the following QP license:
diff --git a/src/qs/qs_fp.c b/src/qs/qs_fp.c
index 5585cd0e..da7fc3f1 100644
--- a/src/qs/qs_fp.c
+++ b/src/qs/qs_fp.c
@@ -3,7 +3,7 @@
 // Model: qpc.qm
 // File:  ${src::qs::qs_fp.c}
 //
-// This code has been generated by QM 5.3.0 .
+// This code has been generated by QM 6.1.1 .
 // DO NOT EDIT THIS FILE MANUALLY. All your changes will be lost.
 //
 // This code is covered by the following QP license:
@@ -92,7 +92,7 @@ void QS_f64_fmt_(
     QSCtr const end     = QS_priv_.end;
     uint32_t i;
 
-    // static constant untion to detect endianness of the machine
+    // static constant union to detect endianness of the machine
     static union U32Rep {
         uint32_t u32;
         uint8_t  u8;
diff --git a/src/qs/qs_rx.c b/src/qs/qs_rx.c
index 6cbc9b18..2fb89955 100644
--- a/src/qs/qs_rx.c
+++ b/src/qs/qs_rx.c
@@ -3,7 +3,7 @@
 // Model: qpc.qm
 // File:  ${src::qs::qs_rx.c}
 //
-// This code has been generated by QM 5.3.0 .
+// This code has been generated by QM 6.1.1 .
 // DO NOT EDIT THIS FILE MANUALLY. All your changes will be lost.
 //
 // This code is covered by the following QP license:
@@ -959,7 +959,7 @@ static void QS_rxHandleGoodFrame_(uint8_t const state) {
                 // dispatch to the current SM object
                 if (QS_rxPriv_.currObj[SM_OBJ] != (void *)0) {
                     // increment the ref-ctr to simulate the situation
-                    // when the event is just retreived from a queue.
+                    // when the event is just retrieved from a queue.
                     // This is expected for the following QF_gc() call.
                     ++l_rx.var.evt.e->refCtr_;
 
@@ -975,7 +975,7 @@ static void QS_rxHandleGoodFrame_(uint8_t const state) {
                 // init the current SM object"
                 if (QS_rxPriv_.currObj[SM_OBJ] != (void *)0) {
                     // increment the ref-ctr to simulate the situation
-                    // when the event is just retreived from a queue.
+                    // when the event is just retrieved from a queue.
                     // This is expected for the following QF_gc() call.
                     ++l_rx.var.evt.e->refCtr_;
 
diff --git a/src/qs/qstamp.c b/src/qs/qstamp.c
index d49de633..fd2ee69a 100644
--- a/src/qs/qstamp.c
+++ b/src/qs/qstamp.c
@@ -3,7 +3,7 @@
 // Model: qpc.qm
 // File:  ${src::qs::qstamp.c}
 //
-// This code has been generated by QM 5.3.0 .
+// This code has been generated by QM 6.1.1 .
 // DO NOT EDIT THIS FILE MANUALLY. All your changes will be lost.
 //
 // This code is covered by the following QP license:
diff --git a/src/qs/qutest.c b/src/qs/qutest.c
index d56631ff..91f5b2d8 100644
--- a/src/qs/qutest.c
+++ b/src/qs/qutest.c
@@ -3,7 +3,7 @@
 // Model: qpc.qm
 // File:  ${src::qs::qutest.c}
 //
-// This code has been generated by QM 5.3.0 .
+// This code has been generated by QM 6.1.1 .
 // DO NOT EDIT THIS FILE MANUALLY. All your changes will be lost.
 //
 // This code is covered by the following QP license:
@@ -99,7 +99,7 @@ uint32_t QS_getTestProbe_(QSpyFunPtr const api) {
             }
             QS_MEM_APP();
             QS_CRIT_EXIT();
-            break; // we are done (Test-Probe retreived)
+            break; // we are done (Test-Probe retrieved)
         }
     }
     return data;
@@ -373,7 +373,7 @@ void QHsmDummy_ctor(QHsmDummy * const me) {
 void QHsmDummy_init_(
     QAsm * const me,
     void const * const par,
-    uint_fast8_t const qs_id)
+    uint_fast8_t const qsId)
 {
     Q_UNUSED_PAR(par);
 
@@ -387,7 +387,7 @@ void QHsmDummy_init_(
     QS_CRIT_STAT
     QS_CRIT_ENTRY();
     QS_MEM_SYS();
-    QS_BEGIN_PRE_(QS_QEP_STATE_INIT, qs_id)
+    QS_BEGIN_PRE_(QS_QEP_STATE_INIT, qsId)
         QS_OBJ_PRE_(me);            // this state machine object
         QS_FUN_PRE_(me->state.fun); // the source state
         QS_FUN_PRE_(me->temp.fun);  // the target of the initial tran.
@@ -401,12 +401,12 @@ void QHsmDummy_init_(
 void QHsmDummy_dispatch_(
     QAsm * const me,
     QEvt const * const e,
-    uint_fast8_t const qs_id)
+    uint_fast8_t const qsId)
 {
     QS_CRIT_STAT
     QS_CRIT_ENTRY();
     QS_MEM_SYS();
-    QS_BEGIN_PRE_(QS_QEP_DISPATCH, qs_id)
+    QS_BEGIN_PRE_(QS_QEP_DISPATCH, qsId)
         QS_TIME_PRE_();             // time stamp
         QS_SIG_PRE_(e->sig);        // the signal of the event
         QS_OBJ_PRE_(me);            // this state machine object
@@ -440,9 +440,9 @@ void QActiveDummy_ctor(QActiveDummy * const me) {
 void QActiveDummy_init_(
     QAsm * const me,
     void const * const par,
-    uint_fast8_t const qs_id)
+    uint_fast8_t const qsId)
 {
-    Q_UNUSED_PAR(qs_id);
+    Q_UNUSED_PAR(qsId);
 
     QHsmDummy_init_(me, par, ((QActive const *)me)->prio);
 }
@@ -452,9 +452,9 @@ void QActiveDummy_init_(
 void QActiveDummy_dispatch_(
     QAsm * const me,
     QEvt const * const e,
-    uint_fast8_t const qs_id)
+    uint_fast8_t const qsId)
 {
-    Q_UNUSED_PAR(qs_id);
+    Q_UNUSED_PAR(qsId);
 
     QHsmDummy_dispatch_(me, e, ((QActive const *)me)->prio);
 }
@@ -484,7 +484,7 @@ bool QActiveDummy_fakePost_(
     )
 
     // is it a mutable event?
-    if (QEvt_getPoolId_(e) != 0U) {
+    if (QEvt_getPoolNum_(e) != 0U) {
         QEvt_refCtr_inc_(e);
     }
 
@@ -495,7 +495,7 @@ bool QActiveDummy_fakePost_(
         QS_OBJ_PRE_(sender); // the sender object
         QS_SIG_PRE_(e->sig); // the signal of the event
         QS_OBJ_PRE_(me);     // this active object
-        QS_2U8_PRE_(QEvt_getPoolId_(e), e->refCtr_); // poolId & refCtr
+        QS_2U8_PRE_(QEvt_getPoolNum_(e), e->refCtr_); // poolNum & refCtr
         QS_EQC_PRE_(0U);     // # free entries
         QS_EQC_PRE_(margin); // margin requested
     QS_END_PRE_()
@@ -536,7 +536,7 @@ void QActiveDummy_fakePostLIFO_(
     )
 
     // is it a mutable event?
-    if (QEvt_getPoolId_(e) != 0U) {
+    if (QEvt_getPoolNum_(e) != 0U) {
         QEvt_refCtr_inc_(e);
     }
 
@@ -544,7 +544,7 @@ void QActiveDummy_fakePostLIFO_(
         QS_TIME_PRE_();      // timestamp
         QS_SIG_PRE_(e->sig); // the signal of this event
         QS_OBJ_PRE_(me);     // this active object
-        QS_2U8_PRE_(QEvt_getPoolId_(e), e->refCtr_); // poolId & refCtr
+        QS_2U8_PRE_(QEvt_getPoolNum_(e), e->refCtr_); // poolNum & refCtr
         QS_EQC_PRE_(0U);     // # free entries
         QS_EQC_PRE_(0U);     // min # free entries
     QS_END_PRE_()
diff --git a/src/qv/qv.c b/src/qv/qv.c
index e5c2c096..f20d043e 100644
--- a/src/qv/qv.c
+++ b/src/qv/qv.c
@@ -3,7 +3,7 @@
 // Model: qpc.qm
 // File:  ${src::qv::qv.c}
 //
-// This code has been generated by QM 5.3.0 .
+// This code has been generated by QM 6.1.1 .
 // DO NOT EDIT THIS FILE MANUALLY. All your changes will be lost.
 //
 // This code is covered by the following QP license:
diff --git a/src/qxk/qxk.c b/src/qxk/qxk.c
index 9c72543b..155f069c 100644
--- a/src/qxk/qxk.c
+++ b/src/qxk/qxk.c
@@ -3,7 +3,7 @@
 // Model: qpc.qm
 // File:  ${src::qxk::qxk.c}
 //
-// This code has been generated by QM 5.3.0 .
+// This code has been generated by QM 6.1.1 .
 // DO NOT EDIT THIS FILE MANUALLY. All your changes will be lost.
 //
 // This code is covered by the following QP license:
@@ -133,7 +133,7 @@ void QXK_schedUnlock(QSchedStatus const stat) {
 
         // find if any threads should be run after unlocking the scheduler
         if (QXK_sched_() != 0U) { // activation needed?
-            QXK_activate_(); // synchronously activate basic-thred(s)
+            QXK_activate_(); // synchronously activate basic-thread(s)
         }
 
         QF_MEM_APP();
@@ -506,7 +506,7 @@ void QActive_start_(QActive * const me,
         QF_MEM_SYS();
         if (QXK_priv_.lockCeil <= QF_MAX_ACTIVE) { // scheduler running?
             if (QXK_sched_() != 0U) { // activation needed?
-                QXK_activate_(); // synchronously activate basic-thred(s)
+                QXK_activate_(); // synchronously activate basic-thread(s)
             }
         }
         QF_MEM_APP();
diff --git a/src/qxk/qxk_mutex.c b/src/qxk/qxk_mutex.c
index 5f6d7717..6be2032a 100644
--- a/src/qxk/qxk_mutex.c
+++ b/src/qxk/qxk_mutex.c
@@ -3,7 +3,7 @@
 // Model: qpc.qm
 // File:  ${src::qxk::qxk_mutex.c}
 //
-// This code has been generated by QM 5.3.0 .
+// This code has been generated by QM 6.1.1 .
 // DO NOT EDIT THIS FILE MANUALLY. All your changes will be lost.
 //
 // This code is covered by the following QP license:
@@ -463,7 +463,7 @@ void QXMutex_unlock(QXMutex * const me) {
 
         // schedule the next thread if multitasking started
         if (QXK_sched_() != 0U) { // activation needed?
-            QXK_activate_(); // synchronously activate basic-thred(s)
+            QXK_activate_(); // synchronously activate basic-thread(s)
         }
     }
     else { // releasing one level of nested mutex lock
diff --git a/src/qxk/qxk_sema.c b/src/qxk/qxk_sema.c
index d62cfcd7..00cc20fa 100644
--- a/src/qxk/qxk_sema.c
+++ b/src/qxk/qxk_sema.c
@@ -3,7 +3,7 @@
 // Model: qpc.qm
 // File:  ${src::qxk::qxk_sema.c}
 //
-// This code has been generated by QM 5.3.0 .
+// This code has been generated by QM 6.1.1 .
 // DO NOT EDIT THIS FILE MANUALLY. All your changes will be lost.
 //
 // This code is covered by the following QP license:
@@ -239,7 +239,7 @@ bool QXSemaphore_signal(QXSemaphore * const me) {
         QXThread * const thr =
             QXK_PTR_CAST_(QXThread*, QActive_registry_[p]);
 
-        // assert that the tread:
+        // assert that the thread:
         // - must be registered in QF;
         // - must be extended; and
         // - must be blocked on this semaphore;
diff --git a/src/qxk/qxk_xthr.c b/src/qxk/qxk_xthr.c
index 940f912a..f028ef1b 100644
--- a/src/qxk/qxk_xthr.c
+++ b/src/qxk/qxk_xthr.c
@@ -3,7 +3,7 @@
 // Model: qpc.qm
 // File:  ${src::qxk::qxk_xthr.c}
 //
-// This code has been generated by QM 5.3.0 .
+// This code has been generated by QM 6.1.1 .
 // DO NOT EDIT THIS FILE MANUALLY. All your changes will be lost.
 //
 // This code is covered by the following QP license:
@@ -227,7 +227,7 @@ QEvt const * QXThread_queueGet(QTimeEvtCtr const nTicks) {
                 QS_TIME_PRE_();      // timestamp
                 QS_SIG_PRE_(e->sig); // the signal of this event
                 QS_OBJ_PRE_(&thr->super); // this active object
-                QS_2U8_PRE_(QEvt_getPoolId_(e), e->refCtr_); // poolId & refCtr
+                QS_2U8_PRE_(QEvt_getPoolNum_(e), e->refCtr_); // poolNum & refCtr
                 QS_EQC_PRE_(nFree);  // # free entries
             QS_END_PRE_()
         }
@@ -241,7 +241,7 @@ QEvt const * QXThread_queueGet(QTimeEvtCtr const nTicks) {
                 QS_TIME_PRE_();      // timestamp
                 QS_SIG_PRE_(e->sig); // the signal of this event
                 QS_OBJ_PRE_(&thr->super); // this active object
-                QS_2U8_PRE_(QEvt_getPoolId_(e), e->refCtr_); // poolId & refCtr
+                QS_2U8_PRE_(QEvt_getPoolNum_(e), e->refCtr_); // poolNum & refCtr
             QS_END_PRE_()
         }
     }
diff --git a/test/qf/qequeue/qp_port.h b/test/qf/qequeue/qp_port.h
index 6fb6b29b..55aa2afb 100644
--- a/test/qf/qequeue/qp_port.h
+++ b/test/qf/qequeue/qp_port.h
@@ -116,10 +116,10 @@
     #define QF_EPOOL_INIT_(p_, poolSto_, poolSize_, evtSize_) \
         (QMPool_init(&(p_), (poolSto_), (poolSize_), (evtSize_)))
     #define QF_EPOOL_EVENT_SIZE_(p_)  ((uint_fast16_t)(p_).blockSize)
-    #define QF_EPOOL_GET_(p_, e_, m_, qs_id_) \
-        ((e_) = (QEvt *)QMPool_get(&(p_), (m_), (qs_id_)))
-    #define QF_EPOOL_PUT_(p_, e_, qs_id_) \
-        (QMPool_put(&(p_), (e_), (qs_id_)))
+    #define QF_EPOOL_GET_(p_, e_, m_, qsId_) \
+        ((e_) = (QEvt *)QMPool_get(&(p_), (m_), (qsId_)))
+    #define QF_EPOOL_PUT_(p_, e_, qsId_) \
+        (QMPool_put(&(p_), (e_), (qsId_)))
 
 #endif // QP_IMPL
 
diff --git a/test/qf/qequeue/test.c b/test/qf/qequeue/test.c
index a5ab4228..e0604954 100644
--- a/test/qf/qequeue/test.c
+++ b/test/qf/qequeue/test.c
@@ -66,11 +66,11 @@ uint_fast16_t QF_poolGetMaxBlockSize(void) {
 }
 //..........................................................................
 void QActive_publish_(QEvt const * const e,
-                      void const * const sender, uint_fast8_t const qs_id)
+                      void const * const sender, uint_fast8_t const qsId)
 {
     (void)e;
     (void)sender;
-    (void)qs_id;
+    (void)qsId;
 }
 //..........................................................................
 void QTimeEvt_tick_(uint_fast8_t const tickRate, void const * const sender) {
diff --git a/test/qk/test_sched/efm32pg1b.mak b/test/qk/test_sched/efm32pg1b.mak
index 036f2bb5..2995aace 100644
--- a/test/qk/test_sched/efm32pg1b.mak
+++ b/test/qk/test_sched/efm32pg1b.mak
@@ -174,7 +174,7 @@ BIN   := $(GNU_ARM)/bin/arm-none-eabi-objcopy
 
 #-----------------------------------------------------------------------------
 # FLASH tool (NOTE: Requires the JLINK utility)
-# NOTE: subsitution of '/' to '\' is necessary to run the batch file
+# NOTE: substitution of '/' to '\' is necessary to run the batch file
 
 FLASH := $(subst /,\,$(TARGET_DIR)/flash.bat)
 
@@ -198,7 +198,7 @@ endif
 # build options
 #
 
-# combine all the soruces...
+# combine all the sources...
 C_SRCS += $(QP_SRCS)
 ASM_SRCS += $(QP_ASMS)
 
diff --git a/test/qk/test_sched/nucleo-c031c6.mak b/test/qk/test_sched/nucleo-c031c6.mak
index 18a2613c..12948699 100644
--- a/test/qk/test_sched/nucleo-c031c6.mak
+++ b/test/qk/test_sched/nucleo-c031c6.mak
@@ -33,7 +33,7 @@
 ##############################################################################
 #
 # examples of invoking this Makefile:
-# make -f nucleo-c031c6.mak USB=g: # make, uplaod to USB drive, run the tests
+# make -f nucleo-c031c6.mak USB=g: # make, upload to USB drive, run the tests
 # make -f nucleo-c031c6.mak USB=g: TESTS=philo*.py  # make and run the selected tests
 # make -f nucleo-c031c6.mak HOST=localhost:7705 # connect to host:port
 # make -f nucleo-c031c6.mak norun   # only make but not run the tests
@@ -201,7 +201,7 @@ endif
 # build options
 #
 
-# combine all the soruces...
+# combine all the sources...
 C_SRCS += $(QP_SRCS)
 ASM_SRCS += $(QP_ASMS)
 
diff --git a/test/qk/test_sched/nucleo-h743zi.mak b/test/qk/test_sched/nucleo-h743zi.mak
index 90d1ab2e..08d6c4d7 100644
--- a/test/qk/test_sched/nucleo-h743zi.mak
+++ b/test/qk/test_sched/nucleo-h743zi.mak
@@ -33,7 +33,7 @@
 ##############################################################################
 #
 # examples of invoking this Makefile:
-# make -f nucleo-h743zi.mak USB=g: # make, uplaod to USB drive, run the tests
+# make -f nucleo-h743zi.mak USB=g: # make, upload to USB drive, run the tests
 # make -f nucleo-h743zi.mak USB=g: TESTS=philo*.py  # make and run the selected tests
 # make -f nucleo-h743zi.mak USB=g: HOST=localhost:7705 # connect to host:port
 # make -f nucleo-h743zi.mak USB=g: norun   # only make but not run the tests
@@ -212,7 +212,7 @@ endif
 # build options
 #
 
-# combine all the soruces...
+# combine all the sources...
 C_SRCS += $(QP_SRCS)
 ASM_SRCS += $(QP_ASMS)
 
diff --git a/test/qk/test_sched/nucleo-l053r8.mak b/test/qk/test_sched/nucleo-l053r8.mak
index c4285429..bcd9c1cb 100644
--- a/test/qk/test_sched/nucleo-l053r8.mak
+++ b/test/qk/test_sched/nucleo-l053r8.mak
@@ -33,7 +33,7 @@
 ##############################################################################
 #
 # examples of invoking this Makefile:
-# make -f nucleo-l053r8.mak USB=g: # make, uplaod to USB drive, run the tests
+# make -f nucleo-l053r8.mak USB=g: # make, upload to USB drive, run the tests
 # make -f nucleo-l053r8.mak USB=g: TESTS=philo*.py  # make and run the selected tests
 # make -f nucleo-l053r8.mak HOST=localhost:7705 # connect to host:port
 # make -f nucleo-l053r8.mak norun   # only make but not run the tests
@@ -198,7 +198,7 @@ endif
 # build options
 #
 
-# combine all the soruces...
+# combine all the sources...
 C_SRCS += $(QP_SRCS)
 ASM_SRCS += $(QP_ASMS)
 
diff --git a/test/qk/test_sched/test_mpu.py b/test/qk/test_sched/test_mpu.py
index 2ea7e64b..c1b8908d 100644
--- a/test/qk/test_sched/test_mpu.py
+++ b/test/qk/test_sched/test_mpu.py
@@ -86,7 +86,7 @@ test("Below-Start SRAM-write -> ASSERT", NORESET)
 command("RAM_WRITE", (-0x4 & 0xFFFFFFFF), MEM_START, 123) # BSP_ramWrite(param1, param2, param3);
 expect("@timestamp =ASSERT= Mod=*")
 
-# wrtiting to RAM does not need to be tested becasue the fact
+# wrtiting to RAM does not need to be tested because the fact
 # that the test fixture runs at all means that RAM works.
 skip(1)
 test("Middle-of SRAM-write")
diff --git a/test/qs/qs_rx/qp_port.h b/test/qs/qs_rx/qp_port.h
index 6fb6b29b..55aa2afb 100644
--- a/test/qs/qs_rx/qp_port.h
+++ b/test/qs/qs_rx/qp_port.h
@@ -116,10 +116,10 @@
     #define QF_EPOOL_INIT_(p_, poolSto_, poolSize_, evtSize_) \
         (QMPool_init(&(p_), (poolSto_), (poolSize_), (evtSize_)))
     #define QF_EPOOL_EVENT_SIZE_(p_)  ((uint_fast16_t)(p_).blockSize)
-    #define QF_EPOOL_GET_(p_, e_, m_, qs_id_) \
-        ((e_) = (QEvt *)QMPool_get(&(p_), (m_), (qs_id_)))
-    #define QF_EPOOL_PUT_(p_, e_, qs_id_) \
-        (QMPool_put(&(p_), (e_), (qs_id_)))
+    #define QF_EPOOL_GET_(p_, e_, m_, qsId_) \
+        ((e_) = (QEvt *)QMPool_get(&(p_), (m_), (qsId_)))
+    #define QF_EPOOL_PUT_(p_, e_, qsId_) \
+        (QMPool_put(&(p_), (e_), (qsId_)))
 
 #endif // QP_IMPL
 
diff --git a/test/qs/qs_rx/test.c b/test/qs/qs_rx/test.c
index 2a95fd1f..c3458116 100644
--- a/test/qs/qs_rx/test.c
+++ b/test/qs/qs_rx/test.c
@@ -75,11 +75,11 @@ uint_fast16_t QF_poolGetMaxBlockSize(void) {
 }
 //..........................................................................
 void QActive_publish_(QEvt const * const e,
-                      void const * const sender, uint_fast8_t const qs_id)
+                      void const * const sender, uint_fast8_t const qsId)
 {
     (void)e;
     (void)sender;
-    (void)qs_id;
+    (void)qsId;
 }
 //..........................................................................
 void QTimeEvt_tick_(uint_fast8_t const tickRate, void const * const sender) {
diff --git a/test/qxk/test_sched/efm32pg1b.mak b/test/qxk/test_sched/efm32pg1b.mak
index 0fab13f3..566916c2 100644
--- a/test/qxk/test_sched/efm32pg1b.mak
+++ b/test/qxk/test_sched/efm32pg1b.mak
@@ -177,7 +177,7 @@ BIN   := $(GNU_ARM)/bin/arm-none-eabi-objcopy
 
 #-----------------------------------------------------------------------------
 # FLASH tool (NOTE: Requires the JLINK utility)
-# NOTE: subsitution of '/' to '\' is necessary to run the batch file
+# NOTE: substitution of '/' to '\' is necessary to run the batch file
 
 FLASH := $(subst /,\,$(TARGET_DIR)/flash.bat)
 
@@ -201,7 +201,7 @@ endif
 # build options
 #
 
-# combine all the soruces...
+# combine all the sources...
 C_SRCS += $(QP_SRCS)
 ASM_SRCS += $(QP_ASMS)
 
diff --git a/test/qxk/test_sched/nucleo-c031c6.mak b/test/qxk/test_sched/nucleo-c031c6.mak
index aea5126b..05e84613 100644
--- a/test/qxk/test_sched/nucleo-c031c6.mak
+++ b/test/qxk/test_sched/nucleo-c031c6.mak
@@ -33,7 +33,7 @@
 ##############################################################################
 #
 # examples of invoking this Makefile:
-# make -f nucleo-c031c6.mak USB=g: # make, uplaod to USB drive, run the tests
+# make -f nucleo-c031c6.mak USB=g: # make, upload to USB drive, run the tests
 # make -f nucleo-c031c6.mak USB=g: TESTS=philo*.py  # make and run the selected tests
 # make -f nucleo-c031c6.mak HOST=localhost:7705 # connect to host:port
 # make -f nucleo-c031c6.mak norun   # only make but not run the tests
@@ -204,7 +204,7 @@ endif
 # build options
 #
 
-# combine all the soruces...
+# combine all the sources...
 C_SRCS += $(QP_SRCS)
 ASM_SRCS += $(QP_ASMS)
 
diff --git a/test/qxk/test_sched/nucleo-h743zi.mak b/test/qxk/test_sched/nucleo-h743zi.mak
index ef3e1d9d..b6e48501 100644
--- a/test/qxk/test_sched/nucleo-h743zi.mak
+++ b/test/qxk/test_sched/nucleo-h743zi.mak
@@ -33,7 +33,7 @@
 ##############################################################################
 #
 # examples of invoking this Makefile:
-# make -f nucleo-h743zi.mak USB=g: # make, uplaod to USB drive, run the tests
+# make -f nucleo-h743zi.mak USB=g: # make, upload to USB drive, run the tests
 # make -f nucleo-h743zi.mak USB=g: TESTS=philo*.py  # make and run the selected tests
 # make -f nucleo-h743zi.mak USB=g: HOST=localhost:7705 # connect to host:port
 # make -f nucleo-h743zi.mak USB=g: norun   # only make but not run the tests
@@ -215,7 +215,7 @@ endif
 # build options
 #
 
-# combine all the soruces...
+# combine all the sources...
 C_SRCS += $(QP_SRCS)
 ASM_SRCS += $(QP_ASMS)
 
diff --git a/test/qxk/test_sched/nucleo-l053r8.mak b/test/qxk/test_sched/nucleo-l053r8.mak
index bebe0073..6bf8aa9e 100644
--- a/test/qxk/test_sched/nucleo-l053r8.mak
+++ b/test/qxk/test_sched/nucleo-l053r8.mak
@@ -33,7 +33,7 @@
 ##############################################################################
 #
 # examples of invoking this Makefile:
-# make -f nucleo-l053r8.mak USB=g: # make, uplaod to USB drive, run the tests
+# make -f nucleo-l053r8.mak USB=g: # make, upload to USB drive, run the tests
 # make -f nucleo-l053r8.mak USB=g: TESTS=philo*.py  # make and run the selected tests
 # make -f nucleo-l053r8.mak HOST=localhost:7705 # connect to host:port
 # make -f nucleo-l053r8.mak norun   # only make but not run the tests
@@ -201,7 +201,7 @@ endif
 # build options
 #
 
-# combine all the soruces...
+# combine all the sources...
 C_SRCS += $(QP_SRCS)
 ASM_SRCS += $(QP_ASMS)
 
diff --git a/test/qxk/test_sched/test_mpu.py b/test/qxk/test_sched/test_mpu.py
index 2ea7e64b..c1b8908d 100644
--- a/test/qxk/test_sched/test_mpu.py
+++ b/test/qxk/test_sched/test_mpu.py
@@ -86,7 +86,7 @@ test("Below-Start SRAM-write -> ASSERT", NORESET)
 command("RAM_WRITE", (-0x4 & 0xFFFFFFFF), MEM_START, 123) # BSP_ramWrite(param1, param2, param3);
 expect("@timestamp =ASSERT= Mod=*")
 
-# wrtiting to RAM does not need to be tested becasue the fact
+# wrtiting to RAM does not need to be tested because the fact
 # that the test fixture runs at all means that RAM works.
 skip(1)
 test("Middle-of SRAM-write")
diff --git a/zephyr/qf_port.c b/zephyr/qf_port.c
index 3cd31adf..65dc1721 100644
--- a/zephyr/qf_port.c
+++ b/zephyr/qf_port.c
@@ -129,7 +129,7 @@ void QActive_start_(QActive * const me, QPrioSpec const prioSpec,
     (*me->super.vptr->init)(&me->super, par, me->prio);
     QS_FLUSH(); // flush the trace buffer to the host
 
-    // The Zephyr priority of the AO thread can be specificed in two ways:
+    // The Zephyr priority of the AO thread can be specified in two ways:
     //
     // 1. Implictily based on the AO's priority (Zephyr uses the reverse
     //    priority numbering scheme than QP). This option is chosen, when
@@ -142,7 +142,7 @@ void QActive_start_(QActive * const me, QPrioSpec const prioSpec,
     //
     //    NOTE: The explicit Zephyr priority is NOT sanity-checked,
     //    so it is the responsibility of the application to ensure that
-    //    it is consistent witht the AO's priority. An example of
+    //    it is consistent with the AO's priority. An example of
     //    inconsistent setting would be assigning Zephyr priorities that
     //    would result in a different relative priritization of AO's threads
     //    than indicated by the AO priorities assigned.
@@ -211,12 +211,12 @@ bool QActive_post_(QActive * const me, QEvt const * const e,
             QS_OBJ_PRE_(sender);  // the sender object
             QS_SIG_PRE_(e->sig);  // the signal of the event
             QS_OBJ_PRE_(me);      // this active object (recipient)
-            QS_2U8_PRE_(QEvt_getPoolId_(e), e->refCtr_);// pool-Id & ref-Count
+            QS_2U8_PRE_(QEvt_getPoolNum_(e), e->refCtr_);// pool-Id & ref-Count
             QS_EQC_PRE_(nFree);   // # free entries available
             QS_EQC_PRE_(0U);      // min # free entries (unknown)
         QS_END_PRE_()
 
-        if (QEvt_getPoolId_(e) != 0U) { // is it a pool event?
+        if (QEvt_getPoolNum_(e) != 0U) { // is it a pool event?
             QEvt_refCtr_inc_(e); // increment the reference counter
         }
         QF_CRIT_EXIT();
@@ -234,7 +234,7 @@ bool QActive_post_(QActive * const me, QEvt const * const e,
             QS_OBJ_PRE_(sender);  // the sender object
             QS_SIG_PRE_(e->sig);  // the signal of the event
             QS_OBJ_PRE_(me);      // this active object (recipient)
-            QS_2U8_PRE_(QEvt_getPoolId_(e), e->refCtr_);// pool-Id & ref-Count
+            QS_2U8_PRE_(QEvt_getPoolNum_(e), e->refCtr_);// pool-Id & ref-Count
             QS_EQC_PRE_(nFree);   // # free entries available
             QS_EQC_PRE_(0U);      // min # free entries (unknown)
         QS_END_PRE_()
@@ -252,12 +252,12 @@ void QActive_postLIFO_(QActive * const me, QEvt const * const e) {
         QS_TIME_PRE_();       // timestamp
         QS_SIG_PRE_(e->sig);  // the signal of this event
         QS_OBJ_PRE_(me);      // this active object
-        QS_2U8_PRE_(QEvt_getPoolId_(e), e->refCtr_); // pool-Id & ref-Count
+        QS_2U8_PRE_(QEvt_getPoolNum_(e), e->refCtr_); // pool-Id & ref-Count
         QS_EQC_PRE_(k_msgq_num_free_get(&me->eQueue)); // # free entries
         QS_EQC_PRE_(0U);      // min # free entries (unknown)
     QS_END_PRE_()
 
-    if (QEvt_getPoolId_(e) != 0U) { // is it a pool event?
+    if (QEvt_getPoolNum_(e) != 0U) { // is it a pool event?
         QEvt_refCtr_inc_(e); // increment the reference counter
     }
     QF_CRIT_EXIT();
@@ -286,7 +286,7 @@ QEvt const *QActive_get_(QActive * const me) {
         QS_TIME_PRE_();       // timestamp
         QS_SIG_PRE_(e->sig);  // the signal of this event
         QS_OBJ_PRE_(me);      // this active object
-        QS_2U8_PRE_(QEvt_getPoolId_(e), e->refCtr_); // pool-Id & ref-Count
+        QS_2U8_PRE_(QEvt_getPoolNum_(e), e->refCtr_); // pool-Id & ref-Count
         QS_EQC_PRE_(k_msgq_num_free_get(&me->eQueue));// # free entries
     QS_END_PRE_()
 
diff --git a/zephyr/qp_port.h b/zephyr/qp_port.h
index 1ad5f8fd..6ba4e628 100644
--- a/zephyr/qp_port.h
+++ b/zephyr/qp_port.h
@@ -92,10 +92,10 @@ extern struct k_spinlock QF_spinlock;
     #define QF_EPOOL_INIT_(p_, poolSto_, poolSize_, evtSize_) \
         (QMPool_init(&(p_), (poolSto_), (poolSize_), (evtSize_)))
     #define QF_EPOOL_EVENT_SIZE_(p_)  ((uint_fast16_t)(p_).blockSize)
-    #define QF_EPOOL_GET_(p_, e_, m_, qs_id_) \
-        ((e_) = (QEvt *)QMPool_get(&(p_), (m_), (qs_id_)))
-    #define QF_EPOOL_PUT_(p_, e_, qs_id_) \
-        (QMPool_put(&(p_), (e_), (qs_id_)))
+    #define QF_EPOOL_GET_(p_, e_, m_, qsId_) \
+        ((e_) = (QEvt *)QMPool_get(&(p_), (m_), (qsId_)))
+    #define QF_EPOOL_PUT_(p_, e_, qsId_) \
+        (QMPool_put(&(p_), (e_), (qsId_)))
 
 #endif // QP_IMPL