From db53ac24c11a58133df51e18c2d185159e8e9af7 Mon Sep 17 00:00:00 2001 From: MMS Date: Wed, 17 Jan 2024 07:50:09 -0500 Subject: [PATCH] 7.3.3 bug fix, codespell --- 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 | 82 +- .../blinky_ek-tm4c123gxl/ek-tm4c123gxl.jpg | Bin 0 -> 50478 bytes .../arm-cm/blinky_ek-tm4c123gxl/qk/bsp.cpp | 6 +- .../blinky_ek-tm4c123gxl/qk/gnu/.ccsproject | 17 - .../blinky_ek-tm4c123gxl/qk/gnu/.cproject | 291 - .../blinky_ek-tm4c123gxl/qk/gnu/.project | 120 - .../blinky_ek-tm4c123gxl/qk/gnu/Makefile | 4 +- .../blinky_ek-tm4c123gxl/qk/gnu/README.txt | 2 +- .../arm-cm/blinky_ek-tm4c123gxl/qv/bsp.cpp | 6 +- .../blinky_ek-tm4c123gxl/qv/gnu/.ccsproject | 17 - .../blinky_ek-tm4c123gxl/qv/gnu/.cproject | 291 - .../blinky_ek-tm4c123gxl/qv/gnu/.project | 120 - .../blinky_ek-tm4c123gxl/qv/gnu/Makefile | 4 +- .../blinky_ek-tm4c123gxl/qv/gnu/README.txt | 2 +- .../arm-cm/blinky_nucleo-c031c6/README.md | 81 +- .../blinky_nucleo-c031c6/qk/gnu/Makefile | 4 +- .../blinky_nucleo-c031c6/qv/gnu/Makefile | 4 +- .../stm32-nucleo-c031c6.jpg | Bin 0 -> 43475 bytes examples/arm-cm/dpp_efm32-slstk3401a/dpp.qm | 2 +- .../arm-cm/dpp_efm32-slstk3401a/qk/bsp.cpp | 2 +- .../dpp_efm32-slstk3401a/qk/gnu/Makefile | 4 +- .../dpp_efm32-slstk3401a/qk/gnu/README.txt | 2 +- .../arm-cm/dpp_efm32-slstk3401a/qv/bsp.cpp | 2 +- .../dpp_efm32-slstk3401a/qv/gnu/Makefile | 4 +- .../dpp_efm32-slstk3401a/qv/gnu/README.txt | 2 +- .../arm-cm/dpp_efm32-slstk3401a/qxk/bsp.cpp | 2 +- .../dpp_efm32-slstk3401a/qxk/gnu/Makefile | 4 +- .../dpp_efm32-slstk3401a/qxk/gnu/README.txt | 2 +- examples/arm-cm/dpp_ek-tm4c123gxl/dpp.qm | 2 +- .../dpp_ek-tm4c123gxl/lint-plus/README.txt | 2 +- .../dpp_ek-tm4c123gxl/lint-plus/options.lnt | 2 +- .../dpp_ek-tm4c123gxl/qk/gnu/.ccsproject | 12 - .../arm-cm/dpp_ek-tm4c123gxl/qk/gnu/.cproject | 391 +- .../arm-cm/dpp_ek-tm4c123gxl/qk/gnu/.project | 43 +- .../arm-cm/dpp_ek-tm4c123gxl/qk/gnu/Makefile | 20 +- .../dpp_ek-tm4c123gxl/qk/gnu/README.txt | 16 +- .../arm-cm/dpp_ek-tm4c123gxl/qp_config.hpp | 4 +- .../dpp_ek-tm4c123gxl/qv/gnu/.ccsproject | 12 - .../arm-cm/dpp_ek-tm4c123gxl/qv/gnu/.cproject | 399 +- .../arm-cm/dpp_ek-tm4c123gxl/qv/gnu/.project | 51 +- .../arm-cm/dpp_ek-tm4c123gxl/qv/gnu/Makefile | 34 +- .../dpp_ek-tm4c123gxl/qv/gnu/README.txt | 16 +- .../dpp_ek-tm4c123gxl/qxk/gnu/.ccsproject | 12 - .../dpp_ek-tm4c123gxl/qxk/gnu/.cproject | 399 +- .../arm-cm/dpp_ek-tm4c123gxl/qxk/gnu/.project | 52 +- .../arm-cm/dpp_ek-tm4c123gxl/qxk/gnu/Makefile | 18 +- .../dpp_ek-tm4c123gxl/qxk/gnu/README.txt | 16 +- .../arm-cm/dpp_ek-tm4c123gxl_mpu/dpp_mpu.qm | 2 +- .../lint-plus/README.txt | 2 +- .../lint-plus/options.lnt | 2 +- .../dpp_ek-tm4c123gxl_mpu/qk/gnu/Makefile | 30 +- .../dpp_ek-tm4c123gxl_mpu/qv/gnu/Makefile | 30 +- .../dpp_ek-tm4c123gxl_mpu/qv/gnu/README.txt | 2 +- .../dpp_ek-tm4c123gxl_mpu/qxk/gnu/Makefile | 29 +- examples/arm-cm/dpp_mbed-lpc1768/dpp.qm | 2 +- examples/arm-cm/dpp_mbed-lpc1768/qk/bsp.cpp | 2 +- .../arm-cm/dpp_mbed-lpc1768/qk/gnu/Makefile | 4 +- examples/arm-cm/dpp_mbed-lpc1768/qv/bsp.cpp | 2 +- .../arm-cm/dpp_mbed-lpc1768/qv/gnu/Makefile | 4 +- examples/arm-cm/dpp_mbed-lpc1768/qxk/bsp.cpp | 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.cpp | 2 +- .../arm-cm/dpp_nucleo-c031c6/qk/gnu/Makefile | 4 +- .../dpp_nucleo-c031c6/qk/gnu/Makefile-cpp20 | 4 +- .../dpp_nucleo-c031c6/qk/gnu/README.txt | 2 +- .../dpp_nucleo-c031c6/qk/iar/dpp-qk.ewp | 6 +- examples/arm-cm/dpp_nucleo-c031c6/qv/bsp.cpp | 2 +- .../arm-cm/dpp_nucleo-c031c6/qv/gnu/Makefile | 4 +- .../dpp_nucleo-c031c6/qv/gnu/Makefile-cpp20 | 4 +- examples/arm-cm/dpp_nucleo-c031c6/qxk/bsp.cpp | 2 +- .../arm-cm/dpp_nucleo-c031c6/qxk/gnu/Makefile | 4 +- .../dpp_nucleo-c031c6/qxk/gnu/Makefile-cpp20 | 4 +- .../dpp_nucleo-c031c6/qxk/gnu/README.txt | 2 +- .../arm-cm/dpp_nucleo-c031c6_mpu/README.md | 2 +- .../arm-cm/dpp_nucleo-c031c6_mpu/dpp_mpu.qm | 2 +- .../qk/armclang/README.txt | 2 +- .../arm-cm/dpp_nucleo-c031c6_mpu/qk/bsp.cpp | 2 +- .../dpp_nucleo-c031c6_mpu/qk/gnu/Makefile | 4 +- .../dpp_nucleo-c031c6_mpu/qk/gnu/README.txt | 2 +- .../arm-cm/dpp_nucleo-c031c6_mpu/qv/bsp.cpp | 2 +- .../dpp_nucleo-c031c6_mpu/qv/gnu/Makefile | 4 +- .../arm-cm/dpp_nucleo-c031c6_mpu/qxk/bsp.cpp | 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.cpp | 2 +- .../arm-cm/dpp_nucleo-h743zi/qk/gnu/Makefile | 4 +- .../dpp_nucleo-h743zi/qk/gnu/README.txt | 2 +- examples/arm-cm/dpp_nucleo-h743zi/qv/bsp.cpp | 2 +- .../arm-cm/dpp_nucleo-h743zi/qv/gnu/Makefile | 4 +- .../arm-cm/dpp_nucleo-h743zi/qview/dpp.py | 4 +- .../arm-cm/dpp_nucleo-h743zi/qview/dpp1.py | 4 +- examples/arm-cm/dpp_nucleo-h743zi/qxk/bsp.cpp | 2 +- .../arm-cm/dpp_nucleo-h743zi/qxk/gnu/Makefile | 4 +- .../dpp_nucleo-h743zi/qxk/gnu/README.txt | 2 +- .../dpp_nucleo-h743zi/stm32h7xx_hal_conf.h | 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.cpp | 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.cpp | 2 +- .../arm-cm/dpp_nucleo-l053r8/qv/gnu/Makefile | 4 +- .../dpp_nucleo-l053r8/qv/gnu/README.txt | 4 +- .../arm-cm/dpp_nucleo-l053r8/qview/dpp.py | 4 +- .../arm-cm/dpp_nucleo-l053r8/qview/dpp1.py | 4 +- .../dpp_nucleo-l053r8/qxk/armclang/README.txt | 4 +- examples/arm-cm/dpp_nucleo-l053r8/qxk/bsp.cpp | 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.cpp | 2 +- .../arm-cm/dpp_nucleo-l152re/qk/gnu/Makefile | 4 +- .../dpp_nucleo-l152re/qv/armclang/README.txt | 4 +- examples/arm-cm/dpp_nucleo-l152re/qv/bsp.cpp | 2 +- .../arm-cm/dpp_nucleo-l152re/qv/gnu/Makefile | 4 +- .../arm-cm/dpp_nucleo-l152re/qview/dpp.py | 4 +- .../arm-cm/dpp_nucleo-l152re/qview/dpp1.py | 4 +- .../dpp_nucleo-l152re/qxk/armclang/README.txt | 4 +- examples/arm-cm/dpp_nucleo-l152re/qxk/bsp.cpp | 2 +- .../arm-cm/dpp_nucleo-l152re/qxk/gnu/Makefile | 4 +- examples/arm-cm/dpp_nucleo-l552ze/dpp.qm | 2 +- examples/arm-cm/dpp_nucleo-l552ze/qk/bsp.cpp | 2 +- .../arm-cm/dpp_nucleo-l552ze/qk/gnu/Makefile | 4 +- examples/arm-cm/dpp_nucleo-l552ze/qv/bsp.cpp | 2 +- .../arm-cm/dpp_nucleo-l552ze/qv/gnu/Makefile | 4 +- .../arm-cm/dpp_nucleo-l552ze/qview/dpp.py | 4 +- .../arm-cm/dpp_nucleo-l552ze/qview/dpp1.py | 4 +- examples/arm-cm/dpp_nucleo-l552ze/qxk/bsp.cpp | 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.cpp | 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.cpp | 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.cpp | 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 | 2 +- examples/arm-cm/game_efm32-slstk3401a/game.qm | 10 +- .../arm-cm/game_efm32-slstk3401a/mine1.cpp | 2 +- .../arm-cm/game_efm32-slstk3401a/mine2.cpp | 2 +- .../arm-cm/game_efm32-slstk3401a/qk/bsp.cpp | 34 +- .../game_efm32-slstk3401a/qk/gnu/Makefile | 4 +- .../game_efm32-slstk3401a/qk/gnu/README.txt | 2 +- .../arm-cm/game_efm32-slstk3401a/qv/bsp.cpp | 34 +- .../game_efm32-slstk3401a/qv/gnu/Makefile | 4 +- .../game_efm32-slstk3401a/qv/gnu/README.txt | 2 +- .../arm-cm/game_efm32-slstk3401a/ship.cpp | 4 +- .../arm-cm/game_efm32-slstk3401a/tunnel.cpp | 2 +- .../arm-cm/low-power_ek-tm4c123gxl/bsp.hpp | 2 +- .../arm-cm/low-power_ek-tm4c123gxl/qk/bsp.cpp | 2 +- .../low-power_ek-tm4c123gxl/qk/gnu/Makefile | 4 +- .../low-power_ek-tm4c123gxl/qk/gnu/README.txt | 2 +- .../arm-cm/low-power_ek-tm4c123gxl/qv/bsp.cpp | 4 +- .../low-power_ek-tm4c123gxl/qv/gnu/Makefile | 4 +- .../low-power_ek-tm4c123gxl/qv/gnu/README.txt | 2 +- .../low-power_ek-tm4c123gxl/qxk/bsp.cpp | 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 +- .../blinky_launchxl2-tms57012/blinky.cpp | 2 +- .../launchxl2-tms57012.png | Bin 0 -> 136290 bytes .../blinky_launchxl2-tms57012/qk/bsp.cpp | 2 + .../blinky_launchxl2-tms57012/qk/ti/.cproject | 293 +- .../blinky_launchxl2-tms57012/qk/ti/.project | 74 + .../blinky_launchxl2-tms57012/qv/bsp.cpp | 2 + .../blinky_launchxl2-tms57012/qv/ti/.cproject | 295 +- .../blinky_launchxl2-tms57012/qv/ti/.project | 74 + .../arm-cr/dpp_launchxl2-tms57012/README.md | 89 +- examples/arm-cr/dpp_launchxl2-tms57012/dpp.qm | 2 +- .../launchxl2-tms57012.png | Bin 0 -> 136290 bytes .../arm-cr/dpp_launchxl2-tms57012/qk/bsp.cpp | 4 +- .../dpp_launchxl2-tms57012/qk/ti/.cproject | 273 +- .../dpp_launchxl2-tms57012/qspy-output.png | Bin 0 -> 30404 bytes .../arm-cr/dpp_launchxl2-tms57012/qv/bsp.cpp | 4 +- .../dpp_launchxl2-tms57012/qv/ti/.cproject | 271 +- .../dpp_launchxl2-tms57012/qview/dpp.py | 4 +- .../dpp_launchxl2-tms57012/qview/dpp1.py | 4 +- .../embos/arm-cm/dpp_nucleo-h743zi/bsp.cpp | 2 +- .../embos/arm-cm/dpp_nucleo-h743zi/dpp.qm | 2 +- .../arm-cm/dpp_nucleo-h743zi/gnu/Makefile | 4 +- .../arm-cm/dpp_nucleo-h743zi/gnu/Makefile.c | 328 - .../gnu/Setup/HardFaultHandler.S | 2 +- .../dpp_nucleo-h743zi/stm32h7xx_hal_msp.c | 8 +- .../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.cpp | 2 +- .../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 | 4 +- examples/lwip/arm-cm/lwip_ek-lm3s6965/dpp.hpp | 4 +- examples/lwip/arm-cm/lwip_ek-lm3s6965/lwip.c | 4 +- .../lwip/arm-cm/lwip_ek-lm3s6965/qk/bsp.cpp | 4 +- .../arm-cm/lwip_ek-lm3s6965/qk/gnu/Makefile | 4 +- .../lwip/arm-cm/lwip_ek-lm3s6965/qv/bsp.cpp | 6 +- .../arm-cm/lwip_ek-lm3s6965/qv/gnu/Makefile | 4 +- .../arm-cm/lwip_ek-lm3s6965/website/index.htm | 4 +- .../lwip_ek-lm3s6965/website/ssi_demo.shtm | 2 +- .../lwip_ek-lm3s6965/website/udp_demo.htm | 2 +- .../blinky_msp-exp430f5529lp/blinky.cpp | 2 +- .../blinky_msp-exp430f5529lp/qv/bsp.cpp | 2 +- examples/msp430/dpp_msp-exp430f5529lp/dpp.qm | 2 +- .../msp430/dpp_msp-exp430f5529lp/qk/bsp.cpp | 4 +- .../msp430/dpp_msp-exp430f5529lp/qv/bsp.cpp | 6 +- .../dpp_efm32-slstk3401a/README.txt | 8 +- .../performance/dpp_efm32-slstk3401a/dpp.hpp | 2 +- .../dpp_efm32-slstk3401a/dpp_qhsm.qm | 4 +- .../dpp_efm32-slstk3401a/dpp_qmsm.qm | 4 +- .../dpp_efm32-slstk3401a/qk/bsp.cpp | 4 +- .../dpp_efm32-slstk3401a/qv/bsp.cpp | 4 +- .../dpp_efm32-slstk3401a/qxk/bsp.cpp | 4 +- .../dpp_efm32-slstk3401a/uc-os2/bsp.cpp | 2 +- .../dpp_efm32-slstk3401a/uc-os2/main.cpp | 2 +- examples/pic32/dpp_microstick2-pic32/dpp.qm | 2 +- .../dpp_microstick2-pic32/qk/xc32/Makefile | 2 +- .../qk/xc32/nbproject/Makefile-dbg.mk | 185 +- .../nbproject/Makefile-genesis.properties | 34 +- .../qk/xc32/nbproject/Makefile-local-dbg.mk | 33 +- .../qk/xc32/nbproject/Makefile-local-rel.mk | 4 +- .../qk/xc32/nbproject/Makefile-local-spy.mk | 4 +- .../qk/xc32/nbproject/Makefile-variables.mk | 9 - .../qk/xc32/nbproject/configurations.xml | 112 +- .../xc32/nbproject/private/configurations.xml | 6 +- .../dpp_microstick2-pic32/qv/xc32/Makefile | 2 +- .../qv/xc32/nbproject/Makefile-local-dbg.mk | 4 +- .../qv/xc32/nbproject/Makefile-local-rel.mk | 4 +- .../qv/xc32/nbproject/Makefile-local-spy.mk | 4 +- examples/posix-win32/calc/calc.cpp | 2 +- examples/posix-win32/calc/calc.qm | 2 +- examples/posix-win32/calc2/calc2.cpp | 2 +- examples/posix-win32/calc2/calc2.qm | 2 +- examples/posix-win32/calc_sub/calc_sub.cpp | 2 +- examples/posix-win32/calc_sub/calc_sub.qm | 2 +- .../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 | 6 +- examples/posix-win32/reminder2/reminder2.cpp | 2 +- examples/posix-win32/reminder2/reminder2.qm | 4 +- examples/qutest/blinky/src/bsp.hpp | 2 +- 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 | 6 +- 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 +- 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/evt_par/test/make_tm4c123 | 2 +- .../qutest/qhsmtst/test/make_nucleo-l053r8 | 4 +- examples/qutest/qhsmtst/test/make_tm4c123 | 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 +- .../qutest/start_seq/test/test_start_seq.py | 4 +- examples/qwin-gui/dpp-gui/bsp.cpp | 4 +- examples/qwin-gui/dpp-gui/dpp.qm | 2 +- examples/qwin-gui/game-gui/bsp.cpp | 34 +- examples/qwin-gui/game-gui/game.qm | 10 +- examples/qwin-gui/game-gui/make.bat | 2 +- examples/qwin-gui/game-gui/mine1.cpp | 2 +- examples/qwin-gui/game-gui/mine2.cpp | 2 +- examples/qwin-gui/game-gui/ship.cpp | 4 +- examples/qwin-gui/game-gui/tunnel.cpp | 2 +- .../threadx/arm-cm/dpp_ek-tm4c123gxl/bsp.cpp | 2 +- .../threadx/arm-cm/dpp_ek-tm4c123gxl/dpp.qm | 2 +- .../arm-cm/dpp_stm32f429-discovery/bsp.cpp | 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 | 4 +- examples/zephyr/dpp/src/dpp.qm | 2 +- include/qequeue.hpp | 8 +- include/qk.hpp | 8 +- include/qmpool.hpp | 10 +- include/qp.hpp | 106 +- include/qp_pkg.hpp | 2 +- include/qpcpp.hpp | 2 +- include/qs.hpp | 32 +- include/qs_dummy.hpp | 12 +- include/qs_pkg.hpp | 6 +- include/qstamp.hpp | 2 +- include/qv.hpp | 8 +- include/qxk.hpp | 16 +- ports/arm-cm/qk/armclang/qk_port.cpp | 10 +- ports/arm-cm/qk/config/qp_config.hpp | 2 +- ports/arm-cm/qk/gnu/qk_port.cpp | 15 +- ports/arm-cm/qk/iar/qk_port.cpp | 10 +- ports/arm-cm/qutest/qp_port.hpp | 6 +- ports/arm-cm/qv/armclang/qv_port.cpp | 10 +- ports/arm-cm/qv/config/qp_config.hpp | 2 +- ports/arm-cm/qv/gnu/qv_port.cpp | 10 +- ports/arm-cm/qv/iar/qv_port.cpp | 10 +- ports/arm-cm/qxk/armclang/qxk_port.cpp | 12 +- ports/arm-cm/qxk/config/qp_config.hpp | 2 +- ports/arm-cm/qxk/gnu/qxk_port.cpp | 17 +- ports/arm-cm/qxk/iar/qxk_port.cpp | 12 +- ports/arm-cr/qk/config/qp_config.hpp | 2 +- ports/arm-cr/qv/config/qp_config.hpp | 2 +- ports/config/qp_config.hpp | 4 +- ports/embos/qf_port.cpp | 16 +- ports/embos/qp_port.hpp | 6 +- ports/freertos/qf_port.cpp | 42 +- ports/freertos/qp_port.hpp | 6 +- ports/lint-plus/qpcpp.lnt | 4 +- ports/msp430/qutest/qp_port.hpp | 6 +- ports/pic32/qk/xc32/qk_port.cpp | 2 +- ports/pic32/qutest/xc32/qp_port.hpp | 6 +- ports/posix-qutest/qp_port.hpp | 6 +- ports/posix-qv/qf_port.cpp | 2 +- ports/posix-qv/qp_port.hpp | 8 +- ports/posix/qp_port.hpp | 8 +- ports/threadx/qf_port.cpp | 12 +- ports/threadx/qp_port.hpp | 6 +- ports/uc-os2/qf_port.cpp | 16 +- ports/uc-os2/qp_port.hpp | 6 +- ports/win32-qutest/qp_port.hpp | 6 +- ports/win32-qv/qp_port.hpp | 6 +- ports/win32/qf_port.cpp | 2 +- ports/win32/qp_port.hpp | 6 +- qpcpp.md5 | 149 +- qpcpp.qm | 632 +- qpcpp.xml | 12231 ++++++++++++++++ src/qf/qep_hsm.cpp | 62 +- src/qf/qep_msm.cpp | 72 +- src/qf/qf_act.cpp | 2 +- src/qf/qf_actq.cpp | 26 +- src/qf/qf_defer.cpp | 8 +- src/qf/qf_dyn.cpp | 84 +- src/qf/qf_mem.cpp | 16 +- src/qf/qf_ps.cpp | 12 +- src/qf/qf_qact.cpp | 2 +- src/qf/qf_qeq.cpp | 40 +- src/qf/qf_qmact.cpp | 2 +- src/qf/qf_time.cpp | 16 +- src/qk/qk.cpp | 6 +- src/qs/qs.cpp | 20 +- src/qs/qs_64bit.cpp | 2 +- src/qs/qs_fp.cpp | 2 +- src/qs/qs_rx.cpp | 6 +- src/qs/qstamp.cpp | 2 +- src/qs/qutest.cpp | 30 +- src/qv/qv.cpp | 2 +- src/qxk/qxk.cpp | 2 +- src/qxk/qxk_mutex.cpp | 2 +- src/qxk/qxk_sema.cpp | 4 +- src/qxk/qxk_xthr.cpp | 14 +- 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/qs/qs_rx/qp_port.hpp | 6 +- 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.cpp | 16 +- zephyr/qp_port.hpp | 6 +- 394 files changed, 15644 insertions(+), 4029 deletions(-) create mode 100644 examples/arm-cm/blinky_ek-tm4c123gxl/ek-tm4c123gxl.jpg 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/stm32-nucleo-c031c6.jpg create mode 100644 examples/arm-cr/blinky_launchxl2-tms57012/launchxl2-tms57012.png create mode 100644 examples/arm-cr/blinky_launchxl2-tms57012/qk/ti/.project create mode 100644 examples/arm-cr/blinky_launchxl2-tms57012/qv/ti/.project 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 examples/embos/arm-cm/dpp_nucleo-h743zi/gnu/Makefile.c create mode 100644 qpcpp.xml 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 e22ce252..2dcdda41 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ View QP/C++ Revision History at: https://www.state-machine.com/qpcpp/history.html > **NOTE:** If you're interested in the latest QP/C++ version from GitHub, -it is highly recommened that you clone this repo like that: +it is highly recommended that you clone this repo like that: ``` git clone https://github.com/QuantumLeaps/qpcpp --recurse-submodules --depth 1 @@ -105,7 +105,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/qpcpp 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 91e8b362..b8dd279b 100644 --- a/examples/arm-cm/blinky_ek-tm4c123gxl/README.md +++ b/examples/arm-cm/blinky_ek-tm4c123gxl/README.md @@ -1,5 +1,81 @@ -![STM32 EFM32-SLSTK3401A](../../../doxygen/images/bd_EK-TM4C123GXL.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: +# Blinky on EK-TM4C123GXL +This example implements the simple [Blinky application](https://www.state-machine.com/qpcpp/tut_blinky.html) on the EK-TM4C123GLX board (ARM Cortex-M4F). The example blinks the LED +on the EK-TM4C123GXL board at 1Hz (0.5 seconds on, 0.5 seconds off). + +

+
+EK-TM4C123GXL (TivaC LaunchPad) +

+ +## 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_ek-tm4c123gxl +| ++---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_ek-tm4c123gxl\qk\gnu` +or `examples\arm-cm\blinky_ek-tm4c123gxl\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. -- https://www.state-machine.com/qpcpp/arm-cm_blinky_ek-tm4c123gxl.html diff --git a/examples/arm-cm/blinky_ek-tm4c123gxl/ek-tm4c123gxl.jpg b/examples/arm-cm/blinky_ek-tm4c123gxl/ek-tm4c123gxl.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5ed6188cdcb1be9d3aa9ac5519acc6cd2dbe2d35 GIT binary patch literal 50478 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 CaTv4! literal 0 HcmV?d00001 diff --git a/examples/arm-cm/blinky_ek-tm4c123gxl/qk/bsp.cpp b/examples/arm-cm/blinky_ek-tm4c123gxl/qk/bsp.cpp index cade19df..d39a74f7 100644 --- a/examples/arm-cm/blinky_ek-tm4c123gxl/qk/bsp.cpp +++ b/examples/arm-cm/blinky_ek-tm4c123gxl/qk/bsp.cpp @@ -246,7 +246,7 @@ void QK::onIdle() { // // 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. -// Please note that the LED is toggled with interrupts locked, so no interrupt -// execution time contributes to the brightness of the User LED. +// of the LED is proportional to the frequency 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 310b2b54..00000000 --- a/examples/arm-cm/blinky_ek-tm4c123gxl/qk/gnu/.cproject +++ /dev/null @@ -1,291 +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 1a203c20..00000000 --- a/examples/arm-cm/blinky_ek-tm4c123gxl/qk/gnu/.project +++ /dev/null @@ -1,120 +0,0 @@ - - - blinky-qk - - - - - - org.eclipse.cdt.managedbuilder.core.genmakebuilder - clean,full,incremental, - - - - - 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 - - - - GNU_CPP - 2 - PARENT-5-PROJECT_LOC/3rd_party/gnu_cpp - - - 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.cpp - 1 - PARENT-2-PROJECT_LOC/blinky.cpp - - - blinky.h - 1 - PARENT-2-PROJECT_LOC/blinky.h - - - bsp.cpp - 1 - PARENT-1-PROJECT_LOC/bsp.cpp - - - bsp.h - 1 - PARENT-2-PROJECT_LOC/bsp.h - - - gpio.h - 1 - PARENT-5-PROJECT_LOC/3rd_party/ek-tm4c123gxl/gpio.h - - - main.cpp - 1 - PARENT-2-PROJECT_LOC/main.cpp - - - qstamp.cpp - 1 - PARENT-5-PROJECT_LOC/src/qs/qstamp.cpp - - - 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 2922a814..782edff7 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 ($(QPCPP),) QPCPP := ../../../../.. endif @@ -176,7 +176,7 @@ RM := rm # build options for various configurations for ARM Cortex-M4F # -# combine all the soruces... +# combine all the sources... CPP_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.cpp b/examples/arm-cm/blinky_ek-tm4c123gxl/qv/bsp.cpp index 2a472ff1..5851393f 100644 --- a/examples/arm-cm/blinky_ek-tm4c123gxl/qv/bsp.cpp +++ b/examples/arm-cm/blinky_ek-tm4c123gxl/qv/bsp.cpp @@ -246,7 +246,7 @@ void QV::onIdle() { // CATION: called with interrupts DISABLED, NOTE0 // // 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. -// Please note that the LED is toggled with interrupts locked, so no interrupt -// execution time contributes to the brightness of the User LED. +// of the LED is proportional to the frequency 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 e96d740d..00000000 --- a/examples/arm-cm/blinky_ek-tm4c123gxl/qv/gnu/.cproject +++ /dev/null @@ -1,291 +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 f27909d1..00000000 --- a/examples/arm-cm/blinky_ek-tm4c123gxl/qv/gnu/.project +++ /dev/null @@ -1,120 +0,0 @@ - - - blinky-qv - - - - - - org.eclipse.cdt.managedbuilder.core.genmakebuilder - clean,full,incremental, - - - - - 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 - - - - GNU_CPP - 2 - PARENT-5-PROJECT_LOC/3rd_party/gnu_cpp - - - 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 - - - TM4C123GH6PM.h - 1 - PARENT-5-PROJECT_LOC/3rd_party/ek-tm4c123gxl/TM4C123GH6PM.h - - - blinky.cpp - 1 - PARENT-2-PROJECT_LOC/blinky.cpp - - - blinky.h - 1 - PARENT-2-PROJECT_LOC/blinky.h - - - bsp.cpp - 1 - PARENT-1-PROJECT_LOC/bsp.cpp - - - bsp.h - 1 - PARENT-2-PROJECT_LOC/bsp.h - - - gpio.h - 1 - PARENT-5-PROJECT_LOC/3rd_party/ek-tm4c123gxl/gpio.h - - - main.cpp - 1 - PARENT-2-PROJECT_LOC/main.cpp - - - qstamp.cpp - 1 - PARENT-5-PROJECT_LOC/src/qs/qstamp.cpp - - - qv - 2 - PARENT-5-PROJECT_LOC/src/qv - - - 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 b0aa83ab..03ce5132 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 ($(QPCPP),) QPCPP := ../../../../.. endif @@ -176,7 +176,7 @@ RM := rm # build options for various configurations for ARM Cortex-M4F # -# combine all the soruces... +# combine all the sources... CPP_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 index 91e8b362..ba383678 100644 --- a/examples/arm-cm/blinky_nucleo-c031c6/README.md +++ b/examples/arm-cm/blinky_nucleo-c031c6/README.md @@ -1,5 +1,80 @@ -![STM32 EFM32-SLSTK3401A](../../../doxygen/images/bd_EK-TM4C123GXL.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: +# Blinky on NUCLEO-C031C6 +This example demonstrates the [Blinky application](https://www.state-machine.com/qpcpp/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. -- https://www.state-machine.com/qpcpp/arm-cm_blinky_ek-tm4c123gxl.html diff --git a/examples/arm-cm/blinky_nucleo-c031c6/qk/gnu/Makefile b/examples/arm-cm/blinky_nucleo-c031c6/qk/gnu/Makefile index 6eaadc4f..ae9ea72f 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 ($(QPCPP),) QPCPP := ../../../../.. endif @@ -178,7 +178,7 @@ RM := rm # build options for various configurations for ARM Cortex-M # -# combine all the soruces... +# combine all the sources... CPP_SRCS += $(QP_SRCS) ASM_SRCS += $(QP_ASMS) diff --git a/examples/arm-cm/blinky_nucleo-c031c6/qv/gnu/Makefile b/examples/arm-cm/blinky_nucleo-c031c6/qv/gnu/Makefile index f873bacb..0e0a3ebe 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 ($(QPCPP),) QPCPP := ../../../../.. endif @@ -176,7 +176,7 @@ RM := rm # build options for various configurations for ARM Cortex-M # -# combine all the soruces... +# combine all the sources... CPP_SRCS += $(QP_SRCS) ASM_SRCS += $(QP_ASMS) diff --git a/examples/arm-cm/blinky_nucleo-c031c6/stm32-nucleo-c031c6.jpg b/examples/arm-cm/blinky_nucleo-c031c6/stm32-nucleo-c031c6.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6647e2d493863c9d4268596be8bc982a1ca49ccb GIT binary patch literal 43475 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 aZwdcScKknmYz}5d{lD5b|344^F8mKp|M*b= literal 0 HcmV?d00001 diff --git a/examples/arm-cm/dpp_efm32-slstk3401a/dpp.qm b/examples/arm-cm/dpp_efm32-slstk3401a/dpp.qm index 917b13a7..1de2b108 100644 --- a/examples/arm-cm/dpp_efm32-slstk3401a/dpp.qm +++ b/examples/arm-cm/dpp_efm32-slstk3401a/dpp.qm @@ -258,7 +258,7 @@ for (std::uint8_t n = 0U; n < N_PHILO; ++n) { - // give permissions to eat... + // give permissions to eat... for (std::uint8_t n = 0U; n < N_PHILO; ++n) { if (m_isHungry[n] && (m_fork[left(n)] == FREE) diff --git a/examples/arm-cm/dpp_efm32-slstk3401a/qk/bsp.cpp b/examples/arm-cm/dpp_efm32-slstk3401a/qk/bsp.cpp index 5d2f7841..5c2ad7b3 100644 --- a/examples/arm-cm/dpp_efm32-slstk3401a/qk/bsp.cpp +++ b/examples/arm-cm/dpp_efm32-slstk3401a/qk/bsp.cpp @@ -490,7 +490,7 @@ QSTimeCtr onGetTime() { // 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 1c13ad8f..1af21e40 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 ($(QPCPP),) QPCPP := ../../../../.. endif @@ -183,7 +183,7 @@ RM := rm # build options for various configurations for ARM Cortex-M # -# combine all the soruces... +# combine all the sources... CPP_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 a578042c..b4d4451a 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.cpp b/examples/arm-cm/dpp_efm32-slstk3401a/qv/bsp.cpp index eff944da..9212cbe9 100644 --- a/examples/arm-cm/dpp_efm32-slstk3401a/qv/bsp.cpp +++ b/examples/arm-cm/dpp_efm32-slstk3401a/qv/bsp.cpp @@ -481,7 +481,7 @@ QSTimeCtr onGetTime() { // 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 aacabf10..ef900dc1 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 ($(QPCPP),) QPCPP := ../../../../.. endif @@ -183,7 +183,7 @@ RM := rm # build options for various configurations for ARM Cortex-M # -# combine all the soruces... +# combine all the sources... CPP_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 a578042c..b4d4451a 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.cpp b/examples/arm-cm/dpp_efm32-slstk3401a/qxk/bsp.cpp index bb431cc8..b5a00df0 100644 --- a/examples/arm-cm/dpp_efm32-slstk3401a/qxk/bsp.cpp +++ b/examples/arm-cm/dpp_efm32-slstk3401a/qxk/bsp.cpp @@ -505,7 +505,7 @@ QSTimeCtr onGetTime() { // 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/qxk/gnu/Makefile b/examples/arm-cm/dpp_efm32-slstk3401a/qxk/gnu/Makefile index aa04f7bd..98b1a4bc 100644 --- a/examples/arm-cm/dpp_efm32-slstk3401a/qxk/gnu/Makefile +++ b/examples/arm-cm/dpp_efm32-slstk3401a/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 ($(QPCPP),) QPCPP := ../../../../.. endif @@ -187,7 +187,7 @@ RM := rm # build options for various configurations for ARM Cortex-M # -# combine all the soruces... +# combine all the sources... CPP_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 14fff559..1814d84d 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/dpp.qm b/examples/arm-cm/dpp_ek-tm4c123gxl/dpp.qm index 917b13a7..1de2b108 100644 --- a/examples/arm-cm/dpp_ek-tm4c123gxl/dpp.qm +++ b/examples/arm-cm/dpp_ek-tm4c123gxl/dpp.qm @@ -258,7 +258,7 @@ for (std::uint8_t n = 0U; n < N_PHILO; ++n) { - // give permissions to eat... + // give permissions to eat... for (std::uint8_t n = 0U; n < N_PHILO; ++n) { if (m_isHungry[n] && (m_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 6075a298..f4869b16 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_DIR at the top of the lin.bat diff --git a/examples/arm-cm/dpp_ek-tm4c123gxl/lint-plus/options.lnt b/examples/arm-cm/dpp_ek-tm4c123gxl/lint-plus/options.lnt index 9e80bf43..6093417a 100644 --- a/examples/arm-cm/dpp_ek-tm4c123gxl/lint-plus/options.lnt +++ b/examples/arm-cm/dpp_ek-tm4c123gxl/lint-plus/options.lnt @@ -57,7 +57,7 @@ cpu.lnt // for the chosen CPU qpcpp.lnt // QP/C++ options ///////////////////////////////////////////////////////////////////////////// -// addtitional supporession rules for bulding this application +// additional suppression rules for building this application // underlying type for enums is always 'int' +fei diff --git a/examples/arm-cm/dpp_ek-tm4c123gxl/qk/gnu/.ccsproject b/examples/arm-cm/dpp_ek-tm4c123gxl/qk/gnu/.ccsproject index 0c19207c..e057df00 100644 --- a/examples/arm-cm/dpp_ek-tm4c123gxl/qk/gnu/.ccsproject +++ b/examples/arm-cm/dpp_ek-tm4c123gxl/qk/gnu/.ccsproject @@ -1,17 +1,5 @@ - - - - - - - - - - - - diff --git a/examples/arm-cm/dpp_ek-tm4c123gxl/qk/gnu/.cproject b/examples/arm-cm/dpp_ek-tm4c123gxl/qk/gnu/.cproject index bb51c307..c3caf810 100644 --- a/examples/arm-cm/dpp_ek-tm4c123gxl/qk/gnu/.cproject +++ b/examples/arm-cm/dpp_ek-tm4c123gxl/qk/gnu/.cproject @@ -3,9 +3,6 @@ - - - @@ -18,31 +15,41 @@ - - @@ -91,11 +99,8 @@ - - - - - + + @@ -106,125 +111,44 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -273,6 +198,106 @@ + + + + + + + + + + + + + + + + + + + + + + + + + @@ -288,4 +313,6 @@ - + + + \ 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 d9eaf715..bdf5667f 100644 --- a/examples/arm-cm/dpp_ek-tm4c123gxl/qk/gnu/.project +++ b/examples/arm-cm/dpp_ek-tm4c123gxl/qk/gnu/.project @@ -7,7 +7,6 @@ org.eclipse.cdt.managedbuilder.core.genmakebuilder - clean,full,incremental, @@ -26,11 +25,6 @@ org.eclipse.cdt.managedbuilder.core.ScannerConfigNature - - GNU_CPP - 2 - PARENT-5-PROJECT_LOC/3rd_party/gnu_cpp - QK 2 @@ -61,25 +55,10 @@ 1 PARENT-1-PROJECT_LOC/bsp.cpp - - bsp.h - 1 - PARENT-2-PROJECT_LOC/bsp.h - - - dpp.h - 1 - PARENT-2-PROJECT_LOC/dpp.h - - - gpio.h - 1 - PARENT-5-PROJECT_LOC/3rd_party/ek-tm4c123gxl/gpio.h - main.cpp 1 - PARENT-1-PROJECT_LOC/main.cpp + PARENT-2-PROJECT_LOC/main.cpp philo.cpp @@ -87,25 +66,15 @@ PARENT-2-PROJECT_LOC/philo.cpp - qstamp.cpp + qp_config.hpp 1 - PARENT-5-PROJECT_LOC/src/qs/qstamp.cpp - - - rom.h - 1 - PARENT-5-PROJECT_LOC/3rd_party/ek-tm4c123gxl/rom.h + PARENT-2-PROJECT_LOC/qp_config.hpp 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 @@ -122,4 +91,10 @@ PARENT-2-PROJECT_LOC/table.cpp + + + CG_TOOL_GPP + $%7BCG_TOOL_ROOT%7D/bin/arm-none-eabi-g++ + + diff --git a/examples/arm-cm/dpp_ek-tm4c123gxl/qk/gnu/Makefile b/examples/arm-cm/dpp_ek-tm4c123gxl/qk/gnu/Makefile index d477c69e..a2761cdd 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-05-26 +# 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 ($(QPCPP),) QPCPP := ../../../../.. endif @@ -132,8 +132,7 @@ LIB_DIRS := LIBS := # defines -DEFINES := \ - -DQF_ON_CONTEXT_SW +DEFINES := -DQP_CONFIG # ARM CPU, ARCH, FPU, and Float-ABI types... # ARM_CPU: [cortex-m0 | cortex-m0plus | cortex-m1 | cortex-m3 | cortex-m4] @@ -141,8 +140,8 @@ DEFINES := \ # 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) @@ -177,7 +176,7 @@ RM := rm # build options for various configurations for ARM Cortex-M # -# combine all the soruces... +# combine all the sources... CPP_SRCS += $(QP_SRCS) ASM_SRCS += $(QP_ASMS) @@ -279,6 +278,8 @@ $(BIN_DIR)/%.o : %.c $(BIN_DIR)/%.o : %.cpp $(CPP) $(CPPFLAGS) $< -o $@ +.PHONY : clean show + # include dependency files only if our goal depends on their existence ifneq ($(MAKECMDGOALS),clean) ifneq ($(MAKECMDGOALS),show) @@ -287,7 +288,6 @@ ifneq ($(MAKECMDGOALS),clean) endif -.PHONY : clean clean: -$(RM) $(BIN_DIR)/*.o \ $(BIN_DIR)/*.d \ 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.hpp b/examples/arm-cm/dpp_ek-tm4c123gxl/qp_config.hpp index 28e3469b..57e38bd9 100644 --- a/examples/arm-cm/dpp_ek-tm4c123gxl/qp_config.hpp +++ b/examples/arm-cm/dpp_ek-tm4c123gxl/qp_config.hpp @@ -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> @@ -184,7 +184,7 @@ //.......................................................................... // QS Software Tracing // Target-resident component of QP/Spy software tracing system -// (tracing instrumenation and command-input). +// (tracing instrumentation and command-input). // NOTE: Requires command-line macro: Q_SPY // The QS software tracing instrumenation is activated only when diff --git a/examples/arm-cm/dpp_ek-tm4c123gxl/qv/gnu/.ccsproject b/examples/arm-cm/dpp_ek-tm4c123gxl/qv/gnu/.ccsproject index 0c19207c..e057df00 100644 --- a/examples/arm-cm/dpp_ek-tm4c123gxl/qv/gnu/.ccsproject +++ b/examples/arm-cm/dpp_ek-tm4c123gxl/qv/gnu/.ccsproject @@ -1,17 +1,5 @@ - - - - - - - - - - - - diff --git a/examples/arm-cm/dpp_ek-tm4c123gxl/qv/gnu/.cproject b/examples/arm-cm/dpp_ek-tm4c123gxl/qv/gnu/.cproject index 92fd4669..cee30aba 100644 --- a/examples/arm-cm/dpp_ek-tm4c123gxl/qv/gnu/.cproject +++ b/examples/arm-cm/dpp_ek-tm4c123gxl/qv/gnu/.cproject @@ -3,9 +3,6 @@ - - - @@ -18,69 +15,80 @@ - - @@ -91,11 +99,8 @@ - - - - - + + @@ -106,163 +111,83 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -273,10 +198,110 @@ + + + + + + + + + + + + + + + + + + + + + + + + + - + @@ -288,4 +313,6 @@ + + diff --git a/examples/arm-cm/dpp_ek-tm4c123gxl/qv/gnu/.project b/examples/arm-cm/dpp_ek-tm4c123gxl/qv/gnu/.project index 6aed6739..ad4e29a9 100644 --- a/examples/arm-cm/dpp_ek-tm4c123gxl/qv/gnu/.project +++ b/examples/arm-cm/dpp_ek-tm4c123gxl/qv/gnu/.project @@ -1,13 +1,12 @@ - dpp-qv + dpp-qv org.eclipse.cdt.managedbuilder.core.genmakebuilder - clean,full,incremental, @@ -27,9 +26,9 @@ - GNU_CPP + QV 2 - PARENT-5-PROJECT_LOC/3rd_party/gnu_cpp + PARENT-5-PROJECT_LOC/src/qv QP @@ -39,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 @@ -61,25 +55,10 @@ 1 PARENT-1-PROJECT_LOC/bsp.cpp - - bsp.h - 1 - PARENT-2-PROJECT_LOC/bsp.h - - - dpp.h - 1 - PARENT-2-PROJECT_LOC/dpp.h - - - gpio.h - 1 - PARENT-5-PROJECT_LOC/3rd_party/ek-tm4c123gxl/gpio.h - main.cpp 1 - PARENT-1-PROJECT_LOC/main.cpp + PARENT-2-PROJECT_LOC/main.cpp philo.cpp @@ -87,25 +66,15 @@ PARENT-2-PROJECT_LOC/philo.cpp - qstamp.cpp + qp_config.hpp 1 - PARENT-5-PROJECT_LOC/src/qs/qstamp.cpp - - - rom.h - 1 - PARENT-5-PROJECT_LOC/3rd_party/ek-tm4c123gxl/rom.h + PARENT-2-PROJECT_LOC/qp_config.hpp 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 @@ -122,4 +91,10 @@ PARENT-2-PROJECT_LOC/table.cpp + + + CG_TOOL_GPP + $%7BCG_TOOL_ROOT%7D/bin/arm-none-eabi-g++ + + diff --git a/examples/arm-cm/dpp_ek-tm4c123gxl/qv/gnu/Makefile b/examples/arm-cm/dpp_ek-tm4c123gxl/qv/gnu/Makefile index 250c7f8c..8b4533de 100644 --- a/examples/arm-cm/dpp_ek-tm4c123gxl/qv/gnu/Makefile +++ b/examples/arm-cm/dpp_ek-tm4c123gxl/qv/gnu/Makefile @@ -1,13 +1,13 @@ ############################################################################## # Product: Makefile for QP/C++ on EK-TM4C123GXL, QV kernel, GNU-ARM -# Last Updated for Version: 7.0.1 -# Date of the Last Update: 2022-05-23 +# 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-2021 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 @@ -45,8 +45,7 @@ # NOTE: # To use this Makefile on Windows, you will need the GNU make utility, which # is included in the Qtools collection for Windows, see: -# https://sourceforge.net/projects/qpc/files/QTools/ -# +# https://github.com/QuantumLeaps/qtools #----------------------------------------------------------------------------- # project name @@ -57,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 ($(QPCPP),) QPCPP := ../../../../.. endif @@ -133,7 +132,7 @@ LIB_DIRS := LIBS := # defines -DEFINES := +DEFINES := -DQP_CONFIG # ARM CPU, ARCH, FPU, and Float-ABI types... # ARM_CPU: [cortex-m0 | cortex-m0plus | cortex-m1 | cortex-m3 | cortex-m4] @@ -141,8 +140,8 @@ DEFINES := # 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) @@ -165,19 +164,19 @@ BIN := $(GNU_ARM)/bin/arm-none-eabi-objcopy ############################################################################## -# Typically, you should not need to change anything below this line +# Typically you should not need to change anything below this line -# basic utilities (included in Qtools for Windows), see: -# http://sourceforge.net/projects/qpc/files/Qtools +# basic utilities (included in QTools for Windows), see: +# https://www.state-machine.com/qtools MKDIR := mkdir RM := rm #----------------------------------------------------------------------------- -# build options for various configurations for ARM Cortex-M4F +# build options for various configurations for ARM Cortex-M # -# combine all the soruces... +# combine all the sources... CPP_SRCS += $(QP_SRCS) ASM_SRCS += $(QP_ASMS) @@ -189,11 +188,11 @@ ASFLAGS = $(ARM_CPU) $(ARM_FPU) $(ASM_CPU) $(ASM_FPU) CFLAGS = -c $(ARM_CPU) $(ARM_FPU) $(FLOAT_ABI) -mthumb -Wall \ -ffunction-sections -fdata-sections \ - -O1 $(INCLUDES) $(DEFINES) -DNDEBUG + -O2 $(INCLUDES) $(DEFINES) -DNDEBUG CPPFLAGS = -c $(ARM_CPU) $(ARM_FPU) $(FLOAT_ABI) -mthumb -Wall \ -ffunction-sections -fdata-sections -fno-rtti -fno-exceptions \ - -O1 $(INCLUDES) $(DEFINES) -DNDEBUG + -O2 $(INCLUDES) $(DEFINES) -DNDEBUG else ifeq (spy, $(CONF)) # Spy configuration ................................ @@ -279,6 +278,8 @@ $(BIN_DIR)/%.o : %.c $(BIN_DIR)/%.o : %.cpp $(CPP) $(CPPFLAGS) $< -o $@ +.PHONY : clean show + # include dependency files only if our goal depends on their existence ifneq ($(MAKECMDGOALS),clean) ifneq ($(MAKECMDGOALS),show) @@ -287,7 +288,6 @@ ifneq ($(MAKECMDGOALS),clean) endif -.PHONY : clean clean: -$(RM) $(BIN_DIR)/*.o \ $(BIN_DIR)/*.d \ 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..e057df00 100644 --- a/examples/arm-cm/dpp_ek-tm4c123gxl/qxk/gnu/.ccsproject +++ b/examples/arm-cm/dpp_ek-tm4c123gxl/qxk/gnu/.ccsproject @@ -1,17 +1,5 @@ - - - - - - - - - - - - diff --git a/examples/arm-cm/dpp_ek-tm4c123gxl/qxk/gnu/.cproject b/examples/arm-cm/dpp_ek-tm4c123gxl/qxk/gnu/.cproject index 6c9e2425..8dfdffe6 100644 --- a/examples/arm-cm/dpp_ek-tm4c123gxl/qxk/gnu/.cproject +++ b/examples/arm-cm/dpp_ek-tm4c123gxl/qxk/gnu/.cproject @@ -3,9 +3,6 @@ - - - @@ -18,69 +15,80 @@ - - @@ -91,11 +99,8 @@ - - - - - + + @@ -106,163 +111,83 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -273,10 +198,110 @@ + + + + + + + + + + + + + + + + + + + + + + + + + - + @@ -288,4 +313,6 @@ + + diff --git a/examples/arm-cm/dpp_ek-tm4c123gxl/qxk/gnu/.project b/examples/arm-cm/dpp_ek-tm4c123gxl/qxk/gnu/.project index bef9d547..260dc4f8 100644 --- a/examples/arm-cm/dpp_ek-tm4c123gxl/qxk/gnu/.project +++ b/examples/arm-cm/dpp_ek-tm4c123gxl/qxk/gnu/.project @@ -7,7 +7,6 @@ org.eclipse.cdt.managedbuilder.core.genmakebuilder - clean,full,incremental, @@ -26,11 +25,6 @@ org.eclipse.cdt.managedbuilder.core.ScannerConfigNature - - GNU_CPP - 2 - PARENT-5-PROJECT_LOC/3rd_party/gnu_cpp - QP 2 @@ -61,25 +55,10 @@ 1 PARENT-1-PROJECT_LOC/bsp.cpp - - bsp.h - 1 - PARENT-2-PROJECT_LOC/bsp.h - - - dpp.h - 1 - PARENT-2-PROJECT_LOC/dpp.h - - - gpio.h - 1 - PARENT-5-PROJECT_LOC/3rd_party/ek-tm4c123gxl/gpio.h - main.cpp 1 - PARENT-1-PROJECT_LOC/main.cpp + PARENT-2-PROJECT_LOC/main.cpp philo.cpp @@ -87,25 +66,15 @@ PARENT-2-PROJECT_LOC/philo.cpp - qstamp.cpp + qp_config.hpp 1 - PARENT-5-PROJECT_LOC/src/qs/qstamp.cpp - - - rom.h - 1 - PARENT-5-PROJECT_LOC/3rd_party/ek-tm4c123gxl/rom.h + PARENT-2-PROJECT_LOC/qp_config.hpp 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 @@ -122,9 +91,20 @@ PARENT-2-PROJECT_LOC/table.cpp - test.cpp + xthread1.cpp 1 - PARENT-1-PROJECT_LOC/test.cpp + PARENT-1-PROJECT_LOC/xthread1.cpp + + + xthread2.cpp + 1 + PARENT-1-PROJECT_LOC/xthread2.cpp + + + CG_TOOL_GPP + $%7BCG_TOOL_ROOT%7D/bin/arm-none-eabi-g++ + + diff --git a/examples/arm-cm/dpp_ek-tm4c123gxl/qxk/gnu/Makefile b/examples/arm-cm/dpp_ek-tm4c123gxl/qxk/gnu/Makefile index 74eb3750..ce1c593c 100644 --- a/examples/arm-cm/dpp_ek-tm4c123gxl/qxk/gnu/Makefile +++ b/examples/arm-cm/dpp_ek-tm4c123gxl/qxk/gnu/Makefile @@ -1,7 +1,7 @@ ############################################################################## # Product: Makefile for QP/C++ on EK-TM4C123GXL, QXK kernel, GNU-ARM -# Last Updated for Version: 7.3.0 -# Date of the Last Update: 2023-05-26 +# 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 # ------------------------ @@ -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 ($(QPCPP),) QPCPP := ../../../../.. endif @@ -137,8 +137,7 @@ LIB_DIRS := LIBS := # defines -DEFINES := \ - -DQF_ON_CONTEXT_SW +DEFINES := -DQP_CONFIG # ARM CPU, ARCH, FPU, and Float-ABI types... # ARM_CPU: [cortex-m0 | cortex-m0plus | cortex-m1 | cortex-m3 | cortex-m4] @@ -146,8 +145,8 @@ DEFINES := \ # 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) @@ -182,7 +181,7 @@ RM := rm # build options for various configurations for ARM Cortex-M # -# combine all the soruces... +# combine all the sources... CPP_SRCS += $(QP_SRCS) ASM_SRCS += $(QP_ASMS) @@ -284,6 +283,8 @@ $(BIN_DIR)/%.o : %.c $(BIN_DIR)/%.o : %.cpp $(CPP) $(CPPFLAGS) $< -o $@ +.PHONY : clean show + # include dependency files only if our goal depends on their existence ifneq ($(MAKECMDGOALS),clean) ifneq ($(MAKECMDGOALS),show) @@ -292,7 +293,6 @@ ifneq ($(MAKECMDGOALS),clean) endif -.PHONY : clean clean: -$(RM) $(BIN_DIR)/*.o \ $(BIN_DIR)/*.d \ 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 1b189921..01304932 100644 --- a/examples/arm-cm/dpp_ek-tm4c123gxl_mpu/dpp_mpu.qm +++ b/examples/arm-cm/dpp_ek-tm4c123gxl_mpu/dpp_mpu.qm @@ -334,7 +334,7 @@ for (std::uint8_t n = 0U; n < N_PHILO; ++n) { - // give permissions to eat... + // give permissions to eat... for (std::uint8_t n = 0U; n < N_PHILO; ++n) { if (m_isHungry[n] && (m_fork[left(n)] == FREE) diff --git a/examples/arm-cm/dpp_ek-tm4c123gxl_mpu/lint-plus/README.txt b/examples/arm-cm/dpp_ek-tm4c123gxl_mpu/lint-plus/README.txt index 6075a298..f4869b16 100644 --- a/examples/arm-cm/dpp_ek-tm4c123gxl_mpu/lint-plus/README.txt +++ b/examples/arm-cm/dpp_ek-tm4c123gxl_mpu/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_DIR at the top of the lin.bat diff --git a/examples/arm-cm/dpp_ek-tm4c123gxl_mpu/lint-plus/options.lnt b/examples/arm-cm/dpp_ek-tm4c123gxl_mpu/lint-plus/options.lnt index 9e80bf43..6093417a 100644 --- a/examples/arm-cm/dpp_ek-tm4c123gxl_mpu/lint-plus/options.lnt +++ b/examples/arm-cm/dpp_ek-tm4c123gxl_mpu/lint-plus/options.lnt @@ -57,7 +57,7 @@ cpu.lnt // for the chosen CPU qpcpp.lnt // QP/C++ options ///////////////////////////////////////////////////////////////////////////// -// addtitional supporession rules for bulding this application +// additional suppression rules for building this application // underlying type for enums is always 'int' +fei 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 ec564dd4..a2761cdd 100644 --- a/examples/arm-cm/dpp_ek-tm4c123gxl_mpu/qk/gnu/Makefile +++ b/examples/arm-cm/dpp_ek-tm4c123gxl_mpu/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 ($(QPCPP),) QPCPP := ../../../../.. endif @@ -77,7 +77,6 @@ VPATH = \ # list of all include directories needed by this project INCLUDES = \ - -I.. \ -I../.. \ -I$(QPCPP)/include \ -I$(QP_PORT_DIR) \ @@ -141,8 +140,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) @@ -165,19 +164,19 @@ BIN := $(GNU_ARM)/bin/arm-none-eabi-objcopy ############################################################################## -# Typically, you should not need to change anything below this line +# Typically you should not need to change anything below this line -# basic utilities (included in Qtools for Windows), see: -# http://sourceforge.net/projects/qpc/files/Qtools +# basic utilities (included in QTools for Windows), see: +# https://www.state-machine.com/qtools MKDIR := mkdir RM := rm #----------------------------------------------------------------------------- -# build options for various configurations for ARM Cortex-M4F +# build options for various configurations for ARM Cortex-M # -# combine all the soruces... +# combine all the sources... CPP_SRCS += $(QP_SRCS) ASM_SRCS += $(QP_ASMS) @@ -189,11 +188,11 @@ ASFLAGS = $(ARM_CPU) $(ARM_FPU) $(ASM_CPU) $(ASM_FPU) CFLAGS = -c $(ARM_CPU) $(ARM_FPU) $(FLOAT_ABI) -mthumb -Wall \ -ffunction-sections -fdata-sections \ - -O1 $(INCLUDES) $(DEFINES) -DNDEBUG + -O2 $(INCLUDES) $(DEFINES) -DNDEBUG CPPFLAGS = -c $(ARM_CPU) $(ARM_FPU) $(FLOAT_ABI) -mthumb -Wall \ -ffunction-sections -fdata-sections -fno-rtti -fno-exceptions \ - -O1 $(INCLUDES) $(DEFINES) -DNDEBUG + -O2 $(INCLUDES) $(DEFINES) -DNDEBUG else ifeq (spy, $(CONF)) # Spy configuration ................................ @@ -279,6 +278,8 @@ $(BIN_DIR)/%.o : %.c $(BIN_DIR)/%.o : %.cpp $(CPP) $(CPPFLAGS) $< -o $@ +.PHONY : clean show + # include dependency files only if our goal depends on their existence ifneq ($(MAKECMDGOALS),clean) ifneq ($(MAKECMDGOALS),show) @@ -287,7 +288,6 @@ ifneq ($(MAKECMDGOALS),clean) endif -.PHONY : clean clean: -$(RM) $(BIN_DIR)/*.o \ $(BIN_DIR)/*.d \ 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 6553d41f..8b4533de 100644 --- a/examples/arm-cm/dpp_ek-tm4c123gxl_mpu/qv/gnu/Makefile +++ b/examples/arm-cm/dpp_ek-tm4c123gxl_mpu/qv/gnu/Makefile @@ -1,13 +1,13 @@ ############################################################################## # Product: Makefile for QP/C++ on EK-TM4C123GXL, QV 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-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 ($(QPCPP),) QPCPP := ../../../../.. endif @@ -77,7 +77,6 @@ VPATH = \ # list of all include directories needed by this project INCLUDES = \ - -I.. \ -I../.. \ -I$(QPCPP)/include \ -I$(QP_PORT_DIR) \ @@ -141,8 +140,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) @@ -165,19 +164,19 @@ BIN := $(GNU_ARM)/bin/arm-none-eabi-objcopy ############################################################################## -# Typically, you should not need to change anything below this line +# Typically you should not need to change anything below this line -# basic utilities (included in Qtools for Windows), see: -# http://sourceforge.net/projects/qpc/files/Qtools +# basic utilities (included in QTools for Windows), see: +# https://www.state-machine.com/qtools MKDIR := mkdir RM := rm #----------------------------------------------------------------------------- -# build options for various configurations for ARM Cortex-M4F +# build options for various configurations for ARM Cortex-M # -# combine all the soruces... +# combine all the sources... CPP_SRCS += $(QP_SRCS) ASM_SRCS += $(QP_ASMS) @@ -189,11 +188,11 @@ ASFLAGS = $(ARM_CPU) $(ARM_FPU) $(ASM_CPU) $(ASM_FPU) CFLAGS = -c $(ARM_CPU) $(ARM_FPU) $(FLOAT_ABI) -mthumb -Wall \ -ffunction-sections -fdata-sections \ - -O1 $(INCLUDES) $(DEFINES) -DNDEBUG + -O2 $(INCLUDES) $(DEFINES) -DNDEBUG CPPFLAGS = -c $(ARM_CPU) $(ARM_FPU) $(FLOAT_ABI) -mthumb -Wall \ -ffunction-sections -fdata-sections -fno-rtti -fno-exceptions \ - -O1 $(INCLUDES) $(DEFINES) -DNDEBUG + -O2 $(INCLUDES) $(DEFINES) -DNDEBUG else ifeq (spy, $(CONF)) # Spy configuration ................................ @@ -279,6 +278,8 @@ $(BIN_DIR)/%.o : %.c $(BIN_DIR)/%.o : %.cpp $(CPP) $(CPPFLAGS) $< -o $@ +.PHONY : clean show + # include dependency files only if our goal depends on their existence ifneq ($(MAKECMDGOALS),clean) ifneq ($(MAKECMDGOALS),show) @@ -287,7 +288,6 @@ ifneq ($(MAKECMDGOALS),clean) endif -.PHONY : clean clean: -$(RM) $(BIN_DIR)/*.o \ $(BIN_DIR)/*.d \ diff --git a/examples/arm-cm/dpp_ek-tm4c123gxl_mpu/qv/gnu/README.txt b/examples/arm-cm/dpp_ek-tm4c123gxl_mpu/qv/gnu/README.txt index 3ba6f924..18bf7307 100644 --- a/examples/arm-cm/dpp_ek-tm4c123gxl_mpu/qv/gnu/README.txt +++ b/examples/arm-cm/dpp_ek-tm4c123gxl_mpu/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_ek-tm4c123gxl_mpu/qxk/gnu/Makefile b/examples/arm-cm/dpp_ek-tm4c123gxl_mpu/qxk/gnu/Makefile index c6aafdfa..ce1c593c 100644 --- a/examples/arm-cm/dpp_ek-tm4c123gxl_mpu/qxk/gnu/Makefile +++ b/examples/arm-cm/dpp_ek-tm4c123gxl_mpu/qxk/gnu/Makefile @@ -1,7 +1,7 @@ ############################################################################## # Product: Makefile for QP/C++ on EK-TM4C123GXL, QXK kernel, GNU-ARM -# Last Updated for Version: 7.3.0 -# Date of the Last Update: 2023-09-07 +# 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 # ------------------------ @@ -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 ($(QPCPP),) QPCPP := ../../../../.. endif @@ -137,9 +137,7 @@ LIB_DIRS := LIBS := # defines -DEFINES := \ - -DQP_CONFIG \ - -DTARGET_IS_TM4C123_RB1 +DEFINES := -DQP_CONFIG # ARM CPU, ARCH, FPU, and Float-ABI types... # ARM_CPU: [cortex-m0 | cortex-m0plus | cortex-m1 | cortex-m3 | cortex-m4] @@ -147,8 +145,8 @@ DEFINES := \ # 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) @@ -169,6 +167,7 @@ AS := $(GNU_ARM)/bin/arm-none-eabi-as LINK := $(GNU_ARM)/bin/arm-none-eabi-g++ BIN := $(GNU_ARM)/bin/arm-none-eabi-objcopy + ############################################################################## # Typically you should not need to change anything below this line @@ -182,7 +181,7 @@ RM := rm # build options for various configurations for ARM Cortex-M # -# combine all the soruces... +# combine all the sources... CPP_SRCS += $(QP_SRCS) ASM_SRCS += $(QP_ASMS) @@ -259,14 +258,8 @@ endif # rules # -.PHONY : run norun flash clean show - -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 $< $@ @@ -290,6 +283,8 @@ $(BIN_DIR)/%.o : %.c $(BIN_DIR)/%.o : %.cpp $(CPP) $(CPPFLAGS) $< -o $@ +.PHONY : clean show + # include dependency files only if our goal depends on their existence ifneq ($(MAKECMDGOALS),clean) ifneq ($(MAKECMDGOALS),show) diff --git a/examples/arm-cm/dpp_mbed-lpc1768/dpp.qm b/examples/arm-cm/dpp_mbed-lpc1768/dpp.qm index 917b13a7..1de2b108 100644 --- a/examples/arm-cm/dpp_mbed-lpc1768/dpp.qm +++ b/examples/arm-cm/dpp_mbed-lpc1768/dpp.qm @@ -258,7 +258,7 @@ for (std::uint8_t n = 0U; n < N_PHILO; ++n) { - // give permissions to eat... + // give permissions to eat... for (std::uint8_t n = 0U; n < N_PHILO; ++n) { if (m_isHungry[n] && (m_fork[left(n)] == FREE) diff --git a/examples/arm-cm/dpp_mbed-lpc1768/qk/bsp.cpp b/examples/arm-cm/dpp_mbed-lpc1768/qk/bsp.cpp index 9ed44a30..be36a0d2 100644 --- a/examples/arm-cm/dpp_mbed-lpc1768/qk/bsp.cpp +++ b/examples/arm-cm/dpp_mbed-lpc1768/qk/bsp.cpp @@ -487,7 +487,7 @@ QSTimeCtr onGetTime() { // 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/qk/gnu/Makefile b/examples/arm-cm/dpp_mbed-lpc1768/qk/gnu/Makefile index a7425b8d..351df854 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 ($(QPCPP),) QPCPP := ../../../../.. endif @@ -177,7 +177,7 @@ RM := rm # build options for various configurations for ARM Cortex-M4F # -# combine all the soruces... +# combine all the sources... CPP_SRCS += $(QP_SRCS) ASM_SRCS += $(QP_ASMS) diff --git a/examples/arm-cm/dpp_mbed-lpc1768/qv/bsp.cpp b/examples/arm-cm/dpp_mbed-lpc1768/qv/bsp.cpp index b402f601..f3839263 100644 --- a/examples/arm-cm/dpp_mbed-lpc1768/qv/bsp.cpp +++ b/examples/arm-cm/dpp_mbed-lpc1768/qv/bsp.cpp @@ -476,7 +476,7 @@ QSTimeCtr onGetTime() { // 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 7c911490..25c24d96 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 ($(QPCPP),) QPCPP := ../../../../.. endif @@ -177,7 +177,7 @@ RM := rm # build options for various configurations for ARM Cortex-M4F # -# combine all the soruces... +# combine all the sources... CPP_SRCS += $(QP_SRCS) ASM_SRCS += $(QP_ASMS) diff --git a/examples/arm-cm/dpp_mbed-lpc1768/qxk/bsp.cpp b/examples/arm-cm/dpp_mbed-lpc1768/qxk/bsp.cpp index eb2b6fea..5a318f17 100644 --- a/examples/arm-cm/dpp_mbed-lpc1768/qxk/bsp.cpp +++ b/examples/arm-cm/dpp_mbed-lpc1768/qxk/bsp.cpp @@ -501,7 +501,7 @@ QSTimeCtr onGetTime() { // 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 c42dace1..5792a4d2 100644 --- a/examples/arm-cm/dpp_mbed-lpc1768/qxk/gnu/Makefile +++ b/examples/arm-cm/dpp_mbed-lpc1768/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 ($(QPCPP),) QPCPP := ../../../../.. endif @@ -181,7 +181,7 @@ RM := rm # build options for various configurations for ARM Cortex-M4F # -# combine all the soruces... +# combine all the sources... CPP_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 917b13a7..1de2b108 100644 --- a/examples/arm-cm/dpp_nucleo-c031c6/dpp.qm +++ b/examples/arm-cm/dpp_nucleo-c031c6/dpp.qm @@ -258,7 +258,7 @@ for (std::uint8_t n = 0U; n < N_PHILO; ++n) { - // give permissions to eat... + // give permissions to eat... for (std::uint8_t n = 0U; n < N_PHILO; ++n) { if (m_isHungry[n] && (m_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.cpp b/examples/arm-cm/dpp_nucleo-c031c6/qk/bsp.cpp index 1f9c0caf..602864fa 100644 --- a/examples/arm-cm/dpp_nucleo-c031c6/qk/bsp.cpp +++ b/examples/arm-cm/dpp_nucleo-c031c6/qk/bsp.cpp @@ -470,7 +470,7 @@ QSTimeCtr onGetTime() { // 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-c031c6/qk/gnu/Makefile b/examples/arm-cm/dpp_nucleo-c031c6/qk/gnu/Makefile index 7a8f17f6..76706712 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 ($(QPCPP),) QPCPP := ../../../../.. endif @@ -178,7 +178,7 @@ RM := rm # build options for various configurations for ARM Cortex-M # -# combine all the soruces... +# combine all the sources... CPP_SRCS += $(QP_SRCS) ASM_SRCS += $(QP_ASMS) diff --git a/examples/arm-cm/dpp_nucleo-c031c6/qk/gnu/Makefile-cpp20 b/examples/arm-cm/dpp_nucleo-c031c6/qk/gnu/Makefile-cpp20 index 33d96ba1..6ccec649 100644 --- a/examples/arm-cm/dpp_nucleo-c031c6/qk/gnu/Makefile-cpp20 +++ b/examples/arm-cm/dpp_nucleo-c031c6/qk/gnu/Makefile-cpp20 @@ -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 ($(QPCPP),) QPCPP := ../../../../.. endif @@ -178,7 +178,7 @@ RM := rm # build options for various configurations for ARM Cortex-M # -# combine all the soruces... +# combine all the sources... CPP_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/qk/iar/dpp-qk.ewp b/examples/arm-cm/dpp_nucleo-c031c6/qk/iar/dpp-qk.ewp index d782042f..7bbccf8a 100644 --- a/examples/arm-cm/dpp_nucleo-c031c6/qk/iar/dpp-qk.ewp +++ b/examples/arm-cm/dpp_nucleo-c031c6/qk/iar/dpp-qk.ewp @@ -16,7 +16,7 @@ 1