From 80d9bcd6fb2b9d258f80f490747bb1ca687d0d49 Mon Sep 17 00:00:00 2001 From: MMS Date: Thu, 19 Jan 2023 21:14:02 -0500 Subject: [PATCH] 7.3.0 Added QP Functional Safety (FuSa) Subsystem Memory Isolation with MPU Added QAsm abstract state machine base class Added memory marker to QEvt and rearranged memory layout Updated: QP-FreeRTOS, QP-ESP-IDF,QP-Zephyr Added drift-free ticking for QP-POSIX Reorganized documentation Updated 3rd_party --- 3rd_party | 2 +- LICENSES/LicenseRef-QL-dual.qlc | 8 +- README.md | 8 +- doxygen/.gitignore | 1 - doxygen/Doxyfile | 309 - doxygen/Doxyfile-CHM | 15 - doxygen/Doxyfile-LATEX | 11 - doxygen/api.dox | 313 - doxygen/config.hpp | 66 - doxygen/dir.dox | 48 - doxygen/exa.dox | 522 - doxygen/exa_apps.dox | 142 - doxygen/exa_mware.dox | 101 - doxygen/exa_native.dox | 615 - doxygen/exa_os.dox | 134 - doxygen/exa_qutest.dox | 137 - doxygen/exa_rtos.dox | 687 - doxygen/gen/metrics.txt | 232 - doxygen/gs.dox | 503 - doxygen/history.dox | 2959 --- doxygen/images/AN-QL.png | Bin 67603 -> 0 bytes doxygen/images/AN-game.jpg | Bin 37507 -> 0 bytes doxygen/images/AN-getting_started.jpg | Bin 46801 -> 0 bytes doxygen/images/AN_DPP.jpg | Bin 42919 -> 0 bytes doxygen/images/Arduino-UNO_button.jpg | Bin 84029 -> 0 bytes doxygen/images/Arduino-UNO_button_schem.jpg | Bin 26885 -> 0 bytes doxygen/images/FA1.jpg | Bin 14794 -> 0 bytes doxygen/images/PSiCC2-3D.jpg | Bin 30952 -> 0 bytes doxygen/images/PSiCC2.jpg | Bin 46722 -> 0 bytes doxygen/images/PSiCC2_250x200.jpg | Bin 18189 -> 0 bytes doxygen/images/SM_blinky.png | Bin 9396 -> 0 bytes doxygen/images/an-qp_performance.png | Bin 71440 -> 0 bytes doxygen/images/bd_AT91SAM7S-EK.jpg | Bin 106583 -> 0 bytes doxygen/images/bd_AT91SAM7S-EK_J-Link.jpg | Bin 46739 -> 0 bytes doxygen/images/bd_Arduino-UNO.jpg | Bin 56551 -> 0 bytes doxygen/images/bd_EFM32-SLSTK3401A.jpg | Bin 49662 -> 0 bytes doxygen/images/bd_EK-LM3S6965.jpg | Bin 95273 -> 0 bytes doxygen/images/bd_EK-LM3S6965_lwip.jpg | Bin 26040 -> 0 bytes doxygen/images/bd_EK-LM3S811.jpg | Bin 62256 -> 0 bytes doxygen/images/bd_EK-LM3S811_game.jpg | Bin 30334 -> 0 bytes doxygen/images/bd_EK-TM4C123GXL.jpg | Bin 30053 -> 0 bytes doxygen/images/bd_LAUNCHXL2-TMS57012.jpg | Bin 91172 -> 0 bytes doxygen/images/bd_MSP-EXP430F5529LP.jpg | Bin 113874 -> 0 bytes doxygen/images/bd_MSP-EXP430G2.jpg | Bin 114702 -> 0 bytes doxygen/images/bd_NUCLEO-H743ZI.jpg | Bin 49004 -> 0 bytes doxygen/images/bd_NUCLEO-L053R8.jpg | Bin 84220 -> 0 bytes doxygen/images/bd_NUCLEO-L152RE.jpg | Bin 76913 -> 0 bytes doxygen/images/bd_NUCLEO-L552ZE.jpg | Bin 44404 -> 0 bytes doxygen/images/bd_STM32F4-Disco.jpg | Bin 129798 -> 0 bytes doxygen/images/bd_STM32F4-Disco_RS232.jpg | Bin 109912 -> 0 bytes doxygen/images/bd_STM32F746G-Disco.jpg | Bin 74705 -> 0 bytes doxygen/images/bd_mbed-LPC1768.jpg | Bin 11155 -> 0 bytes doxygen/images/blinky_ek-tm4c123gxl.gif | Bin 41735 -> 0 bytes doxygen/images/blinky_posix.png | Bin 183278 -> 0 bytes doxygen/images/blinky_win.png | Bin 15865 -> 0 bytes doxygen/images/blinky_win32.png | Bin 10489 -> 0 bytes doxygen/images/car_mud.jpg | Bin 139200 -> 0 bytes doxygen/images/com_msp-exp430g2.png | Bin 34414 -> 0 bytes doxygen/images/dpp_posix.png | Bin 258803 -> 0 bytes doxygen/images/dpp_win.png | Bin 79277 -> 0 bytes doxygen/images/dpp_win32.png | Bin 40352 -> 0 bytes doxygen/images/emWin_demo.jpg | Bin 62147 -> 0 bytes doxygen/images/exa_low-power_sig-zoom.png | Bin 60603 -> 0 bytes doxygen/images/exa_low-power_sm.png | Bin 29853 -> 0 bytes doxygen/images/game-video.jpg | Bin 99323 -> 0 bytes doxygen/images/game_win32.jpg | Bin 108280 -> 0 bytes doxygen/images/getting-started-with-qp.jpg | Bin 26532 -> 0 bytes doxygen/images/github-star.jpg | Bin 25587 -> 0 bytes doxygen/images/gs-video.jpg | Bin 117727 -> 0 bytes doxygen/images/header_logo_ql.png | Bin 16482 -> 0 bytes doxygen/images/logo_embos.png | Bin 18688 -> 0 bytes doxygen/images/logo_freertos.png | Bin 89008 -> 0 bytes doxygen/images/logo_pclintplus.jpg | Bin 33186 -> 0 bytes doxygen/images/logo_ql-comp.png | Bin 13174 -> 0 bytes doxygen/images/logo_ql.png | Bin 19676 -> 0 bytes doxygen/images/logo_ql_TM.jpg | Bin 6070 -> 0 bytes doxygen/images/logo_qp.jpg | Bin 15738 -> 0 bytes doxygen/images/logo_qp_200x55.png | Bin 18762 -> 0 bytes doxygen/images/logo_qp_60x55.jpg | Bin 3055 -> 0 bytes doxygen/images/logo_qt.jpg | Bin 26794 -> 0 bytes doxygen/images/logo_qwin256.jpg | Bin 16062 -> 0 bytes doxygen/images/logo_threadx.jpg | Bin 6754 -> 0 bytes doxygen/images/logo_uc-os2.jpg | Bin 10905 -> 0 bytes doxygen/images/logo_zephyr.jpg | Bin 10155 -> 0 bytes doxygen/images/mbed-LPC1768_button.jpg | Bin 27014 -> 0 bytes doxygen/images/psicc1.jpg | Bin 68968 -> 0 bytes doxygen/images/qk_preempt.gif | Bin 22420 -> 0 bytes doxygen/images/qp-bundle.png | Bin 16144 -> 0 bytes doxygen/images/qp-prio.png | Bin 8010 -> 0 bytes doxygen/images/qp-zephyr.jpg | Bin 24318 -> 0 bytes doxygen/images/qp_banner.jpg | Bin 96623 -> 0 bytes doxygen/images/qp_classes.gif | Bin 43313 -> 0 bytes doxygen/images/qp_components.jpg | Bin 45257 -> 0 bytes doxygen/images/qpcpp_gh.jpg | Bin 107355 -> 0 bytes doxygen/images/qt_game-gui.png | Bin 243597 -> 0 bytes doxygen/images/qt_pelican-gui.png | Bin 260923 -> 0 bytes doxygen/images/qtcreator_game-gui.png | Bin 41991 -> 0 bytes doxygen/images/qtdesign_game-gui.png | Bin 381637 -> 0 bytes doxygen/images/qtdesign_pelican-gui.png | Bin 372477 -> 0 bytes doxygen/images/qutest_philo.png | Bin 80468 -> 0 bytes doxygen/images/qutest_py.png | Bin 65702 -> 0 bytes doxygen/images/qutest_tcl.png | Bin 109239 -> 0 bytes doxygen/images/qutest_tm4c123_py.png | Bin 43081 -> 0 bytes doxygen/images/qutest_tm4c123_tcl.png | Bin 60661 -> 0 bytes doxygen/images/qv.gif | Bin 16345 -> 0 bytes doxygen/images/qwin_ani.gif | Bin 238507 -> 0 bytes doxygen/images/qxk_classes.gif | Bin 42810 -> 0 bytes doxygen/images/qxk_ctx-switch.gif | Bin 14125 -> 0 bytes doxygen/images/start-stop.png | Bin 41324 -> 0 bytes doxygen/images/threadx_dpp.jpg | Bin 63505 -> 0 bytes doxygen/img/AN.jpg | Bin 51174 -> 0 bytes .../img/AN_Active_Objects_for_Embedded.jpg | Bin 23607 -> 0 bytes doxygen/img/AN_Coding_Standard.jpg | Bin 20879 -> 0 bytes .../AN_Crash_Course_in_UML_State_Machines.gif | Bin 27832 -> 0 bytes .../AN_Crash_Course_in_UML_State_Machines.jpg | Bin 22769 -> 0 bytes doxygen/img/AN_Getting_Started_with_QPC.jpg | Bin 20313 -> 0 bytes doxygen/img/AN_Getting_Started_with_QPCpp.jpg | Bin 20659 -> 0 bytes doxygen/img/AN_MISRA-QPC.jpg | Bin 21859 -> 0 bytes doxygen/img/AN_MISRA-QPCpp.jpg | Bin 22078 -> 0 bytes doxygen/img/AN_OOP_in_C.gif | Bin 28019 -> 0 bytes doxygen/img/AN_OOP_in_C.jpg | Bin 23267 -> 0 bytes doxygen/img/board.png | Bin 400 -> 0 bytes doxygen/img/cert-pack.png | Bin 9971 -> 0 bytes doxygen/img/checkboxoff.png | Bin 250 -> 0 bytes doxygen/img/checkboxon.png | Bin 165 -> 0 bytes doxygen/img/extern.png | Bin 143 -> 0 bytes doxygen/img/file.png | Bin 505 -> 0 bytes doxygen/img/file_c.png | Bin 624 -> 0 bytes doxygen/img/file_cpp.png | Bin 807 -> 0 bytes doxygen/img/file_doc.png | Bin 555 -> 0 bytes doxygen/img/file_h.png | Bin 604 -> 0 bytes doxygen/img/file_mak.png | Bin 719 -> 0 bytes doxygen/img/file_pdf.png | Bin 641 -> 0 bytes doxygen/img/file_py.png | Bin 594 -> 0 bytes doxygen/img/file_qm.png | Bin 1030 -> 0 bytes doxygen/img/file_qmp.png | Bin 975 -> 0 bytes doxygen/img/file_tcl.png | Bin 194 -> 0 bytes doxygen/img/file_wish.png | Bin 185 -> 0 bytes doxygen/img/folder.png | Bin 458 -> 0 bytes doxygen/img/forbidden.png | Bin 859 -> 0 bytes doxygen/img/github-corner.png | Bin 1808 -> 0 bytes doxygen/img/github-qp.png | Bin 8571 -> 0 bytes doxygen/img/header_bg.png | Bin 506 -> 0 bytes doxygen/img/help_dark.png | Bin 774 -> 0 bytes doxygen/img/help_light.png | Bin 705 -> 0 bytes doxygen/img/img.htm | 53 - doxygen/img/logo_github.png | Bin 3002 -> 0 bytes doxygen/img/logo_ql-compact.png | Bin 20241 -> 0 bytes doxygen/img/logo_ql.gif | Bin 8166 -> 0 bytes doxygen/img/logo_ql.png | Bin 19676 -> 0 bytes doxygen/img/logo_qp.gif | Bin 11953 -> 0 bytes doxygen/img/logo_qp.jpg | Bin 15738 -> 0 bytes doxygen/img/logo_qwin.jpg | Bin 16062 -> 0 bytes doxygen/img/logo_win.png | Bin 1402 -> 0 bytes doxygen/img/minus.png | Bin 289 -> 0 bytes doxygen/img/model.png | Bin 1030 -> 0 bytes doxygen/img/movie.png | Bin 486 -> 0 bytes doxygen/img/qp_link.png | Bin 734 -> 0 bytes doxygen/img/radiooff.png | Bin 250 -> 0 bytes doxygen/img/radioon.png | Bin 243 -> 0 bytes doxygen/img/splitbar.png | Bin 962 -> 0 bytes doxygen/img/tree-view_linked.png | Bin 858 -> 0 bytes doxygen/img/tree-view_unlinked.png | Bin 874 -> 0 bytes doxygen/main.dox | 116 - doxygen/make-rsm.bat | 94 - doxygen/make.bat | 109 - doxygen/metrics.dox | 236 - doxygen/modules-unused.dox | 309 - doxygen/ports.dox | 225 - doxygen/ports_arm-cm.dox | 1398 -- doxygen/ports_native.dox | 38 - doxygen/ports_os.dox | 104 - doxygen/ports_rtos.dox | 324 - doxygen/rsm.bat | 45 - doxygen/rsm_qpcpp.cfg | 637 - doxygen/snippets/qep_qevt.cpp | 12 - doxygen/snippets/qep_qhsm.cpp | 22 - doxygen/snippets/qep_qhsm_use.cpp | 18 - doxygen/snippets/qep_qinit.cpp | 30 - doxygen/snippets/qep_qmsm.cpp | 24 - doxygen/snippets/qep_qtran.cpp | 20 - doxygen/snippets/qf_ctor.cpp | 9 - doxygen/snippets/qf_main.cpp | 50 - doxygen/snippets/qf_oncontextsw.cpp | 18 - doxygen/snippets/qf_post.cpp | 20 - doxygen/snippets/qf_postx.cpp | 24 - doxygen/snippets/qf_qactive.cpp | 17 - doxygen/snippets/qf_qmactive.cpp | 20 - doxygen/snippets/qf_run.cpp | 11 - doxygen/snippets/qf_start.cpp | 19 - doxygen/snippets/qf_state.cpp | 39 - doxygen/snippets/qf_subscribe.cpp | 12 - doxygen/snippets/qf_tick.cpp | 25 - doxygen/snippets/qf_ticker.cpp | 38 - doxygen/snippets/qf_version.cpp | 1 - doxygen/snippets/qf_xctor.cpp | 9 - doxygen/snippets/qf_xstart.cpp | 20 - doxygen/snippets/qk_lock.cpp | 16 - doxygen/snippets/qk_mux.cpp | 18 - doxygen/snippets/qs_filter.cpp | 24 - doxygen/snippets/qs_objArrDic.cpp | 6 - doxygen/snippets/qs_objDic.cpp | 19 - doxygen/snippets/qs_onGetTime.cpp | 12 - doxygen/snippets/qs_sigDic.cpp | 15 - doxygen/snippets/qs_sigLog.txt | 78 - doxygen/snippets/qs_sigLog0.txt | 78 - doxygen/snippets/qs_startup.cpp | 25 - doxygen/snippets/qs_user.cpp | 16 - doxygen/snippets/qxk_lock.cpp | 16 - doxygen/snippets/qxk_mutex.cpp | 19 - doxygen/snippets/qxk_sema.cpp | 23 - doxygen/snippets/qxk_start.cpp | 30 - doxygen/snippets/qxk_thread.cpp | 24 - .../arm-cm/blinky_efm32-slstk3401a/README.md | 5 - .../arm-cm/blinky_efm32-slstk3401a/blinky.cpp | 116 - .../arm-cm/blinky_efm32-slstk3401a/blinky.hpp | 49 - .../arm-cm/blinky_efm32-slstk3401a/bsp.hpp | 43 - .../arm-cm/blinky_efm32-slstk3401a/main.cpp | 53 - .../qk/armclang/README.txt | 50 - .../arm-cm/blinky_efm32-slstk3401a/qk/bsp.cpp | 182 - .../blinky_efm32-slstk3401a/qk/gnu/flash.bat | 49 - .../blinky_efm32-slstk3401a/qk/iar/README.txt | 53 - .../qv/armclang/README.txt | 50 - .../arm-cm/blinky_efm32-slstk3401a/qv/bsp.cpp | 186 - .../blinky_efm32-slstk3401a/qv/gnu/README.txt | 71 - .../blinky_efm32-slstk3401a/qv/gnu/flash.bat | 49 - .../blinky_efm32-slstk3401a/qv/iar/README.txt | 53 - .../arm-cm/blinky_ek-tm4c123gxl/blinky.cpp | 76 +- .../arm-cm/blinky_ek-tm4c123gxl/blinky.hpp | 32 +- examples/arm-cm/blinky_ek-tm4c123gxl/bsp.hpp | 33 +- examples/arm-cm/blinky_ek-tm4c123gxl/main.cpp | 39 +- .../qk/armclang/blinky-qk.sct | 23 + .../qk/armclang/blinky-qk.uvoptx | 40 +- .../qk/armclang/blinky-qk.uvprojx | 103 +- .../arm-cm/blinky_ek-tm4c123gxl/qk/bsp.cpp | 218 +- .../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 | 2 +- .../blinky_ek-tm4c123gxl/qk/iar/blinky-qk.ewd | 535 +- .../blinky_ek-tm4c123gxl/qk/iar/blinky-qk.ewp | 516 +- .../qv/armclang/blinky-qv.sct | 23 + .../qv/armclang/blinky-qv.uvoptx | 40 +- .../qv/armclang/blinky-qv.uvprojx | 99 +- .../arm-cm/blinky_ek-tm4c123gxl/qv/bsp.cpp | 225 +- .../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 | 2 +- .../blinky_ek-tm4c123gxl/qv/iar/blinky-qv.ewd | 535 +- .../blinky_ek-tm4c123gxl/qv/iar/blinky-qv.ewp | 516 +- .../arm-cm/blinky_nucleo-c031c6/README.md | 5 + .../blinky_nucleo-c031c6}/blinky.cpp | 76 +- .../blinky_nucleo-c031c6}/blinky.hpp | 32 +- .../blinky_nucleo-c031c6}/bsp.hpp | 33 +- examples/arm-cm/blinky_nucleo-c031c6/main.cpp | 44 + .../qk/armclang/blinky-qk.sct | 23 + .../qk/armclang/blinky-qk.uvoptx | 302 +- .../qk/armclang/blinky-qk.uvprojx | 421 +- .../arm-cm/blinky_nucleo-c031c6/qk/bsp.cpp | 248 + .../blinky_nucleo-c031c6/qk/gnu/Makefile | 311 + .../qk/gnu/blinky-qk.ld} | 0 .../qk/iar/blinky-qk.ewd | 639 +- .../qk/iar/blinky-qk.ewp | 639 +- .../qk/iar/blinky-qk.eww | 0 .../blinky_nucleo-c031c6/qk/iar/blinky-qk.icf | 165 + .../qv/armclang/blinky-qv.sct | 23 + .../qv/armclang/blinky-qv.uvoptx | 302 +- .../qv/armclang/blinky-qv.uvprojx | 421 +- .../arm-cm/blinky_nucleo-c031c6/qv/bsp.cpp | 255 + .../blinky_nucleo-c031c6/qv/gnu/Makefile | 309 + .../blinky_nucleo-c031c6/qv/gnu/blinky-qv.ld | 135 + .../qv/iar/blinky-qv.ewd | 639 +- .../qv/iar/blinky-qv.ewp | 534 +- .../qv/iar/blinky-qv.eww | 0 .../blinky_nucleo-c031c6/qv/iar/blinky-qv.icf | 165 + examples/arm-cm/dpp_efm32-slstk3401a/.dpp | 59 + examples/arm-cm/dpp_efm32-slstk3401a/bsp.hpp | 39 +- examples/arm-cm/dpp_efm32-slstk3401a/dpp.hpp | 103 +- examples/arm-cm/dpp_efm32-slstk3401a/dpp.qm | 440 +- examples/arm-cm/dpp_efm32-slstk3401a/main.cpp | 44 + .../arm-cm/dpp_efm32-slstk3401a/philo.cpp | 148 +- .../qk/armclang/dpp-qk.sct | 23 + .../qk/armclang/dpp-qk.uvoptx | 156 +- .../qk/armclang/dpp-qk.uvprojx | 80 +- .../arm-cm/dpp_efm32-slstk3401a/qk/bsp.cpp | 524 +- .../dpp_efm32-slstk3401a/qk/gnu/Makefile | 12 +- .../dpp_efm32-slstk3401a/qk/iar/dpp-qk.ewd | 565 +- .../dpp_efm32-slstk3401a/qk/iar/dpp-qk.ewp | 164 +- .../arm-cm/dpp_efm32-slstk3401a/qk/main.cpp | 78 - .../arm-cm/dpp_efm32-slstk3401a/qp_config.hpp | 59 + .../qv/armclang/dpp-qv.sct | 23 + .../qv/armclang/dpp-qv.uvoptx | 137 +- .../qv/armclang/dpp-qv.uvprojx | 78 +- .../arm-cm/dpp_efm32-slstk3401a/qv/bsp.cpp | 505 +- .../dpp_efm32-slstk3401a/qv/gnu/Makefile | 2 +- .../dpp_efm32-slstk3401a/qv/iar/dpp-qv.ewd | 565 +- .../dpp_efm32-slstk3401a/qv/iar/dpp-qv.ewp | 439 +- .../arm-cm/dpp_efm32-slstk3401a/qv/main.cpp | 80 - .../qxk/armclang/dpp-qxk.sct | 23 + .../qxk/armclang/dpp-qxk.uvoptx | 52 +- .../qxk/armclang/dpp-qxk.uvprojx | 93 +- .../arm-cm/dpp_efm32-slstk3401a/qxk/bsp.cpp | 532 +- .../dpp_efm32-slstk3401a/qxk/gnu/Makefile | 36 +- .../qxk/gnu/Makefile-rtti | 319 - .../dpp_efm32-slstk3401a/qxk/iar/dpp-qxk.ewd | 573 +- .../dpp_efm32-slstk3401a/qxk/iar/dpp-qxk.ewp | 155 +- .../arm-cm/dpp_efm32-slstk3401a/qxk/main.cpp | 110 - .../arm-cm/dpp_efm32-slstk3401a/qxk/test.cpp | 145 - .../dpp_efm32-slstk3401a/qxk/xthread1.cpp | 103 + .../dpp_efm32-slstk3401a/qxk/xthread2.cpp | 110 + .../arm-cm/dpp_efm32-slstk3401a/table.cpp | 146 +- examples/arm-cm/dpp_ek-tm4c123gxl/bsp.hpp | 51 +- examples/arm-cm/dpp_ek-tm4c123gxl/dpp.hpp | 103 +- examples/arm-cm/dpp_ek-tm4c123gxl/dpp.qm | 440 +- examples/arm-cm/dpp_ek-tm4c123gxl/main.cpp | 44 + examples/arm-cm/dpp_ek-tm4c123gxl/philo.cpp | 148 +- .../dpp_ek-tm4c123gxl/qk/armclang/dpp-qk.sct | 23 + .../qk/armclang/dpp-qk.uvoptx | 90 +- .../qk/armclang/dpp-qk.uvprojx | 97 +- examples/arm-cm/dpp_ek-tm4c123gxl/qk/bsp.cpp | 560 +- .../dpp_ek-tm4c123gxl/qk/gnu/.ccsproject | 17 + .../arm-cm/dpp_ek-tm4c123gxl/qk/gnu/.cproject | 291 + .../arm-cm/dpp_ek-tm4c123gxl/qk/gnu/.project | 125 + .../arm-cm/dpp_ek-tm4c123gxl/qk/gnu/Makefile | 26 +- .../qk/gnu_with-stack-prot/bsp_stack-prot.cpp | 484 - .../dpp_ek-tm4c123gxl/qk/iar/dpp-qk.ewd | 581 +- .../dpp_ek-tm4c123gxl/qk/iar/dpp-qk.ewp | 579 +- .../dpp_ek-tm4c123gxl/qk/iar/dpp-qk.icf | 2 +- examples/arm-cm/dpp_ek-tm4c123gxl/qk/main.cpp | 76 - .../dpp_ek-tm4c123gxl/qv/armclang/dpp-qv.sct | 23 + .../qv/armclang/dpp-qv.uvoptx | 98 +- .../qv/armclang/dpp-qv.uvprojx | 116 +- examples/arm-cm/dpp_ek-tm4c123gxl/qv/bsp.cpp | 545 +- .../dpp_ek-tm4c123gxl/qv/gnu/.ccsproject | 17 + .../arm-cm/dpp_ek-tm4c123gxl/qv/gnu/.cproject | 291 + .../arm-cm/dpp_ek-tm4c123gxl/qv/gnu/.project | 125 + .../arm-cm/dpp_ek-tm4c123gxl/qv/gnu/Makefile | 4 +- .../dpp_ek-tm4c123gxl/qv/iar/dpp-qv.ewd | 581 +- .../dpp_ek-tm4c123gxl/qv/iar/dpp-qv.ewp | 557 +- .../dpp_ek-tm4c123gxl/qv/iar/dpp-qv.icf | 2 +- examples/arm-cm/dpp_ek-tm4c123gxl/qv/main.cpp | 75 - .../qxk/armclang/dpp-qxk.sct | 23 + .../qxk/armclang/dpp-qxk.uvoptx | 141 +- .../qxk/armclang/dpp-qxk.uvprojx | 89 +- examples/arm-cm/dpp_ek-tm4c123gxl/qxk/bsp.cpp | 551 +- .../dpp_ek-tm4c123gxl/qxk/gnu/.ccsproject | 17 + .../dpp_ek-tm4c123gxl/qxk/gnu/.cproject | 291 + .../arm-cm/dpp_ek-tm4c123gxl/qxk/gnu/.project | 130 + .../arm-cm/dpp_ek-tm4c123gxl/qxk/gnu/Makefile | 29 +- .../dpp_ek-tm4c123gxl/qxk/iar/dpp-qxk.ewd | 535 +- .../dpp_ek-tm4c123gxl/qxk/iar/dpp-qxk.ewp | 551 +- .../dpp_ek-tm4c123gxl/qxk/iar/dpp-qxk.icf | 2 +- .../arm-cm/dpp_ek-tm4c123gxl/qxk/main.cpp | 107 - .../arm-cm/dpp_ek-tm4c123gxl/qxk/test.cpp | 141 - .../arm-cm/dpp_ek-tm4c123gxl/qxk/xthread1.cpp | 103 + .../arm-cm/dpp_ek-tm4c123gxl/qxk/xthread2.cpp | 110 + examples/arm-cm/dpp_ek-tm4c123gxl/table.cpp | 146 +- examples/arm-cm/dpp_ek-tm4c123gxl_mpu/bsp.hpp | 61 + examples/arm-cm/dpp_ek-tm4c123gxl_mpu/dpp.hpp | 147 + .../arm-cm/dpp_ek-tm4c123gxl_mpu/dpp_mpu.qm | 725 + .../lint-plus/README.txt | 0 .../dpp_ek-tm4c123gxl_mpu}/lint-plus/lin.bat | 0 .../lint-plus/options.lnt | 64 + .../arm-cm/dpp_ek-tm4c123gxl_mpu/main.cpp | 44 + .../dpp_ek-tm4c123gxl_mpu}/philo.cpp | 167 +- .../qk/armclang/dpp-qk.sct | 23 + .../qk/armclang/dpp-qk.uvoptx | 994 + .../qk/armclang/dpp-qk.uvprojx | 1823 ++ .../arm-cm/dpp_ek-tm4c123gxl_mpu/qk/bsp.cpp | 885 + .../qk/gnu}/Makefile | 16 +- .../qk/gnu/dpp-qk.ld} | 8 +- .../qk/gnu}/flash.bat | 0 .../dpp_ek-tm4c123gxl_mpu/qk/iar/dpp-qk.ewd | 4654 ++++ .../dpp_ek-tm4c123gxl_mpu/qk/iar/dpp-qk.ewp | 3358 +++ .../dpp_ek-tm4c123gxl_mpu/qk/iar/dpp-qk.eww} | 2 +- .../qk/iar/dpp-qk.icf} | 2 +- .../dpp_ek-tm4c123gxl_mpu/qp_config.hpp | 42 +- .../qv/armclang/dpp-qv.sct | 23 + .../qv/armclang/dpp-qv.uvoptx | 1107 + .../qv/armclang/dpp-qv.uvprojx | 1793 ++ .../arm-cm/dpp_ek-tm4c123gxl_mpu/qv/bsp.cpp | 879 + .../qv/gnu/Makefile | 36 +- .../qv}/gnu/README.txt | 14 +- .../qv/gnu/dpp-qv.ld} | 8 +- .../dpp_ek-tm4c123gxl_mpu/qv/gnu/flash.bat | 33 + .../dpp_ek-tm4c123gxl_mpu/qv/iar/dpp-qv.ewd | 4654 ++++ .../dpp_ek-tm4c123gxl_mpu/qv/iar/dpp-qv.ewp | 3358 +++ .../dpp_ek-tm4c123gxl_mpu/qv/iar/dpp-qv.eww | 10 + .../qv/iar/dpp-qv.icf} | 2 +- .../arm-cm/dpp_ek-tm4c123gxl_mpu/qview/dpp.py | 103 + .../dpp_ek-tm4c123gxl_mpu/qview/dpp1.py | 147 + .../qview/img/BTN_DWN.gif | Bin .../qview/img/BTN_UP.gif | Bin .../qview/img/eating.gif | Bin .../qview/img/hungry.gif | Bin .../qview/img/thinking.gif | Bin .../qview/qview-dpp.bat | 0 .../qview/qview-dpp1.bat | 0 .../qxk/armclang/dpp-qxk.sct | 23 + .../qxk/armclang/dpp-qxk.uvoptx | 1102 + .../qxk/armclang/dpp-qxk.uvprojx} | 874 +- .../arm-cm/dpp_ek-tm4c123gxl_mpu/qxk/bsp.cpp | 985 + .../dpp_ek-tm4c123gxl_mpu/qxk/gnu/Makefile | 320 + .../qxk/gnu/dpp-qxk.ld} | 12 +- .../dpp_ek-tm4c123gxl_mpu/qxk/gnu/flash.bat | 33 + .../dpp_ek-tm4c123gxl_mpu/qxk/iar/dpp-qxk.ewd | 4654 ++++ .../qxk/iar/dpp-qxk.ewp} | 341 +- .../dpp_ek-tm4c123gxl_mpu/qxk/iar/dpp-qxk.eww | 10 + .../dpp_ek-tm4c123gxl_mpu/qxk/iar/dpp-qxk.icf | 29 + .../dpp_ek-tm4c123gxl_mpu/qxk/xthread1.cpp | 147 + .../dpp_ek-tm4c123gxl_mpu/qxk/xthread2.cpp | 133 + .../arm-cm/dpp_ek-tm4c123gxl_mpu/table.cpp | 360 + examples/arm-cm/dpp_mbed-lpc1768/README.md | 5 - examples/arm-cm/dpp_mbed-lpc1768/bsp.hpp | 51 +- examples/arm-cm/dpp_mbed-lpc1768/dpp.hpp | 104 +- examples/arm-cm/dpp_mbed-lpc1768/dpp.qm | 446 +- examples/arm-cm/dpp_mbed-lpc1768/main.cpp | 55 +- .../arm-cm/dpp_mbed-lpc1768/mbed-lpc1768.jpeg | Bin 0 -> 30025 bytes examples/arm-cm/dpp_mbed-lpc1768/philo.cpp | 157 +- .../dpp_mbed-lpc1768/qk/armclang/README.txt | 34 - .../dpp_mbed-lpc1768/qk/armclang/dpp-qk.sct | 23 + .../qk/armclang/dpp-qk.uvoptx | 149 +- .../qk/armclang/dpp-qk.uvprojx | 174 +- examples/arm-cm/dpp_mbed-lpc1768/qk/bsp.cpp | 594 +- .../arm-cm/dpp_mbed-lpc1768/qk/gnu/Makefile | 2 +- .../arm-cm/dpp_mbed-lpc1768/qk/iar/dpp-qk.ewd | 543 +- .../arm-cm/dpp_mbed-lpc1768/qk/iar/dpp-qk.ewp | 534 +- .../dpp_mbed-lpc1768/qv/armclang/README.txt | 34 - .../dpp_mbed-lpc1768/qv/armclang/dpp-qv.sct | 23 + .../qv/armclang/dpp-qv.uvoptx | 135 +- .../qv/armclang/dpp-qv.uvprojx | 133 +- examples/arm-cm/dpp_mbed-lpc1768/qv/bsp.cpp | 590 +- .../arm-cm/dpp_mbed-lpc1768/qv/gnu/Makefile | 2 +- .../arm-cm/dpp_mbed-lpc1768/qv/iar/dpp-qv.ewd | 543 +- .../arm-cm/dpp_mbed-lpc1768/qv/iar/dpp-qv.ewp | 534 +- .../dpp_mbed-lpc1768/qxk/armclang/dpp-qxk.sct | 23 + .../qxk/armclang/dpp-qxk.uvoptx | 1022 + .../qxk/armclang/dpp-qxk.uvprojx | 1823 ++ examples/arm-cm/dpp_mbed-lpc1768/qxk/bsp.cpp | 668 + .../qk => dpp_mbed-lpc1768/qxk}/gnu/Makefile | 56 +- .../dpp_mbed-lpc1768/qxk/gnu/dpp-qxk.ld} | 19 +- .../dpp_mbed-lpc1768/qxk/iar/dpp-qxk.ewd | 4654 ++++ .../dpp_mbed-lpc1768/qxk/iar/dpp-qxk.ewp | 3368 +++ .../dpp_mbed-lpc1768/qxk/iar/dpp-qxk.eww | 10 + .../dpp_mbed-lpc1768/qxk/iar/dpp-qxk.icf | 39 + .../arm-cm/dpp_mbed-lpc1768/qxk/xthread1.cpp | 103 + .../arm-cm/dpp_mbed-lpc1768/qxk/xthread2.cpp | 110 + examples/arm-cm/dpp_mbed-lpc1768/table.cpp | 152 +- examples/arm-cm/dpp_nucleo-c031c6/README.md | 131 + .../dpp_nucleo-c031c6}/bsp.hpp | 45 +- .../dpp => arm-cm/dpp_nucleo-c031c6}/dpp.hpp | 82 +- .../dpp => arm-cm/dpp_nucleo-c031c6}/dpp.qm | 397 +- examples/arm-cm/dpp_nucleo-c031c6/main.cpp | 44 + .../dpp_nucleo-c031c6}/philo.cpp | 138 +- .../dpp_nucleo-c031c6/qk/armclang/README.txt | 74 + .../dpp_nucleo-c031c6/qk/armclang/dpp-qk.sct | 23 + .../qk/armclang/dpp-qk.uvoptx | 1036 + .../qk/armclang/dpp-qk.uvprojx | 1838 ++ examples/arm-cm/dpp_nucleo-c031c6/qk/bsp.cpp | 545 + .../arm-cm/dpp_nucleo-c031c6/qk/gnu/Makefile | 311 + .../qk/gnu/Makefile-cpp20 | 49 +- .../dpp_nucleo-c031c6/qk/gnu/README.txt | 92 + .../arm-cm/dpp_nucleo-c031c6/qk/gnu/dpp-qk.ld | 135 + .../dpp_nucleo-c031c6/qk/iar/dpp-qk.ewd} | 627 +- .../dpp_nucleo-c031c6/qk/iar/dpp-qk.ewp | 3355 +++ .../dpp_nucleo-c031c6/qk/iar/dpp-qk.eww | 10 + .../dpp_nucleo-c031c6/qk/iar/dpp-qk.icf | 165 + .../arm-cm/dpp_nucleo-c031c6/qp_config.hpp | 53 +- .../dpp_nucleo-c031c6/qv/armclang/dpp-qv.sct | 23 + .../qv/armclang/dpp-qv.uvoptx | 1036 + .../qv/armclang/dpp-qv.uvprojx | 1838 ++ examples/arm-cm/dpp_nucleo-c031c6/qv/bsp.cpp | 534 + .../arm-cm/dpp_nucleo-c031c6/qv/gnu/Makefile | 311 + .../qv/gnu/Makefile-cpp20 | 53 +- .../arm-cm/dpp_nucleo-c031c6/qv/gnu/dpp-qv.ld | 135 + .../dpp_nucleo-c031c6/qv/iar/dpp-qv.ewd | 4654 ++++ .../dpp_nucleo-c031c6/qv/iar/dpp-qv.ewp | 3355 +++ .../dpp_nucleo-c031c6/qv/iar/dpp-qv.eww | 10 + .../dpp_nucleo-c031c6/qv/iar/dpp-qv.icf | 165 + .../arm-cm/dpp_nucleo-c031c6/qview/dpp.py | 103 + .../arm-cm/dpp_nucleo-c031c6/qview/dpp1.py | 147 + .../dpp_nucleo-c031c6/qview/img/BTN_DWN.gif | Bin 0 -> 2071 bytes .../dpp_nucleo-c031c6/qview/img/BTN_UP.gif | Bin 0 -> 1987 bytes .../dpp_nucleo-c031c6/qview/img/eating.gif | Bin 0 -> 3169 bytes .../dpp_nucleo-c031c6/qview/img/hungry.gif | Bin 0 -> 2428 bytes .../dpp_nucleo-c031c6/qview/img/thinking.gif | Bin 0 -> 2378 bytes .../dpp_nucleo-c031c6/qview/qview-dpp.bat | 8 + .../dpp_nucleo-c031c6/qview/qview-dpp.lnk | Bin 0 -> 2485 bytes .../dpp_nucleo-c031c6/qview/qview-dpp1.bat | 8 + .../dpp_nucleo-c031c6/qview/qview-dpp1.lnk | Bin 0 -> 2487 bytes .../qxk/armclang/dpp-qxk.sct | 23 + .../qxk/armclang/dpp-qxk.uvoptx | 1096 + .../qxk/armclang/dpp-qxk.uvprojx | 1913 ++ examples/arm-cm/dpp_nucleo-c031c6/qxk/bsp.cpp | 563 + .../qxk/gnu/Makefile} | 52 +- .../qxk/gnu/Makefile-cpp20 | 51 +- .../dpp_nucleo-c031c6/qxk/gnu/README.txt | 92 + .../dpp_nucleo-c031c6/qxk/gnu/dpp-qxk.ld | 135 + .../dpp_nucleo-c031c6/qxk/iar/dpp-qxk.ewd | 4654 ++++ .../dpp_nucleo-c031c6/qxk/iar/dpp-qxk.ewp | 3370 +++ .../dpp_nucleo-c031c6/qxk/iar/dpp-qxk.eww | 10 + .../dpp_nucleo-c031c6/qxk/iar/dpp-qxk.icf | 165 + .../arm-cm/dpp_nucleo-c031c6/qxk/xthread1.cpp | 103 + .../arm-cm/dpp_nucleo-c031c6/qxk/xthread2.cpp | 110 + .../dpp_nucleo-c031c6/stm32-nucleo-c031c6.jpg | Bin 0 -> 43475 bytes .../dpp_nucleo-c031c6}/table.cpp | 136 +- .../arm-cm/dpp_nucleo-c031c6_mpu/README.md | 131 + examples/arm-cm/dpp_nucleo-c031c6_mpu/bsp.hpp | 61 + examples/arm-cm/dpp_nucleo-c031c6_mpu/dpp.hpp | 147 + .../arm-cm/dpp_nucleo-c031c6_mpu/dpp_mpu.qm | 725 + .../arm-cm/dpp_nucleo-c031c6_mpu/main.cpp | 44 + .../dpp_nucleo-c031c6_mpu}/philo.cpp | 167 +- .../qk/armclang/README.txt | 74 + .../qk/armclang/dpp-qk.sct | 23 + .../qk/armclang/dpp-qk.uvoptx | 1036 + .../qk/armclang/dpp-qk.uvprojx | 1838 ++ .../arm-cm/dpp_nucleo-c031c6_mpu/qk/bsp.cpp | 885 + .../dpp_nucleo-c031c6_mpu/qk/gnu/Makefile | 311 + .../dpp_nucleo-c031c6_mpu/qk/gnu/README.txt | 92 + .../dpp_nucleo-c031c6_mpu/qk/gnu/dpp-qk.ld | 135 + .../dpp_nucleo-c031c6_mpu/qk/iar/dpp-qk.ewd | 4654 ++++ .../dpp_nucleo-c031c6_mpu/qk/iar/dpp-qk.ewp | 3358 +++ .../dpp_nucleo-c031c6_mpu/qk/iar/dpp-qk.eww | 10 + .../dpp_nucleo-c031c6_mpu/qk/iar/dpp-qk.icf | 165 + .../dpp_nucleo-c031c6_mpu/qp_config.hpp | 57 + .../qv/armclang/dpp-qv.sct | 23 + .../qv/armclang/dpp-qv.uvoptx | 1036 + .../qv/armclang/dpp-qv.uvprojx | 1838 ++ .../arm-cm/dpp_nucleo-c031c6_mpu/qv/bsp.cpp | 882 + .../dpp_nucleo-c031c6_mpu/qv/gnu/Makefile | 311 + .../dpp_nucleo-c031c6_mpu/qv/gnu/dpp-qv.ld | 135 + .../dpp_nucleo-c031c6_mpu/qv/iar/dpp-qv.ewd | 4654 ++++ .../dpp_nucleo-c031c6_mpu/qv/iar/dpp-qv.ewp | 3358 +++ .../dpp_nucleo-c031c6_mpu/qv/iar/dpp-qv.eww | 10 + .../dpp_nucleo-c031c6_mpu/qv/iar/dpp-qv.icf | 165 + .../arm-cm/dpp_nucleo-c031c6_mpu/qview/dpp.py | 103 + .../dpp_nucleo-c031c6_mpu/qview/dpp1.py | 147 + .../qview/img/BTN_DWN.gif | Bin 0 -> 2071 bytes .../qview/img/BTN_UP.gif | Bin 0 -> 1987 bytes .../qview/img/eating.gif | Bin 0 -> 3169 bytes .../qview/img/hungry.gif | Bin 0 -> 2428 bytes .../qview/img/thinking.gif | Bin 0 -> 2378 bytes .../dpp_nucleo-c031c6_mpu/qview/qview-dpp.bat | 8 + .../dpp_nucleo-c031c6_mpu/qview/qview-dpp.lnk | Bin 0 -> 2485 bytes .../qview/qview-dpp1.bat | 8 + .../qview/qview-dpp1.lnk | Bin 0 -> 2487 bytes .../qxk/armclang/dpp-qxk.sct | 23 + .../qxk/armclang/dpp-qxk.uvoptx} | 439 +- .../qxk/armclang/dpp-qxk.uvprojx | 1913 ++ .../arm-cm/dpp_nucleo-c031c6_mpu/qxk/bsp.cpp | 985 + .../dpp_nucleo-c031c6_mpu/qxk/gnu/Makefile | 321 + .../dpp_nucleo-c031c6_mpu/qxk/gnu/README.txt | 92 + .../dpp_nucleo-c031c6_mpu/qxk/gnu/dpp-qxk.ld | 135 + .../dpp_nucleo-c031c6_mpu/qxk/iar/dpp-qxk.ewd | 4654 ++++ .../dpp_nucleo-c031c6_mpu/qxk/iar/dpp-qxk.ewp | 3367 +++ .../dpp_nucleo-c031c6_mpu/qxk/iar/dpp-qxk.eww | 10 + .../dpp_nucleo-c031c6_mpu/qxk/iar/dpp-qxk.icf | 165 + .../dpp_nucleo-c031c6_mpu/qxk/xthread1.cpp | 147 + .../dpp_nucleo-c031c6_mpu/qxk/xthread2.cpp | 133 + .../stm32-nucleo-c031c6.jpg | Bin 0 -> 43475 bytes .../arm-cm/dpp_nucleo-c031c6_mpu/table.cpp | 360 + examples/arm-cm/dpp_nucleo-h743zi/bsp.hpp | 49 +- examples/arm-cm/dpp_nucleo-h743zi/dpp.hpp | 103 +- examples/arm-cm/dpp_nucleo-h743zi/dpp.qm | 440 +- examples/arm-cm/dpp_nucleo-h743zi/main.cpp | 44 + examples/arm-cm/dpp_nucleo-h743zi/philo.cpp | 148 +- .../dpp_nucleo-h743zi/qk/armclang/dpp-qk.sct | 26 + .../qk/armclang/dpp-qk.uvoptx | 148 +- .../qk/armclang/dpp-qk.uvprojx | 114 +- examples/arm-cm/dpp_nucleo-h743zi/qk/bsp.cpp | 513 +- .../arm-cm/dpp_nucleo-h743zi/qk/gnu/Makefile | 26 +- .../dpp_nucleo-h743zi/qk/iar/dpp-qk.ewd | 543 +- .../dpp_nucleo-h743zi/qk/iar/dpp-qk.ewp | 536 +- examples/arm-cm/dpp_nucleo-h743zi/qk/main.cpp | 77 - .../dpp_nucleo-h743zi/qv/armclang/dpp-qv.sct | 26 + .../qv/armclang/dpp-qv.uvoptx | 152 +- .../qv/armclang/dpp-qv.uvprojx | 126 +- examples/arm-cm/dpp_nucleo-h743zi/qv/bsp.cpp | 525 +- .../arm-cm/dpp_nucleo-h743zi/qv/gnu/Makefile | 8 +- .../dpp_nucleo-h743zi/qv/gnu/README.txt | 71 - .../dpp_nucleo-h743zi/qv/iar/dpp-qv.ewd | 537 +- .../dpp_nucleo-h743zi/qv/iar/dpp-qv.ewp | 536 +- examples/arm-cm/dpp_nucleo-h743zi/qv/main.cpp | 77 - .../qxk/armclang/dpp-qxk.sct | 26 + .../qxk/armclang/dpp-qxk.uvoptx | 106 +- .../qxk/armclang/dpp-qxk.uvprojx | 153 +- examples/arm-cm/dpp_nucleo-h743zi/qxk/bsp.cpp | 526 +- .../arm-cm/dpp_nucleo-h743zi/qxk/gnu/Makefile | 29 +- .../dpp_nucleo-h743zi/qxk/iar/dpp-qxk.ewd | 549 +- .../dpp_nucleo-h743zi/qxk/iar/dpp-qxk.ewp | 159 +- .../arm-cm/dpp_nucleo-h743zi/qxk/main.cpp | 106 - .../arm-cm/dpp_nucleo-h743zi/qxk/test.cpp | 141 - .../arm-cm/dpp_nucleo-h743zi/qxk/xthread1.cpp | 103 + .../arm-cm/dpp_nucleo-h743zi/qxk/xthread2.cpp | 110 + examples/arm-cm/dpp_nucleo-h743zi/table.cpp | 146 +- examples/arm-cm/dpp_nucleo-l053r8/bsp.hpp | 50 +- examples/arm-cm/dpp_nucleo-l053r8/dpp.hpp | 103 +- examples/arm-cm/dpp_nucleo-l053r8/dpp.qm | 440 +- examples/arm-cm/dpp_nucleo-l053r8/main.cpp | 44 + examples/arm-cm/dpp_nucleo-l053r8/philo.cpp | 148 +- .../dpp_nucleo-l053r8/qk/armclang/dpp-qk.sct | 20 + .../qk/armclang/dpp-qk.uvoptx | 115 +- .../qk/armclang/dpp-qk.uvprojx | 50 +- examples/arm-cm/dpp_nucleo-l053r8/qk/bsp.cpp | 554 +- .../arm-cm/dpp_nucleo-l053r8/qk/gnu/Makefile | 2 +- .../qk/gnu_with-stack-prot/Makefile | 313 - .../qk/gnu_with-stack-prot/bsp_stack-prot.cpp | 418 - .../dpp_nucleo-l053r8/qk/iar/dpp-qk.ewd | 543 +- .../dpp_nucleo-l053r8/qk/iar/dpp-qk.ewp | 158 +- examples/arm-cm/dpp_nucleo-l053r8/qk/main.cpp | 74 - .../dpp_nucleo-l053r8/qv/armclang/dpp-qv.sct | 20 + .../qv/armclang/dpp-qv.uvoptx | 78 +- .../qv/armclang/dpp-qv.uvprojx | 67 +- examples/arm-cm/dpp_nucleo-l053r8/qv/bsp.cpp | 543 +- .../arm-cm/dpp_nucleo-l053r8/qv/gnu/Makefile | 2 +- .../dpp_nucleo-l053r8/qv/iar/dpp-qv.ewd | 543 +- .../dpp_nucleo-l053r8/qv/iar/dpp-qv.ewp | 435 +- examples/arm-cm/dpp_nucleo-l053r8/qv/main.cpp | 67 - .../qxk/armclang/dpp-qxk.sct | 20 + .../qxk/armclang/dpp-qxk.uvoptx | 110 +- .../qxk/armclang/dpp-qxk.uvprojx | 132 +- examples/arm-cm/dpp_nucleo-l053r8/qxk/bsp.cpp | 579 +- .../arm-cm/dpp_nucleo-l053r8/qxk/gnu/Makefile | 33 +- .../dpp_nucleo-l053r8/qxk/iar/dpp-qxk.ewd | 577 +- .../dpp_nucleo-l053r8/qxk/iar/dpp-qxk.ewp | 151 +- .../arm-cm/dpp_nucleo-l053r8/qxk/main.cpp | 111 - .../arm-cm/dpp_nucleo-l053r8/qxk/test.cpp | 141 - .../arm-cm/dpp_nucleo-l053r8/qxk/xthread1.cpp | 103 + .../arm-cm/dpp_nucleo-l053r8/qxk/xthread2.cpp | 110 + examples/arm-cm/dpp_nucleo-l053r8/table.cpp | 146 +- examples/arm-cm/dpp_nucleo-l152re/bsp.hpp | 50 +- examples/arm-cm/dpp_nucleo-l152re/dpp.hpp | 103 +- examples/arm-cm/dpp_nucleo-l152re/dpp.qm | 440 +- examples/arm-cm/dpp_nucleo-l152re/main.cpp | 44 + examples/arm-cm/dpp_nucleo-l152re/philo.cpp | 148 +- .../dpp_nucleo-l152re/qk/armclang/dpp-qk.sct | 22 + .../qk/armclang/dpp-qk.uvoptx | 141 +- .../qk/armclang/dpp-qk.uvprojx | 106 +- examples/arm-cm/dpp_nucleo-l152re/qk/bsp.cpp | 508 +- .../arm-cm/dpp_nucleo-l152re/qk/gnu/Makefile | 24 +- .../dpp_nucleo-l152re/qk/iar/dpp-qk.ewd | 543 +- .../dpp_nucleo-l152re/qk/iar/dpp-qk.ewp | 436 +- examples/arm-cm/dpp_nucleo-l152re/qk/main.cpp | 72 - .../dpp_nucleo-l152re/qspy200823_151316.bin | Bin 8307 -> 0 bytes .../dpp_nucleo-l152re/qspy200823_151436.seq | 78 - .../dpp_nucleo-l152re/qspy200823_203915.seq | 64 - .../dpp_nucleo-l152re/qv/armclang/dpp-qv.sct | 22 + .../qv/armclang/dpp-qv.uvoptx | 147 +- .../qv/armclang/dpp-qv.uvprojx | 106 +- examples/arm-cm/dpp_nucleo-l152re/qv/bsp.cpp | 524 +- .../arm-cm/dpp_nucleo-l152re/qv/gnu/Makefile | 23 +- .../dpp_nucleo-l152re/qv/iar/dpp-qv.ewd | 543 +- .../dpp_nucleo-l152re/qv/iar/dpp-qv.ewp | 435 +- examples/arm-cm/dpp_nucleo-l152re/qv/main.cpp | 68 - .../qxk/armclang/dpp-qxk.sct | 22 + .../qxk/armclang/dpp-qxk.uvoptx | 166 +- .../qxk/armclang/dpp-qxk.uvprojx | 130 +- examples/arm-cm/dpp_nucleo-l152re/qxk/bsp.cpp | 532 +- .../arm-cm/dpp_nucleo-l152re/qxk/gnu/Makefile | 28 +- .../dpp_nucleo-l152re/qxk/iar/dpp-qxk.ewd | 543 +- .../dpp_nucleo-l152re/qxk/iar/dpp-qxk.ewp | 434 +- .../arm-cm/dpp_nucleo-l152re/qxk/main.cpp | 111 - .../arm-cm/dpp_nucleo-l152re/qxk/test.cpp | 141 - .../arm-cm/dpp_nucleo-l152re/qxk/xthread1.cpp | 103 + .../arm-cm/dpp_nucleo-l152re/qxk/xthread2.cpp | 110 + examples/arm-cm/dpp_nucleo-l152re/table.cpp | 146 +- examples/arm-cm/dpp_nucleo-l552ze/bsp.hpp | 49 +- examples/arm-cm/dpp_nucleo-l552ze/dpp.hpp | 103 +- examples/arm-cm/dpp_nucleo-l552ze/dpp.qm | 440 +- examples/arm-cm/dpp_nucleo-l552ze/main.cpp | 44 + examples/arm-cm/dpp_nucleo-l552ze/philo.cpp | 148 +- .../qk/armclang/dpp-qk.uvoptx | 158 +- .../qk/armclang/dpp-qk.uvprojx | 102 +- examples/arm-cm/dpp_nucleo-l552ze/qk/bsp.cpp | 533 +- .../arm-cm/dpp_nucleo-l552ze/qk/gnu/Makefile | 29 +- .../dpp_nucleo-l552ze/qk/iar/dpp-qk.ewd | 102 +- .../dpp_nucleo-l552ze/qk/iar/dpp-qk.ewp | 164 +- examples/arm-cm/dpp_nucleo-l552ze/qk/main.cpp | 71 - .../qv/armclang/dpp-qv.uvoptx | 156 +- .../qv/armclang/dpp-qv.uvprojx | 106 +- examples/arm-cm/dpp_nucleo-l552ze/qv/bsp.cpp | 534 +- .../arm-cm/dpp_nucleo-l552ze/qv/gnu/Makefile | 15 +- .../dpp_nucleo-l552ze/qv/iar/dpp-qv.ewd | 102 +- .../dpp_nucleo-l552ze/qv/iar/dpp-qv.ewp | 164 +- examples/arm-cm/dpp_nucleo-l552ze/qv/main.cpp | 67 - .../qxk/armclang/dpp-qxk.uvoptx | 102 +- .../qxk/armclang/dpp-qxk.uvprojx | 129 +- examples/arm-cm/dpp_nucleo-l552ze/qxk/bsp.cpp | 547 +- .../arm-cm/dpp_nucleo-l552ze/qxk/gnu/Makefile | 32 +- .../dpp_nucleo-l552ze/qxk/iar/dpp-qxk.ewd | 102 +- .../dpp_nucleo-l552ze/qxk/iar/dpp-qxk.ewp | 167 +- .../arm-cm/dpp_nucleo-l552ze/qxk/main.cpp | 105 - .../arm-cm/dpp_nucleo-l552ze/qxk/test.cpp | 141 - .../arm-cm/dpp_nucleo-l552ze/qxk/xthread1.cpp | 103 + .../arm-cm/dpp_nucleo-l552ze/qxk/xthread2.cpp | 110 + .../dpp_nucleo-l552ze/stm32-nucleo-l552ze.jpg | Bin 0 -> 39333 bytes examples/arm-cm/dpp_nucleo-l552ze/table.cpp | 146 +- examples/arm-cm/dpp_stm32f4-discovery/bsp.hpp | 50 +- examples/arm-cm/dpp_stm32f4-discovery/dpp.hpp | 104 +- examples/arm-cm/dpp_stm32f4-discovery/dpp.qm | 446 +- .../arm-cm/dpp_stm32f4-discovery/main.cpp | 44 + .../arm-cm/dpp_stm32f4-discovery/philo.cpp | 157 +- .../qk/armclang/dpp-qk.sct | 22 + .../qk/armclang/dpp-qk.uvoptx | 88 +- .../qk/armclang/dpp-qk.uvprojx | 76 +- .../arm-cm/dpp_stm32f4-discovery/qk/bsp.cpp | 499 +- .../dpp_stm32f4-discovery/qk/gnu/Makefile | 23 +- .../dpp_stm32f4-discovery/qk/iar/dpp-qk.ewd | 573 +- .../dpp_stm32f4-discovery/qk/iar/dpp-qk.ewp | 527 +- .../arm-cm/dpp_stm32f4-discovery/qk/main.cpp | 87 - .../qv/armclang/dpp-qv.sct | 22 + .../qv/armclang/dpp-qv.uvoptx | 88 +- .../qv/armclang/dpp-qv.uvprojx | 76 +- .../arm-cm/dpp_stm32f4-discovery/qv/bsp.cpp | 500 +- .../dpp_stm32f4-discovery/qv/gnu/Makefile | 23 +- .../dpp_stm32f4-discovery/qv/iar/dpp-qv.ewd | 573 +- .../dpp_stm32f4-discovery/qv/iar/dpp-qv.ewp | 523 +- .../arm-cm/dpp_stm32f4-discovery/qv/main.cpp | 82 - .../qxk/armclang/dpp-qxk.sct | 22 + .../qxk/armclang/dpp-qxk.uvoptx | 36 +- .../qxk/armclang/dpp-qxk.uvprojx | 103 +- .../arm-cm/dpp_stm32f4-discovery/qxk/bsp.cpp | 516 +- .../dpp_stm32f4-discovery/qxk/gnu/Makefile | 26 +- .../dpp_stm32f4-discovery/qxk/iar/dpp-qxk.ewd | 573 +- .../dpp_stm32f4-discovery/qxk/iar/dpp-qxk.ewp | 530 +- .../arm-cm/dpp_stm32f4-discovery/qxk/main.cpp | 114 - .../arm-cm/dpp_stm32f4-discovery/qxk/test.cpp | 141 - .../dpp_stm32f4-discovery/qxk/xthread1.cpp | 103 + .../dpp_stm32f4-discovery/qxk/xthread2.cpp | 110 + .../arm-cm/dpp_stm32f4-discovery/table.cpp | 152 +- examples/arm-cm/game_efm32-slstk3401a/bsp.hpp | 54 +- .../arm-cm/game_efm32-slstk3401a/game.hpp | 48 +- examples/arm-cm/game_efm32-slstk3401a/game.qm | 199 +- .../arm-cm/game_efm32-slstk3401a/main.cpp | 32 +- .../arm-cm/game_efm32-slstk3401a/mine1.cpp | 10 +- .../arm-cm/game_efm32-slstk3401a/mine2.cpp | 10 +- .../arm-cm/game_efm32-slstk3401a/missile.cpp | 6 +- .../qk/armclang/game-qk.uvoptx | 139 +- .../qk/armclang/game-qk.uvprojx | 57 +- .../arm-cm/game_efm32-slstk3401a/qk/bsp.cpp | 444 +- .../game_efm32-slstk3401a/qk/gnu/Makefile | 2 +- .../game_efm32-slstk3401a/qk/iar/game-qk.ewd | 543 +- .../game_efm32-slstk3401a/qk/iar/game-qk.ewp | 436 +- .../qv/armclang/game-qv.uvoptx | 104 +- .../qv/armclang/game-qv.uvprojx | 57 +- .../arm-cm/game_efm32-slstk3401a/qv/bsp.cpp | 458 +- .../game_efm32-slstk3401a/qv/gnu/Makefile | 2 +- .../game_efm32-slstk3401a/qv/iar/README.txt | 53 - .../game_efm32-slstk3401a/qv/iar/game-qv.ewd | 543 +- .../game_efm32-slstk3401a/qv/iar/game-qv.ewp | 537 +- .../arm-cm/game_efm32-slstk3401a/ship.cpp | 8 +- .../arm-cm/game_efm32-slstk3401a/tunnel.cpp | 141 +- .../low-power_ek-tm4c123gxl/blinky0.cpp | 2 +- .../low-power_ek-tm4c123gxl/blinky1.cpp | 2 +- .../low-power_ek-tm4c123gxl/low-power.qm | 4 +- .../low-power_ek-tm4c123gxl/low_power.hpp | 4 +- .../arm-cm/low-power_ek-tm4c123gxl/main.cpp | 14 +- .../qk/armclang/low-power-qk.uvoptx | 92 +- .../qk/armclang/low-power-qk.uvprojx | 82 +- .../arm-cm/low-power_ek-tm4c123gxl/qk/bsp.cpp | 37 +- .../low-power_ek-tm4c123gxl/qk/gnu/Makefile | 8 +- .../qk/iar/low-power-qk.ewd | 573 +- .../qk/iar/low-power-qk.ewp | 489 +- .../low-power_ek-tm4c123gxl/qp_config.hpp | 42 + .../qv/armclang/low-power-qv.uvoptx | 86 +- .../qv/armclang/low-power-qv.uvprojx | 51 +- .../arm-cm/low-power_ek-tm4c123gxl/qv/bsp.cpp | 26 +- .../low-power_ek-tm4c123gxl/qv/gnu/Makefile | 8 +- .../qv/iar/low-power-qv.ewd | 573 +- .../qv/iar/low-power-qv.ewp | 489 +- .../qxk/armclang/low-power-qxk.uvoptx | 98 +- .../qxk/armclang/low-power-qxk.uvprojx | 80 +- .../low-power_ek-tm4c123gxl/qxk/bsp.cpp | 43 +- .../low-power_ek-tm4c123gxl/qxk/gnu/Makefile | 8 +- .../qxk/iar/low-power-qxk.ewd | 573 +- .../qxk/iar/low-power-qxk.ewp | 489 +- .../blinky_launchxl2-tms57012/qk/bsp.cpp | 2 +- .../qk/iar/blinky-qk.ewd | 567 +- .../qk/iar/blinky-qk.ewp | 429 +- .../blinky_launchxl2-tms57012/qv/bsp.cpp | 2 +- .../qv/iar/blinky-qv.ewd | 323 +- .../qv/iar/blinky-qv.ewp | 435 +- .../arm-cr/dpp_launchxl2-tms57012/bsp.hpp | 54 +- .../arm-cr/dpp_launchxl2-tms57012/dpp.hpp | 103 +- examples/arm-cr/dpp_launchxl2-tms57012/dpp.qm | 440 +- .../arm-cr/dpp_launchxl2-tms57012/main.cpp | 44 + .../arm-cr/dpp_launchxl2-tms57012/philo.cpp | 148 +- .../dpp_launchxl2-tms57012/qk/Readme.txt | 49 - .../arm-cr/dpp_launchxl2-tms57012/qk/bsp.cpp | 369 +- .../dpp_launchxl2-tms57012/qk/iar/dpp-qk.ewd | 387 +- .../dpp_launchxl2-tms57012/qk/iar/dpp-qk.ewp | 461 +- .../arm-cr/dpp_launchxl2-tms57012/qk/main.cpp | 73 - .../dpp_launchxl2-tms57012/qk/ti/.cproject | 168 +- .../dpp_launchxl2-tms57012/qk/ti/.project | 79 + .../arm-cr/dpp_launchxl2-tms57012/qv/bsp.cpp | 417 +- .../dpp_launchxl2-tms57012/qv/iar/dpp-qv.ewd | 387 +- .../dpp_launchxl2-tms57012/qv/iar/dpp-qv.ewp | 493 +- .../arm-cr/dpp_launchxl2-tms57012/qv/main.cpp | 69 - .../dpp_launchxl2-tms57012/qv/ti/.cproject | 183 +- .../dpp_launchxl2-tms57012/qv/ti/.project | 79 + .../arm-cr/dpp_launchxl2-tms57012/table.cpp | 146 +- .../embos/arm-cm/dpp_nucleo-h743zi/README.md | 5 - .../embos/arm-cm/dpp_nucleo-h743zi/bsp.cpp | 533 +- .../embos/arm-cm/dpp_nucleo-h743zi/bsp.hpp | 50 +- .../embos/arm-cm/dpp_nucleo-h743zi/dpp.hpp | 103 +- .../embos/arm-cm/dpp_nucleo-h743zi/dpp.qm | 440 +- .../arm-cm/dpp_nucleo-h743zi/gnu/Makefile | 2 +- .../arm-cm/dpp_nucleo-h743zi/iar/dpp.ewd | 94 +- .../arm-cm/dpp_nucleo-h743zi/iar/dpp.ewp | 147 +- .../embos/arm-cm/dpp_nucleo-h743zi/main.cpp | 65 +- .../embos/arm-cm/dpp_nucleo-h743zi/philo.cpp | 148 +- .../embos/arm-cm/dpp_nucleo-h743zi/table.cpp | 146 +- examples/emwin/demo_no_wm/bsp.cpp | 61 +- examples/emwin/demo_no_wm/demo_no_wm.vcxproj | 2 +- .../demo_no_wm/demo_no_wm.vcxproj.filters | 2 +- examples/emwin/demo_no_wm/main.cpp | 9 +- examples/emwin/demo_no_wm/table.cpp | 4 +- examples/emwin/demo_with_wm/bsp.cpp | 61 +- .../emwin/demo_with_wm/demo_with_wm.vcxproj | 2 +- .../demo_with_wm/demo_with_wm.vcxproj.filters | 2 +- examples/emwin/demo_with_wm/main.cpp | 43 +- examples/emwin/demo_with_wm/table.cpp | 4 +- .../arm-cm/dpp_ek-tm4c123gxl/FreeRTOSConfig.h | 105 +- .../dpp_ek-tm4c123gxl/armclang/dpp.uvoptx | 130 +- .../dpp_ek-tm4c123gxl/armclang/dpp.uvprojx | 141 +- .../freertos/arm-cm/dpp_ek-tm4c123gxl/bsp.cpp | 506 +- .../freertos/arm-cm/dpp_ek-tm4c123gxl/bsp.hpp | 49 +- .../freertos/arm-cm/dpp_ek-tm4c123gxl/dpp.hpp | 104 +- .../freertos/arm-cm/dpp_ek-tm4c123gxl/dpp.qm | 451 +- .../arm-cm/dpp_ek-tm4c123gxl/gnu/Makefile | 22 +- .../arm-cm/dpp_ek-tm4c123gxl/iar/dpp.ewd | 565 +- .../arm-cm/dpp_ek-tm4c123gxl/iar/dpp.ewp | 189 +- .../arm-cm/dpp_ek-tm4c123gxl/main.cpp | 66 +- .../arm-cm/dpp_ek-tm4c123gxl/philo.cpp | 162 +- .../arm-cm/dpp_ek-tm4c123gxl/qp_config.hpp | 30 +- .../arm-cm/dpp_ek-tm4c123gxl/table.cpp | 152 +- .../arm-cm/dpp_nucleo-h743zi/FreeRTOSConfig.h | 128 +- .../dpp_nucleo-h743zi/armclang/dpp.uvoptx | 177 +- .../dpp_nucleo-h743zi/armclang/dpp.uvprojx | 132 +- .../freertos/arm-cm/dpp_nucleo-h743zi/bsp.cpp | 479 +- .../freertos/arm-cm/dpp_nucleo-h743zi/bsp.hpp | 49 +- .../freertos/arm-cm/dpp_nucleo-h743zi/dpp.hpp | 104 +- .../freertos/arm-cm/dpp_nucleo-h743zi/dpp.qm | 446 +- .../arm-cm/dpp_nucleo-h743zi/gnu/Makefile | 25 +- .../arm-cm/dpp_nucleo-h743zi/iar/README.txt | 53 - .../arm-cm/dpp_nucleo-h743zi/iar/dpp.ewd | 537 +- .../arm-cm/dpp_nucleo-h743zi/iar/dpp.ewp | 164 +- .../arm-cm/dpp_nucleo-h743zi/main.cpp | 66 +- .../arm-cm/dpp_nucleo-h743zi/philo.cpp | 157 +- .../arm-cm/dpp_nucleo-h743zi/qp_config.hpp | 30 +- .../arm-cm/dpp_nucleo-h743zi/table.cpp | 152 +- .../start-stop_nucleo-h743zi/FreeRTOSConfig.h | 137 - .../start-stop_nucleo-h743zi/README.txt | 85 - .../arm-cm/start-stop_nucleo-h743zi/bsp.cpp | 438 - .../start-stop_nucleo-h743zi/gnu/Makefile | 333 - .../start-stop_nucleo-h743zi/gnu/README.txt | 84 - .../start-stop_nucleo-h743zi/iar/README.txt | 53 - .../iar/start-stop.icf | 84 - .../start-stop_nucleo-h743zi/launcher.cpp | 178 - .../arm-cm/start-stop_nucleo-h743zi/main.cpp | 73 - .../start-stop_nucleo-h743zi/start-stop.qm | 248 - .../stm32h7xx_hal_conf.h | 432 - .../stm32h7xx_hal_msp.c | 194 - .../start-stop_nucleo-h743zi/worker.cpp | 176 - .../start-stop_nucleo-h743zi/worker.hpp | 78 - .../lwip/arm-cm/lwip_ek-lm3s6965/lwipmgr.cpp | 4 +- .../lwip/arm-cm/lwip_ek-lm3s6965/qk/bsp.cpp | 24 +- .../arm-cm/lwip_ek-lm3s6965/qk/gnu/Makefile | 2 +- .../lwip_ek-lm3s6965/qk/iar/lwip-qk.ewd | 535 +- .../lwip_ek-lm3s6965/qk/iar/lwip-qk.ewp | 550 +- .../lwip/arm-cm/lwip_ek-lm3s6965/qv/bsp.cpp | 25 +- .../arm-cm/lwip_ek-lm3s6965/qv/gnu/Makefile | 2 +- .../lwip_ek-lm3s6965/qv/iar/lwip-qv.ewd | 543 +- .../lwip_ek-lm3s6965/qv/iar/lwip-qv.ewp | 158 +- .../lwip/arm-cm/lwip_ek-lm3s6965/table.cpp | 2 +- .../blinky_msp-exp430f5529lp/blinky.cpp | 14 +- .../msp430/blinky_msp-exp430f5529lp/bsp.hpp | 36 +- .../msp430/blinky_msp-exp430f5529lp/main.cpp | 39 +- .../blinky_msp-exp430f5529lp/qk/bsp.cpp | 171 +- .../qk/ccs-gnu/.ccsproject | 9 - .../qk/ccs-gnu/.cproject | 71 +- .../qk/ccs-gnu/.project | 40 +- .../qk/ccs-ti/.cproject | 69 +- .../blinky_msp-exp430f5529lp/qp_config.hpp | 50 + .../blinky_msp-exp430f5529lp/qv/bsp.cpp | 191 +- .../qv/ccs-gnu/.ccsproject | 9 - .../qv/ccs-gnu/.cproject | 6 +- .../qv/ccs-gnu/.project | 40 +- examples/msp430/dpp_msp-exp430f5529lp/bsp.hpp | 49 +- examples/msp430/dpp_msp-exp430f5529lp/dpp.hpp | 104 +- examples/msp430/dpp_msp-exp430f5529lp/dpp.qm | 446 +- .../msp430/dpp_msp-exp430f5529lp/main.cpp | 48 +- .../msp430/dpp_msp-exp430f5529lp/philo.cpp | 157 +- .../msp430/dpp_msp-exp430f5529lp/qk/bsp.cpp | 390 +- .../qk/ccs-gnu/.cproject | 207 +- .../dpp_msp-exp430f5529lp/qp_config.hpp | 50 + .../msp430/dpp_msp-exp430f5529lp/qv/bsp.cpp | 379 +- .../qv/ccs-gnu/.cproject | 209 +- .../dpp_msp-exp430f5529lp/qv/ccs-gnu/.project | 10 - .../msp430/dpp_msp-exp430f5529lp/table.cpp | 152 +- .../performance/dpp_efm32-slstk3401a/dpp.hpp | 8 +- .../dpp_efm32-slstk3401a/dpp_qhsm.qm | 6 +- .../dpp_efm32-slstk3401a/dpp_qmsm.qm | 6 +- .../dpp_efm32-slstk3401a/philo.cpp | 179 +- .../dpp_efm32-slstk3401a/qk/bsp.cpp | 61 +- .../dpp_efm32-slstk3401a/qk/iar/dpp-qk.ewd | 535 +- .../dpp_efm32-slstk3401a/qk/iar/dpp-qk.ewp | 419 +- .../dpp_efm32-slstk3401a/qv/bsp.cpp | 61 +- .../dpp_efm32-slstk3401a/qv/iar/dpp-qv.ewd | 535 +- .../dpp_efm32-slstk3401a/qv/iar/dpp-qv.ewp | 417 +- .../dpp_efm32-slstk3401a/qxk/bsp.cpp | 61 +- .../dpp_efm32-slstk3401a/qxk/iar/dpp-qxk.ewd | 573 +- .../dpp_efm32-slstk3401a/qxk/iar/dpp-qxk.ewp | 418 +- .../dpp_efm32-slstk3401a/table.cpp | 160 +- .../{ucos-ii => uc-os2}/app_cfg.h | 0 .../{ucos-ii => uc-os2}/bsp.cpp | 71 +- .../{ucos-ii => uc-os2}/iar/dpp-ucos2.ewd | 535 +- .../{ucos-ii => uc-os2}/iar/dpp-ucos2.ewp | 484 +- .../{ucos-ii => uc-os2}/iar/dpp-ucos2.eww | 0 .../{ucos-ii => uc-os2}/iar/dpp-ucos2.icf | 0 .../{ucos-ii => uc-os2}/main.cpp | 17 +- .../{ucos-ii => uc-os2}/os_cfg.h | 0 .../{ucos-ii => uc-os2}/test.cpp | 0 .../{ucos-ii => uc-os2}/test.h | 0 .../pic32/blinky_microstick2-pic32/main.cpp | 53 - .../blinky_microstick2-pic32/qk/xc32/Makefile | 108 - .../blinky_microstick2-pic32/qk/xc32/bsp.cpp | 171 - .../qk/xc32/nbproject/Makefile-dbg.mk | 367 - .../nbproject/Makefile-genesis.properties | 15 - .../qk/xc32/nbproject/Makefile-impl.mk | 73 - .../qk/xc32/nbproject/Makefile-local-dbg.mk | 37 - .../qk/xc32/nbproject/Makefile-local-rel.mk | 37 - .../qk/xc32/nbproject/Makefile-local-spy.mk | 37 - .../qk/xc32/nbproject/Makefile-rel.mk | 367 - .../qk/xc32/nbproject/Makefile-spy.mk | 427 - .../qk/xc32/nbproject/Makefile-variables.mk | 27 - .../qk/xc32/nbproject/Package-dbg.bash | 73 - .../qk/xc32/nbproject/Package-rel.bash | 73 - .../qk/xc32/nbproject/Package-spy.bash | 73 - .../qk/xc32/nbproject/configurations.xml | 760 - .../xc32/nbproject/private/configurations.xml | 61 - .../xc32/nbproject/private/private.properties | 0 .../qk/xc32/nbproject/private/private.xml | 8 - .../qk/xc32/nbproject/project.properties | 0 .../qk/xc32/nbproject/project.xml | 43 - .../blinky_microstick2-pic32/qv/xc32/Makefile | 108 - .../blinky_microstick2-pic32/qv/xc32/bsp.cpp | 187 - .../qv/xc32/nbproject/Makefile-dbg.mk | 355 - .../nbproject/Makefile-genesis.properties | 15 - .../qv/xc32/nbproject/Makefile-impl.mk | 73 - .../qv/xc32/nbproject/Makefile-local-dbg.mk | 37 - .../qv/xc32/nbproject/Makefile-local-rel.mk | 37 - .../qv/xc32/nbproject/Makefile-local-spy.mk | 37 - .../qv/xc32/nbproject/Makefile-rel.mk | 355 - .../qv/xc32/nbproject/Makefile-spy.mk | 403 - .../qv/xc32/nbproject/Makefile-variables.mk | 27 - .../qv/xc32/nbproject/Package-dbg.bash | 73 - .../qv/xc32/nbproject/Package-rel.bash | 73 - .../qv/xc32/nbproject/Package-spy.bash | 73 - .../qv/xc32/nbproject/configurations.xml | 761 - .../xc32/nbproject/private/configurations.xml | 61 - .../xc32/nbproject/private/private.properties | 0 .../qv/xc32/nbproject/private/private.xml | 8 - .../qv/xc32/nbproject/project.properties | 0 .../qv/xc32/nbproject/project.xml | 43 - examples/pic32/dpp_microstick2-pic32/bsp.hpp | 51 +- examples/pic32/dpp_microstick2-pic32/dpp.hpp | 104 +- examples/pic32/dpp_microstick2-pic32/dpp.qm | 446 +- examples/pic32/dpp_microstick2-pic32/main.cpp | 63 +- .../pic32/dpp_microstick2-pic32/philo.cpp | 157 +- .../dpp_microstick2-pic32/qk/xc32/bsp.cpp | 339 +- .../qk/xc32/nbproject/Makefile-dbg.mk | 34 +- .../nbproject/Makefile-genesis.properties | 4 +- .../qk/xc32/nbproject/Makefile-spy.mk | 34 +- .../qk/xc32/nbproject/configurations.xml | 3 +- .../qk/xc32/nbproject/private/private.xml | 4 +- .../dpp_microstick2-pic32/qv/xc32/bsp.cpp | 342 +- .../qv/xc32/nbproject/Makefile-dbg.mk | 34 +- .../nbproject/Makefile-genesis.properties | 4 +- .../qv/xc32/nbproject/Makefile-rel.mk | 58 +- .../qv/xc32/nbproject/Makefile-spy.mk | 34 +- .../qv/xc32/nbproject/configurations.xml | 3 +- .../xc32/nbproject/private/configurations.xml | 6 +- .../pic32/dpp_microstick2-pic32/table.cpp | 152 +- examples/posix-win32/README.md | 114 + .../blinky/Makefile | 26 +- examples/posix-win32/blinky/README.md | 16 + .../blinky/blinky.cpp | 120 +- .../blinky/blinky.qm | 20 +- examples/posix-win32/blinky/blinky_win.png | Bin 0 -> 9718 bytes .../calc/Makefile | 2 +- .../calc2 => posix-win32/calc}/bsp.cpp | 2 +- .../calc1 => posix-win32/calc}/bsp.hpp | 0 .../calc/calc.cpp | 223 +- .../calc1.hpp => posix-win32/calc/calc.hpp} | 27 +- .../calc1.qm => posix-win32/calc/calc.qm} | 30 +- .../calc2 => posix-win32/calc}/main.cpp | 49 +- .../calc2/Makefile | 2 +- .../calc1 => posix-win32/calc2}/bsp.cpp | 2 +- .../calc1_sub => posix-win32/calc2}/bsp.hpp | 0 .../calc2/calc2.cpp | 6 +- .../calc2/calc2.hpp | 12 +- .../calc2/calc2.qm | 13 +- .../calc1 => posix-win32/calc2}/main.cpp | 49 +- .../dpp => posix-win32/calc_sub}/Makefile | 9 +- .../calc_sub}/bsp.cpp | 2 +- .../calc2 => posix-win32/calc_sub}/bsp.hpp | 6 +- .../calc_sub/calc_sub.cpp} | 18 +- .../calc_sub/calc_sub.hpp} | 29 +- .../calc_sub/calc_sub.qm} | 32 +- .../posix-win32/calc_sub/lint-plus/README.txt | 30 + .../posix-win32/calc_sub/lint-plus/lin.bat | 73 + .../calc_sub}/lint-plus/options.lnt | 0 .../calc_sub}/main.cpp | 49 +- .../comp/Makefile | 2 +- .../comp/alarm.cpp | 6 +- .../comp/alarm.hpp | 2 +- .../{workstation => posix-win32}/comp/bsp.cpp | 2 +- .../{workstation => posix-win32}/comp/bsp.hpp | 0 .../comp/clock.cpp | 16 +- .../comp/clock.hpp | 12 +- .../{workstation => posix-win32}/comp/comp.qm | 23 +- .../comp/main.cpp | 6 +- .../defer/Makefile | 2 +- .../defer/bsp.cpp | 14 +- .../defer/bsp.hpp | 0 .../defer/defer.cpp | 8 +- .../defer/defer.qm | 4 +- .../defer/qspy200823_204112.seq | 0 .../dpp-comp => posix-win32/dpp}/Makefile | 27 +- .../dpp/Makefile_t | 29 +- examples/posix-win32/dpp/bsp.cpp | 238 + .../calc => posix-win32/dpp}/bsp.hpp | 48 +- examples/posix-win32/dpp/dpp.hpp | 111 + examples/{zephyr => posix-win32}/dpp/dpp.qm | 450 +- .../{workstation => posix-win32}/dpp/dpp.sln | 0 .../dpp/dpp.vcxproj | 19 +- .../dpp/dpp.vcxproj.filters | 13 +- examples/posix-win32/dpp/main.cpp | 44 + examples/posix-win32/dpp/philo.cpp | 264 + .../posix-win32/dpp/qp_config.hpp | 39 +- .../dpp/qview/dpp.py | 0 .../dpp/qview/dpp1.py | 0 .../posix-win32/dpp/qview/img/BTN_DWN.gif | Bin 0 -> 2071 bytes examples/posix-win32/dpp/qview/img/BTN_UP.gif | Bin 0 -> 1987 bytes examples/posix-win32/dpp/qview/img/eating.gif | Bin 0 -> 3169 bytes examples/posix-win32/dpp/qview/img/hungry.gif | Bin 0 -> 2428 bytes .../posix-win32/dpp/qview/img/thinking.gif | Bin 0 -> 2378 bytes examples/posix-win32/dpp/qview/qview-dpp.bat | 8 + examples/posix-win32/dpp/qview/qview-dpp1.bat | 8 + examples/{qt => posix-win32}/dpp/table.cpp | 186 +- .../dpp_comp}/Makefile | 32 +- examples/posix-win32/dpp_comp/bsp.cpp | 229 + examples/posix-win32/dpp_comp/bsp.hpp | 58 + .../dpp_comp}/dpp-comp.qm | 253 +- .../dpp-comp => posix-win32/dpp_comp}/dpp.hpp | 82 +- examples/posix-win32/dpp_comp/main.cpp | 44 + .../dpp_comp}/philo.cpp | 71 +- .../posix-win32/dpp_comp/qp_config.hpp | 39 +- .../dpp_comp}/table.cpp | 116 +- .../history_qhsm/Makefile | 2 +- .../history_qhsm/history.cpp | 6 +- .../history_qhsm/history.hpp | 2 +- .../history_qhsm/history.qm | 2 +- .../history_qhsm}/main.cpp | 61 +- .../history_qmsm/Makefile | 2 +- .../history_qmsm/history.cpp | 0 .../history_qmsm/history.hpp | 0 .../history_qmsm/history.qm | 0 .../history_qmsm}/main.cpp | 61 +- .../qhsmtst/Makefile | 99 +- .../qhsmtst/log.txt | 2 +- examples/posix-win32/qhsmtst/main.cpp | 145 + .../qhsmtst/qhsmtst.cpp | 155 +- .../qhsmtst/qhsmtst.hpp | 25 +- .../qhsmtst/qhsmtst.qm | 195 +- .../qmsmtst/Makefile | 99 +- .../qmsmtst/log.txt | 2 +- examples/posix-win32/qmsmtst/main.cpp | 145 + .../qmsmtst/qmsmtst.cpp | 49 +- .../qmsmtst/qmsmtst.hpp | 25 +- .../qmsmtst/qmsmtst.qm | 165 +- .../reminder/Makefile | 2 +- .../reminder/bsp.cpp | 2 +- .../reminder/bsp.hpp | 0 .../reminder/reminder.cpp | 2 +- .../reminder2/Makefile | 2 +- .../reminder2/bsp.cpp | 2 +- .../reminder2/bsp.hpp | 0 .../reminder2/reminder2.cpp | 10 +- .../reminder2/reminder2.qm | 6 +- examples/qt/dpp-gui/bsp.cpp | 233 - examples/qt/dpp-gui/bsp.hpp | 47 - examples/qt/dpp-gui/dpp-gui.pro | 134 - examples/qt/dpp-gui/dpp.hpp | 90 - examples/qt/dpp-gui/dpp.qm | 665 - examples/qt/dpp-gui/gui.cpp | 77 - examples/qt/dpp-gui/gui.hpp | 53 - examples/qt/dpp-gui/gui.qrc | 7 - examples/qt/dpp-gui/gui.rc | 1 - examples/qt/dpp-gui/gui.ui | 253 - examples/qt/dpp-gui/main.cpp | 78 - examples/qt/dpp-gui/res/eating.png | Bin 3601 -> 0 bytes examples/qt/dpp-gui/res/hungry.png | Bin 2934 -> 0 bytes examples/qt/dpp-gui/res/qp.ico | Bin 10134 -> 0 bytes examples/qt/dpp-gui/res/thinking.png | Bin 2857 -> 0 bytes examples/qt/dpp/bsp.cpp | 213 - examples/qt/dpp/bsp.hpp | 47 - examples/qt/dpp/dpp.hpp | 90 - examples/qt/dpp/dpp.pro | 132 - examples/qt/dpp/dpp.qm | 667 - examples/qt/dpp/dpp_spy.pro | 132 - examples/qt/dpp/dppapp.hpp | 47 - examples/qt/dpp/main.cpp | 75 - examples/qt/game-gui/bsp.cpp | 354 - examples/qt/game-gui/bsp.hpp | 55 - examples/qt/game-gui/game-gui.pro | 137 - examples/qt/game-gui/game.qm | 1948 -- examples/qt/game-gui/gui.cpp | 81 - examples/qt/game-gui/gui.hpp | 57 - examples/qt/game-gui/gui.qrc | 9 - examples/qt/game-gui/gui.rc | 1 - examples/qt/game-gui/gui.ui | 238 - examples/qt/game-gui/main.cpp | 85 - examples/qt/game-gui/res/EK-BTN_DWN.png | Bin 2938 -> 0 bytes examples/qt/game-gui/res/EK-BTN_UP.png | Bin 2959 -> 0 bytes examples/qt/game-gui/res/EK-LM3S811.png | Bin 170843 -> 0 bytes examples/qt/game-gui/res/LED_OFF.png | Bin 2565 -> 0 bytes examples/qt/game-gui/res/LED_ON.png | Bin 2659 -> 0 bytes examples/qt/game-gui/res/qp.ico | Bin 10134 -> 0 bytes examples/qt/game-gui/tunnel.cpp | 983 - examples/qt/pelican-gui/bsp.cpp | 212 - examples/qt/pelican-gui/bsp.hpp | 55 - examples/qt/pelican-gui/gui.cpp | 90 - examples/qt/pelican-gui/gui.hpp | 55 - examples/qt/pelican-gui/gui.qrc | 14 - examples/qt/pelican-gui/gui.rc | 1 - examples/qt/pelican-gui/gui.ui | 352 - examples/qt/pelican-gui/main.cpp | 71 - examples/qt/pelican-gui/pelican-gui.pro | 133 - examples/qt/pelican-gui/pelican.cpp | 485 - examples/qt/pelican-gui/pelican.hpp | 60 - examples/qt/pelican-gui/pelican.qm | 540 - examples/qt/pelican-gui/res/BTN_DWN.png | Bin 2938 -> 0 bytes examples/qt/pelican-gui/res/BTN_UP.png | Bin 2959 -> 0 bytes examples/qt/pelican-gui/res/cars_blank.png | Bin 4779 -> 0 bytes examples/qt/pelican-gui/res/cars_grn.png | Bin 5560 -> 0 bytes examples/qt/pelican-gui/res/cars_red.png | Bin 4869 -> 0 bytes examples/qt/pelican-gui/res/cars_ylw.png | Bin 4861 -> 0 bytes examples/qt/pelican-gui/res/crossing.png | Bin 227144 -> 0 bytes examples/qt/pelican-gui/res/peds_blank.png | Bin 460 -> 0 bytes examples/qt/pelican-gui/res/peds_dont.png | Bin 993 -> 0 bytes examples/qt/pelican-gui/res/peds_walk.png | Bin 1176 -> 0 bytes examples/qt/pelican-gui/res/qp.ico | Bin 10134 -> 0 bytes examples/qutest/blinky/src/.blinky | 59 + examples/qutest/blinky/src/blinky.cpp | 12 +- examples/qutest/blinky/src/blinky.hpp | 8 +- examples/qutest/blinky/{ => src}/blinky.qm | 10 +- examples/qutest/blinky/src/bsp.cpp | 4 +- examples/qutest/blinky/test/Makefile | 2 +- examples/qutest/blinky/test/make_efm32 | 2 +- .../qutest/blinky/test/make_nucleo-h743zi | 2 +- .../qutest/blinky/test/make_nucleo-l053r8 | 2 +- examples/qutest/blinky/test/make_tm4c123 | 7 +- examples/qutest/blinky/test/test_blinky.cpp | 8 +- examples/qutest/dpp-comp/src/bsp.cpp | 101 +- examples/qutest/dpp-comp/src/bsp.hpp | 51 +- .../qutest/dpp-comp/{ => src}/dpp-comp.qm | 259 +- examples/qutest/dpp-comp/src/dpp.hpp | 88 +- examples/qutest/dpp-comp/src/philo.cpp | 77 +- examples/qutest/dpp-comp/src/table.cpp | 122 +- examples/qutest/dpp-comp/test_dpp/Makefile | 9 +- examples/qutest/dpp-comp/test_dpp/main.cpp | 74 - examples/qutest/dpp-comp/test_dpp/make_efm32 | 2 +- .../dpp-comp/test_dpp/make_nucleo-l053r8 | 2 +- examples/qutest/dpp-comp/test_dpp/make_posix | 2 +- .../qutest/dpp-comp/test_dpp/make_tm4c123 | 7 +- .../qutest/dpp-comp/test_dpp/test_dpp.cpp | 82 +- examples/qutest/dpp-comp/test_philo/Makefile | 2 +- .../qutest/dpp-comp/test_philo/test_init.py | 12 +- .../qutest/dpp-comp/test_philo/test_philo.cpp | 80 +- .../qutest/dpp-comp/test_philo/test_philo.py | 22 +- examples/qutest/dpp-comp/test_table/Makefile | 2 +- .../qutest/dpp-comp/test_table/test_init.py | 2 +- .../qutest/dpp-comp/test_table/test_table.cpp | 131 +- .../qutest/dpp-comp/test_table/test_table.py | 2 +- examples/qutest/dpp/dpp.qm | 483 - examples/qutest/dpp/src/.dpp | 59 + examples/qutest/dpp/src/bsp.cpp | 105 +- examples/qutest/dpp/src/bsp.hpp | 51 +- examples/qutest/dpp/src/dpp.hpp | 111 +- examples/qutest/dpp/src/dpp.qm | 528 + examples/qutest/dpp/src/philo.cpp | 155 +- examples/qutest/dpp/src/table.cpp | 147 +- examples/qutest/dpp/test_dpp/Makefile | 9 +- examples/qutest/dpp/test_dpp/main.cpp | 90 - examples/qutest/dpp/test_dpp/make_efm32 | 7 +- .../qutest/dpp/test_dpp/make_nucleo-l053r8 | 7 +- examples/qutest/dpp/test_dpp/make_posix | 7 +- examples/qutest/dpp/test_dpp/make_tm4c123 | 12 +- examples/qutest/dpp/test_dpp/test_dpp.cpp | 92 +- examples/qutest/dpp/test_dpp/test_init.py | 74 +- examples/qutest/dpp/test_dpp/test_tick.py | 86 +- examples/qutest/dpp/test_philo/Makefile | 2 +- examples/qutest/dpp/test_philo/test_init.py | 14 +- examples/qutest/dpp/test_philo/test_philo.cpp | 121 +- examples/qutest/dpp/test_philo/test_philo.py | 78 +- examples/qutest/dpp/test_table/Makefile | 2 +- examples/qutest/dpp/test_table/test_init.py | 34 +- examples/qutest/dpp/test_table/test_table.cpp | 148 +- examples/qutest/dpp/test_table/test_table.py | 38 +- examples/qutest/evt_par/test/Makefile | 2 +- examples/qutest/evt_par/test/make_tm4c123 | 7 +- examples/qutest/evt_par/test/test_evt_par.cpp | 8 +- examples/qutest/qhsmtst/src/qhsmtst.cpp | 146 +- examples/qutest/qhsmtst/src/qhsmtst.hpp | 22 +- examples/qutest/qhsmtst/{ => src}/qhsmtst.qm | 140 +- examples/qutest/qhsmtst/test/Makefile | 2 +- .../qutest/qhsmtst/test/make_nucleo-l053r8 | 2 +- examples/qutest/qhsmtst/test/make_tm4c123 | 7 +- .../qutest/qhsmtst/test/test_qhsm-funct.py | 2 +- .../qutest/qhsmtst/test/test_qhsm-struct.py | 272 +- examples/qutest/qhsmtst/test/test_qhsm.cpp | 94 +- examples/qutest/qmsmtst/src/qmsmtst.cpp | 41 +- examples/qutest/qmsmtst/src/qmsmtst.hpp | 22 +- .../qmsmtst => qutest/qmsmtst/src}/qmsmtst.qm | 89 +- examples/qutest/qmsmtst/test/Makefile | 2 +- .../qutest/qmsmtst/test/make_nucleo-l053r8 | 2 +- examples/qutest/qmsmtst/test/make_tm4c123 | 7 +- .../qutest/qmsmtst/test/test_qmsm-funct.py | 2 +- .../qutest/qmsmtst/test/test_qmsm-struct.py | 276 +- examples/qutest/qmsmtst/test/test_qmsm.cpp | 93 +- examples/qutest/self_test/test/Makefile | 2 +- examples/qutest/self_test/test/make_efm32 | 2 +- .../qutest/self_test/test/make_nucleo-l053r8 | 2 +- examples/qutest/self_test/test/make_posix | 2 +- examples/qutest/self_test/test/make_tm4c123 | 7 +- .../qutest/self_test/test/test_qutest.cpp | 8 +- examples/qutest/start_seq/gizmo.qm | 4 +- examples/qutest/start_seq/src/gizmo.cpp | 8 +- examples/qutest/start_seq/src/gizmo.hpp | 2 +- examples/qutest/start_seq/test/Makefile | 2 +- .../qutest/start_seq/test/test_fixture.cpp | 8 +- examples/qwin-gui/README.md | 82 + .../dpp-gui}/Res/BTN_DWN.bmp | Bin .../dpp-gui}/Res/BTN_UP.bmp | Bin .../dpp-gui}/Res/eating.bmp | Bin .../dpp-gui}/Res/hungry.bmp | Bin .../win32-gui => qwin-gui/dpp-gui}/Res/qp.ico | Bin .../dpp-gui}/Res/thinking.bmp | Bin .../dpp-gui}/Resource.rc | Bin .../win32-gui => qwin-gui/dpp-gui}/bsp.cpp | 270 +- examples/qwin-gui/dpp-gui/bsp.hpp | 59 + .../dpp-gui}/dpp-gui.sln | 0 .../dpp-gui}/dpp-gui.vcxproj | 88 +- .../dpp-gui}/dpp-gui.vcxproj.filters | 78 +- examples/qwin-gui/dpp-gui/dpp.hpp | 111 + examples/qwin-gui/dpp-gui/dpp.qm | 528 + .../win32-gui => qwin-gui/dpp-gui}/main.cpp | 32 +- examples/qwin-gui/dpp-gui/philo.cpp | 264 + .../win32-gui => qwin-gui/dpp-gui}/resource.h | 0 examples/{qt => qwin-gui}/dpp-gui/table.cpp | 192 +- .../game-gui}/Res/BOARD.bmp | Bin .../game-gui}/Res/BTN_DWN.bmp | Bin .../game-gui}/Res/BTN_UP.bmp | Bin .../game-gui}/Res/LCD.bmp | Bin .../game-gui}/Res/LED_OFF.bmp | Bin .../game-gui}/Res/LED_ON.bmp | Bin .../game-gui}/Res/qp.ico | Bin .../game-gui}/Res/seg.bmp | Bin .../game-gui}/Res/seg0.bmp | Bin .../game-gui}/Res/seg1.bmp | Bin .../game-gui}/Res/seg2.bmp | Bin .../game-gui}/Res/seg3.bmp | Bin .../game-gui}/Res/seg4.bmp | Bin .../game-gui}/Res/seg5.bmp | Bin .../game-gui}/Res/seg6.bmp | Bin .../game-gui}/Res/seg7.bmp | Bin .../game-gui}/Res/seg8.bmp | Bin .../game-gui}/Res/seg9.bmp | Bin .../game-gui}/Resource.rc | Bin .../win32-gui => qwin-gui/game-gui}/bsp.cpp | 210 +- .../main.cpp => qwin-gui/game-gui/bsp.hpp} | 58 +- .../game-gui}/game-gui.sln | 0 .../game-gui}/game-gui.vcxproj | 76 +- .../game-gui}/game-gui.vcxproj.filters | 86 +- examples/{qt => qwin-gui}/game-gui/game.hpp | 168 +- examples/qwin-gui/game-gui/game.qm | 1448 ++ .../win32-gui => qwin-gui/game-gui}/main.cpp | 38 +- .../win32-gui => qwin-gui/game-gui}/make.bat | 0 examples/{qt => qwin-gui}/game-gui/mine1.cpp | 87 +- examples/{qt => qwin-gui}/game-gui/mine2.cpp | 92 +- .../{qt => qwin-gui}/game-gui/missile.cpp | 72 +- .../game-gui}/resource.h | 0 examples/{qt => qwin-gui}/game-gui/ship.cpp | 123 +- examples/qwin-gui/game-gui/tunnel.cpp | 674 + .../threadx/arm-cm/dpp_ek-tm4c123gxl/bsp.cpp | 506 +- .../threadx/arm-cm/dpp_ek-tm4c123gxl/bsp.hpp | 51 +- .../threadx/arm-cm/dpp_ek-tm4c123gxl/dpp.hpp | 104 +- .../threadx/arm-cm/dpp_ek-tm4c123gxl/dpp.qm | 446 +- .../arm-cm/dpp_ek-tm4c123gxl/iar/dpp.ewd | 565 +- .../arm-cm/dpp_ek-tm4c123gxl/iar/dpp.ewp | 155 +- .../threadx/arm-cm/dpp_ek-tm4c123gxl/main.cpp | 76 +- .../arm-cm/dpp_ek-tm4c123gxl/philo.cpp | 157 +- .../arm-cm/dpp_ek-tm4c123gxl/table.cpp | 152 +- .../arm-cm/dpp_stm32f429-discovery/bsp.cpp | 429 +- .../arm-cm/dpp_stm32f429-discovery/bsp.hpp | 51 +- .../arm-cm/dpp_stm32f429-discovery/dpp.hpp | 104 +- .../arm-cm/dpp_stm32f429-discovery/dpp.qm | 446 +- .../dpp_stm32f429-discovery/iar/dpp.ewd | 565 +- .../dpp_stm32f429-discovery/iar/dpp.ewp | 151 +- .../arm-cm/dpp_stm32f429-discovery/main.cpp | 76 +- .../arm-cm/dpp_stm32f429-discovery/philo.cpp | 157 +- .../arm-cm/dpp_stm32f429-discovery/table.cpp | 152 +- .../dpp_ek-tm4c123gxl/armclang/dpp.uvoptx | 138 +- .../dpp_ek-tm4c123gxl/armclang/dpp.uvprojx | 83 +- .../uc-os2/arm-cm/dpp_ek-tm4c123gxl/bsp.cpp | 576 +- .../uc-os2/arm-cm/dpp_ek-tm4c123gxl/bsp.hpp | 51 +- .../uc-os2/arm-cm/dpp_ek-tm4c123gxl/dpp.hpp | 104 +- .../uc-os2/arm-cm/dpp_ek-tm4c123gxl/dpp.qm | 446 +- .../arm-cm/dpp_ek-tm4c123gxl/gnu/Makefile | 6 +- .../arm-cm/dpp_ek-tm4c123gxl/iar/dpp.ewd | 573 +- .../arm-cm/dpp_ek-tm4c123gxl/iar/dpp.ewp | 181 +- .../uc-os2/arm-cm/dpp_ek-tm4c123gxl/main.cpp | 70 +- .../uc-os2/arm-cm/dpp_ek-tm4c123gxl/philo.cpp | 157 +- .../uc-os2/arm-cm/dpp_ek-tm4c123gxl/table.cpp | 152 +- .../arm-cm/dpp_nucleo-l053r8/README.txt | 8 +- .../uc-os2/arm-cm/dpp_nucleo-l053r8/app_cfg.h | 2 +- .../dpp_nucleo-l053r8/armclang/dpp.uvoptx | 138 +- .../dpp_nucleo-l053r8/armclang/dpp.uvprojx | 75 +- .../uc-os2/arm-cm/dpp_nucleo-l053r8/bsp.cpp | 535 +- .../uc-os2/arm-cm/dpp_nucleo-l053r8/bsp.hpp | 51 +- .../uc-os2/arm-cm/dpp_nucleo-l053r8/dpp.hpp | 104 +- .../uc-os2/arm-cm/dpp_nucleo-l053r8/dpp.qm | 446 +- .../arm-cm/dpp_nucleo-l053r8/gnu/Makefile | 2 +- .../arm-cm/dpp_nucleo-l053r8/iar/dpp.ewd | 321 +- .../arm-cm/dpp_nucleo-l053r8/iar/dpp.ewp | 138 +- .../uc-os2/arm-cm/dpp_nucleo-l053r8/main.cpp | 70 +- .../uc-os2/arm-cm/dpp_nucleo-l053r8/philo.cpp | 157 +- .../uc-os2/arm-cm/dpp_nucleo-l053r8/table.cpp | 152 +- examples/workstation/README.txt | 106 - examples/workstation/blinky/README.md | 18 - examples/workstation/blinky/blinky_win.png | Bin 15865 -> 0 bytes examples/workstation/calc/bsp.cpp | 161 - examples/workstation/calc/calc.hpp | 56 - examples/workstation/calc/calc.qm | 627 - examples/workstation/calc/main.cpp | 139 - examples/workstation/calc1/Makefile | 291 - examples/workstation/calc1/calc1.cpp | 930 - .../workstation/defer/qspy200822_125142.bin | Bin 7237 -> 0 bytes examples/workstation/dpp-comp/bsp.cpp | 196 - examples/workstation/dpp-comp/bsp.hpp | 59 - examples/workstation/dpp-gui/README.txt | 8 - examples/workstation/dpp/bsp.cpp | 197 - examples/workstation/dpp/bsp.hpp | 59 - examples/workstation/dpp/main.cpp | 68 - examples/workstation/game-gui/README.txt | 8 - examples/workstation/qhsmtst/main.cpp | 200 - examples/workstation/qmsmtst/main.cpp | 200 - examples/zephyr/blinky/CMakeLists.txt | 3 +- examples/zephyr/blinky/README.md | 2 +- examples/zephyr/blinky/src/blinky.cpp | 33 +- examples/zephyr/blinky/src/blinky.hpp | 59 +- examples/zephyr/blinky/src/bsp.cpp | 171 +- examples/zephyr/blinky/src/bsp.hpp | 32 +- examples/zephyr/blinky/src/main.cpp | 44 +- .../zephyr/blinky/src/qp_config.hpp | 30 +- examples/zephyr/dpp/CMakeLists.txt | 3 +- examples/zephyr/dpp/README.md | 2 +- examples/zephyr/dpp/src/bsp.cpp | 256 +- examples/zephyr/dpp/src/bsp.hpp | 80 +- examples/zephyr/dpp/src/dpp.hpp | 109 +- examples/zephyr/dpp/src/dpp.qm | 528 + examples/zephyr/dpp/src/main.cpp | 72 +- examples/zephyr/dpp/src/philo.cpp | 154 +- .../zephyr/dpp/src/qp_config.hpp | 30 +- examples/zephyr/dpp/src/table.cpp | 152 +- include/qassert.h | 398 - include/qep.hpp | 982 - include/qequeue.hpp | 253 +- include/qf.hpp | 1880 -- include/qf_pkg.hpp | 203 - include/qk.hpp | 203 +- include/qmpool.hpp | 234 +- include/qp.hpp | 1250 + include/qp_pkg.hpp | 102 + include/qpcpp.hpp | 115 +- include/qs.hpp | 1816 +- include/qs_dummy.hpp | 94 +- include/qs_pkg.hpp | 269 +- include/qsafe.h | 181 + include/qstamp.cpp | 34 - include/qstamp.hpp | 17 +- include/qv.hpp | 89 +- include/qxk.hpp | 811 +- ports/arm-cm/qk/armclang/qf_port.hpp | 145 - ports/arm-cm/qk/armclang/qk_port.cpp | 430 +- ports/arm-cm/qk/armclang/qk_port.hpp | 94 - ports/arm-cm/qk/armclang/qp_port.hpp | 239 + ports/arm-cm/qk/armclang/qs_port.hpp | 40 +- ports/arm-cm/qk/gnu/qf_port.hpp | 145 - ports/arm-cm/qk/gnu/qk_port.cpp | 450 +- ports/arm-cm/qk/gnu/qk_port.hpp | 93 - ports/arm-cm/qk/gnu/qp_port.hpp | 239 + ports/arm-cm/qk/gnu/qs_port.hpp | 37 +- ports/arm-cm/qk/iar/qf_port.hpp | 148 - ports/arm-cm/qk/iar/qk_port.cpp | 430 +- ports/arm-cm/qk/iar/qk_port.hpp | 85 - ports/arm-cm/qk/iar/qp_port.hpp | 232 + ports/arm-cm/qk/iar/qs_port.hpp | 40 +- ports/arm-cm/qutest/qep_port.hpp | 45 - ports/arm-cm/qutest/qf_port.hpp | 91 - ports/arm-cm/qutest/qp_port.hpp | 100 + ports/arm-cm/qutest/qs_port.hpp | 37 +- ports/arm-cm/qv/armclang/qf_port.hpp | 145 - ports/arm-cm/qv/armclang/qp_port.hpp | 223 + ports/arm-cm/qv/armclang/qs_port.hpp | 30 +- ports/arm-cm/qv/armclang/qv_port.cpp | 150 +- ports/arm-cm/qv/armclang/qv_port.hpp | 81 - ports/arm-cm/qv/gnu/qep_port.hpp | 41 - ports/arm-cm/qv/gnu/qf_port.hpp | 145 - ports/arm-cm/qv/gnu/qp_port.hpp | 224 + ports/arm-cm/qv/gnu/qs_port.hpp | 30 +- ports/arm-cm/qv/gnu/qv_port.cpp | 160 +- ports/arm-cm/qv/gnu/qv_port.hpp | 81 - ports/arm-cm/qv/iar/qep_port.hpp | 41 - ports/arm-cm/qv/iar/qf_port.hpp | 148 - ports/arm-cm/qv/iar/qp_port.hpp | 224 + ports/arm-cm/qv/iar/qs_port.hpp | 30 +- ports/arm-cm/qv/iar/qv_port.cpp | 150 +- ports/arm-cm/qv/iar/qv_port.hpp | 80 - ports/arm-cm/qxk/armclang/qf_port.hpp | 152 - ports/arm-cm/qxk/armclang/qp_port.hpp | 247 + ports/arm-cm/qxk/armclang/qs_port.hpp | 30 +- ports/arm-cm/qxk/armclang/qxk_port.cpp | 1006 +- ports/arm-cm/qxk/armclang/qxk_port.hpp | 97 - ports/arm-cm/qxk/gnu/qf_port.hpp | 152 - ports/arm-cm/qxk/gnu/qp_port.hpp | 247 + ports/arm-cm/qxk/gnu/qs_port.hpp | 30 +- ports/arm-cm/qxk/gnu/qxk_port.cpp | 1024 +- ports/arm-cm/qxk/gnu/qxk_port.hpp | 97 - ports/arm-cm/qxk/iar/qf_port.hpp | 154 - ports/arm-cm/qxk/iar/qp_port.hpp | 240 + ports/arm-cm/qxk/iar/qs_port.hpp | 30 +- ports/arm-cm/qxk/iar/qxk_port.cpp | 1006 +- ports/arm-cm/qxk/iar/qxk_port.hpp | 89 - ports/arm-cr/qk/gnu/qep_port.hpp | 45 - ports/arm-cr/qk/gnu/qf_port.hpp | 93 - ports/arm-cr/qk/gnu/qk_port.hpp | 104 - ports/arm-cr/qk/gnu/qp_port.hpp | 179 + ports/arm-cr/qk/gnu/qs_port.hpp | 25 +- ports/arm-cr/qk/iar/qep_port.hpp | 45 - ports/arm-cr/qk/iar/qf_port.hpp | 79 - ports/arm-cr/qk/iar/qk_port.hpp | 100 - ports/arm-cr/qk/iar/qp_port.hpp | 159 + ports/arm-cr/qk/iar/qs_port.hpp | 25 +- ports/arm-cr/qk/ti/qep_port.hpp | 45 - ports/arm-cr/qk/ti/qf_port.hpp | 91 - ports/arm-cr/qk/ti/qk_port.hpp | 83 - ports/arm-cr/qk/ti/qp_port.hpp | 151 + ports/arm-cr/qk/ti/qs_port.hpp | 25 +- ports/arm-cr/qv/gnu/qep_port.hpp | 45 - .../qv/gnu/{qf_port.hpp => qp_port.hpp} | 65 +- ports/arm-cr/qv/gnu/qs_port.hpp | 25 +- ports/arm-cr/qv/gnu/qv_port.hpp | 49 - ports/arm-cr/qv/iar/qep_port.hpp | 45 - .../qv/iar/{qf_port.hpp => qp_port.hpp} | 75 +- ports/arm-cr/qv/iar/qs_port.hpp | 25 +- ports/arm-cr/qv/iar/qv_port.hpp | 49 - ports/arm-cr/qv/ti/qep_port.hpp | 45 - .../arm-cr/qv/ti/{qf_port.hpp => qp_port.hpp} | 76 +- ports/arm-cr/qv/ti/qs_port.hpp | 25 +- ports/arm-cr/qv/ti/qv_port.hpp | 49 - ports/embos/qep_port.hpp | 38 - ports/embos/qf_port.cpp | 216 +- ports/embos/{qf_port.hpp => qp_port.hpp} | 91 +- ports/embos/qs_port.hpp | 27 +- ports/freertos/qep_port.hpp | 38 - ports/freertos/qf_port.cpp | 627 +- ports/freertos/{qf_port.hpp => qp_port.hpp} | 127 +- ports/freertos/qs_port.hpp | 23 +- ports/lint-plus/16bit/cstdint | 4 + ports/lint-plus/16bit/qs_port.hpp | 20 +- ports/lint-plus/16bit/stdint.h | 46 - ports/lint-plus/32bit/cstdint | 4 + ports/lint-plus/32bit/qs_port.hpp | 14 +- ports/lint-plus/32bit/stdint.h | 46 - ports/lint-plus/au-autosar.lnt | 102 +- ports/lint-plus/au-autosar19.lnt | 3074 +++ ports/lint-plus/{lin.bat => make.bat} | 28 +- ports/lint-plus/options.lnt | 123 +- ports/lint-plus/qep_port.hpp | 44 - ports/lint-plus/qk/qf_port.hpp | 55 - ports/lint-plus/qk/qk_port.hpp | 83 - ports/lint-plus/qk/qp_port.hpp | 101 + ports/lint-plus/qpcpp.lnt | 101 +- ports/lint-plus/qv/qf_port.hpp | 55 - ports/lint-plus/qv/qp_port.hpp | 89 + ports/lint-plus/qv/qv_port.hpp | 54 - ports/lint-plus/qxk/qf_port.hpp | 59 - ports/lint-plus/qxk/qp_port.hpp | 104 + ports/lint-plus/qxk/qxk_port.hpp | 93 - ports/lint-plus/std.lnt | 8 +- ports/msp430/qk/qep_port.hpp | 45 - ports/msp430/qk/qf_port.hpp | 72 - ports/msp430/qk/qk_port.hpp | 51 - ports/msp430/qk/qp_port.hpp | 95 + ports/msp430/qk/qs_port.hpp | 25 +- ports/msp430/qutest/qep_port.hpp | 45 - .../qutest/{qf_port.hpp => qp_port.hpp} | 85 +- ports/msp430/qutest/qs_port.hpp | 37 +- ports/msp430/qv/qep_port.hpp | 45 - ports/msp430/qv/qf_port.hpp | 72 - ports/msp430/qv/qp_port.hpp | 80 + ports/msp430/qv/qs_port.hpp | 25 +- ports/msp430/qv/qv_port.hpp | 44 - ports/pic32/qk/xc32/qep_port.hpp | 48 - ports/pic32/qk/xc32/qf_port.hpp | 75 - ports/pic32/qk/xc32/qk_port.cpp | 14 +- ports/pic32/qk/xc32/qk_port.hpp | 73 - ports/pic32/qk/xc32/qp_port.hpp | 120 + ports/pic32/qk/xc32/qs_port.hpp | 27 +- ports/pic32/qutest/xc32/qep_port.hpp | 48 - ports/pic32/qutest/xc32/qp_port.hpp | 104 + ports/pic32/qutest/xc32/qs_port.hpp | 29 +- ports/pic32/qv/xc32/qep_port.hpp | 48 - ports/pic32/qv/xc32/qf_port.hpp | 75 - ports/pic32/qv/xc32/qp_port.hpp | 97 + ports/pic32/qv/xc32/qs_port.hpp | 27 +- ports/pic32/qv/xc32/qv_port.hpp | 43 - .../qf_port.hpp => posix-qutest/qp_port.hpp} | 66 +- ports/posix-qutest/qs_port.hpp | 29 +- ports/posix-qutest/qutest_port.cpp | 79 +- ports/posix-qv/qep_port.hpp | 50 - ports/posix-qv/qf_port.cpp | 279 +- ports/posix-qv/{qf_port.hpp => qp_port.hpp} | 124 +- ports/posix-qv/qs_port.cpp | 130 +- ports/posix-qv/qs_port.hpp | 21 +- ports/posix/qep_port.hpp | 42 - ports/posix/qf_port.cpp | 184 +- ports/posix/{qf_port.hpp => qp_port.hpp} | 118 +- ports/posix/qs_port.cpp | 130 +- ports/posix/qs_port.hpp | 21 +- .../qep_port.hpp => qep-only/qp_port.hpp} | 45 +- ports/qep-only/safe_std.h | 115 + ports/qt/aothread.hpp | 55 - ports/qt/guiactive.hpp | 63 - ports/qt/guiapp.cpp | 237 - ports/qt/guiapp.hpp | 51 - ports/qt/pixellabel.cpp | 125 - ports/qt/pixellabel.hpp | 66 - ports/qt/qep_port.hpp | 46 - ports/qt/qf_port.cpp | 164 - ports/qt/qf_port.hpp | 157 - ports/qt/qs_port.hpp | 56 - ports/qt/tickerthread.hpp | 52 - ports/sample/README.md | 3 - ports/sample/qep_port.hpp | 60 - ports/sample/qf_port.hpp | 308 - ports/sample/qk_port.hpp | 83 - ports/threadx/qep_port.hpp | 38 - ports/threadx/qf_port.cpp | 295 +- ports/threadx/{qf_port.hpp => qp_port.hpp} | 78 +- ports/threadx/qs_port.hpp | 30 +- ports/uc-os2/qep_port.hpp | 38 - ports/uc-os2/qf_port.cpp | 183 +- ports/uc-os2/{qf_port.hpp => qp_port.hpp} | 83 +- ports/uc-os2/qs_port.hpp | 46 +- ports/vxworks/qep_port.hpp | 38 - ports/vxworks/qf_port.cpp | 185 - ports/vxworks/qf_port.hpp | 132 - ports/vxworks/qs_port.hpp | 58 - ports/win32-qutest/README.md | 5 - ports/win32-qutest/qep_port.hpp | 52 - .../qf_port.hpp => win32-qutest/qp_port.hpp} | 73 +- ports/win32-qutest/qs_port.hpp | 28 +- ports/win32-qutest/qutest_port.cpp | 62 +- ports/win32-qv/qep_port.hpp | 61 - ports/win32-qv/qf_port.cpp | 182 +- ports/win32-qv/{qf_port.hpp => qp_port.hpp} | 129 +- ports/win32-qv/qs_port.cpp | 32 +- ports/win32-qv/qs_port.hpp | 20 +- ports/{vxworks => win32}/Makefile | 110 +- ports/win32/qep_port.hpp | 61 - ports/win32/qf_port.cpp | 124 +- ports/win32/{qf_port.hpp => qp_port.hpp} | 113 +- ports/win32/qs_port.cpp | 32 +- ports/win32/qs_port.hpp | 20 +- qpcpp.qm | 20066 +++++++--------- qpcpp.sha256 | 179 + src/qf/qep_hsm.cpp | 553 +- src/qf/qep_msm.cpp | 311 +- src/qf/qf_act.cpp | 104 +- src/qf/qf_actq.cpp | 336 +- src/qf/qf_defer.cpp | 66 +- src/qf/qf_dyn.cpp | 359 +- src/qf/qf_mem.cpp | 230 +- src/qf/qf_ps.cpp | 224 +- src/qf/qf_qact.cpp | 187 +- src/qf/qf_qeq.cpp | 192 +- src/qf/qf_qmact.cpp | 86 +- src/qf/qf_time.cpp | 322 +- src/qk/qk.cpp | 451 +- src/qs/qs.cpp | 928 +- src/qs/qs_64bit.cpp | 47 +- src/qs/qs_fp.cpp | 53 +- src/qs/qs_rx.cpp | 1464 +- src/qs/qstamp.cpp | 20 +- src/qs/qutest.cpp | 418 +- src/qv/qv.cpp | 123 +- src/qxk/qxk.cpp | 599 +- src/qxk/qxk_mutex.cpp | 425 +- src/qxk/qxk_sema.cpp | 268 +- src/qxk/qxk_xthr.cpp | 442 +- test/et/et.c | 174 + test/et/et.h | 92 + test/et/et_host.c | 48 + test/qk/test_sched/bsp.hpp | 42 +- .../{bsp_efm32.cpp => bsp_efm32pg1b.cpp} | 8 +- test/qk/test_sched/bsp_nucleo-c031c6.cpp | 362 + .../{bsp_h743zi.cpp => bsp_nucleo-h743zi.cpp} | 8 +- .../{bsp_l053r8.cpp => bsp_nucleo-l053r8.cpp} | 20 +- .../test_sched/{make_efm32 => efm32pg1b.mak} | 22 +- test/qk/test_sched/nucleo-c031c6.mak | 336 + .../{make_nucleo-h743zi => nucleo-h743zi.mak} | 21 +- .../{make_nucleo-l053r8 => nucleo-l053r8.mak} | 24 +- test/qk/test_sched/test_sched.cpp | 2 +- test/qs/qs_rx/Makefile | 222 + .../qf_port.hpp => test/qs/qs_rx/qp_port.hpp | 78 +- {ports/sample => test/qs/qs_rx}/qs_port.hpp | 37 +- test/qs/qs_rx/test.cpp | 144 + test/qs/qs_rx/test.sln | 21 + test/qs/qs_rx/test.vcxproj | 75 + test/qs/qs_rx/test.vcxproj.filters | 22 + test/qxk/test_sched/bsp.hpp | 42 +- .../{bsp_efm32.cpp => bsp_efm32pg1b.cpp} | 8 +- test/qxk/test_sched/bsp_nucleo-c031c6.cpp | 362 + .../{bsp_h743zi.cpp => bsp_nucleo-h743zi.cpp} | 8 +- .../{bsp_l053r8.cpp => bsp_nucleo-l053r8.cpp} | 16 +- .../test_sched/{make_efm32 => efm32pg1b.mak} | 20 +- test/qxk/test_sched/nucleo-c031c6.mak | 339 + .../{make_nucleo-h743zi => nucleo-h743zi.mak} | 19 +- .../{make_nucleo-l053r8 => nucleo-l053r8.mak} | 20 +- test/qxk/test_sched/test_mpu.py | 25 +- test/qxk/test_sched/test_sched.cpp | 6 +- zephyr/CMakeLists.txt | 2 +- zephyr/qep_port.hpp | 39 - zephyr/qf_port.cpp | 175 +- zephyr/{qf_port.hpp => qp_port.hpp} | 89 +- zephyr/qs_port.hpp | 27 +- 1651 files changed, 224999 insertions(+), 112455 deletions(-) delete mode 100644 doxygen/.gitignore delete mode 100644 doxygen/Doxyfile delete mode 100644 doxygen/Doxyfile-CHM delete mode 100644 doxygen/Doxyfile-LATEX delete mode 100644 doxygen/api.dox delete mode 100644 doxygen/config.hpp delete mode 100644 doxygen/dir.dox delete mode 100644 doxygen/exa.dox delete mode 100644 doxygen/exa_apps.dox delete mode 100644 doxygen/exa_mware.dox delete mode 100644 doxygen/exa_native.dox delete mode 100644 doxygen/exa_os.dox delete mode 100644 doxygen/exa_qutest.dox delete mode 100644 doxygen/exa_rtos.dox delete mode 100644 doxygen/gen/metrics.txt delete mode 100644 doxygen/gs.dox delete mode 100644 doxygen/history.dox delete mode 100644 doxygen/images/AN-QL.png delete mode 100644 doxygen/images/AN-game.jpg delete mode 100644 doxygen/images/AN-getting_started.jpg delete mode 100644 doxygen/images/AN_DPP.jpg delete mode 100644 doxygen/images/Arduino-UNO_button.jpg delete mode 100644 doxygen/images/Arduino-UNO_button_schem.jpg delete mode 100644 doxygen/images/FA1.jpg delete mode 100644 doxygen/images/PSiCC2-3D.jpg delete mode 100644 doxygen/images/PSiCC2.jpg delete mode 100644 doxygen/images/PSiCC2_250x200.jpg delete mode 100644 doxygen/images/SM_blinky.png delete mode 100644 doxygen/images/an-qp_performance.png delete mode 100644 doxygen/images/bd_AT91SAM7S-EK.jpg delete mode 100644 doxygen/images/bd_AT91SAM7S-EK_J-Link.jpg delete mode 100644 doxygen/images/bd_Arduino-UNO.jpg delete mode 100644 doxygen/images/bd_EFM32-SLSTK3401A.jpg delete mode 100644 doxygen/images/bd_EK-LM3S6965.jpg delete mode 100644 doxygen/images/bd_EK-LM3S6965_lwip.jpg delete mode 100644 doxygen/images/bd_EK-LM3S811.jpg delete mode 100644 doxygen/images/bd_EK-LM3S811_game.jpg delete mode 100644 doxygen/images/bd_EK-TM4C123GXL.jpg delete mode 100644 doxygen/images/bd_LAUNCHXL2-TMS57012.jpg delete mode 100644 doxygen/images/bd_MSP-EXP430F5529LP.jpg delete mode 100644 doxygen/images/bd_MSP-EXP430G2.jpg delete mode 100644 doxygen/images/bd_NUCLEO-H743ZI.jpg delete mode 100644 doxygen/images/bd_NUCLEO-L053R8.jpg delete mode 100644 doxygen/images/bd_NUCLEO-L152RE.jpg delete mode 100644 doxygen/images/bd_NUCLEO-L552ZE.jpg delete mode 100644 doxygen/images/bd_STM32F4-Disco.jpg delete mode 100644 doxygen/images/bd_STM32F4-Disco_RS232.jpg delete mode 100644 doxygen/images/bd_STM32F746G-Disco.jpg delete mode 100644 doxygen/images/bd_mbed-LPC1768.jpg delete mode 100644 doxygen/images/blinky_ek-tm4c123gxl.gif delete mode 100644 doxygen/images/blinky_posix.png delete mode 100644 doxygen/images/blinky_win.png delete mode 100644 doxygen/images/blinky_win32.png delete mode 100644 doxygen/images/car_mud.jpg delete mode 100644 doxygen/images/com_msp-exp430g2.png delete mode 100644 doxygen/images/dpp_posix.png delete mode 100644 doxygen/images/dpp_win.png delete mode 100644 doxygen/images/dpp_win32.png delete mode 100644 doxygen/images/emWin_demo.jpg delete mode 100644 doxygen/images/exa_low-power_sig-zoom.png delete mode 100644 doxygen/images/exa_low-power_sm.png delete mode 100644 doxygen/images/game-video.jpg delete mode 100644 doxygen/images/game_win32.jpg delete mode 100644 doxygen/images/getting-started-with-qp.jpg delete mode 100644 doxygen/images/github-star.jpg delete mode 100644 doxygen/images/gs-video.jpg delete mode 100644 doxygen/images/header_logo_ql.png delete mode 100644 doxygen/images/logo_embos.png delete mode 100644 doxygen/images/logo_freertos.png delete mode 100644 doxygen/images/logo_pclintplus.jpg delete mode 100644 doxygen/images/logo_ql-comp.png delete mode 100644 doxygen/images/logo_ql.png delete mode 100644 doxygen/images/logo_ql_TM.jpg delete mode 100644 doxygen/images/logo_qp.jpg delete mode 100644 doxygen/images/logo_qp_200x55.png delete mode 100644 doxygen/images/logo_qp_60x55.jpg delete mode 100644 doxygen/images/logo_qt.jpg delete mode 100644 doxygen/images/logo_qwin256.jpg delete mode 100644 doxygen/images/logo_threadx.jpg delete mode 100644 doxygen/images/logo_uc-os2.jpg delete mode 100644 doxygen/images/logo_zephyr.jpg delete mode 100644 doxygen/images/mbed-LPC1768_button.jpg delete mode 100644 doxygen/images/psicc1.jpg delete mode 100644 doxygen/images/qk_preempt.gif delete mode 100644 doxygen/images/qp-bundle.png delete mode 100644 doxygen/images/qp-prio.png delete mode 100644 doxygen/images/qp-zephyr.jpg delete mode 100644 doxygen/images/qp_banner.jpg delete mode 100644 doxygen/images/qp_classes.gif delete mode 100644 doxygen/images/qp_components.jpg delete mode 100644 doxygen/images/qpcpp_gh.jpg delete mode 100644 doxygen/images/qt_game-gui.png delete mode 100644 doxygen/images/qt_pelican-gui.png delete mode 100644 doxygen/images/qtcreator_game-gui.png delete mode 100644 doxygen/images/qtdesign_game-gui.png delete mode 100644 doxygen/images/qtdesign_pelican-gui.png delete mode 100644 doxygen/images/qutest_philo.png delete mode 100644 doxygen/images/qutest_py.png delete mode 100644 doxygen/images/qutest_tcl.png delete mode 100644 doxygen/images/qutest_tm4c123_py.png delete mode 100644 doxygen/images/qutest_tm4c123_tcl.png delete mode 100644 doxygen/images/qv.gif delete mode 100644 doxygen/images/qwin_ani.gif delete mode 100644 doxygen/images/qxk_classes.gif delete mode 100644 doxygen/images/qxk_ctx-switch.gif delete mode 100644 doxygen/images/start-stop.png delete mode 100644 doxygen/images/threadx_dpp.jpg delete mode 100644 doxygen/img/AN.jpg delete mode 100644 doxygen/img/AN_Active_Objects_for_Embedded.jpg delete mode 100644 doxygen/img/AN_Coding_Standard.jpg delete mode 100644 doxygen/img/AN_Crash_Course_in_UML_State_Machines.gif delete mode 100644 doxygen/img/AN_Crash_Course_in_UML_State_Machines.jpg delete mode 100644 doxygen/img/AN_Getting_Started_with_QPC.jpg delete mode 100644 doxygen/img/AN_Getting_Started_with_QPCpp.jpg delete mode 100644 doxygen/img/AN_MISRA-QPC.jpg delete mode 100644 doxygen/img/AN_MISRA-QPCpp.jpg delete mode 100644 doxygen/img/AN_OOP_in_C.gif delete mode 100644 doxygen/img/AN_OOP_in_C.jpg delete mode 100644 doxygen/img/board.png delete mode 100644 doxygen/img/cert-pack.png delete mode 100644 doxygen/img/checkboxoff.png delete mode 100644 doxygen/img/checkboxon.png delete mode 100644 doxygen/img/extern.png delete mode 100644 doxygen/img/file.png delete mode 100644 doxygen/img/file_c.png delete mode 100644 doxygen/img/file_cpp.png delete mode 100644 doxygen/img/file_doc.png delete mode 100644 doxygen/img/file_h.png delete mode 100644 doxygen/img/file_mak.png delete mode 100644 doxygen/img/file_pdf.png delete mode 100644 doxygen/img/file_py.png delete mode 100644 doxygen/img/file_qm.png delete mode 100644 doxygen/img/file_qmp.png delete mode 100644 doxygen/img/file_tcl.png delete mode 100644 doxygen/img/file_wish.png delete mode 100644 doxygen/img/folder.png delete mode 100644 doxygen/img/forbidden.png delete mode 100644 doxygen/img/github-corner.png delete mode 100644 doxygen/img/github-qp.png delete mode 100644 doxygen/img/header_bg.png delete mode 100644 doxygen/img/help_dark.png delete mode 100644 doxygen/img/help_light.png delete mode 100644 doxygen/img/img.htm delete mode 100644 doxygen/img/logo_github.png delete mode 100644 doxygen/img/logo_ql-compact.png delete mode 100644 doxygen/img/logo_ql.gif delete mode 100644 doxygen/img/logo_ql.png delete mode 100644 doxygen/img/logo_qp.gif delete mode 100644 doxygen/img/logo_qp.jpg delete mode 100644 doxygen/img/logo_qwin.jpg delete mode 100644 doxygen/img/logo_win.png delete mode 100644 doxygen/img/minus.png delete mode 100644 doxygen/img/model.png delete mode 100644 doxygen/img/movie.png delete mode 100644 doxygen/img/qp_link.png delete mode 100644 doxygen/img/radiooff.png delete mode 100644 doxygen/img/radioon.png delete mode 100644 doxygen/img/splitbar.png delete mode 100644 doxygen/img/tree-view_linked.png delete mode 100644 doxygen/img/tree-view_unlinked.png delete mode 100644 doxygen/main.dox delete mode 100644 doxygen/make-rsm.bat delete mode 100644 doxygen/make.bat delete mode 100644 doxygen/metrics.dox delete mode 100644 doxygen/modules-unused.dox delete mode 100644 doxygen/ports.dox delete mode 100644 doxygen/ports_arm-cm.dox delete mode 100644 doxygen/ports_native.dox delete mode 100644 doxygen/ports_os.dox delete mode 100644 doxygen/ports_rtos.dox delete mode 100644 doxygen/rsm.bat delete mode 100644 doxygen/rsm_qpcpp.cfg delete mode 100644 doxygen/snippets/qep_qevt.cpp delete mode 100644 doxygen/snippets/qep_qhsm.cpp delete mode 100644 doxygen/snippets/qep_qhsm_use.cpp delete mode 100644 doxygen/snippets/qep_qinit.cpp delete mode 100644 doxygen/snippets/qep_qmsm.cpp delete mode 100644 doxygen/snippets/qep_qtran.cpp delete mode 100644 doxygen/snippets/qf_ctor.cpp delete mode 100644 doxygen/snippets/qf_main.cpp delete mode 100644 doxygen/snippets/qf_oncontextsw.cpp delete mode 100644 doxygen/snippets/qf_post.cpp delete mode 100644 doxygen/snippets/qf_postx.cpp delete mode 100644 doxygen/snippets/qf_qactive.cpp delete mode 100644 doxygen/snippets/qf_qmactive.cpp delete mode 100644 doxygen/snippets/qf_run.cpp delete mode 100644 doxygen/snippets/qf_start.cpp delete mode 100644 doxygen/snippets/qf_state.cpp delete mode 100644 doxygen/snippets/qf_subscribe.cpp delete mode 100644 doxygen/snippets/qf_tick.cpp delete mode 100644 doxygen/snippets/qf_ticker.cpp delete mode 100644 doxygen/snippets/qf_version.cpp delete mode 100644 doxygen/snippets/qf_xctor.cpp delete mode 100644 doxygen/snippets/qf_xstart.cpp delete mode 100644 doxygen/snippets/qk_lock.cpp delete mode 100644 doxygen/snippets/qk_mux.cpp delete mode 100644 doxygen/snippets/qs_filter.cpp delete mode 100644 doxygen/snippets/qs_objArrDic.cpp delete mode 100644 doxygen/snippets/qs_objDic.cpp delete mode 100644 doxygen/snippets/qs_onGetTime.cpp delete mode 100644 doxygen/snippets/qs_sigDic.cpp delete mode 100644 doxygen/snippets/qs_sigLog.txt delete mode 100644 doxygen/snippets/qs_sigLog0.txt delete mode 100644 doxygen/snippets/qs_startup.cpp delete mode 100644 doxygen/snippets/qs_user.cpp delete mode 100644 doxygen/snippets/qxk_lock.cpp delete mode 100644 doxygen/snippets/qxk_mutex.cpp delete mode 100644 doxygen/snippets/qxk_sema.cpp delete mode 100644 doxygen/snippets/qxk_start.cpp delete mode 100644 doxygen/snippets/qxk_thread.cpp delete mode 100644 examples/arm-cm/blinky_efm32-slstk3401a/README.md delete mode 100644 examples/arm-cm/blinky_efm32-slstk3401a/blinky.cpp delete mode 100644 examples/arm-cm/blinky_efm32-slstk3401a/blinky.hpp delete mode 100644 examples/arm-cm/blinky_efm32-slstk3401a/bsp.hpp delete mode 100644 examples/arm-cm/blinky_efm32-slstk3401a/main.cpp delete mode 100644 examples/arm-cm/blinky_efm32-slstk3401a/qk/armclang/README.txt delete mode 100644 examples/arm-cm/blinky_efm32-slstk3401a/qk/bsp.cpp delete mode 100644 examples/arm-cm/blinky_efm32-slstk3401a/qk/gnu/flash.bat delete mode 100644 examples/arm-cm/blinky_efm32-slstk3401a/qk/iar/README.txt delete mode 100644 examples/arm-cm/blinky_efm32-slstk3401a/qv/armclang/README.txt delete mode 100644 examples/arm-cm/blinky_efm32-slstk3401a/qv/bsp.cpp delete mode 100644 examples/arm-cm/blinky_efm32-slstk3401a/qv/gnu/README.txt delete mode 100644 examples/arm-cm/blinky_efm32-slstk3401a/qv/gnu/flash.bat delete mode 100644 examples/arm-cm/blinky_efm32-slstk3401a/qv/iar/README.txt create mode 100644 examples/arm-cm/blinky_ek-tm4c123gxl/qk/armclang/blinky-qk.sct create mode 100644 examples/arm-cm/blinky_ek-tm4c123gxl/qk/gnu/.ccsproject create mode 100644 examples/arm-cm/blinky_ek-tm4c123gxl/qk/gnu/.cproject create mode 100644 examples/arm-cm/blinky_ek-tm4c123gxl/qk/gnu/.project create mode 100644 examples/arm-cm/blinky_ek-tm4c123gxl/qv/armclang/blinky-qv.sct create mode 100644 examples/arm-cm/blinky_ek-tm4c123gxl/qv/gnu/.ccsproject create mode 100644 examples/arm-cm/blinky_ek-tm4c123gxl/qv/gnu/.cproject create mode 100644 examples/arm-cm/blinky_ek-tm4c123gxl/qv/gnu/.project create mode 100644 examples/arm-cm/blinky_nucleo-c031c6/README.md rename examples/{pic32/blinky_microstick2-pic32 => arm-cm/blinky_nucleo-c031c6}/blinky.cpp (53%) rename examples/{pic32/blinky_microstick2-pic32 => arm-cm/blinky_nucleo-c031c6}/blinky.hpp (72%) rename examples/{pic32/blinky_microstick2-pic32 => arm-cm/blinky_nucleo-c031c6}/bsp.hpp (72%) create mode 100644 examples/arm-cm/blinky_nucleo-c031c6/main.cpp create mode 100644 examples/arm-cm/blinky_nucleo-c031c6/qk/armclang/blinky-qk.sct rename examples/arm-cm/{blinky_efm32-slstk3401a => blinky_nucleo-c031c6}/qk/armclang/blinky-qk.uvoptx (82%) rename examples/arm-cm/{blinky_efm32-slstk3401a => blinky_nucleo-c031c6}/qk/armclang/blinky-qk.uvprojx (84%) create mode 100644 examples/arm-cm/blinky_nucleo-c031c6/qk/bsp.cpp create mode 100644 examples/arm-cm/blinky_nucleo-c031c6/qk/gnu/Makefile rename examples/arm-cm/{dpp_ek-tm4c123gxl/qk/gnu_with-stack-prot/dpp-qk.ld => blinky_nucleo-c031c6/qk/gnu/blinky-qk.ld} (100%) rename examples/arm-cm/{blinky_efm32-slstk3401a => blinky_nucleo-c031c6}/qk/iar/blinky-qk.ewd (89%) rename examples/arm-cm/{blinky_efm32-slstk3401a => blinky_nucleo-c031c6}/qk/iar/blinky-qk.ewp (88%) rename examples/arm-cm/{blinky_efm32-slstk3401a => blinky_nucleo-c031c6}/qk/iar/blinky-qk.eww (100%) create mode 100644 examples/arm-cm/blinky_nucleo-c031c6/qk/iar/blinky-qk.icf create mode 100644 examples/arm-cm/blinky_nucleo-c031c6/qv/armclang/blinky-qv.sct rename examples/arm-cm/{blinky_efm32-slstk3401a => blinky_nucleo-c031c6}/qv/armclang/blinky-qv.uvoptx (82%) rename examples/arm-cm/{blinky_efm32-slstk3401a => blinky_nucleo-c031c6}/qv/armclang/blinky-qv.uvprojx (84%) create mode 100644 examples/arm-cm/blinky_nucleo-c031c6/qv/bsp.cpp create mode 100644 examples/arm-cm/blinky_nucleo-c031c6/qv/gnu/Makefile create mode 100644 examples/arm-cm/blinky_nucleo-c031c6/qv/gnu/blinky-qv.ld rename examples/arm-cm/{blinky_efm32-slstk3401a => blinky_nucleo-c031c6}/qv/iar/blinky-qv.ewd (89%) rename examples/arm-cm/{blinky_efm32-slstk3401a => blinky_nucleo-c031c6}/qv/iar/blinky-qv.ewp (91%) rename examples/arm-cm/{blinky_efm32-slstk3401a => blinky_nucleo-c031c6}/qv/iar/blinky-qv.eww (100%) create mode 100644 examples/arm-cm/blinky_nucleo-c031c6/qv/iar/blinky-qv.icf create mode 100644 examples/arm-cm/dpp_efm32-slstk3401a/.dpp create mode 100644 examples/arm-cm/dpp_efm32-slstk3401a/main.cpp create mode 100644 examples/arm-cm/dpp_efm32-slstk3401a/qk/armclang/dpp-qk.sct delete mode 100644 examples/arm-cm/dpp_efm32-slstk3401a/qk/main.cpp create mode 100644 examples/arm-cm/dpp_efm32-slstk3401a/qp_config.hpp create mode 100644 examples/arm-cm/dpp_efm32-slstk3401a/qv/armclang/dpp-qv.sct delete mode 100644 examples/arm-cm/dpp_efm32-slstk3401a/qv/main.cpp create mode 100644 examples/arm-cm/dpp_efm32-slstk3401a/qxk/armclang/dpp-qxk.sct delete mode 100644 examples/arm-cm/dpp_efm32-slstk3401a/qxk/gnu/Makefile-rtti delete mode 100644 examples/arm-cm/dpp_efm32-slstk3401a/qxk/main.cpp delete mode 100644 examples/arm-cm/dpp_efm32-slstk3401a/qxk/test.cpp create mode 100644 examples/arm-cm/dpp_efm32-slstk3401a/qxk/xthread1.cpp create mode 100644 examples/arm-cm/dpp_efm32-slstk3401a/qxk/xthread2.cpp create mode 100644 examples/arm-cm/dpp_ek-tm4c123gxl/main.cpp create mode 100644 examples/arm-cm/dpp_ek-tm4c123gxl/qk/armclang/dpp-qk.sct create mode 100644 examples/arm-cm/dpp_ek-tm4c123gxl/qk/gnu/.ccsproject create mode 100644 examples/arm-cm/dpp_ek-tm4c123gxl/qk/gnu/.cproject create mode 100644 examples/arm-cm/dpp_ek-tm4c123gxl/qk/gnu/.project delete mode 100644 examples/arm-cm/dpp_ek-tm4c123gxl/qk/gnu_with-stack-prot/bsp_stack-prot.cpp delete mode 100644 examples/arm-cm/dpp_ek-tm4c123gxl/qk/main.cpp create mode 100644 examples/arm-cm/dpp_ek-tm4c123gxl/qv/armclang/dpp-qv.sct create mode 100644 examples/arm-cm/dpp_ek-tm4c123gxl/qv/gnu/.ccsproject create mode 100644 examples/arm-cm/dpp_ek-tm4c123gxl/qv/gnu/.cproject create mode 100644 examples/arm-cm/dpp_ek-tm4c123gxl/qv/gnu/.project delete mode 100644 examples/arm-cm/dpp_ek-tm4c123gxl/qv/main.cpp create mode 100644 examples/arm-cm/dpp_ek-tm4c123gxl/qxk/armclang/dpp-qxk.sct create mode 100644 examples/arm-cm/dpp_ek-tm4c123gxl/qxk/gnu/.ccsproject create mode 100644 examples/arm-cm/dpp_ek-tm4c123gxl/qxk/gnu/.cproject create mode 100644 examples/arm-cm/dpp_ek-tm4c123gxl/qxk/gnu/.project delete mode 100644 examples/arm-cm/dpp_ek-tm4c123gxl/qxk/main.cpp delete mode 100644 examples/arm-cm/dpp_ek-tm4c123gxl/qxk/test.cpp create mode 100644 examples/arm-cm/dpp_ek-tm4c123gxl/qxk/xthread1.cpp create mode 100644 examples/arm-cm/dpp_ek-tm4c123gxl/qxk/xthread2.cpp create mode 100644 examples/arm-cm/dpp_ek-tm4c123gxl_mpu/bsp.hpp create mode 100644 examples/arm-cm/dpp_ek-tm4c123gxl_mpu/dpp.hpp create mode 100644 examples/arm-cm/dpp_ek-tm4c123gxl_mpu/dpp_mpu.qm rename examples/{workstation/calc1_sub => arm-cm/dpp_ek-tm4c123gxl_mpu}/lint-plus/README.txt (100%) rename examples/{workstation/calc1_sub => arm-cm/dpp_ek-tm4c123gxl_mpu}/lint-plus/lin.bat (100%) create mode 100644 examples/arm-cm/dpp_ek-tm4c123gxl_mpu/lint-plus/options.lnt create mode 100644 examples/arm-cm/dpp_ek-tm4c123gxl_mpu/main.cpp rename examples/{qt/dpp => arm-cm/dpp_ek-tm4c123gxl_mpu}/philo.cpp (60%) create mode 100644 examples/arm-cm/dpp_ek-tm4c123gxl_mpu/qk/armclang/dpp-qk.sct create mode 100644 examples/arm-cm/dpp_ek-tm4c123gxl_mpu/qk/armclang/dpp-qk.uvoptx create mode 100644 examples/arm-cm/dpp_ek-tm4c123gxl_mpu/qk/armclang/dpp-qk.uvprojx create mode 100644 examples/arm-cm/dpp_ek-tm4c123gxl_mpu/qk/bsp.cpp rename examples/arm-cm/{dpp_ek-tm4c123gxl/qk/gnu_with-stack-prot => dpp_ek-tm4c123gxl_mpu/qk/gnu}/Makefile (96%) rename examples/arm-cm/{blinky_efm32-slstk3401a/qv/gnu/blinky-qv.ld => dpp_ek-tm4c123gxl_mpu/qk/gnu/dpp-qk.ld} (95%) rename examples/arm-cm/{dpp_ek-tm4c123gxl/qk/gnu_with-stack-prot => dpp_ek-tm4c123gxl_mpu/qk/gnu}/flash.bat (100%) create mode 100644 examples/arm-cm/dpp_ek-tm4c123gxl_mpu/qk/iar/dpp-qk.ewd create mode 100644 examples/arm-cm/dpp_ek-tm4c123gxl_mpu/qk/iar/dpp-qk.ewp rename examples/{freertos/arm-cm/start-stop_nucleo-h743zi/iar/start-stop.eww => arm-cm/dpp_ek-tm4c123gxl_mpu/qk/iar/dpp-qk.eww} (73%) rename examples/arm-cm/{blinky_efm32-slstk3401a/qk/iar/blinky-qk.icf => dpp_ek-tm4c123gxl_mpu/qk/iar/dpp-qk.icf} (94%) rename ports/arm-cm/qxk/iar/qep_port.hpp => examples/arm-cm/dpp_ek-tm4c123gxl_mpu/qp_config.hpp (51%) create mode 100644 examples/arm-cm/dpp_ek-tm4c123gxl_mpu/qv/armclang/dpp-qv.sct create mode 100644 examples/arm-cm/dpp_ek-tm4c123gxl_mpu/qv/armclang/dpp-qv.uvoptx create mode 100644 examples/arm-cm/dpp_ek-tm4c123gxl_mpu/qv/armclang/dpp-qv.uvprojx create mode 100644 examples/arm-cm/dpp_ek-tm4c123gxl_mpu/qv/bsp.cpp rename examples/arm-cm/{blinky_efm32-slstk3401a => dpp_ek-tm4c123gxl_mpu}/qv/gnu/Makefile (92%) rename examples/arm-cm/{blinky_efm32-slstk3401a/qk => dpp_ek-tm4c123gxl_mpu/qv}/gnu/README.txt (81%) rename examples/arm-cm/{blinky_efm32-slstk3401a/qk/gnu/blinky-qk.ld => dpp_ek-tm4c123gxl_mpu/qv/gnu/dpp-qv.ld} (95%) create mode 100644 examples/arm-cm/dpp_ek-tm4c123gxl_mpu/qv/gnu/flash.bat create mode 100644 examples/arm-cm/dpp_ek-tm4c123gxl_mpu/qv/iar/dpp-qv.ewd create mode 100644 examples/arm-cm/dpp_ek-tm4c123gxl_mpu/qv/iar/dpp-qv.ewp create mode 100644 examples/arm-cm/dpp_ek-tm4c123gxl_mpu/qv/iar/dpp-qv.eww rename examples/arm-cm/{blinky_efm32-slstk3401a/qv/iar/blinky-qv.icf => dpp_ek-tm4c123gxl_mpu/qv/iar/dpp-qv.icf} (94%) create mode 100644 examples/arm-cm/dpp_ek-tm4c123gxl_mpu/qview/dpp.py create mode 100644 examples/arm-cm/dpp_ek-tm4c123gxl_mpu/qview/dpp1.py rename examples/{workstation/dpp => arm-cm/dpp_ek-tm4c123gxl_mpu}/qview/img/BTN_DWN.gif (100%) rename examples/{workstation/dpp => arm-cm/dpp_ek-tm4c123gxl_mpu}/qview/img/BTN_UP.gif (100%) rename examples/{workstation/dpp => arm-cm/dpp_ek-tm4c123gxl_mpu}/qview/img/eating.gif (100%) rename examples/{workstation/dpp => arm-cm/dpp_ek-tm4c123gxl_mpu}/qview/img/hungry.gif (100%) rename examples/{workstation/dpp => arm-cm/dpp_ek-tm4c123gxl_mpu}/qview/img/thinking.gif (100%) rename examples/{workstation/dpp => arm-cm/dpp_ek-tm4c123gxl_mpu}/qview/qview-dpp.bat (100%) rename examples/{workstation/dpp => arm-cm/dpp_ek-tm4c123gxl_mpu}/qview/qview-dpp1.bat (100%) create mode 100644 examples/arm-cm/dpp_ek-tm4c123gxl_mpu/qxk/armclang/dpp-qxk.sct create mode 100644 examples/arm-cm/dpp_ek-tm4c123gxl_mpu/qxk/armclang/dpp-qxk.uvoptx rename examples/{freertos/arm-cm/start-stop_nucleo-h743zi/armclang/start-stop.uvprojx => arm-cm/dpp_ek-tm4c123gxl_mpu/qxk/armclang/dpp-qxk.uvprojx} (68%) create mode 100644 examples/arm-cm/dpp_ek-tm4c123gxl_mpu/qxk/bsp.cpp create mode 100644 examples/arm-cm/dpp_ek-tm4c123gxl_mpu/qxk/gnu/Makefile rename examples/arm-cm/{dpp_nucleo-l053r8/qk/gnu_with-stack-prot/dpp-qk.ld => dpp_ek-tm4c123gxl_mpu/qxk/gnu/dpp-qxk.ld} (93%) create mode 100644 examples/arm-cm/dpp_ek-tm4c123gxl_mpu/qxk/gnu/flash.bat create mode 100644 examples/arm-cm/dpp_ek-tm4c123gxl_mpu/qxk/iar/dpp-qxk.ewd rename examples/{freertos/arm-cm/start-stop_nucleo-h743zi/iar/start-stop.ewp => arm-cm/dpp_ek-tm4c123gxl_mpu/qxk/iar/dpp-qxk.ewp} (92%) create mode 100644 examples/arm-cm/dpp_ek-tm4c123gxl_mpu/qxk/iar/dpp-qxk.eww create mode 100644 examples/arm-cm/dpp_ek-tm4c123gxl_mpu/qxk/iar/dpp-qxk.icf create mode 100644 examples/arm-cm/dpp_ek-tm4c123gxl_mpu/qxk/xthread1.cpp create mode 100644 examples/arm-cm/dpp_ek-tm4c123gxl_mpu/qxk/xthread2.cpp create mode 100644 examples/arm-cm/dpp_ek-tm4c123gxl_mpu/table.cpp delete mode 100644 examples/arm-cm/dpp_mbed-lpc1768/README.md create mode 100644 examples/arm-cm/dpp_mbed-lpc1768/mbed-lpc1768.jpeg delete mode 100644 examples/arm-cm/dpp_mbed-lpc1768/qk/armclang/README.txt create mode 100644 examples/arm-cm/dpp_mbed-lpc1768/qk/armclang/dpp-qk.sct delete mode 100644 examples/arm-cm/dpp_mbed-lpc1768/qv/armclang/README.txt create mode 100644 examples/arm-cm/dpp_mbed-lpc1768/qv/armclang/dpp-qv.sct create mode 100644 examples/arm-cm/dpp_mbed-lpc1768/qxk/armclang/dpp-qxk.sct create mode 100644 examples/arm-cm/dpp_mbed-lpc1768/qxk/armclang/dpp-qxk.uvoptx create mode 100644 examples/arm-cm/dpp_mbed-lpc1768/qxk/armclang/dpp-qxk.uvprojx create mode 100644 examples/arm-cm/dpp_mbed-lpc1768/qxk/bsp.cpp rename examples/arm-cm/{blinky_efm32-slstk3401a/qk => dpp_mbed-lpc1768/qxk}/gnu/Makefile (90%) rename examples/{freertos/arm-cm/start-stop_nucleo-h743zi/gnu/start-stop.ld => arm-cm/dpp_mbed-lpc1768/qxk/gnu/dpp-qxk.ld} (87%) create mode 100644 examples/arm-cm/dpp_mbed-lpc1768/qxk/iar/dpp-qxk.ewd create mode 100644 examples/arm-cm/dpp_mbed-lpc1768/qxk/iar/dpp-qxk.ewp create mode 100644 examples/arm-cm/dpp_mbed-lpc1768/qxk/iar/dpp-qxk.eww create mode 100644 examples/arm-cm/dpp_mbed-lpc1768/qxk/iar/dpp-qxk.icf create mode 100644 examples/arm-cm/dpp_mbed-lpc1768/qxk/xthread1.cpp create mode 100644 examples/arm-cm/dpp_mbed-lpc1768/qxk/xthread2.cpp create mode 100644 examples/arm-cm/dpp_nucleo-c031c6/README.md rename examples/{freertos/arm-cm/start-stop_nucleo-h743zi => arm-cm/dpp_nucleo-c031c6}/bsp.hpp (61%) rename examples/{workstation/dpp => arm-cm/dpp_nucleo-c031c6}/dpp.hpp (56%) rename examples/{workstation/dpp => arm-cm/dpp_nucleo-c031c6}/dpp.qm (51%) create mode 100644 examples/arm-cm/dpp_nucleo-c031c6/main.cpp rename examples/{workstation/dpp => arm-cm/dpp_nucleo-c031c6}/philo.cpp (73%) create mode 100644 examples/arm-cm/dpp_nucleo-c031c6/qk/armclang/README.txt create mode 100644 examples/arm-cm/dpp_nucleo-c031c6/qk/armclang/dpp-qk.sct create mode 100644 examples/arm-cm/dpp_nucleo-c031c6/qk/armclang/dpp-qk.uvoptx create mode 100644 examples/arm-cm/dpp_nucleo-c031c6/qk/armclang/dpp-qk.uvprojx create mode 100644 examples/arm-cm/dpp_nucleo-c031c6/qk/bsp.cpp create mode 100644 examples/arm-cm/dpp_nucleo-c031c6/qk/gnu/Makefile rename examples/arm-cm/{dpp_efm32-slstk3401a => dpp_nucleo-c031c6}/qk/gnu/Makefile-cpp20 (88%) create mode 100644 examples/arm-cm/dpp_nucleo-c031c6/qk/gnu/README.txt create mode 100644 examples/arm-cm/dpp_nucleo-c031c6/qk/gnu/dpp-qk.ld rename examples/{freertos/arm-cm/start-stop_nucleo-h743zi/iar/start-stop.ewd => arm-cm/dpp_nucleo-c031c6/qk/iar/dpp-qk.ewd} (89%) create mode 100644 examples/arm-cm/dpp_nucleo-c031c6/qk/iar/dpp-qk.ewp create mode 100644 examples/arm-cm/dpp_nucleo-c031c6/qk/iar/dpp-qk.eww create mode 100644 examples/arm-cm/dpp_nucleo-c031c6/qk/iar/dpp-qk.icf rename include/quit.hpp => examples/arm-cm/dpp_nucleo-c031c6/qp_config.hpp (52%) create mode 100644 examples/arm-cm/dpp_nucleo-c031c6/qv/armclang/dpp-qv.sct create mode 100644 examples/arm-cm/dpp_nucleo-c031c6/qv/armclang/dpp-qv.uvoptx create mode 100644 examples/arm-cm/dpp_nucleo-c031c6/qv/armclang/dpp-qv.uvprojx create mode 100644 examples/arm-cm/dpp_nucleo-c031c6/qv/bsp.cpp create mode 100644 examples/arm-cm/dpp_nucleo-c031c6/qv/gnu/Makefile rename examples/arm-cm/{dpp_efm32-slstk3401a => dpp_nucleo-c031c6}/qv/gnu/Makefile-cpp20 (88%) create mode 100644 examples/arm-cm/dpp_nucleo-c031c6/qv/gnu/dpp-qv.ld create mode 100644 examples/arm-cm/dpp_nucleo-c031c6/qv/iar/dpp-qv.ewd create mode 100644 examples/arm-cm/dpp_nucleo-c031c6/qv/iar/dpp-qv.ewp create mode 100644 examples/arm-cm/dpp_nucleo-c031c6/qv/iar/dpp-qv.eww create mode 100644 examples/arm-cm/dpp_nucleo-c031c6/qv/iar/dpp-qv.icf create mode 100644 examples/arm-cm/dpp_nucleo-c031c6/qview/dpp.py create mode 100644 examples/arm-cm/dpp_nucleo-c031c6/qview/dpp1.py create mode 100644 examples/arm-cm/dpp_nucleo-c031c6/qview/img/BTN_DWN.gif create mode 100644 examples/arm-cm/dpp_nucleo-c031c6/qview/img/BTN_UP.gif create mode 100644 examples/arm-cm/dpp_nucleo-c031c6/qview/img/eating.gif create mode 100644 examples/arm-cm/dpp_nucleo-c031c6/qview/img/hungry.gif create mode 100644 examples/arm-cm/dpp_nucleo-c031c6/qview/img/thinking.gif create mode 100644 examples/arm-cm/dpp_nucleo-c031c6/qview/qview-dpp.bat create mode 100644 examples/arm-cm/dpp_nucleo-c031c6/qview/qview-dpp.lnk create mode 100644 examples/arm-cm/dpp_nucleo-c031c6/qview/qview-dpp1.bat create mode 100644 examples/arm-cm/dpp_nucleo-c031c6/qview/qview-dpp1.lnk create mode 100644 examples/arm-cm/dpp_nucleo-c031c6/qxk/armclang/dpp-qxk.sct create mode 100644 examples/arm-cm/dpp_nucleo-c031c6/qxk/armclang/dpp-qxk.uvoptx create mode 100644 examples/arm-cm/dpp_nucleo-c031c6/qxk/armclang/dpp-qxk.uvprojx create mode 100644 examples/arm-cm/dpp_nucleo-c031c6/qxk/bsp.cpp rename examples/arm-cm/{dpp_efm32-slstk3401a/qxk/gnu/Makefile-nassert => dpp_nucleo-c031c6/qxk/gnu/Makefile} (89%) rename examples/arm-cm/{dpp_efm32-slstk3401a => dpp_nucleo-c031c6}/qxk/gnu/Makefile-cpp20 (89%) create mode 100644 examples/arm-cm/dpp_nucleo-c031c6/qxk/gnu/README.txt create mode 100644 examples/arm-cm/dpp_nucleo-c031c6/qxk/gnu/dpp-qxk.ld create mode 100644 examples/arm-cm/dpp_nucleo-c031c6/qxk/iar/dpp-qxk.ewd create mode 100644 examples/arm-cm/dpp_nucleo-c031c6/qxk/iar/dpp-qxk.ewp create mode 100644 examples/arm-cm/dpp_nucleo-c031c6/qxk/iar/dpp-qxk.eww create mode 100644 examples/arm-cm/dpp_nucleo-c031c6/qxk/iar/dpp-qxk.icf create mode 100644 examples/arm-cm/dpp_nucleo-c031c6/qxk/xthread1.cpp create mode 100644 examples/arm-cm/dpp_nucleo-c031c6/qxk/xthread2.cpp create mode 100644 examples/arm-cm/dpp_nucleo-c031c6/stm32-nucleo-c031c6.jpg rename examples/{workstation/dpp => arm-cm/dpp_nucleo-c031c6}/table.cpp (74%) create mode 100644 examples/arm-cm/dpp_nucleo-c031c6_mpu/README.md create mode 100644 examples/arm-cm/dpp_nucleo-c031c6_mpu/bsp.hpp create mode 100644 examples/arm-cm/dpp_nucleo-c031c6_mpu/dpp.hpp create mode 100644 examples/arm-cm/dpp_nucleo-c031c6_mpu/dpp_mpu.qm create mode 100644 examples/arm-cm/dpp_nucleo-c031c6_mpu/main.cpp rename examples/{qt/dpp-gui => arm-cm/dpp_nucleo-c031c6_mpu}/philo.cpp (60%) create mode 100644 examples/arm-cm/dpp_nucleo-c031c6_mpu/qk/armclang/README.txt create mode 100644 examples/arm-cm/dpp_nucleo-c031c6_mpu/qk/armclang/dpp-qk.sct create mode 100644 examples/arm-cm/dpp_nucleo-c031c6_mpu/qk/armclang/dpp-qk.uvoptx create mode 100644 examples/arm-cm/dpp_nucleo-c031c6_mpu/qk/armclang/dpp-qk.uvprojx create mode 100644 examples/arm-cm/dpp_nucleo-c031c6_mpu/qk/bsp.cpp create mode 100644 examples/arm-cm/dpp_nucleo-c031c6_mpu/qk/gnu/Makefile create mode 100644 examples/arm-cm/dpp_nucleo-c031c6_mpu/qk/gnu/README.txt create mode 100644 examples/arm-cm/dpp_nucleo-c031c6_mpu/qk/gnu/dpp-qk.ld create mode 100644 examples/arm-cm/dpp_nucleo-c031c6_mpu/qk/iar/dpp-qk.ewd create mode 100644 examples/arm-cm/dpp_nucleo-c031c6_mpu/qk/iar/dpp-qk.ewp create mode 100644 examples/arm-cm/dpp_nucleo-c031c6_mpu/qk/iar/dpp-qk.eww create mode 100644 examples/arm-cm/dpp_nucleo-c031c6_mpu/qk/iar/dpp-qk.icf create mode 100644 examples/arm-cm/dpp_nucleo-c031c6_mpu/qp_config.hpp create mode 100644 examples/arm-cm/dpp_nucleo-c031c6_mpu/qv/armclang/dpp-qv.sct create mode 100644 examples/arm-cm/dpp_nucleo-c031c6_mpu/qv/armclang/dpp-qv.uvoptx create mode 100644 examples/arm-cm/dpp_nucleo-c031c6_mpu/qv/armclang/dpp-qv.uvprojx create mode 100644 examples/arm-cm/dpp_nucleo-c031c6_mpu/qv/bsp.cpp create mode 100644 examples/arm-cm/dpp_nucleo-c031c6_mpu/qv/gnu/Makefile create mode 100644 examples/arm-cm/dpp_nucleo-c031c6_mpu/qv/gnu/dpp-qv.ld create mode 100644 examples/arm-cm/dpp_nucleo-c031c6_mpu/qv/iar/dpp-qv.ewd create mode 100644 examples/arm-cm/dpp_nucleo-c031c6_mpu/qv/iar/dpp-qv.ewp create mode 100644 examples/arm-cm/dpp_nucleo-c031c6_mpu/qv/iar/dpp-qv.eww create mode 100644 examples/arm-cm/dpp_nucleo-c031c6_mpu/qv/iar/dpp-qv.icf create mode 100644 examples/arm-cm/dpp_nucleo-c031c6_mpu/qview/dpp.py create mode 100644 examples/arm-cm/dpp_nucleo-c031c6_mpu/qview/dpp1.py create mode 100644 examples/arm-cm/dpp_nucleo-c031c6_mpu/qview/img/BTN_DWN.gif create mode 100644 examples/arm-cm/dpp_nucleo-c031c6_mpu/qview/img/BTN_UP.gif create mode 100644 examples/arm-cm/dpp_nucleo-c031c6_mpu/qview/img/eating.gif create mode 100644 examples/arm-cm/dpp_nucleo-c031c6_mpu/qview/img/hungry.gif create mode 100644 examples/arm-cm/dpp_nucleo-c031c6_mpu/qview/img/thinking.gif create mode 100644 examples/arm-cm/dpp_nucleo-c031c6_mpu/qview/qview-dpp.bat create mode 100644 examples/arm-cm/dpp_nucleo-c031c6_mpu/qview/qview-dpp.lnk create mode 100644 examples/arm-cm/dpp_nucleo-c031c6_mpu/qview/qview-dpp1.bat create mode 100644 examples/arm-cm/dpp_nucleo-c031c6_mpu/qview/qview-dpp1.lnk create mode 100644 examples/arm-cm/dpp_nucleo-c031c6_mpu/qxk/armclang/dpp-qxk.sct rename examples/{freertos/arm-cm/start-stop_nucleo-h743zi/armclang/start-stop.uvoptx => arm-cm/dpp_nucleo-c031c6_mpu/qxk/armclang/dpp-qxk.uvoptx} (73%) create mode 100644 examples/arm-cm/dpp_nucleo-c031c6_mpu/qxk/armclang/dpp-qxk.uvprojx create mode 100644 examples/arm-cm/dpp_nucleo-c031c6_mpu/qxk/bsp.cpp create mode 100644 examples/arm-cm/dpp_nucleo-c031c6_mpu/qxk/gnu/Makefile create mode 100644 examples/arm-cm/dpp_nucleo-c031c6_mpu/qxk/gnu/README.txt create mode 100644 examples/arm-cm/dpp_nucleo-c031c6_mpu/qxk/gnu/dpp-qxk.ld create mode 100644 examples/arm-cm/dpp_nucleo-c031c6_mpu/qxk/iar/dpp-qxk.ewd create mode 100644 examples/arm-cm/dpp_nucleo-c031c6_mpu/qxk/iar/dpp-qxk.ewp create mode 100644 examples/arm-cm/dpp_nucleo-c031c6_mpu/qxk/iar/dpp-qxk.eww create mode 100644 examples/arm-cm/dpp_nucleo-c031c6_mpu/qxk/iar/dpp-qxk.icf create mode 100644 examples/arm-cm/dpp_nucleo-c031c6_mpu/qxk/xthread1.cpp create mode 100644 examples/arm-cm/dpp_nucleo-c031c6_mpu/qxk/xthread2.cpp create mode 100644 examples/arm-cm/dpp_nucleo-c031c6_mpu/stm32-nucleo-c031c6.jpg create mode 100644 examples/arm-cm/dpp_nucleo-c031c6_mpu/table.cpp create mode 100644 examples/arm-cm/dpp_nucleo-h743zi/main.cpp create mode 100644 examples/arm-cm/dpp_nucleo-h743zi/qk/armclang/dpp-qk.sct delete mode 100644 examples/arm-cm/dpp_nucleo-h743zi/qk/main.cpp create mode 100644 examples/arm-cm/dpp_nucleo-h743zi/qv/armclang/dpp-qv.sct delete mode 100644 examples/arm-cm/dpp_nucleo-h743zi/qv/gnu/README.txt delete mode 100644 examples/arm-cm/dpp_nucleo-h743zi/qv/main.cpp create mode 100644 examples/arm-cm/dpp_nucleo-h743zi/qxk/armclang/dpp-qxk.sct delete mode 100644 examples/arm-cm/dpp_nucleo-h743zi/qxk/main.cpp delete mode 100644 examples/arm-cm/dpp_nucleo-h743zi/qxk/test.cpp create mode 100644 examples/arm-cm/dpp_nucleo-h743zi/qxk/xthread1.cpp create mode 100644 examples/arm-cm/dpp_nucleo-h743zi/qxk/xthread2.cpp create mode 100644 examples/arm-cm/dpp_nucleo-l053r8/main.cpp create mode 100644 examples/arm-cm/dpp_nucleo-l053r8/qk/armclang/dpp-qk.sct delete mode 100644 examples/arm-cm/dpp_nucleo-l053r8/qk/gnu_with-stack-prot/Makefile delete mode 100644 examples/arm-cm/dpp_nucleo-l053r8/qk/gnu_with-stack-prot/bsp_stack-prot.cpp delete mode 100644 examples/arm-cm/dpp_nucleo-l053r8/qk/main.cpp create mode 100644 examples/arm-cm/dpp_nucleo-l053r8/qv/armclang/dpp-qv.sct delete mode 100644 examples/arm-cm/dpp_nucleo-l053r8/qv/main.cpp create mode 100644 examples/arm-cm/dpp_nucleo-l053r8/qxk/armclang/dpp-qxk.sct delete mode 100644 examples/arm-cm/dpp_nucleo-l053r8/qxk/main.cpp delete mode 100644 examples/arm-cm/dpp_nucleo-l053r8/qxk/test.cpp create mode 100644 examples/arm-cm/dpp_nucleo-l053r8/qxk/xthread1.cpp create mode 100644 examples/arm-cm/dpp_nucleo-l053r8/qxk/xthread2.cpp create mode 100644 examples/arm-cm/dpp_nucleo-l152re/main.cpp create mode 100644 examples/arm-cm/dpp_nucleo-l152re/qk/armclang/dpp-qk.sct delete mode 100644 examples/arm-cm/dpp_nucleo-l152re/qk/main.cpp delete mode 100644 examples/arm-cm/dpp_nucleo-l152re/qspy200823_151316.bin delete mode 100644 examples/arm-cm/dpp_nucleo-l152re/qspy200823_151436.seq delete mode 100644 examples/arm-cm/dpp_nucleo-l152re/qspy200823_203915.seq create mode 100644 examples/arm-cm/dpp_nucleo-l152re/qv/armclang/dpp-qv.sct delete mode 100644 examples/arm-cm/dpp_nucleo-l152re/qv/main.cpp create mode 100644 examples/arm-cm/dpp_nucleo-l152re/qxk/armclang/dpp-qxk.sct delete mode 100644 examples/arm-cm/dpp_nucleo-l152re/qxk/main.cpp delete mode 100644 examples/arm-cm/dpp_nucleo-l152re/qxk/test.cpp create mode 100644 examples/arm-cm/dpp_nucleo-l152re/qxk/xthread1.cpp create mode 100644 examples/arm-cm/dpp_nucleo-l152re/qxk/xthread2.cpp create mode 100644 examples/arm-cm/dpp_nucleo-l552ze/main.cpp delete mode 100644 examples/arm-cm/dpp_nucleo-l552ze/qk/main.cpp delete mode 100644 examples/arm-cm/dpp_nucleo-l552ze/qv/main.cpp delete mode 100644 examples/arm-cm/dpp_nucleo-l552ze/qxk/main.cpp delete mode 100644 examples/arm-cm/dpp_nucleo-l552ze/qxk/test.cpp create mode 100644 examples/arm-cm/dpp_nucleo-l552ze/qxk/xthread1.cpp create mode 100644 examples/arm-cm/dpp_nucleo-l552ze/qxk/xthread2.cpp create mode 100644 examples/arm-cm/dpp_nucleo-l552ze/stm32-nucleo-l552ze.jpg create mode 100644 examples/arm-cm/dpp_stm32f4-discovery/main.cpp create mode 100644 examples/arm-cm/dpp_stm32f4-discovery/qk/armclang/dpp-qk.sct delete mode 100644 examples/arm-cm/dpp_stm32f4-discovery/qk/main.cpp create mode 100644 examples/arm-cm/dpp_stm32f4-discovery/qv/armclang/dpp-qv.sct delete mode 100644 examples/arm-cm/dpp_stm32f4-discovery/qv/main.cpp create mode 100644 examples/arm-cm/dpp_stm32f4-discovery/qxk/armclang/dpp-qxk.sct delete mode 100644 examples/arm-cm/dpp_stm32f4-discovery/qxk/main.cpp delete mode 100644 examples/arm-cm/dpp_stm32f4-discovery/qxk/test.cpp create mode 100644 examples/arm-cm/dpp_stm32f4-discovery/qxk/xthread1.cpp create mode 100644 examples/arm-cm/dpp_stm32f4-discovery/qxk/xthread2.cpp delete mode 100644 examples/arm-cm/game_efm32-slstk3401a/qv/iar/README.txt create mode 100644 examples/arm-cm/low-power_ek-tm4c123gxl/qp_config.hpp create mode 100644 examples/arm-cr/dpp_launchxl2-tms57012/main.cpp delete mode 100644 examples/arm-cr/dpp_launchxl2-tms57012/qk/Readme.txt delete mode 100644 examples/arm-cr/dpp_launchxl2-tms57012/qk/main.cpp create mode 100644 examples/arm-cr/dpp_launchxl2-tms57012/qk/ti/.project delete mode 100644 examples/arm-cr/dpp_launchxl2-tms57012/qv/main.cpp create mode 100644 examples/arm-cr/dpp_launchxl2-tms57012/qv/ti/.project delete mode 100644 examples/embos/arm-cm/dpp_nucleo-h743zi/README.md rename ports/arm-cm/qk/armclang/qep_port.hpp => examples/freertos/arm-cm/dpp_ek-tm4c123gxl/qp_config.hpp (66%) delete mode 100644 examples/freertos/arm-cm/dpp_nucleo-h743zi/iar/README.txt rename ports/arm-cm/qk/iar/qep_port.hpp => examples/freertos/arm-cm/dpp_nucleo-h743zi/qp_config.hpp (66%) delete mode 100644 examples/freertos/arm-cm/start-stop_nucleo-h743zi/FreeRTOSConfig.h delete mode 100644 examples/freertos/arm-cm/start-stop_nucleo-h743zi/README.txt delete mode 100644 examples/freertos/arm-cm/start-stop_nucleo-h743zi/bsp.cpp delete mode 100644 examples/freertos/arm-cm/start-stop_nucleo-h743zi/gnu/Makefile delete mode 100644 examples/freertos/arm-cm/start-stop_nucleo-h743zi/gnu/README.txt delete mode 100644 examples/freertos/arm-cm/start-stop_nucleo-h743zi/iar/README.txt delete mode 100644 examples/freertos/arm-cm/start-stop_nucleo-h743zi/iar/start-stop.icf delete mode 100644 examples/freertos/arm-cm/start-stop_nucleo-h743zi/launcher.cpp delete mode 100644 examples/freertos/arm-cm/start-stop_nucleo-h743zi/main.cpp delete mode 100644 examples/freertos/arm-cm/start-stop_nucleo-h743zi/start-stop.qm delete mode 100644 examples/freertos/arm-cm/start-stop_nucleo-h743zi/stm32h7xx_hal_conf.h delete mode 100644 examples/freertos/arm-cm/start-stop_nucleo-h743zi/stm32h7xx_hal_msp.c delete mode 100644 examples/freertos/arm-cm/start-stop_nucleo-h743zi/worker.cpp delete mode 100644 examples/freertos/arm-cm/start-stop_nucleo-h743zi/worker.hpp create mode 100644 examples/msp430/blinky_msp-exp430f5529lp/qp_config.hpp create mode 100644 examples/msp430/dpp_msp-exp430f5529lp/qp_config.hpp rename examples/performance/dpp_efm32-slstk3401a/{ucos-ii => uc-os2}/app_cfg.h (100%) rename examples/performance/dpp_efm32-slstk3401a/{ucos-ii => uc-os2}/bsp.cpp (94%) rename examples/performance/dpp_efm32-slstk3401a/{ucos-ii => uc-os2}/iar/dpp-ucos2.ewd (90%) rename examples/performance/dpp_efm32-slstk3401a/{ucos-ii => uc-os2}/iar/dpp-ucos2.ewp (92%) rename examples/performance/dpp_efm32-slstk3401a/{ucos-ii => uc-os2}/iar/dpp-ucos2.eww (100%) rename examples/performance/dpp_efm32-slstk3401a/{ucos-ii => uc-os2}/iar/dpp-ucos2.icf (100%) rename examples/performance/dpp_efm32-slstk3401a/{ucos-ii => uc-os2}/main.cpp (88%) rename examples/performance/dpp_efm32-slstk3401a/{ucos-ii => uc-os2}/os_cfg.h (100%) rename examples/performance/dpp_efm32-slstk3401a/{ucos-ii => uc-os2}/test.cpp (100%) rename examples/performance/dpp_efm32-slstk3401a/{ucos-ii => uc-os2}/test.h (100%) delete mode 100644 examples/pic32/blinky_microstick2-pic32/main.cpp delete mode 100644 examples/pic32/blinky_microstick2-pic32/qk/xc32/Makefile delete mode 100644 examples/pic32/blinky_microstick2-pic32/qk/xc32/bsp.cpp delete mode 100644 examples/pic32/blinky_microstick2-pic32/qk/xc32/nbproject/Makefile-dbg.mk delete mode 100644 examples/pic32/blinky_microstick2-pic32/qk/xc32/nbproject/Makefile-genesis.properties delete mode 100644 examples/pic32/blinky_microstick2-pic32/qk/xc32/nbproject/Makefile-impl.mk delete mode 100644 examples/pic32/blinky_microstick2-pic32/qk/xc32/nbproject/Makefile-local-dbg.mk delete mode 100644 examples/pic32/blinky_microstick2-pic32/qk/xc32/nbproject/Makefile-local-rel.mk delete mode 100644 examples/pic32/blinky_microstick2-pic32/qk/xc32/nbproject/Makefile-local-spy.mk delete mode 100644 examples/pic32/blinky_microstick2-pic32/qk/xc32/nbproject/Makefile-rel.mk delete mode 100644 examples/pic32/blinky_microstick2-pic32/qk/xc32/nbproject/Makefile-spy.mk delete mode 100644 examples/pic32/blinky_microstick2-pic32/qk/xc32/nbproject/Makefile-variables.mk delete mode 100644 examples/pic32/blinky_microstick2-pic32/qk/xc32/nbproject/Package-dbg.bash delete mode 100644 examples/pic32/blinky_microstick2-pic32/qk/xc32/nbproject/Package-rel.bash delete mode 100644 examples/pic32/blinky_microstick2-pic32/qk/xc32/nbproject/Package-spy.bash delete mode 100644 examples/pic32/blinky_microstick2-pic32/qk/xc32/nbproject/configurations.xml delete mode 100644 examples/pic32/blinky_microstick2-pic32/qk/xc32/nbproject/private/configurations.xml delete mode 100644 examples/pic32/blinky_microstick2-pic32/qk/xc32/nbproject/private/private.properties delete mode 100644 examples/pic32/blinky_microstick2-pic32/qk/xc32/nbproject/private/private.xml delete mode 100644 examples/pic32/blinky_microstick2-pic32/qk/xc32/nbproject/project.properties delete mode 100644 examples/pic32/blinky_microstick2-pic32/qk/xc32/nbproject/project.xml delete mode 100644 examples/pic32/blinky_microstick2-pic32/qv/xc32/Makefile delete mode 100644 examples/pic32/blinky_microstick2-pic32/qv/xc32/bsp.cpp delete mode 100644 examples/pic32/blinky_microstick2-pic32/qv/xc32/nbproject/Makefile-dbg.mk delete mode 100644 examples/pic32/blinky_microstick2-pic32/qv/xc32/nbproject/Makefile-genesis.properties delete mode 100644 examples/pic32/blinky_microstick2-pic32/qv/xc32/nbproject/Makefile-impl.mk delete mode 100644 examples/pic32/blinky_microstick2-pic32/qv/xc32/nbproject/Makefile-local-dbg.mk delete mode 100644 examples/pic32/blinky_microstick2-pic32/qv/xc32/nbproject/Makefile-local-rel.mk delete mode 100644 examples/pic32/blinky_microstick2-pic32/qv/xc32/nbproject/Makefile-local-spy.mk delete mode 100644 examples/pic32/blinky_microstick2-pic32/qv/xc32/nbproject/Makefile-rel.mk delete mode 100644 examples/pic32/blinky_microstick2-pic32/qv/xc32/nbproject/Makefile-spy.mk delete mode 100644 examples/pic32/blinky_microstick2-pic32/qv/xc32/nbproject/Makefile-variables.mk delete mode 100644 examples/pic32/blinky_microstick2-pic32/qv/xc32/nbproject/Package-dbg.bash delete mode 100644 examples/pic32/blinky_microstick2-pic32/qv/xc32/nbproject/Package-rel.bash delete mode 100644 examples/pic32/blinky_microstick2-pic32/qv/xc32/nbproject/Package-spy.bash delete mode 100644 examples/pic32/blinky_microstick2-pic32/qv/xc32/nbproject/configurations.xml delete mode 100644 examples/pic32/blinky_microstick2-pic32/qv/xc32/nbproject/private/configurations.xml delete mode 100644 examples/pic32/blinky_microstick2-pic32/qv/xc32/nbproject/private/private.properties delete mode 100644 examples/pic32/blinky_microstick2-pic32/qv/xc32/nbproject/private/private.xml delete mode 100644 examples/pic32/blinky_microstick2-pic32/qv/xc32/nbproject/project.properties delete mode 100644 examples/pic32/blinky_microstick2-pic32/qv/xc32/nbproject/project.xml create mode 100644 examples/posix-win32/README.md rename examples/{workstation => posix-win32}/blinky/Makefile (93%) create mode 100644 examples/posix-win32/blinky/README.md rename examples/{workstation => posix-win32}/blinky/blinky.cpp (61%) rename examples/{workstation => posix-win32}/blinky/blinky.qm (87%) create mode 100644 examples/posix-win32/blinky/blinky_win.png rename examples/{workstation => posix-win32}/calc/Makefile (99%) rename examples/{workstation/calc2 => posix-win32/calc}/bsp.cpp (98%) rename examples/{workstation/calc1 => posix-win32/calc}/bsp.hpp (100%) rename examples/{workstation => posix-win32}/calc/calc.cpp (80%) rename examples/{workstation/calc1/calc1.hpp => posix-win32/calc/calc.hpp} (79%) rename examples/{workstation/calc1/calc1.qm => posix-win32/calc/calc.qm} (97%) rename examples/{workstation/calc2 => posix-win32/calc}/main.cpp (75%) rename examples/{workstation => posix-win32}/calc2/Makefile (99%) rename examples/{workstation/calc1 => posix-win32/calc2}/bsp.cpp (98%) rename examples/{workstation/calc1_sub => posix-win32/calc2}/bsp.hpp (100%) rename examples/{workstation => posix-win32}/calc2/calc2.cpp (99%) rename examples/{workstation => posix-win32}/calc2/calc2.hpp (90%) rename examples/{workstation => posix-win32}/calc2/calc2.qm (97%) rename examples/{workstation/calc1 => posix-win32/calc2}/main.cpp (75%) rename examples/{workstation/dpp => posix-win32/calc_sub}/Makefile (98%) rename examples/{workstation/calc1_sub => posix-win32/calc_sub}/bsp.cpp (98%) rename examples/{workstation/calc2 => posix-win32/calc_sub}/bsp.hpp (97%) rename examples/{workstation/calc1_sub/calc1_sub.cpp => posix-win32/calc_sub/calc_sub.cpp} (98%) rename examples/{workstation/calc1_sub/calc1_sub.hpp => posix-win32/calc_sub/calc_sub.hpp} (77%) rename examples/{workstation/calc1_sub/calc1_sub.qm => posix-win32/calc_sub/calc_sub.qm} (96%) create mode 100644 examples/posix-win32/calc_sub/lint-plus/README.txt create mode 100644 examples/posix-win32/calc_sub/lint-plus/lin.bat rename examples/{workstation/calc1_sub => posix-win32/calc_sub}/lint-plus/options.lnt (100%) rename examples/{workstation/calc1_sub => posix-win32/calc_sub}/main.cpp (75%) rename examples/{workstation => posix-win32}/comp/Makefile (99%) rename examples/{workstation => posix-win32}/comp/alarm.cpp (96%) rename examples/{workstation => posix-win32}/comp/alarm.hpp (96%) rename examples/{workstation => posix-win32}/comp/bsp.cpp (98%) rename examples/{workstation => posix-win32}/comp/bsp.hpp (100%) rename examples/{workstation => posix-win32}/comp/clock.cpp (94%) rename examples/{workstation => posix-win32}/comp/clock.hpp (91%) rename examples/{workstation => posix-win32}/comp/comp.qm (94%) rename examples/{workstation => posix-win32}/comp/main.cpp (95%) rename examples/{workstation => posix-win32}/defer/Makefile (99%) rename examples/{workstation => posix-win32}/defer/bsp.cpp (92%) rename examples/{workstation => posix-win32}/defer/bsp.hpp (100%) rename examples/{workstation => posix-win32}/defer/defer.cpp (97%) rename examples/{workstation => posix-win32}/defer/defer.qm (98%) rename examples/{workstation => posix-win32}/defer/qspy200823_204112.seq (100%) rename examples/{workstation/dpp-comp => posix-win32/dpp}/Makefile (93%) rename examples/{workstation => posix-win32}/dpp/Makefile_t (92%) create mode 100644 examples/posix-win32/dpp/bsp.cpp rename examples/{workstation/calc => posix-win32/dpp}/bsp.hpp (61%) create mode 100644 examples/posix-win32/dpp/dpp.hpp rename examples/{zephyr => posix-win32}/dpp/dpp.qm (51%) rename examples/{workstation => posix-win32}/dpp/dpp.sln (100%) rename examples/{workstation => posix-win32}/dpp/dpp.vcxproj (95%) rename examples/{workstation => posix-win32}/dpp/dpp.vcxproj.filters (87%) create mode 100644 examples/posix-win32/dpp/main.cpp create mode 100644 examples/posix-win32/dpp/philo.cpp rename ports/arm-cm/qxk/armclang/qep_port.hpp => examples/posix-win32/dpp/qp_config.hpp (55%) rename examples/{workstation => posix-win32}/dpp/qview/dpp.py (100%) rename examples/{workstation => posix-win32}/dpp/qview/dpp1.py (100%) create mode 100644 examples/posix-win32/dpp/qview/img/BTN_DWN.gif create mode 100644 examples/posix-win32/dpp/qview/img/BTN_UP.gif create mode 100644 examples/posix-win32/dpp/qview/img/eating.gif create mode 100644 examples/posix-win32/dpp/qview/img/hungry.gif create mode 100644 examples/posix-win32/dpp/qview/img/thinking.gif create mode 100644 examples/posix-win32/dpp/qview/qview-dpp.bat create mode 100644 examples/posix-win32/dpp/qview/qview-dpp1.bat rename examples/{qt => posix-win32}/dpp/table.cpp (62%) rename examples/{workstation/calc1_sub => posix-win32/dpp_comp}/Makefile (92%) create mode 100644 examples/posix-win32/dpp_comp/bsp.cpp create mode 100644 examples/posix-win32/dpp_comp/bsp.hpp rename examples/{workstation/dpp-comp => posix-win32/dpp_comp}/dpp-comp.qm (74%) rename examples/{workstation/dpp-comp => posix-win32/dpp_comp}/dpp.hpp (57%) create mode 100644 examples/posix-win32/dpp_comp/main.cpp rename examples/{workstation/dpp-comp => posix-win32/dpp_comp}/philo.cpp (83%) rename ports/arm-cm/qxk/gnu/qep_port.hpp => examples/posix-win32/dpp_comp/qp_config.hpp (55%) rename examples/{workstation/dpp-comp => posix-win32/dpp_comp}/table.cpp (81%) rename examples/{workstation => posix-win32}/history_qhsm/Makefile (99%) rename examples/{workstation => posix-win32}/history_qhsm/history.cpp (97%) rename examples/{workstation => posix-win32}/history_qhsm/history.hpp (95%) rename examples/{workstation => posix-win32}/history_qhsm/history.qm (99%) rename examples/{workstation/history_qmsm => posix-win32/history_qhsm}/main.cpp (51%) rename examples/{workstation => posix-win32}/history_qmsm/Makefile (99%) rename examples/{workstation => posix-win32}/history_qmsm/history.cpp (100%) rename examples/{workstation => posix-win32}/history_qmsm/history.hpp (100%) rename examples/{workstation => posix-win32}/history_qmsm/history.qm (100%) rename examples/{workstation/history_qhsm => posix-win32/history_qmsm}/main.cpp (51%) rename examples/{workstation => posix-win32}/qhsmtst/Makefile (77%) rename examples/{workstation => posix-win32}/qhsmtst/log.txt (97%) create mode 100644 examples/posix-win32/qhsmtst/main.cpp rename examples/{workstation => posix-win32}/qhsmtst/qhsmtst.cpp (68%) rename examples/{workstation => posix-win32}/qhsmtst/qhsmtst.hpp (63%) rename examples/{workstation => posix-win32}/qhsmtst/qhsmtst.qm (67%) rename examples/{workstation => posix-win32}/qmsmtst/Makefile (77%) rename examples/{workstation => posix-win32}/qmsmtst/log.txt (97%) create mode 100644 examples/posix-win32/qmsmtst/main.cpp rename examples/{workstation => posix-win32}/qmsmtst/qmsmtst.cpp (94%) rename examples/{workstation => posix-win32}/qmsmtst/qmsmtst.hpp (63%) rename examples/{qutest => posix-win32}/qmsmtst/qmsmtst.qm (76%) rename examples/{workstation => posix-win32}/reminder/Makefile (99%) rename examples/{workstation => posix-win32}/reminder/bsp.cpp (97%) rename examples/{workstation => posix-win32}/reminder/bsp.hpp (100%) rename examples/{workstation => posix-win32}/reminder/reminder.cpp (98%) rename examples/{workstation => posix-win32}/reminder2/Makefile (99%) rename examples/{workstation => posix-win32}/reminder2/bsp.cpp (97%) rename examples/{workstation => posix-win32}/reminder2/bsp.hpp (100%) rename examples/{workstation => posix-win32}/reminder2/reminder2.cpp (96%) rename examples/{workstation => posix-win32}/reminder2/reminder2.qm (97%) delete mode 100644 examples/qt/dpp-gui/bsp.cpp delete mode 100644 examples/qt/dpp-gui/bsp.hpp delete mode 100644 examples/qt/dpp-gui/dpp-gui.pro delete mode 100644 examples/qt/dpp-gui/dpp.hpp delete mode 100644 examples/qt/dpp-gui/dpp.qm delete mode 100644 examples/qt/dpp-gui/gui.cpp delete mode 100644 examples/qt/dpp-gui/gui.hpp delete mode 100644 examples/qt/dpp-gui/gui.qrc delete mode 100644 examples/qt/dpp-gui/gui.rc delete mode 100644 examples/qt/dpp-gui/gui.ui delete mode 100644 examples/qt/dpp-gui/main.cpp delete mode 100644 examples/qt/dpp-gui/res/eating.png delete mode 100644 examples/qt/dpp-gui/res/hungry.png delete mode 100644 examples/qt/dpp-gui/res/qp.ico delete mode 100644 examples/qt/dpp-gui/res/thinking.png delete mode 100644 examples/qt/dpp/bsp.cpp delete mode 100644 examples/qt/dpp/bsp.hpp delete mode 100644 examples/qt/dpp/dpp.hpp delete mode 100644 examples/qt/dpp/dpp.pro delete mode 100644 examples/qt/dpp/dpp.qm delete mode 100644 examples/qt/dpp/dpp_spy.pro delete mode 100644 examples/qt/dpp/dppapp.hpp delete mode 100644 examples/qt/dpp/main.cpp delete mode 100644 examples/qt/game-gui/bsp.cpp delete mode 100644 examples/qt/game-gui/bsp.hpp delete mode 100644 examples/qt/game-gui/game-gui.pro delete mode 100644 examples/qt/game-gui/game.qm delete mode 100644 examples/qt/game-gui/gui.cpp delete mode 100644 examples/qt/game-gui/gui.hpp delete mode 100644 examples/qt/game-gui/gui.qrc delete mode 100644 examples/qt/game-gui/gui.rc delete mode 100644 examples/qt/game-gui/gui.ui delete mode 100644 examples/qt/game-gui/main.cpp delete mode 100644 examples/qt/game-gui/res/EK-BTN_DWN.png delete mode 100644 examples/qt/game-gui/res/EK-BTN_UP.png delete mode 100644 examples/qt/game-gui/res/EK-LM3S811.png delete mode 100644 examples/qt/game-gui/res/LED_OFF.png delete mode 100644 examples/qt/game-gui/res/LED_ON.png delete mode 100644 examples/qt/game-gui/res/qp.ico delete mode 100644 examples/qt/game-gui/tunnel.cpp delete mode 100644 examples/qt/pelican-gui/bsp.cpp delete mode 100644 examples/qt/pelican-gui/bsp.hpp delete mode 100644 examples/qt/pelican-gui/gui.cpp delete mode 100644 examples/qt/pelican-gui/gui.hpp delete mode 100644 examples/qt/pelican-gui/gui.qrc delete mode 100644 examples/qt/pelican-gui/gui.rc delete mode 100644 examples/qt/pelican-gui/gui.ui delete mode 100644 examples/qt/pelican-gui/main.cpp delete mode 100644 examples/qt/pelican-gui/pelican-gui.pro delete mode 100644 examples/qt/pelican-gui/pelican.cpp delete mode 100644 examples/qt/pelican-gui/pelican.hpp delete mode 100644 examples/qt/pelican-gui/pelican.qm delete mode 100644 examples/qt/pelican-gui/res/BTN_DWN.png delete mode 100644 examples/qt/pelican-gui/res/BTN_UP.png delete mode 100644 examples/qt/pelican-gui/res/cars_blank.png delete mode 100644 examples/qt/pelican-gui/res/cars_grn.png delete mode 100644 examples/qt/pelican-gui/res/cars_red.png delete mode 100644 examples/qt/pelican-gui/res/cars_ylw.png delete mode 100644 examples/qt/pelican-gui/res/crossing.png delete mode 100644 examples/qt/pelican-gui/res/peds_blank.png delete mode 100644 examples/qt/pelican-gui/res/peds_dont.png delete mode 100644 examples/qt/pelican-gui/res/peds_walk.png delete mode 100644 examples/qt/pelican-gui/res/qp.ico create mode 100644 examples/qutest/blinky/src/.blinky rename examples/qutest/blinky/{ => src}/blinky.qm (96%) rename examples/qutest/dpp-comp/{ => src}/dpp-comp.qm (74%) delete mode 100644 examples/qutest/dpp-comp/test_dpp/main.cpp delete mode 100644 examples/qutest/dpp/dpp.qm create mode 100644 examples/qutest/dpp/src/.dpp create mode 100644 examples/qutest/dpp/src/dpp.qm delete mode 100644 examples/qutest/dpp/test_dpp/main.cpp rename examples/qutest/qhsmtst/{ => src}/qhsmtst.qm (75%) rename examples/{workstation/qmsmtst => qutest/qmsmtst/src}/qmsmtst.qm (83%) create mode 100644 examples/qwin-gui/README.md rename examples/{arm-cm/dpp_efm32-slstk3401a/win32-gui => qwin-gui/dpp-gui}/Res/BTN_DWN.bmp (100%) rename examples/{arm-cm/dpp_efm32-slstk3401a/win32-gui => qwin-gui/dpp-gui}/Res/BTN_UP.bmp (100%) rename examples/{arm-cm/dpp_efm32-slstk3401a/win32-gui => qwin-gui/dpp-gui}/Res/eating.bmp (100%) rename examples/{arm-cm/dpp_efm32-slstk3401a/win32-gui => qwin-gui/dpp-gui}/Res/hungry.bmp (100%) rename examples/{arm-cm/dpp_efm32-slstk3401a/win32-gui => qwin-gui/dpp-gui}/Res/qp.ico (100%) rename examples/{arm-cm/dpp_efm32-slstk3401a/win32-gui => qwin-gui/dpp-gui}/Res/thinking.bmp (100%) rename examples/{arm-cm/dpp_efm32-slstk3401a/win32-gui => qwin-gui/dpp-gui}/Resource.rc (100%) rename examples/{arm-cm/dpp_efm32-slstk3401a/win32-gui => qwin-gui/dpp-gui}/bsp.cpp (79%) create mode 100644 examples/qwin-gui/dpp-gui/bsp.hpp rename examples/{arm-cm/dpp_efm32-slstk3401a/win32-gui => qwin-gui/dpp-gui}/dpp-gui.sln (100%) rename examples/{arm-cm/dpp_efm32-slstk3401a/win32-gui => qwin-gui/dpp-gui}/dpp-gui.vcxproj (79%) rename examples/{arm-cm/dpp_efm32-slstk3401a/win32-gui => qwin-gui/dpp-gui}/dpp-gui.vcxproj.filters (54%) create mode 100644 examples/qwin-gui/dpp-gui/dpp.hpp create mode 100644 examples/qwin-gui/dpp-gui/dpp.qm rename examples/{arm-cm/dpp_efm32-slstk3401a/win32-gui => qwin-gui/dpp-gui}/main.cpp (80%) create mode 100644 examples/qwin-gui/dpp-gui/philo.cpp rename examples/{arm-cm/dpp_efm32-slstk3401a/win32-gui => qwin-gui/dpp-gui}/resource.h (100%) rename examples/{qt => qwin-gui}/dpp-gui/table.cpp (61%) rename examples/{arm-cm/game_efm32-slstk3401a/win32-gui => qwin-gui/game-gui}/Res/BOARD.bmp (100%) rename examples/{arm-cm/game_efm32-slstk3401a/win32-gui => qwin-gui/game-gui}/Res/BTN_DWN.bmp (100%) rename examples/{arm-cm/game_efm32-slstk3401a/win32-gui => qwin-gui/game-gui}/Res/BTN_UP.bmp (100%) rename examples/{arm-cm/game_efm32-slstk3401a/win32-gui => qwin-gui/game-gui}/Res/LCD.bmp (100%) rename examples/{arm-cm/game_efm32-slstk3401a/win32-gui => qwin-gui/game-gui}/Res/LED_OFF.bmp (100%) rename examples/{arm-cm/game_efm32-slstk3401a/win32-gui => qwin-gui/game-gui}/Res/LED_ON.bmp (100%) rename examples/{arm-cm/game_efm32-slstk3401a/win32-gui => qwin-gui/game-gui}/Res/qp.ico (100%) rename examples/{arm-cm/game_efm32-slstk3401a/win32-gui => qwin-gui/game-gui}/Res/seg.bmp (100%) rename examples/{arm-cm/game_efm32-slstk3401a/win32-gui => qwin-gui/game-gui}/Res/seg0.bmp (100%) rename examples/{arm-cm/game_efm32-slstk3401a/win32-gui => qwin-gui/game-gui}/Res/seg1.bmp (100%) rename examples/{arm-cm/game_efm32-slstk3401a/win32-gui => qwin-gui/game-gui}/Res/seg2.bmp (100%) rename examples/{arm-cm/game_efm32-slstk3401a/win32-gui => qwin-gui/game-gui}/Res/seg3.bmp (100%) rename examples/{arm-cm/game_efm32-slstk3401a/win32-gui => qwin-gui/game-gui}/Res/seg4.bmp (100%) rename examples/{arm-cm/game_efm32-slstk3401a/win32-gui => qwin-gui/game-gui}/Res/seg5.bmp (100%) rename examples/{arm-cm/game_efm32-slstk3401a/win32-gui => qwin-gui/game-gui}/Res/seg6.bmp (100%) rename examples/{arm-cm/game_efm32-slstk3401a/win32-gui => qwin-gui/game-gui}/Res/seg7.bmp (100%) rename examples/{arm-cm/game_efm32-slstk3401a/win32-gui => qwin-gui/game-gui}/Res/seg8.bmp (100%) rename examples/{arm-cm/game_efm32-slstk3401a/win32-gui => qwin-gui/game-gui}/Res/seg9.bmp (100%) rename examples/{arm-cm/game_efm32-slstk3401a/win32-gui => qwin-gui/game-gui}/Resource.rc (100%) rename examples/{arm-cm/game_efm32-slstk3401a/win32-gui => qwin-gui/game-gui}/bsp.cpp (89%) rename examples/{workstation/dpp-comp/main.cpp => qwin-gui/game-gui/bsp.hpp} (53%) rename examples/{arm-cm/game_efm32-slstk3401a/win32-gui => qwin-gui/game-gui}/game-gui.sln (100%) rename examples/{arm-cm/game_efm32-slstk3401a/win32-gui => qwin-gui/game-gui}/game-gui.vcxproj (86%) rename examples/{arm-cm/game_efm32-slstk3401a/win32-gui => qwin-gui/game-gui}/game-gui.vcxproj.filters (51%) rename examples/{qt => qwin-gui}/game-gui/game.hpp (52%) create mode 100644 examples/qwin-gui/game-gui/game.qm rename examples/{arm-cm/game_efm32-slstk3401a/win32-gui => qwin-gui/game-gui}/main.cpp (86%) rename examples/{arm-cm/game_efm32-slstk3401a/win32-gui => qwin-gui/game-gui}/make.bat (100%) rename examples/{qt => qwin-gui}/game-gui/mine1.cpp (79%) rename examples/{qt => qwin-gui}/game-gui/mine2.cpp (78%) rename examples/{qt => qwin-gui}/game-gui/missile.cpp (78%) rename examples/{arm-cm/game_efm32-slstk3401a/win32-gui => qwin-gui/game-gui}/resource.h (100%) rename examples/{qt => qwin-gui}/game-gui/ship.cpp (71%) create mode 100644 examples/qwin-gui/game-gui/tunnel.cpp delete mode 100644 examples/workstation/README.txt delete mode 100644 examples/workstation/blinky/README.md delete mode 100644 examples/workstation/blinky/blinky_win.png delete mode 100644 examples/workstation/calc/bsp.cpp delete mode 100644 examples/workstation/calc/calc.hpp delete mode 100644 examples/workstation/calc/calc.qm delete mode 100644 examples/workstation/calc/main.cpp delete mode 100644 examples/workstation/calc1/Makefile delete mode 100644 examples/workstation/calc1/calc1.cpp delete mode 100644 examples/workstation/defer/qspy200822_125142.bin delete mode 100644 examples/workstation/dpp-comp/bsp.cpp delete mode 100644 examples/workstation/dpp-comp/bsp.hpp delete mode 100644 examples/workstation/dpp-gui/README.txt delete mode 100644 examples/workstation/dpp/bsp.cpp delete mode 100644 examples/workstation/dpp/bsp.hpp delete mode 100644 examples/workstation/dpp/main.cpp delete mode 100644 examples/workstation/game-gui/README.txt delete mode 100644 examples/workstation/qhsmtst/main.cpp delete mode 100644 examples/workstation/qmsmtst/main.cpp rename ports/arm-cm/qv/armclang/qep_port.hpp => examples/zephyr/blinky/src/qp_config.hpp (67%) create mode 100644 examples/zephyr/dpp/src/dpp.qm rename ports/arm-cm/qk/gnu/qep_port.hpp => examples/zephyr/dpp/src/qp_config.hpp (67%) delete mode 100644 include/qassert.h delete mode 100644 include/qep.hpp delete mode 100644 include/qf.hpp delete mode 100644 include/qf_pkg.hpp create mode 100644 include/qp.hpp create mode 100644 include/qp_pkg.hpp create mode 100644 include/qsafe.h delete mode 100644 include/qstamp.cpp delete mode 100644 ports/arm-cm/qk/armclang/qf_port.hpp delete mode 100644 ports/arm-cm/qk/armclang/qk_port.hpp create mode 100644 ports/arm-cm/qk/armclang/qp_port.hpp delete mode 100644 ports/arm-cm/qk/gnu/qf_port.hpp delete mode 100644 ports/arm-cm/qk/gnu/qk_port.hpp create mode 100644 ports/arm-cm/qk/gnu/qp_port.hpp delete mode 100644 ports/arm-cm/qk/iar/qf_port.hpp delete mode 100644 ports/arm-cm/qk/iar/qk_port.hpp create mode 100644 ports/arm-cm/qk/iar/qp_port.hpp delete mode 100644 ports/arm-cm/qutest/qep_port.hpp delete mode 100644 ports/arm-cm/qutest/qf_port.hpp create mode 100644 ports/arm-cm/qutest/qp_port.hpp delete mode 100644 ports/arm-cm/qv/armclang/qf_port.hpp create mode 100644 ports/arm-cm/qv/armclang/qp_port.hpp delete mode 100644 ports/arm-cm/qv/armclang/qv_port.hpp delete mode 100644 ports/arm-cm/qv/gnu/qep_port.hpp delete mode 100644 ports/arm-cm/qv/gnu/qf_port.hpp create mode 100644 ports/arm-cm/qv/gnu/qp_port.hpp delete mode 100644 ports/arm-cm/qv/gnu/qv_port.hpp delete mode 100644 ports/arm-cm/qv/iar/qep_port.hpp delete mode 100644 ports/arm-cm/qv/iar/qf_port.hpp create mode 100644 ports/arm-cm/qv/iar/qp_port.hpp delete mode 100644 ports/arm-cm/qv/iar/qv_port.hpp delete mode 100644 ports/arm-cm/qxk/armclang/qf_port.hpp create mode 100644 ports/arm-cm/qxk/armclang/qp_port.hpp delete mode 100644 ports/arm-cm/qxk/armclang/qxk_port.hpp delete mode 100644 ports/arm-cm/qxk/gnu/qf_port.hpp create mode 100644 ports/arm-cm/qxk/gnu/qp_port.hpp delete mode 100644 ports/arm-cm/qxk/gnu/qxk_port.hpp delete mode 100644 ports/arm-cm/qxk/iar/qf_port.hpp create mode 100644 ports/arm-cm/qxk/iar/qp_port.hpp delete mode 100644 ports/arm-cm/qxk/iar/qxk_port.hpp delete mode 100644 ports/arm-cr/qk/gnu/qep_port.hpp delete mode 100644 ports/arm-cr/qk/gnu/qf_port.hpp delete mode 100644 ports/arm-cr/qk/gnu/qk_port.hpp create mode 100644 ports/arm-cr/qk/gnu/qp_port.hpp delete mode 100644 ports/arm-cr/qk/iar/qep_port.hpp delete mode 100644 ports/arm-cr/qk/iar/qf_port.hpp delete mode 100644 ports/arm-cr/qk/iar/qk_port.hpp create mode 100644 ports/arm-cr/qk/iar/qp_port.hpp delete mode 100644 ports/arm-cr/qk/ti/qep_port.hpp delete mode 100644 ports/arm-cr/qk/ti/qf_port.hpp delete mode 100644 ports/arm-cr/qk/ti/qk_port.hpp create mode 100644 ports/arm-cr/qk/ti/qp_port.hpp delete mode 100644 ports/arm-cr/qv/gnu/qep_port.hpp rename ports/arm-cr/qv/gnu/{qf_port.hpp => qp_port.hpp} (61%) delete mode 100644 ports/arm-cr/qv/gnu/qv_port.hpp delete mode 100644 ports/arm-cr/qv/iar/qep_port.hpp rename ports/arm-cr/qv/iar/{qf_port.hpp => qp_port.hpp} (50%) delete mode 100644 ports/arm-cr/qv/iar/qv_port.hpp delete mode 100644 ports/arm-cr/qv/ti/qep_port.hpp rename ports/arm-cr/qv/ti/{qf_port.hpp => qp_port.hpp} (56%) delete mode 100644 ports/arm-cr/qv/ti/qv_port.hpp delete mode 100644 ports/embos/qep_port.hpp rename ports/embos/{qf_port.hpp => qp_port.hpp} (58%) delete mode 100644 ports/freertos/qep_port.hpp rename ports/freertos/{qf_port.hpp => qp_port.hpp} (60%) delete mode 100644 ports/lint-plus/16bit/stdint.h delete mode 100644 ports/lint-plus/32bit/stdint.h create mode 100644 ports/lint-plus/au-autosar19.lnt rename ports/lint-plus/{lin.bat => make.bat} (63%) delete mode 100644 ports/lint-plus/qep_port.hpp delete mode 100644 ports/lint-plus/qk/qf_port.hpp delete mode 100644 ports/lint-plus/qk/qk_port.hpp create mode 100644 ports/lint-plus/qk/qp_port.hpp delete mode 100644 ports/lint-plus/qv/qf_port.hpp create mode 100644 ports/lint-plus/qv/qp_port.hpp delete mode 100644 ports/lint-plus/qv/qv_port.hpp delete mode 100644 ports/lint-plus/qxk/qf_port.hpp create mode 100644 ports/lint-plus/qxk/qp_port.hpp delete mode 100644 ports/lint-plus/qxk/qxk_port.hpp delete mode 100644 ports/msp430/qk/qep_port.hpp delete mode 100644 ports/msp430/qk/qf_port.hpp delete mode 100644 ports/msp430/qk/qk_port.hpp create mode 100644 ports/msp430/qk/qp_port.hpp delete mode 100644 ports/msp430/qutest/qep_port.hpp rename ports/msp430/qutest/{qf_port.hpp => qp_port.hpp} (51%) delete mode 100644 ports/msp430/qv/qep_port.hpp delete mode 100644 ports/msp430/qv/qf_port.hpp create mode 100644 ports/msp430/qv/qp_port.hpp delete mode 100644 ports/msp430/qv/qv_port.hpp delete mode 100644 ports/pic32/qk/xc32/qep_port.hpp delete mode 100644 ports/pic32/qk/xc32/qf_port.hpp delete mode 100644 ports/pic32/qk/xc32/qk_port.hpp create mode 100644 ports/pic32/qk/xc32/qp_port.hpp delete mode 100644 ports/pic32/qutest/xc32/qep_port.hpp create mode 100644 ports/pic32/qutest/xc32/qp_port.hpp delete mode 100644 ports/pic32/qv/xc32/qep_port.hpp delete mode 100644 ports/pic32/qv/xc32/qf_port.hpp create mode 100644 ports/pic32/qv/xc32/qp_port.hpp delete mode 100644 ports/pic32/qv/xc32/qv_port.hpp rename ports/{win32-qutest/qf_port.hpp => posix-qutest/qp_port.hpp} (57%) delete mode 100644 ports/posix-qv/qep_port.hpp rename ports/posix-qv/{qf_port.hpp => qp_port.hpp} (56%) delete mode 100644 ports/posix/qep_port.hpp rename ports/posix/{qf_port.hpp => qp_port.hpp} (57%) rename ports/{posix-qutest/qep_port.hpp => qep-only/qp_port.hpp} (55%) create mode 100644 ports/qep-only/safe_std.h delete mode 100644 ports/qt/aothread.hpp delete mode 100644 ports/qt/guiactive.hpp delete mode 100644 ports/qt/guiapp.cpp delete mode 100644 ports/qt/guiapp.hpp delete mode 100644 ports/qt/pixellabel.cpp delete mode 100644 ports/qt/pixellabel.hpp delete mode 100644 ports/qt/qep_port.hpp delete mode 100644 ports/qt/qf_port.cpp delete mode 100644 ports/qt/qf_port.hpp delete mode 100644 ports/qt/qs_port.hpp delete mode 100644 ports/qt/tickerthread.hpp delete mode 100644 ports/sample/README.md delete mode 100644 ports/sample/qep_port.hpp delete mode 100644 ports/sample/qf_port.hpp delete mode 100644 ports/sample/qk_port.hpp delete mode 100644 ports/threadx/qep_port.hpp rename ports/threadx/{qf_port.hpp => qp_port.hpp} (71%) delete mode 100644 ports/uc-os2/qep_port.hpp rename ports/uc-os2/{qf_port.hpp => qp_port.hpp} (60%) delete mode 100644 ports/vxworks/qep_port.hpp delete mode 100644 ports/vxworks/qf_port.cpp delete mode 100644 ports/vxworks/qf_port.hpp delete mode 100644 ports/vxworks/qs_port.hpp delete mode 100644 ports/win32-qutest/README.md delete mode 100644 ports/win32-qutest/qep_port.hpp rename ports/{posix-qutest/qf_port.hpp => win32-qutest/qp_port.hpp} (53%) delete mode 100644 ports/win32-qv/qep_port.hpp rename ports/win32-qv/{qf_port.hpp => qp_port.hpp} (57%) rename ports/{vxworks => win32}/Makefile (61%) delete mode 100644 ports/win32/qep_port.hpp rename ports/win32/{qf_port.hpp => qp_port.hpp} (64%) create mode 100644 qpcpp.sha256 create mode 100644 test/et/et.c create mode 100644 test/et/et.h create mode 100644 test/et/et_host.c rename test/qk/test_sched/{bsp_efm32.cpp => bsp_efm32pg1b.cpp} (98%) create mode 100644 test/qk/test_sched/bsp_nucleo-c031c6.cpp rename test/qk/test_sched/{bsp_h743zi.cpp => bsp_nucleo-h743zi.cpp} (98%) rename test/qk/test_sched/{bsp_l053r8.cpp => bsp_nucleo-l053r8.cpp} (97%) rename test/qk/test_sched/{make_efm32 => efm32pg1b.mak} (93%) create mode 100644 test/qk/test_sched/nucleo-c031c6.mak rename test/qk/test_sched/{make_nucleo-h743zi => nucleo-h743zi.mak} (93%) rename test/qk/test_sched/{make_nucleo-l053r8 => nucleo-l053r8.mak} (92%) create mode 100644 test/qs/qs_rx/Makefile rename ports/pic32/qutest/xc32/qf_port.hpp => test/qs/qs_rx/qp_port.hpp (52%) rename {ports/sample => test/qs/qs_rx}/qs_port.hpp (62%) create mode 100644 test/qs/qs_rx/test.cpp create mode 100644 test/qs/qs_rx/test.sln create mode 100644 test/qs/qs_rx/test.vcxproj create mode 100644 test/qs/qs_rx/test.vcxproj.filters rename test/qxk/test_sched/{bsp_efm32.cpp => bsp_efm32pg1b.cpp} (98%) create mode 100644 test/qxk/test_sched/bsp_nucleo-c031c6.cpp rename test/qxk/test_sched/{bsp_h743zi.cpp => bsp_nucleo-h743zi.cpp} (98%) rename test/qxk/test_sched/{bsp_l053r8.cpp => bsp_nucleo-l053r8.cpp} (97%) rename test/qxk/test_sched/{make_efm32 => efm32pg1b.mak} (94%) create mode 100644 test/qxk/test_sched/nucleo-c031c6.mak rename test/qxk/test_sched/{make_nucleo-h743zi => nucleo-h743zi.mak} (93%) rename test/qxk/test_sched/{make_nucleo-l053r8 => nucleo-l053r8.mak} (93%) delete mode 100644 zephyr/qep_port.hpp rename zephyr/{qf_port.hpp => qp_port.hpp} (58%) diff --git a/3rd_party b/3rd_party index fa0696995..de077b869 160000 --- a/3rd_party +++ b/3rd_party @@ -1 +1 @@ -Subproject commit fa06969955bfa96cbdb5b9ff8b05b66f49fad890 +Subproject commit de077b869b8980d124d9df3e5f7327500e28f178 diff --git a/LICENSES/LicenseRef-QL-dual.qlc b/LICENSES/LicenseRef-QL-dual.qlc index 5d93d3d72..d5def7707 100644 --- a/LICENSES/LicenseRef-QL-dual.qlc +++ b/LICENSES/LicenseRef-QL-dual.qlc @@ -1,9 +1,13 @@ Any user of the QP/C++ real-time embedded framework qpcpp -2023-12-31 +2024-12-31 Copyright (C) 2005 Quantum Leaps, LLC . + Q u a n t u m L e a P s + ------------------------ + Modern Embedded Software + SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-QL-commercial This software is dual-licensed under the terms of the open source GNU @@ -23,4 +27,4 @@ Plagiarizing this software to sidestep the license obligations is illegal. Contact information: -#0EDBEBE8223119BF5BAB0ECFC1C52D7A75E3B97C \ No newline at end of file +#10EBA9166330240A6EE04F770591C48BE4545919 \ No newline at end of file diff --git a/README.md b/README.md index 62542af63..e22ce2529 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,10 @@ -![QP Framework](doxygen/images/qp_banner.jpg) +![QP Framework](https://www.state-machine.com/img/qp_banner.jpg) # What's New? + +[![GitHub release (latest by date)](https://img.shields.io/github/v/release/QuantumLeaps/qpcpp)](https://github.com/QuantumLeaps/qpcpp/releases/latest) + + 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, @@ -121,7 +125,7 @@ open the file [html/index.html](html/index.html) in your web browser. # How to Help this Project? If you like this project, please give it a star (in the upper-right corner of your browser window): -![GitHub star](doxygen/images/github-star.jpg) +![GitHub star](https://www.state-machine.com/img/github-star.jpg) [RTEF]: diff --git a/doxygen/.gitignore b/doxygen/.gitignore deleted file mode 100644 index a16690737..000000000 --- a/doxygen/.gitignore +++ /dev/null @@ -1 +0,0 @@ -metrics.dox diff --git a/doxygen/Doxyfile b/doxygen/Doxyfile deleted file mode 100644 index 5e67c2744..000000000 --- a/doxygen/Doxyfile +++ /dev/null @@ -1,309 +0,0 @@ -# Doxyfile 1.9.5 - -@INCLUDE = ../../ql-doxygen/ql-doxyfile - -#--------------------------------------------------------------------------- -# Project related configuration options -#--------------------------------------------------------------------------- -DOXYFILE_ENCODING = UTF-8 -PROJECT_NAME = QP/C++ -PROJECT_NUMBER = 7.2.1 -PROJECT_BRIEF = "Real-Time Embedded Framework" -PROJECT_LOGO = ../../ql-doxygen/images/logo_ql.png -OUTPUT_DIRECTORY = -CREATE_SUBDIRS = NO -CREATE_SUBDIRS_LEVEL = 6 -ALLOW_UNICODE_NAMES = NO -OUTPUT_LANGUAGE = English -BRIEF_MEMBER_DESC = YES -REPEAT_BRIEF = NO -ABBREVIATE_BRIEF = "The $name class" \ - "The $name widget" \ - "The $name file" \ - is \ - provides \ - specifies \ - contains \ - represents \ - a \ - an \ - the -ALWAYS_DETAILED_SEC = NO -INLINE_INHERITED_MEMB = NO -FULL_PATH_NAMES = NO -STRIP_FROM_PATH = -STRIP_FROM_INC_PATH = -SHORT_NAMES = NO -JAVADOC_AUTOBRIEF = YES -JAVADOC_BANNER = NO -QT_AUTOBRIEF = NO -MULTILINE_CPP_IS_BRIEF = NO -PYTHON_DOCSTRING = YES -INHERIT_DOCS = YES -SEPARATE_MEMBER_PAGES = NO -TAB_SIZE = 4 -OPTIMIZE_OUTPUT_FOR_C = NO -OPTIMIZE_OUTPUT_JAVA = NO -OPTIMIZE_FOR_FORTRAN = NO -OPTIMIZE_OUTPUT_VHDL = NO -OPTIMIZE_OUTPUT_SLICE = NO -EXTENSION_MAPPING = lnt=Objective-C -MARKDOWN_SUPPORT = YES -TOC_INCLUDE_HEADINGS = 4 -AUTOLINK_SUPPORT = YES -BUILTIN_STL_SUPPORT = NO -CPP_CLI_SUPPORT = NO -SIP_SUPPORT = NO -IDL_PROPERTY_SUPPORT = YES -DISTRIBUTE_GROUP_DOC = NO -GROUP_NESTED_COMPOUNDS = NO -SUBGROUPING = YES -INLINE_GROUPED_CLASSES = YES -INLINE_SIMPLE_STRUCTS = YES -TYPEDEF_HIDES_STRUCT = YES -LOOKUP_CACHE_SIZE = 0 -NUM_PROC_THREADS = 1 -#--------------------------------------------------------------------------- -# Build related configuration options -#--------------------------------------------------------------------------- -EXTRACT_ALL = YES -EXTRACT_PRIVATE = YES -EXTRACT_PRIV_VIRTUAL = NO -EXTRACT_PACKAGE = YES -EXTRACT_STATIC = YES -EXTRACT_LOCAL_CLASSES = YES -EXTRACT_LOCAL_METHODS = NO -EXTRACT_ANON_NSPACES = NO -RESOLVE_UNNAMED_PARAMS = YES -HIDE_UNDOC_MEMBERS = NO -HIDE_UNDOC_CLASSES = NO -HIDE_FRIEND_COMPOUNDS = NO -HIDE_IN_BODY_DOCS = NO -INTERNAL_DOCS = NO -CASE_SENSE_NAMES = NO -HIDE_SCOPE_NAMES = YES -HIDE_COMPOUND_REFERENCE= NO -SHOW_HEADERFILE = YES -SHOW_INCLUDE_FILES = YES -SHOW_GROUPED_MEMB_INC = NO -FORCE_LOCAL_INCLUDES = NO -INLINE_INFO = YES -SORT_MEMBER_DOCS = NO -SORT_BRIEF_DOCS = NO -SORT_MEMBERS_CTORS_1ST = NO -SORT_GROUP_NAMES = NO -SORT_BY_SCOPE_NAME = NO -STRICT_PROTO_MATCHING = NO -GENERATE_TODOLIST = YES -GENERATE_TESTLIST = YES -GENERATE_BUGLIST = YES -GENERATE_DEPRECATEDLIST= YES -ENABLED_SECTIONS = QPCPP -MAX_INITIALIZER_LINES = 30 -SHOW_USED_FILES = YES -SHOW_FILES = YES -SHOW_NAMESPACES = YES -FILE_VERSION_FILTER = -LAYOUT_FILE = -CITE_BIB_FILES = -#--------------------------------------------------------------------------- -# Configuration options related to warning and progress messages -#--------------------------------------------------------------------------- -QUIET = NO -WARNINGS = YES -WARN_IF_UNDOCUMENTED = YES -WARN_IF_DOC_ERROR = YES -WARN_IF_INCOMPLETE_DOC = YES -WARN_NO_PARAMDOC = NO -WARN_AS_ERROR = NO -WARN_FORMAT = "$file:$line: $text" -WARN_LINE_FORMAT = "at line $line of file $file" -WARN_LOGFILE = -#--------------------------------------------------------------------------- -# Configuration options related to the input files -#--------------------------------------------------------------------------- -INPUT = main.dox \ - gs.dox \ - ../../cert-pack/cert-pack.dox \ - ../../cert-pack/srs.dox \ - ../../cert-pack/sas.dox \ - ../../cert-pack/sds.dox \ - ../../cert-pack/sds_sm-cpp.dox \ - ../../cert-pack/autosar.dox \ - ../../cert-pack/metrics.dox \ - history.dox \ - exa.dox \ - exa_native.dox \ - exa_rtos.dox \ - exa_os.dox \ - exa_qutest.dox \ - exa_mware.dox \ - ports.dox \ - ports_native.dox \ - ports_arm-cm.dox \ - ports_rtos.dox \ - ports_os.dox \ - api.dox \ - ../../ql-doxygen/help.dox \ - dir.dox \ - config.hpp \ - ../include \ - ../src \ - ../ports/sample \ - ../ports/lint-plus/std.lnt \ - ../ports/lint-plus/qpcpp.lnt \ - ../ports/lint-plus/options.lnt -INPUT_ENCODING = UTF-8 -INPUT_FILE_ENCODING = -FILE_PATTERNS = *.dox \ - *.h \ - *.hpp \ - *.c \ - *.cpp \ - *.s \ - *.asm \ - *.lnt -RECURSIVE = YES -EXCLUDE = ../include/qs_dummy.hpp -EXCLUDE_SYMLINKS = NO -EXCLUDE_PATTERNS = -EXCLUDE_SYMBOLS = QP_IMPL -EXAMPLE_PATH = gen \ - snippets \ - ../include \ - ../src \ - ../ports \ - ../ports/lint-plus \ - ../examples -EXAMPLE_PATTERNS = * -EXAMPLE_RECURSIVE = NO -IMAGE_PATH = images \ - ../../ql-doxygen/images \ - ../../cert-pack/images -INPUT_FILTER = -FILTER_PATTERNS = -FILTER_SOURCE_FILES = NO -FILTER_SOURCE_PATTERNS = -USE_MDFILE_AS_MAINPAGE = -FORTRAN_COMMENT_AFTER = 72 -#--------------------------------------------------------------------------- -# Configuration options related to source browsing -#--------------------------------------------------------------------------- -SOURCE_BROWSER = YES -INLINE_SOURCES = NO -STRIP_CODE_COMMENTS = NO -REFERENCED_BY_RELATION = NO -REFERENCES_RELATION = NO -REFERENCES_LINK_SOURCE = YES -SOURCE_TOOLTIPS = YES -USE_HTAGS = NO -VERBATIM_HEADERS = YES -CLANG_ASSISTED_PARSING = NO -CLANG_ADD_INC_PATHS = YES -CLANG_OPTIONS = -CLANG_DATABASE_PATH = -#--------------------------------------------------------------------------- -# Configuration options related to the alphabetical class index -#--------------------------------------------------------------------------- -ALPHABETICAL_INDEX = YES -IGNORE_PREFIX = -#--------------------------------------------------------------------------- -# Configuration options related to the HTML output -#--------------------------------------------------------------------------- -GENERATE_HTML = YES -HTML_OUTPUT = ../html -HTML_FILE_EXTENSION = .html -HTML_HEADER = ../../ql-doxygen/ql-header-awesome.html -HTML_FOOTER = ../../ql-doxygen/ql-footer-awesome.html -HTML_STYLESHEET = -HTML_EXTRA_STYLESHEET = ../../ql-doxygen/doxygen-awesome.css \ - ../../ql-doxygen/doxygen-awesome-sidebar-only.css \ - ../../ql-doxygen/doxygen-awesome-sidebar-only-darkmode-toggle.css \ - ../../ql-doxygen/ql-awesome.css -HTML_EXTRA_FILES = ../../ql-doxygen/doxygen-awesome-darkmode-toggle.js \ - ../../ql-doxygen/doxygen-awesome-fragment-copy-button.js \ - ../../ql-doxygen/doxygen-awesome-paragraph-link.js \ - ../../ql-doxygen/ql-preview.js -HTML_COLORSTYLE = AUTO_LIGHT -HTML_COLORSTYLE_HUE = 209 -HTML_COLORSTYLE_SAT = 255 -HTML_COLORSTYLE_GAMMA = 113 -HTML_TIMESTAMP = NO -HTML_DYNAMIC_MENUS = YES -HTML_DYNAMIC_SECTIONS = NO -HTML_INDEX_NUM_ENTRIES = 100 -GENERATE_DOCSET = NO -DOCSET_FEEDNAME = "Doxygen generated docs" -DOCSET_FEEDURL = -DOCSET_BUNDLE_ID = com.state-machine.doc -DOCSET_PUBLISHER_ID = com.state-machine.doc -DOCSET_PUBLISHER_NAME = QuantumLeaps -GENERATE_HTMLHELP = NO -CHM_FILE = ../qpcpp.chm -HHC_LOCATION = -GENERATE_CHI = NO -CHM_INDEX_ENCODING = -BINARY_TOC = YES -TOC_EXPAND = NO -GENERATE_QHP = NO -QCH_FILE = -QHP_NAMESPACE = com.state-machine.qp -QHP_VIRTUAL_FOLDER = doc -QHP_CUST_FILTER_NAME = -QHP_CUST_FILTER_ATTRS = -QHP_SECT_FILTER_ATTRS = -QHG_LOCATION = -GENERATE_ECLIPSEHELP = NO -ECLIPSE_DOC_ID = com.state-machine.qp -DISABLE_INDEX = NO -GENERATE_TREEVIEW = YES -FULL_SIDEBAR = NO -ENUM_VALUES_PER_LINE = 4 -TREEVIEW_WIDTH = 335 -EXT_LINKS_IN_WINDOW = NO -OBFUSCATE_EMAILS = NO -HTML_FORMULA_FORMAT = png -FORMULA_FONTSIZE = 10 -FORMULA_MACROFILE = -USE_MATHJAX = NO -MATHJAX_VERSION = MathJax_2 -MATHJAX_FORMAT = HTML-CSS -MATHJAX_RELPATH = https://cdn.jsdelivr.net/npm/mathjax@2 -MATHJAX_EXTENSIONS = -MATHJAX_CODEFILE = -SEARCHENGINE = YES -SERVER_BASED_SEARCH = NO -EXTERNAL_SEARCH = NO -SEARCHENGINE_URL = -SEARCHDATA_FILE = searchdata.xml -EXTERNAL_SEARCH_ID = QPCPP -EXTRA_SEARCH_MAPPINGS = -#--------------------------------------------------------------------------- -# Configuration options related to the preprocessor -#--------------------------------------------------------------------------- -ENABLE_PREPROCESSING = YES -MACRO_EXPANSION = NO -EXPAND_ONLY_PREDEF = NO -SEARCH_INCLUDES = YES -INCLUDE_PATH = -INCLUDE_FILE_PATTERNS = -PREDEFINED = Q_SPY \ - Q_UTEST \ - QP_IMPL \ - Q_EVT_CTOR \ - QF_MAX_ACTIVE=32 \ - QF_MAX_TICK_RATE=2 \ - QF_MAX_EPOOL=3 \ - QF_EVENT_SIZ_SIZE=2 \ - QF_EQUEUE_CTR_SIZE=2 \ - QF_MPOOL_SIZ_SIZE=2 \ - QF_MPOOL_CTR_SIZE=2 \ - QF_TIMEEVT_CTR_SIZE=4 \ - QF_ACTIVE_STOP=0 \ - QF_ON_CONTEXT_SW \ - QS_TIME_SIZE=4 \ - QF_EQUEUE_TYPE=QEQueue \ - QF_OS_OBJECT_TYPE=void* \ - QF_THREAD_TYPE=void* -EXPAND_AS_DEFINED = -SKIP_FUNCTION_MACROS = NO diff --git a/doxygen/Doxyfile-CHM b/doxygen/Doxyfile-CHM deleted file mode 100644 index 3755a3540..000000000 --- a/doxygen/Doxyfile-CHM +++ /dev/null @@ -1,15 +0,0 @@ -# Doxyfile 1.9.4 - -@INCLUDE = Doxyfile - -#--------------------------------------------------------------------------- -# Configuration options related to the HTML output -#--------------------------------------------------------------------------- -PROJECT_LOGO = images/logo_ql-comp.png - -HTML_OUTPUT = tmp -HTML_HEADER = ../../ql-doxygen/ql-header.html -HTML_FOOTER = ../../ql-doxygen/ql-footer.html -HTML_EXTRA_STYLESHEET = ../../ql-doxygen/ql.css -HTML_EXTRA_FILES = ../../ql-doxygen/ql-preview.js -GENERATE_HTMLHELP = YES diff --git a/doxygen/Doxyfile-LATEX b/doxygen/Doxyfile-LATEX deleted file mode 100644 index e22211ce9..000000000 --- a/doxygen/Doxyfile-LATEX +++ /dev/null @@ -1,11 +0,0 @@ -# Doxyfile 1.9.5 - -@INCLUDE = Doxyfile - -GENERATE_HTML = NO -GENERATE_LATEX = YES -ENABLED_SECTIONS += LATEX - -# no source code in latex... -SOURCE_BROWSER = NO -VERBATIM_HEADERS = NO diff --git a/doxygen/api.dox b/doxygen/api.dox deleted file mode 100644 index 306da10ff..000000000 --- a/doxygen/api.dox +++ /dev/null @@ -1,313 +0,0 @@ -/*! @page api API Reference -@nav_next{deprecated} - -@section api_qep QEP (Hierarchical State Machines) -QEP is a universal, UML-compliant event processor that enables developers to code UML state machines in highly readable ANSI-C, in which every state machine element is mapped to code precisely, unambiguously, and exactly once (traceability). QEP fully supports hierarchical state nesting, which is the fundamental mechanism for reusing behavior across many states instead of repeating the same actions and transitions over and over again. - - -@subsection api_qep_hsm Hierarchical State Machines -- QHsm class -- QHsm::QHsm() -- QHsm::init() -- QHsm::dispatch() -- QHsm::isIn() -- QHsm::state() -- QHsm::top() -- QMsm class -- QMsm::QMsm() -- QMsm::isInState() -- QMsm::stateObj() -- Q_STATE_CAST() - - -@section api_qf QF (Active Object Framework) -QF is a portable, event-driven, real-time framework for execution of active objects (concurrent state machines) specifically designed for real-time embedded (RTE) systems. - - -@subsection api_qf_act Active Objects -- QActive class -- QActive::QActive() -- QActive::start() -- %QActive:: POST() -- %QActive:: POST_X() -- QActive::postLIFO() -- QActive::defer() -- QActive::recall() -- QActive::flushDeferred() -- QActive::stop() -- QMActive class -- QMActive::QMActive() - - -@subsection api_qf_ps Publish-Subscribe -- ::QSubscrList (Subscriber List struct) -- QActive::psInit() -- %QF:: PUBLISH() -- QActive::subscribe() -- QActive::unsubscribe() -- QActive::unsubscribeAll() - - -@subsection api_qf_evt Event Management -- QEvt class -- Q_NEW() -- Q_NEW_X() -- Q_NEW_REF() -- Q_DELETE_REF() -- QF::gc() -- Q_EVT_CAST() - - -@subsection api_qf_time Time Events -- QTimeEvt class -- QTimeEvt::QTimeEvt() -- QTimeEvt::armX() -- QTimeEvt::disarm() -- QTimeEvt::rearm() -- QTimeEvt::currCtr() -- QTicker active object -- %QF:: TICK() -- %QF:: TICK_X() - - -@subsection api_qf_queue Event Queues (raw thread-safe) -- QEQueue class -- QEQueue::init() -- QEQueue::post() -- QEQueue::postLIFO() -- QEQueue::get() -- QEQueue::getNFree() -- QEQueue::getNMin() -- QEQueue::isEmpty() -- QEQueueCtr() - - -@subsection api_qf_mem Memory Pools -- QMPool class -- QMPool::init() -- QMPool::get() -- QMPool::put() - - -@section api_qs QS ("Quantum Spy" Software Tracing) -QS is a software tracing system that enables developers to monitor live event-driven QP applications with minimal target system resources and without stopping or significantly slowing down the code. QS is an ideal tool for testing, troubleshooting, and optimizing QP applications. QS can even be used to support acceptance testing in product manufacturing. - - -@subsection api_qs_ini QS Initialization and Control -- QS_INIT() -- QS::initBuf() -- QS::getByte() -- QS::getBlock() -- QS::onStartup() -- QS::onCleanup() -- QS::onFlush() -- QS::onGetTime() - - -@subsection api_qs_rx QS Receive-Channel (QS-RX) -- QS::rxInitBuf() -- QS::rxPut() -- QS::rxParse() -- QS::onCommand() - - -@subsection api_qs_filter QS Filters -- QS_GLB_FILTER() -- QS_LOC_FILTER() -- QS_FILTER_AP_OBJ() - - -@subsection api_qs_dict QS Dictionaries -- QS_SIG_DICTIONARY() -- QS_OBJ_DICTIONARY() -- QS_OBJ_ARR_DICTIONARY() -- QS_FUN_DICTIONARY() -- QS_USR_DICTIONARY() - - -@subsection api_qs_user QS Application-Specific Records -- ::QS_USER enumeration -- QS_BEGIN_ID() -- QS_END() -- QS_U8() / QS_I8() -- QS_U16() / QS_I16() -- QS_U32() / QS_I32() -- QS_U32_HEX() -- QS_STR() -- QS_MEM() - - -@section api_qv QV (Cooperative Kernel) -QV is a simple **cooperative** kernel (previously called "Vanilla" kernel). This kernel executes active objects one at a time, with priority-based scheduling performed before processing of each event. Due to naturally short duration of event processing in state machines, the simple QV kernel is often adequate for many real-time systems. - -The QV scheduler is engaged after every RTC step of any active object to choose the next active object to execute. The QV scheduler always chooses the highest-priority active object that has any events in its event queue. The QV scheduler then extracts the next event from this queue and dispatches it to the state machine associated with the active object. The state machine runs to completion, after which the QV scheduler runs and the cycle repeats. - -Please note that because the state machines always return to the QV scheduler after each RTC step, a single stack can be used to process all state machines (memory-friendly architecture). - -The QV scheduler can also very easily detect when all event queues are empty, at which point it can call the idle callback to let the application put the CPU and peripherals to a low-power sleep mode (power-friendly architecture). - -Given the simplicity, portability, and low-resource consumption, the QV scheduler is very attractive. It allows you to partition the problem into active objects and execute these active objects orderly. The task-level response of this scheduler is the longest RTC step in the whole system, but because event-driven active objects don’t block, the RTC steps tend to be very short (typically just a few microseconds). Also, often you can break up longer RTC steps into shorter pieces, by posting an event to self and returning (“Reminder” state pattern). The self-posted event then triggers the continuation of longer processing. - - -@subsection api_qv_init Kernel Initialization and Control -- QV_INIT() -- QF_run() -- QV::onIdle() -- QV_CPU_SLEEP() - - -@section api_qk QK (Preemptive Run-to-Completion Kernel) -QK is a tiny **preemptive**, priority-based, non-blocking kernel designed specifically for executing active objects. QK runs active objects in the same way as prioritized interrupt controller (such as NVIC in ARM Cortex-M) runs interrupts using the single stack. Active objects process their events in run-to-completion (RTC) fashion and remove themselves from the call stack, the same way as nested interrupts remove themselves from the stack upon completion. At the same time high-priority active objects can preempt lower-priority active objects, just like interrupts can preempt each other under a prioritized interrupt controller. QK meets all the requirement of the Rate Monotonic Scheduling (a.k.a. Rate Monotonic Analysis RMA) and can be used in hard real-time systems. - - -@subsection api_qk_ctrl Kernel Initialization and Control -- QK_INIT() -- QF_run() -- QK::onIdle() -- QK::schedLock() -- QK::schedUnlock() - - -@subsection api_qk_isr Interrupt Management -- QK_ISR_ENTRY() -- QK_ISR_EXIT() - - -@section api_qxk QXK (Preemptive Dual-Mode Run-to-Completion/Blocking RTOS Kernel) -QXK is a small, preemptive, priority-based, dual-mode **blocking** kernel that executes active objects like the @ref qk "QK kernel", but can also execute traditional __blocking__ threads (extended threads). In this respect, QXK behaves exactly as a conventional __RTOS__ (Real-Time Operating System). QXK has been designed specifically for mixing event-driven active objects with traditional blocking code, such as commercial middleware (TCP/IP stacks, UDP stacks, embedded file systems, etc.) or legacy software. - - -@subsection api_qxk_ctrl Kernel Initialization and Control -- QXK_INIT() -- QF_run() -- QXK::onIdle() -- QXK::schedLock() -- QXK::schedUnlock() - - -@subsection api_qxk_isr Interrupt Management -- QXK_ISR_ENTRY() -- QXK_ISR_EXIT() - - -@subsection api_qxk_xthr Extended Thread Management -- QXThread class -- QXThread::QXThread() -- QXThread::start() -- QXThread::delay() -- QXThread::delayCancel() -- QXThread::queueGet() -- Q_XTHREAD_CAST() -- QXK_current() -- QXK_TLS() - - -@subsection api_qxk_sema Semaphores -- QXSemaphore class (Semaphore Control Block) -- QXSemaphore::init() -- QXSemaphore::wait() -- QXSemaphore::tryWait() -- QXSemaphore::signal() - - -@subsection api_qxk_mutex Mutexes -- QXMutex class (Mutex Control Block) -- QXMutex::init() -- QXMutex::lock() -- QXMutex::tryLock() -- QXMutex::unlock() - - -@subsection api_qxk_queue Message Queues -- %QXThread:: POST() -- %QXThread:: POST_X() -- QXThread::queueGet() - waiting (blocking) on message queue - - -@subsection api_qxk_mem Memory Pools -- QMPool class -- QMPool::init() -- QMPool::get() -- QMPool::put() - -
-@nav_next{deprecated} -*/ -/*##########################################################################*/ -/*! @page deprecated Deprecated APIs - -__The following QP/C++ APIs are now deprecated:__ -*/ - -/*##########################################################################*/ -/*! @namespace QP -@brief QP/C++ framework -*/ -/*##########################################################################*/ -/*! @namespace QP::QF -@brief hierarchical event processor and active object framework -*/ -/*##########################################################################*/ -/*! @namespace QP::QS -@brief "QP/Spy" software tracing (target-resident components) -*/ -/*##########################################################################*/ -/*! @namespace QP::QV -@brief cooperative, non-preemptive kernel -*/ -/*##########################################################################*/ -/*! @namespace QP::QK -@brief preemptive, non-blocking kernel -*/ -/*##########################################################################*/ -/*! @namespace QP::QXK -@brief preemptive, dual-mode (non-blocking / blocking) kernel -*/ -/*##########################################################################*/ -/*! @dir include -@brief Platform-independent QP™/C++ API - -@attention -The QP™/C++ include directory needs to be added to the compiler's include path in the applications using QP™/C++. -*/ -/*##########################################################################*/ -/*! @dir src -@brief Platform-independent QP™/C++ source code - -Files from this directory need to be added to the project, to build the QP™/C++ framework from source code. - -@attention -The QP™/C++ src directory needs to be added to the compiler's include path in the applications that build QP™/C++ framework from sources (as opposed to using QP as a pre-built library). -*/ -/*##########################################################################*/ -/*! @dir src/qf -@brief Platform-independent implementation of the QEP and QF components. - -@note -Typically, files in this directory need to be added to the application build, but some QP ports might not need all the files in this directory. For example, a QP port to a 3rd-party RTOS kernel might be using a message queue of the RTOS instead of the native QP event queue, in which case the file qf_actq.cpp would not be needed and should be excluded from the build. -*/ -/*##########################################################################*/ -/*! @dir src/qv -@brief Platform-independent implementation of the @ref srs_qv built-in kernel. - -@attention -Files in this directory need to be included in the QP application build only if the application uses the @ref srs_qv kernel. -*/ -/*##########################################################################*/ -/*! @dir src/qk -@brief Platform-independent implementation of the @ref srs_qk built-in kernel. - -@attention -Files in this directory need to be included in the QP application build only if the application uses the @ref srs_qk kernel. -*/ -/*##########################################################################*/ -/*! @dir src/qxk -@brief Platform-independent implementation of the @ref srs_qxk built-in kernel. - -@attention -Files in this directory need to be included in the QP application build only if the application uses the @ref srs_qxk kernel. -*/ -/*##########################################################################*/ -/*! @dir src/qs -@brief Platform-independent implementation of the @ref qs component (software tracing). -*/ diff --git a/doxygen/config.hpp b/doxygen/config.hpp deleted file mode 100644 index 39b115b7f..000000000 --- a/doxygen/config.hpp +++ /dev/null @@ -1,66 +0,0 @@ -//! @file -//! @brief Various macros for configuring and porting QP/C++ - -//! The preprocessor switch to disable checking assertions -//! -//! @description -//! When defined, Q_NASSERT disables the following macros #Q_ASSERT, -//! #Q_REQUIRE, #Q_ENSURE, #Q_INVARIANT, #Q_ERROR as well as -//! #Q_ASSERT_ID, #Q_REQUIRE_ID, #Q_ENSURE_ID, #Q_INVARIANT_ID, and -//! #Q_ERROR_ID do NOT evaluate the test condition passed as the -//! argument to these macros. -//! -//! @note One notable exception is the macro #Q_ALLEGE, that still -//! evaluates the test condition, but does not report assertion -//! failures when the switch Q_NASSERT is defined. -#define Q_NASSERT - -//! Enable the QActive::stop() API in the QF port. -//! -//! @description -//! Defining this macro enables the QActive::stop() API in a given port. -//! This feature should be used with caution, as stopping and re-starting -//! active objects **cleanly** can be tricky. -//! -#define QF_ACTIVE_STOP - -//! The preprocessor switch to activate the constructor in QP::QEvt. -//! -//! @description -//! When #Q_EVT_CTOR is defined (typically in the qep_port.hpp header file), -//! QP::QEvt becomes a class with constructor. More importantly, the -//! subclasses of QP::QEvt (custom events) can have non-default constructors. -//! These constructors are then called when events are created (e.g., -//! with Q_NEW()) -//! -//! @sa #Q_EVT_VIRTUAL -#define Q_EVT_CTOR - -//! The preprocessor switch to activate the virtual destructor in QP::QEvt. -//! -//! @description -//! This macro only works when #Q_EVT_CTOR is also defined. When also -//! #Q_EVT_VIRTUAL is defined (typically in the qep_port.hpp header -//! file), QP::QEvt becomes a class with a constructor and a virtual -//! destructor. More importantly, the subclasses of QP::QEvt (custom events) -//! can have (virtual) destructors. These destructors are then invoked -//! before recycling the event with QP::QF::gc(). -#define Q_EVT_VIRTUAL - -//! The preprocessor switch to activate the QS software tracing -//! instrumentation in the code -//! -//! @description -//! When defined, Q_SPY activates the QS software tracing instrumentation. -//! When Q_SPY is not defined, the QS instrumentation in the code does -//! not generate any code. -#define Q_SPY - -//! This macro enables calling the QK context-switch callback -//! QF_onContextSw() -#define QF_ON_CONTEXT_SW - -//! Macro that should be defined (typically on the compiler's command line) -//! in the Win32-GUI applications that use the @ref win32 or @ref win32-qv -//! ports. -#define WIN32_GUI diff --git a/doxygen/dir.dox b/doxygen/dir.dox deleted file mode 100644 index 8a1e24607..000000000 --- a/doxygen/dir.dox +++ /dev/null @@ -1,48 +0,0 @@ -/*##########################################################################*/ -/*! @dir include -@brief Platform-independent QP™/C++ API - -@attention -The QP™/C include directory needs to be added to the compiler's include path in the applications using QP™/C++. -*/ -/*##########################################################################*/ -/*! @dir src -@brief Platform-independent QP™/C++ source code - -Files from this directory need to be added to the project, to build the QP™/C++ framework from source code. - -@attention -The QP™/C++ src directory needs to be added to the compiler's include path in the applications that build QP™/C++ framework from sources (as opposed to using QP as a pre-built library). -*/ -/*##########################################################################*/ -/*! @dir src/qf -@brief Platform-independent implementation of the QEP and QF components. - -@note -Typically, files in this directory need to be added to the application build, but some QP ports might not need all the files in this directory. For example, a QP port to a 3rd-party RTOS kernel might be using a message queue of the RTOS instead of the native QP event queue, in which case the file qf_actq.c would not be needed and should be excluded from the build. -*/ -/*##########################################################################*/ -/*! @dir src/qv -@brief Platform-independent implementation of the @ref srs_qv built-in kernel. - -@attention -Files in this directory need to be included in the QP application build only if the application uses the @ref srs_qv kernel. -*/ -/*##########################################################################*/ -/*! @dir src/qk -@brief Platform-independent implementation of the @ref srs_qk built-in kernel. - -@attention -Files in this directory need to be included in the QP application build only if the application uses the @ref srs_qk kernel. -*/ -/*##########################################################################*/ -/*! @dir src/qxk -@brief Platform-independent implementation of the @ref srs_qxk built-in kernel. - -@attention -Files in this directory need to be included in the QP application build only if the application uses the @ref srs_qxk kernel. -*/ -/*##########################################################################*/ -/*! @dir src/qs -@brief Platform-independent implementation of the QS component (software tracing). -*/ diff --git a/doxygen/exa.dox b/doxygen/exa.dox deleted file mode 100644 index 994082e5c..000000000 --- a/doxygen/exa.dox +++ /dev/null @@ -1,522 +0,0 @@ -/*! @page exa Examples - -@section exa_gen General Comments -The QP/C++ distribution contains many @subpage exa_ref "example projects" to demonstrate various QP/C++ features. Each example project is described on its own dedicated page that you can find using several criteria (see @ref exa_ref). The example projects have the following main goals: - -- to help you learn how to use QP/C — the examples show the intended way of using QP/C++ features and structuring QP/C++ applications. - -- to provide you with a starting point for your own projects — the examples are complete working projects, with correctly pre-configured tools, such as compiler options, linker script, debugger setup, etc. - -- to provide you with unit testing support — the [QUTest](/qtools/qutest.html) examples illustrate unit testing techniques both for the development worksations and for embedded targets. - -@note -It is highly recommended that you create your own projects by **copying and modifying** existing example projects rather than starting your QP/C++ projects from scratch. - - - -@subsection exa_code Example Code Structure -QP/C++ examples are located in sub-directories of the examples top-level folder, with the hierarchical organization outlined below: - -
    -
  • examples/ -
  • -
      -
    • arm-cm/ — Native examples for ARM-Cortex-M (bare-metal)       A -
    • -
        -
      • blinky_ek-tm4c123gxl/ — Blinky example for EK-TM4C123GXL board -
      • -
      • dpp_ek-tm4c123gxl/ — DPP example for EK-TM4C123GXL board -
      • -
      • qk/ — Version for the @ref comp_qk "preemptive QK kernel" -
      • -
          -
        • arm/ — build with ARM-KEIL (Compiler Version 5) toolchain -
        • -
        • armclang/ — build with ARM-Clang (Compiler Version 6) toolchain -
        • -
            -
          • dbg/ — Debug @ref exa_sec_conf "build configuration" -
          • -
          • rel/ — Release build configuration -
          • -
          • spy/ — Spy build configuration -
          • -
          -
        • gnu/ — build with GNU toolchain -
        • -
        • iar/ — build with IAR toolchain -
        • -
        • ... — source code independent on the toolchain -
        • -
        -
      • qv/ — Version for the @ref comp_qv "cooperative QV kernel" -
      • -
      • qxk/ — Version for the @ref comp_qxk "blocking QXK kernel" -
      • -
      -
    • .../ — Native examples for other CPU architectures... -
    • - -
    • threadx/ — Examples for ThreadX (3rd-party RTOS)       B -
    • -
        -
      • arm-cm/ — Examples for ARM-Cortex-M -
      • -
          -
        • dpp_ek-tm4c123gxl/ — DPP example for EK-TM4C123GXL board -
        • -
            -
          • iar/ — build with IAR toolchain -
          • -
              -
            • dbg/ — Debug build configuration -
            • -
            • rel/ — Release build configuration -
            • -
            • spy/ — Spy build configuration -
            • -
            -
          -
        -
      -
    • .../ — Native examples for other 3rd-party RTOSes... -
    • - -
    • lwip/ — Examples for lwIP (3rd-party TCP/IP)       C -
    • -
        -
      • arm-cm/ — Examples for ARM-Cortex-M -
      • -
          -
        • lwip_ek-lm3s6965/ — lwIP example for EK-LM3S6965 board -
        • -
            -
          • qk/ — Version for the @ref comp_qk "preemptive QK kernel" -
          • -
              -
            • gnu/ — build with GNU toolchain -
            • -
                -
              • dbg/ — Debug build configuration -
              • -
              • rel/ — Release build configuration -
              • -
              • spy/ — Spy build configuration -
              • -
              -
            • iar/ — build with IAR toolchain -
            • -
            -
          • qv/ — Version for the @ref comp_qv "cooperative QV kernel" -
          • -
              -
            • gnu/ — build with GNU toolchain -
            • -
            • iar/ — build with IAR toolchain -
            • -
            -
          -
        -
      -
    • .../ — Examples for other 3rd-party middleware... -
    • - -
    • qutest/ — Examples for QUTest unit testing harness       D -
    • -
        -
      • blinky/ — The simple Blinky example -
      • -
          -
        • src/ — source code under test -
        • -
            -
          • blinky.cpp — Blinky implementation -
          • -
          • blinky.hpp — Blinky header -
          • -
          -
        -
          -
        • test/ — code for unit testing -
        • -
            -
          • Makefile — cross-platform makefile -
          • -
          • test_blinky.cpp — test fixture for Blinky -
          • -
          • test_blinky.py — test script for Blinky (Python) -
          • -
          -
        -
      • .../ — Other QUTest examples... -
      • -
      - -
    • workstation/ — Examples for workstations (Windows, Linux, MacOS)       E -
    • -
        -
      • blinky/ — The simple Blinky example -
      • -
          -
        • build/ — Debug build configuration -
        • -
        • build_rel/ — Release build configuration -
        • -
        • build_spy/ — Spy build configuration -
        • -
        • blinky.cpp — blinky source code -
        • -
        • blinky.qm — QM model file for Blinky -
        • -
        • Makefile — cross-platform Makefile (Windows, Linux, MacOS) -
        • -
        -
      • calc/ — The Calculator example -
      • -
      • comp/ — The Orthogonal-Component example -
      • -
      • defer/ — The Deferred-Event example -
      • -
      • dpp/ — The Dining-Philosophers Problem example -
      • -
      • .../ — other examples for workstations... -
      • -
      - -
    -
- -
    -
  • A @subpage exa_native "Native examples" are located in sub-directories named after the CPU architecture, such as arm-cm for ARM Cortex-M. Under that directory, the sub-directories blinky_ek-tm4c123gxl contain the specific example on the specified board, such as "Blinky" on the EK-TM4C123GXL board here. In the specific example folder, you find sub-folders for the @ref comp_qv "QV", @ref comp_qk "QK" and @ref comp_qxk "QXK" kernels, respectively. -
  • - -
  • B @subpage exa_rtos "Examples for 3rd-party RTOS"/@ref exa_os "OS" are located in sub-directories named after the RTOS/OS, such as uc-os2 for uc-os2 RTOS. Under that directory, the sub-directories, such as arm-cm, contain examples for the specified CPU architecture, such as ARM Cortex-M here. -
  • - -
  • C @subpage exa_mware "Examples for 3rd-party Middleware" are located in sub-directories named after the middleware, such as lwIP for the lwIP TCP/IP stack. Under that directory, the sub-directories, such as arm-cm, contain examples for the specified CPU architecture, such as ARM Cortex-M here. -
  • - -
  • D @subpage exa_qutest "Examples for QUTest" illustrate unit testing of embedded event-driven code. NOTE: Examples in this directory can run on all types of workstations (Windows, Linux, MacOS), as well as embedded targets. -
  • - -
  • E @subpage exa_os "Examples for Workstations" provide console-based examples described in the [PSiCC2](/psicc2) book, which you can try directly on your workstation without any embedded hardware. NOTE: Examples in this directory can also be used on the embedded versions of the desktop operating systems, such as embedded-Linux and Windows-embedded. -
  • -
- -@note -Because the QP distribution contains *all* examples, the number of sub-directories and files in the examples folder may seem daunting. However, knowing the structure of the examples folder, you can simply ignore or even delete the sub-directories that are not interesting to you. - - -@subsection exa_sec_apps Example Applications -To demonstrate QP/C++ features on an embedded board, you need to create an application that does "something interesting". Instead of inventing this "something interesting" for each and every example, the example projects implement one of the three @subpage exa_apps "example applications", which are described on the separate pages: - -- @ref tut_blinky -- @ref tut_dpp -- @ref tut_game - -With the exception of the game application, all other example applications can be implemented on a board with just a couple of LEDs. The @ref game application is a bit more involved and requires a small graphic display on the board. - -Beyond these basic applications for demonstrating and testing the various @ref ports "QP/C++ ports", the QP/C++ distribution contains all examples described in the book Practical UML Statecharts in C/C++, 2nd Edition. -@sa @ref exa_os - - -@subsection exa_sec_boards Development Boards -While some provided examples can run on your @ref exa_os "desktop computer", most embedded example projects require special hardware in form of @ref exa_sec_boards, which you need to acquire to be able to run the examples. The boards chosen for the examples are generally inexpensive and self-contained with no need for external hardware (such as external JTAG debuggers or power supplies). - - -@subsection exa_sec_tools Development Tools -Most provided examples require special embedded cross-development tools, such as embedded compilers, linkers, debuggers and IDEs, which you need to acquire independently from the QP/C++ distribution. Generally, the examples work with the free (size limited) evaluation versions of the commercial tools. The examples list the versions of tools they were developed and tested with. Please refer to the @ref exa_ref "cross-reference section" @ref exa_sec_tools to see which embedded toolchains are used. - - -@subsection exa_sec_conf Build Configurations -QP examples @ref ports "QP ports" are provided in the following three **build configurations**: - -- **Debug** — this configuration is built with full debugging information and minimal optimization. When the QP framework finds no events to process, the framework busy-idles until there are new events to process. The @ref comp_qs "QS trace instrumentation" is **disabled**. - -- **Release** — this configuration is built with no debugging information and high optimization. Single-stepping and debugging at the source-code level is effectively impossible due to the lack of debugging information and optimized code, but the debugger can be used to download and start the executable. When the QP framework finds no events to process, the framework puts the CPU to sleep until there are new events to process. The @ref comp_qs "QS trace instrumentation" is **disabled**. - -- **Spy** — like the debug variant, this variant is built with full debugging information and minimal optimization. Additionally, it is build with the @ref comp_qs "QS trace instrumentation" enabled. The on-board serial port and the Q-Spy host application are used for sending and viewing trace data. Like the Debug configuration, the QP framework busy-idles until there are new events to process. - - -@remark -Why do you need multiple build configurations?@n -The different phases of embedded software life cycle pose different challenges. During the development and maintenance phase, for example, the emphasis is on the ease of debugging and verifying the correctness of the code, which require lower levels of optimization and special scaffolding code. In contrast, for releasing the code in the final product, the emphasis is on small memory footprint and CPU time efficiency, which require high-level of optimization and removal of any scaffolding code. To address these conflicting needs, the same source code is compiled into multiple **build configurations** that differ in the use of compiler options and activation of the scaffolding code. - - -@subsection exa_sec_qm QM Models -Many example projects contain code auto-generated by the QM modeling tool. Such projects always contain the corresponding **QM model** file, which you can open in QM, modify, and re-generate the code. - -@note -The auto-generated files are saved as **read-only**. This protects them from inadvertent modifications, which will get lost when the files are re-generated by QM (or QMC). All modifications to the auto-generated code should be done in the QM model, not in the code. - - -@subsection exa_sec_3rd Third-Party Code -The QP/C++ example projects often need to use various additional code, such as MCU register definition files, startup code, device drivers, etc., which are provided by Third-Party vendors. All such code is located in the 3rd_party top-level folder. - -@note -As far as possible, the code in the 3rd_party folder has been left unchanged from the original source. (Any modified code is clearly identified by top-level comments that detail the applied changes.) For that reason, the Third-Party code might produce **compilation warnings** in your builds. - -The code in the 3rd_party folder comes from various sources, and Quantum -Leaps, LLC expressly makes **no claims of ownership** to any of this code, even though some of the code might be customized or modified by Quantum Leaps. - -@attention -The Third-Party software components included in the 3rd_party folder are licensed under a variety of different licensing terms that are defined by the respective owners of this software and are spelled out in the `README.txt` or `LICENSE.txt` files included in the respective -sub-folders. - - -@subsection exa_own Creating your Own QP/C++ Projects -Perhaps the most important fact of life to remember is that in embedded systems nothing works until everything works. This means that you should always start with a working system and gradually evolve it, changing one thing at a time and making sure that it keeps working every step of the way. - -Keeping this in mind, the provided QP/C++ application examples, such as the super-simple Blinky, or a bit more advanced @ref dpp or @ref game, allow you to get started with a working project rather than starting from scratch. You should also always try one of the provided example projects on the same evaluation board that it was designed for, before making any changes. - -@note -The evaluation boards used in the examples are all very **inexpensive** and available from major electronic distributors (e.g., [Arrow](https://www.arrow.com/), [DigiKey](https://www.digikey.com/), [Mouser](https://www.mouser.com/), [Avnet](https://www.avnet.com)), as well as directly from the silicon vendors (e.g., a TI board is also available from TI.com). - -@remark -Even before you acquire a specific evaluation board, you can always at least **build** a project that interests you on your workstation. - - -Only after convincing yourself that the example project works "as is", you can think about creating your own projects. At this point, the easiest and recommended way is to copy the existing working example project folder (such as the Blinky example) and rename it. - -After copying the project folder, you still need to change the name of the project/workspace. The easiest and safest way to do this is to open the project/workspace in the corresponding IDE and use the Save As... option to save the project under a different name. You can do this also with the QM model file, which you can open in QM and "Save As" a different model. - -@note -By copying and re-naming an existing, working project, as opposed to creating a new one from scratch, you inherit the correct compiler and linker options an other project settings, which will help you get started much faster. - - -@subsection exa_doc Next Steps and Further Reading About QP and QM - -To work with QP/C++ effectively, you need to learn a bit more about active objects and state machines. Below is a list of links to enable you to further your knowledge: - -1. The book “Practical UML Statecharts in C/C++, 2nd Edition” [PSiCC2] and the companion web-page to the book (https://www.state-machine.com/psicc2/ -2. Free Support Forum for QP/QM (https://sourceforge.net/p/qpc/discussion/668726 ) -3. QP Code Downloads summary (https://www.state-machine.com/#Downloads ) -4. QP Application Notes (https://www.state-machine.com/an/ ) -5. "State Space" Blog (https://www.state-machine.com/category/blog/ ) - -@next{exa_ref} -*/ - -/*##########################################################################*/ -/*! @page exa_ref Cross-Reference - -@section exa_ref_kernel Native Examples (by Built-in Kernel) -- @ref exa_qv -- @ref exa_qk -- @ref exa_qxk - - -@section exa_ref_tool Native Examples (by Development Toolchain) - -@subsection exa_ref_arm-clang ARM-Clang Toolchain (ARM Compiler 6) -- @ref arm-cm_blinky_efm32-slstk3401a   (Cortex-M4) -- @ref arm-cm_dpp_ek-tm4c123gxl   (Cortex-M4) -- @ref arm-cm_dpp_efm32-slstk3401a   (Cortex-M4) -- @ref arm-cm_dpp_mbed-lpc1768   (Cortex-M4) -- @ref arm-cm_dpp_nucleo-l053r8   (Cortex-M0+) -- @ref arm-cm_dpp_nucleo-l152re   (Cortex-M3) -- @ref arm-cm_game_efm32-slstk3401a   (Cortex-M4) -- @ref arm-cm_dpp_stm32f4-discovery -- @ref arm-cm_dpp_nucleo-l053r8   (Cortex-M0+) -- @ref arm-cm_dpp_efm32-slstk3401a   (Cortex-M4) -- @ref arm-cm_dpp_nucleo-h743zi   (Cortex-M7) - - -@subsection exa_ref_gnu-arm GNU-ARM (command-line with Makefile, importable to Eclipse) -- @ref arm-cm_blinky_ek-tm4c123gxl   (Cortex-M4) -- @ref arm-cm_blinky_efm32-slstk3401a   (Cortex-M4) -- @ref arm-cm_dpp_ek-tm4c123gxl   (Cortex-M4) -- @ref arm-cm_dpp_efm32-slstk3401a   (Cortex-M4) -- @ref arm-cm_dpp_mbed-lpc1768   (Cortex-M4) -- @ref arm-cm_dpp_nucleo-l053r8   (Cortex-M0+) -- @ref arm-cm_dpp_nucleo-l152re   (Cortex-M3) -- @ref arm-cm_game_efm32-slstk3401a   (Cortex-M4) -- @ref arm-cm_dpp_stm32f4-discovery -- @ref lwip_ek-lm3s6965   (Cortex-M3) - - -@subsection exa_ref_gnu-ccs GNU-ARM with TI CCS IDE -- @ref arm-cm_dpp_ek-tm4c123gxl   (Cortex-M4) - - -@subsection exa_ref_iar-arm IAR EWARM -- @ref arm-cm_blinky_ek-tm4c123gxl   (Cortex-M4) -- @ref arm-cm_blinky_efm32-slstk3401a   (Cortex-M4) -- @ref arm-cm_dpp_ek-tm4c123gxl   (Cortex-M4) -- @ref arm-cm_dpp_efm32-slstk3401a   (Cortex-M4) -- @ref arm-cm_dpp_mbed-lpc1768   (Cortex-M4) -- @ref arm-cm_dpp_nucleo-l053r8   (Cortex-M0+) -- @ref arm-cm_dpp_nucleo-l152re   (Cortex-M3) -- @ref arm-cm_game_efm32-slstk3401a   (Cortex-M4) -- @ref arm-cr_blinky_launchxl2-tms57012   (Cortex-R4) -- @ref arm-cr_dpp_launchxl2-tms57012   (Cortex-R4) -- @ref lwip_ek-lm3s6965   (Cortex-M3) - - -@subsection exa_ref_ccs-430 CCS for MSP430 -- @ref msp430_blinky_msp-exp430f5529lp -- @ref msp430_dpp_msp-exp430f5529lp - - -@subsection exa_ref_iar-430 IAR EW430 -- @ref msp430_blinky_msp-exp430f5529lp -- @ref msp430_dpp_msp-exp430f5529lp - - -@section exa_ref_native Native Examples (by Processor) -- @ref exa_arm-cm -- @ref exa_arm-cr -- @ref exa_msp430 ("classic" MSP430 and "extended" MSP430x) - - -@section exa_ref_rtos Examples for Third-Party RTOS -- @ref exa_embos (SEGGER) -- @ref exa_freertos (Amazon Web Services) -- @ref exa_threadx (Express Logic) -- @ref exa_uc-os2 (Micrium/SiLabs) - - -@section exa_ref_os Examples for Workstations (Windows, Linux, MacOS) -The examples in the "workstation" directory are designed for workstations (running Windows, Linux, or MacOS), but they can also be used for projects intended for the **embedded** versions of the "big" operating systems (e.g., embedded-Linux or Windows-embedded). These examples are based on the following QP ports: - -- @ref exa_os "POSIX-QV" — single-threaded examples for POSIX-QV (Linux, MacOS) -- @ref exa_os "POSIX" — multi-threaded examples for POSIX (Linux, MacOS, QNX, etc.) -- @ref exa_os "Windows-QV" — single-threaded examples for Windows -- @ref exa_os "Windows" — multi-threaded examples for Windows - - -@section exa_ref_mware Examples for Third-Party Middleware -- @ref exa_lwip (open source, see http://lwip.wikia.com/wiki/LwIP_Wiki ) -- @ref exa_emwin (SEGGER, a.k.a. uC/GUI by Micrium) - - -@section exa_ref_boards Examples by Development Board -The boards chosen for the examples are generally inexpensive and self-contained with minimal need for external hardware (such as external JTAG debuggers or power supplies). Also, all the selected boards provide a virtual COM port (ideally) or can be easily connected to a TTL-to-USB serial converter cable for @ref comp_qs "QS software tracing" output. - -@note -You can hover the mouse cursor over the    icon in the list below to see the picture of the board. - - -@subsection exa_ref_arm-cm ARM Cortex-M Boards - -@anchor EK-TM4C123GXL -![EK-TM4C123GXL (TivaC LaunchPad)](bd_EK-TM4C123GXL.jpg) - -- @ref arm-cm_blinky_ek-tm4c123gxl (QV, QK kernels; ARM-KEIL, GNU-ARM, IAR-EWARM toolchains) -- @ref arm-cm_dpp_ek-tm4c123gxl (QV, QK, QXK kernels; ARM-KEIL, GNU-ARM, IAR-EWARM toolchains) -- @ref freertos_dpp_ek-tm4c123gxl (FreeRTOS kernel; ARM-KEIL, GNU-ARM, IAR-EWARM toolchains) -- @ref freertos_dpp_nucleo-h743zi (FreeRTOS kernel; ARM-KEIL, GNU-ARM, IAR-EWARM toolchains) -- @ref threadx_dpp_ek-tm4c123gxl (ThreadX kernel; IAR-EWARM toolchain) -- @ref uc-os2_dpp_ek-tm4c123gxl (uC/OS-II kernel; ARM-KEIL, GNU-ARM, IAR-EWARM toolchains) - - -@anchor EFM32-SLSTK3401A -![EFM32-SLSTK3401A](bd_EFM32-SLSTK3401A.jpg) -- @ref arm-cm_blinky_efm32-slstk3401a (QV, QK kernels; ARM-KEIL, GNU-ARM, IAR-EWARM toolchains) -- @ref arm-cm_dpp_efm32-slstk3401a (QV, QK, QXK kernels; ARM-KEIL, GNU-ARM, IAR-EWARM toolchains) -- @ref arm-cm_game_efm32-slstk3401a (QV, QK kernels; ARM-KEIL, GNU-ARM, IAR-EWARM toolchains; QWin-GUI emulation) - - -@anchor mbed-LPC1768 -![mbed-LPC1768](bd_mbed-LPC1768.jpg) -- @ref arm-cm_dpp_mbed-lpc1768 (QV, QK kernels; ARM-KEIL, GNU-ARM, IAR-EWARM toolchains) - - -@anchor NUCLEO-L053R8 -![NUCLEO-L053R8](bd_NUCLEO-L053R8.jpg) -- @ref arm-cm_dpp_nucleo-l053r8 (QV, QK, QXK kernels; ARM-KEIL, GNU-ARM, IAR-EWARM toolchains) - - -@anchor NUCLEO-L152RE -![NUCLEO-L152RE](bd_NUCLEO-L152RE.jpg) -- @ref arm-cm_dpp_nucleo-l152re (QV, QK kernels; ARM-KEIL, GNU-ARM, IAR-EWARM toolchains) -- @ref uc-os2_dpp_nucleo-l053r8 (uC/OS-II kernel; ARM-KEIL, IAR-EWARM toolchains) - - -@anchor exa_EK-LM3S6965 -![EK-LM3S6965](bd_EK-LM3S6965.jpg) -- @ref lwip_ek-lm3s6965 (**LwIP TCP/IP**; QV, QK kernels; ARM-KEIL, GNU-ARM, IAR-EWARM toolchains) - - -@anchor NUCLEO-H743ZI -![NUCLEO-H743ZI](bd_NUCLEO-H743ZI.jpg) -- @ref arm-cm_dpp_nucleo-h743zi (QV, QK, QXK kernels; ARM-KEIL, GNU-ARM, IAR-EWARM toolchains) -- @ref freertos_dpp_nucleo-h743zi (FreeRTOS kernel; ARM-KEIL, GNU-ARM, IAR-EWARM toolchains) - - -@anchor STM32F4-Discovery -![STM32F4-Discovery](bd_STM32F4-Discovery.jpg) -- @ref arm-cm_dpp_stm32f4-discovery (QV, QK, QXK kernels; ARM-KEIL, GNU-ARM, IAR-EWARM toolchains) -- @ref embos_dpp_stm32f429-discovery (embOS kernel; IAR-EWARM toolchain) -- @ref threadx_dpp_stm32f429-discovery (ThreadX kernel; IAR-EWARM toolchain) - - -@anchor STM32F746G-Discovery -![STM32F746G-Discovery](bd_STM32F746G-Disco.jpg) -- @ref arm-cm_dpp_stm32f746g-disco (QV, QK, QXK kernels; ARM-KEIL, GNU-ARM, IAR-EWARM toolchains) -- @ref freertos_dpp_stm32f746g-disco (FreeRTOS kernel; ARM-KEIL, GNU-ARM, IAR-EWARM toolchains) - - -@subsection exa_ref_arm-cr ARM Cortex-R Boards: -@anchor LAUNCHXL2-TMS57012 -![LAUNCHXL2-TMS57012](bd_LAUNCHXL2-TMS57012.jpg) -- @ref arm-cr_blinky_launchxl2-tms57012 (QV, QK kernels; CCS-TI-ARM, IAR-EWARM toolchains) -- @ref arm-cr_dpp_launchxl2-tms57012 (QV, QK kernels; CCS-TI-ARM, IAR-EWARM toolchains) - - -@subsection exa_ref_msp430 MSP430 Boards: -@anchor MSP-EXP430F5529LP -![MSP-EXP430F5529LP](bd_MSP-EXP430F5529LP.jpg) -- @ref msp430_blinky_msp-exp430f5529lp (QV, QK kernels; CCS=430, IAR-EW430 toolchains) -- @ref msp430_dpp_msp-exp430f5529lp (QV, QK kernels; CCS=430, IAR-EW430 toolchains) - - -@section exa_ref_mcu Examples by MCU Architecture -- ARM Cortex-M0/M0+ - - @ref arm-cm_dpp_nucleo-l053r8 -- ARM Cortex-M3 - - @ref arm-cm_dpp_nucleo-l152re - - @ref arm-cm_dpp_mbed-lpc1768 - - @ref lwip_ek-lm3s6965 -- ARM Cortex-M4 (with hardware FPU) - - @ref arm-cm_blinky_ek-tm4c123gxl - - @ref arm-cm_blinky_efm32-slstk3401a - - @ref arm-cm_dpp_ek-tm4c123gxl - - @ref arm-cm_dpp_efm32-slstk3401a - - @ref arm-cm_game_efm32-slstk3401a - - @ref arm-cm_dpp_stm32f4-discovery -- ARM Cortex-M7 (with hardware single-precision FPU) - - @ref arm-cm_dpp_stm32f746g-disco -- ARM Cortex-M7 (with hardware double-precision FPU) - - @ref arm-cm_dpp_nucleo-h743zi -- ARM Cortex-R - - @ref arm-cr_blinky_launchxl2-tms57012 - - @ref arm-cr_dpp_launchxl2-tms57012 - -- MSP430 - - @ref msp430_blinky_msp-exp430f5529lp - - @ref msp430_dpp_msp-exp430f5529lp - -@section exa_ref_vendor Examples by MCU Vendor -- NXP - - @ref arm-cm_dpp_mbed-lpc1768 -- Silicon Labs - - @ref arm-cm_blinky_efm32-slstk3401a - - @ref arm-cm_dpp_efm32-slstk3401a - - @ref arm-cm_game_efm32-slstk3401a -- ST Microelectronics - - @ref arm-cm_dpp_nucleo-l053r8 - - @ref arm-cm_dpp_nucleo-l152re - - @ref arm-cm_dpp_stm32f4-discovery - - @ref arm-cm_dpp_stm32f746g-disco -- Texas Instruments - - @ref arm-cm_blinky_ek-tm4c123gxl - - @ref arm-cm_dpp_ek-tm4c123gxl - - @ref arm-cm_game_efm32-slstk3401a - - @ref arm-cr_blinky_launchxl2-tms57012 - - @ref arm-cr_dpp_launchxl2-tms57012 - - @ref lwip_ek-lm3s6965 - -@next{exa_native} -*/ diff --git a/doxygen/exa_apps.dox b/doxygen/exa_apps.dox deleted file mode 100644 index 15d164a9c..000000000 --- a/doxygen/exa_apps.dox +++ /dev/null @@ -1,142 +0,0 @@ -/*##########################################################################*/ -/*! @page exa_apps Example Applications - -

To demonstrate QP/C++ features, you need to create an application that does "something interesting". Instead of inventing this "something interesting" for each and every example, most of the example projects implement one of the three example applications, which are described on the separate pages: -

- -- @subpage blinky -- @subpage dpp -- @subpage game -- @subpage pelican - -Additionally, the QP/C++ distribution contains several application examples described in the PSiCC2 book. - -- Calculator example from Chapter 2 of PSiCC2 -- Orthogonal Component design pattern -- Orthogonal Component with QM model design pattern -- Deferred Event design pattern -- Transition-to-History (with QP::QHsm class) -- Transition-to-History (with QP::QMsm class) -- QMsmTst Test State Machine based on QP::QMsm with QM model -- QHsmTst Test State Machine based on QP::QHsm with QM model -- Reminder design pattern from Chapter 5 of PSiCC2 -- Reminder design pattern different version - -@next{blinky} -*/ - -/*##########################################################################*/ -/*! @page blinky Simple Blinky Application - -

The ultra-simple Blinky example is the embedded systems' equivalent of the venerable "Hello World!" program, that is, the simplest possible working QP application that does "something". In the case of Blinky, this "something" is blinking an LED at the rate of 1Hz, where an LED turns on and remains on for 0.5 seconds on then turns off and remains off for 0.5 seconds. -

- -@image html blinky_ek-tm4c123gxl.gif Blinky on EK-TM4C123GLX (TivaC LaunchPad) - -The ultra-simple Blinky application, which consists of just one active object named `Blinky`, is intentionally kept small and illustrates only the most basic QP features, such as: - -- defining a simple Blinky active object (AO) @ref oop "class"; -- hand-coding the simple state machine of the Blinky AO; -- using a periodic time event; -- initializing the QP framework; and -- starting an AO. - - - -@section blinky_sm State Machine -The very simple state machine of the Blinky AO is shown in the figure below: - -@image html SM_blinky.png "State Machine of the Blinky AO" - -
    -
  • 1 The top-most initial transition in this state machine arms a QP time event (QTimeEvt_armX()) to deliver the `TIMEOUT` signal every half second, so that the LED can stay on for one half second and off for the other half. -
  • - -
  • 2 The initial transition leads to state "off", which turns the LED off in the entry action (`BSP_ledOff()`). -
  • - -
  • 3 When the `TIMEOUT` event arrives in the "off" state, the "off" state transitions to the "on" state -
  • -
  • 4 The "on" state turns the LED on in the entry action (`BSP_ledOn()`). -
  • -
  • 5 When the `TIMEOUT` event arrives in the "on" state, the "on" state transitions back to "off", which cases execution of the entry action, in which the LED is turned off. From that point on the cycle repeats forever because the `TIMEOUT` events keep getting generated at the pre-determined rate. -
  • -
- - -@section blinky_code State Machine Code -The Blinky state machine shown above is implemented in the blinky.c source file, as shown in the -listing below. The code has been specifically organized not to access target resources directly, but instead encapsulate all such access in the calls to the BSP (Board Support Package). So for example, instead of turning the LED on and off by writing to a specific GPIO register on an embedded board, the code calls the BSP functions `BSP_ledOn()` and `BSP_ledOff()`. These functions can then be defined differently for each Target board (or even a desktop workstation), without the need to change the state machine code. - -@note -The Blinky source code (blinky.c) is actually the same on all platforms, including Windows -and the embedded boards. The only difference is in the Board Support Package (bsp.c), which is -specific for the target. - -@includelineno examples/arm-cm/blinky_ek-tm4c123gxl/blinky.cpp - -As you can see, the structure of the state machine is very clearly recognizable in this code. Please refer to the Application Note A Crash Course in UML State Machines for exact explanation of the state machine coding techniques. - - -@subsection blinky_ao Defining Active Object (AO) Class - - -- hand-coding the simple state machine of the Blinky AO; -- using a periodic time event; -- initializing the QP framework; and -- starting an AO. - -@next{dpp} -*/ -/*##########################################################################*/ -/*! @page dpp Dining Philosophers Problem (DPP) - -The Dining Philosophers Problem (DPP) example is described in the Application Note: Dining Philosophers Problem (DPP) Example. - -@htmlonly -
- -
-Application Note: Dining Philosophers Problem (DPP) Example -
-
-@endhtmlonly - -@next{game} -*/ - -/*##########################################################################*/ -/*! @page game "Fly 'n' Shoot" Game - -The "Fly 'n' Shoot" game example is described in the Application Note: Fly 'n' Shoot Game Example. - -@htmlonly -
- -
-Application Note: Fly 'n' Shoot Game Example -
-
-@endhtmlonly - -@next{pelican} -*/ - -/*##########################################################################*/ -/*! @page pelican PEdestrian LIgtht CONtrolled (PELICAN) Crossing - -The "Fly 'n' Shoot" game example is described in the Application Note: PEdestrian LIght CONtrolled (PELICAN) Crossing Example. - -@htmlonly -
- -
-Application Note: PEdestrian LIght CONtrolled (PELICAN) Crossing Example -
-
-@endhtmlonly - -@next{ports} -*/ - - diff --git a/doxygen/exa_mware.dox b/doxygen/exa_mware.dox deleted file mode 100644 index d52675216..000000000 --- a/doxygen/exa_mware.dox +++ /dev/null @@ -1,101 +0,0 @@ -namespace QP { - -/*! @page exa_mware Examples for Third-Party Middleware - -- @subpage exa_qt -- @subpage exa_lwip -- @subpage exa_emwin - -*/ -/*##########################################################################*/ -/*! @page exa_qt Qt (GUI Framework) - -- \subpage qt_dpp -- \subpage qt_dpp-gui -- \subpage qt_game-gui -- \subpage qt_pelican-gui - -*/ - -/*##########################################################################*/ -/*! @page qt_dpp DPP (Console) for Qt - -@image html under_construction.jpg - -*/ -/*##########################################################################*/ -/*! @page qt_dpp-gui DPP-GUI for Qt - -@image html under_construction.jpg - -*/ -/*##########################################################################*/ -/*! @page qt_game-gui Game-GUI for Qt - -@image html qt_game-gui.png -@n@n -@image html qtcreator_game-gui.png -@n@n -@image html qtdesign_game-gui.png -@n@n -@image html under_construction.jpg - -*/ -/*##########################################################################*/ -/*! @page qt_pelican-gui PELICAN-GUI for Qt - -PEdestrian LIght CONtrolled (PELICAN) crossing example for Qt - -@image html qt_pelican-gui.png -@n@n -@image html qtdesign_pelican-gui.png -@n@n -@image html under_construction.jpg - -*/ - -/*##########################################################################*/ -/*! @page exa_lwip lwIP TCP/IP - -- @subpage lwip_ek-lm3s6965 - -*/ -/*##########################################################################*/ -/*! @page lwip_ek-lm3s6965 lwIP on EK-LM3S6965 - -@image html bd_EK-LM3S6965.jpg EK-LM3S6965 board - -lwIP example for Texas Instruments EK-LM3S6965 (Cortex-M3) with GNU-ARM and IAR-ARM toolsets. - -@image html bd_EK-LM3S6965_lwip.jpg QP-lwIP on EK-LM3S6965 -@n@n - -@section lwip_AN Application Note: QP and lwIP TCP/IP Stack -The [Application Note](https://www.state-machine.com/doc/AN_QP_and_lwIP.pdf) describes how to use the lightweight TCP/IP stack called lwIP with the QP real-time embedded frameworks. - -[![Application Note: QP and lwIP TCP/IP](AN-QL.png)](https://www.state-machine.com/doc/AN_QP_and_lwIP.pdf) -@htmlonly -
-Application Note: QP and lwIP TCP/IP Stack -
-@endhtmlonly - -@next{ exa_emwin} -*/ - -/*##########################################################################*/ -/*! @page exa_emwin emWin Embedded GUI - -

The Application Note "QP and emWin Embedded GUI" describes how to use QP™ with the emWin™ Embedded GUI from SEGGER and also µC/GUI from Micrium, which technically are the same products. -

- -@image html emWin_demo.jpg QP-emWin demo (DPP) running on Windows - - -To demonstrate the working examples, this Application Note uses the emWin Simulation on Windows, which is available for a free download from the SEGGER (requires registration). You need only a Windows-based PC to execute the examples provided in this Application Note. Additionally, you'd need Microsoft Visual Studio 2013 (could be the free Express Edition) or higher to re-build and debug the provided examples. - -@note -Although the QP-emWin (µC/GUI) integration runs on Windows, the application-level code uses exclusively the embedded emWin™ API and is designed to run without any modifications on embedded targets. -*/ - -} // namespace QP \ No newline at end of file diff --git a/doxygen/exa_native.dox b/doxygen/exa_native.dox deleted file mode 100644 index 5ec19d3e0..000000000 --- a/doxygen/exa_native.dox +++ /dev/null @@ -1,615 +0,0 @@ -namespace QP { - -/*##########################################################################*/ -/*! @page exa_native Native Examples (Built-in Kernels) - -

The QP/C++ framework contains real-time kernels (@ref comp_qv and @ref comp_qk), so it can run natively ("bare-metal") on single-chip microcontrollers, completely replacing a traditional RTOS. Click on the following links to see examples for the specified built-in kernels: -

-- @subpage exa_qv -- @subpage exa_qk -- @subpage exa_qxk - -Click on the following links to see examples for the specified CPU architectures: -- @subpage exa_arm-cm -- @subpage exa_arm-cr -- @subpage exa_msp430 -*/ -/*##########################################################################*/ -/*! @page exa_qv QV Kernel (Non-Preemptive, Priority-Based, Non-Blocking) - -@note -You can hover the mouse cursor over the    icon in the list below to see the picture of the board. - -- @ref arm-cm_blinky_ek-tm4c123gxl -- @ref arm-cm_blinky_efm32-slstk3401a -- @ref arm-cm_dpp_ek-tm4c123gxl -- @ref arm-cm_dpp_efm32-slstk3401a -- @ref arm-cm_dpp_mbed-lpc1768 -- @ref arm-cm_dpp_nucleo-l053r8 -- @ref arm-cm_dpp_nucleo-l152re -- @ref arm-cm_dpp_stm32f4-discovery -- @ref arm-cm_dpp_nucleo-h743zi -- @ref arm-cm_dpp_nucleo-l552ze -- @ref arm-cm_game_efm32-slstk3401a -- @ref tut_low -- @ref arm-cr_blinky_launchxl2-tms57012 -- @ref arm-cr_dpp_launchxl2-tms57012 -- @ref msp430_blinky_msp-exp430f5529lp -- @ref msp430_dpp_msp-exp430f5529lp -*/ -/*##########################################################################*/ -/*! @page exa_qk QK Kernel (Preemptive, Run-To-Completion/Non-Blocking) - -@note -You can hover the mouse cursor over the    icon in the list below to see the picture of the board. - -- @ref arm-cm_blinky_ek-tm4c123gxl -- @ref arm-cm_blinky_efm32-slstk3401a -- @ref arm-cm_dpp_ek-tm4c123gxl -- @ref arm-cm_dpp_efm32-slstk3401a -- @ref arm-cm_dpp_mbed-lpc1768 -- @ref arm-cm_dpp_nucleo-l053r8 -- @ref arm-cm_dpp_nucleo-l152re -- @ref arm-cm_game_efm32-slstk3401a -- @ref arm-cm_dpp_stm32f4-discovery -- @ref arm-cm_dpp_nucleo-h743zi -- @ref arm-cm_dpp_nucleo-l552ze -- @ref tut_low -- @ref arm-cr_blinky_launchxl2-tms57012 -- @ref arm-cr_dpp_launchxl2-tms57012 -- @ref msp430_blinky_msp-exp430f5529lp -- @ref msp430_dpp_msp-exp430f5529lp - -*/ -/*##########################################################################*/ -/*! @page exa_qxk QXK Kernel (Preemptive, Run-To-Completion/Blocking) - -@note -You can hover the mouse cursor over the    icon in the list below to see the picture of the board. - -- @ref arm-cm_dpp_ek-tm4c123gxl -- @ref arm-cm_dpp_efm32-slstk3401a -- @ref arm-cm_dpp_stm32f4-discovery -- @ref arm-cm_dpp_nucleo-l552ze -- @ref arm-cm_dpp_nucleo-h743zi -- @ref tut_low - -*/ -/*##########################################################################*/ -/*! @page exa_arm-cm ARM Cortex-M (Cortex-M0/M0+/M3/M4/M7/M33) - -@note -You can hover the mouse cursor over the    icon in the list below to see the picture of the board. - -- @subpage arm-cm_blinky_ek-tm4c123gxl -- @subpage arm-cm_blinky_efm32-slstk3401a -- @subpage arm-cm_dpp_ek-tm4c123gxl -- @subpage arm-cm_dpp_efm32-slstk3401a -- @subpage arm-cm_dpp_mbed-lpc1768 -- @subpage arm-cm_dpp_nucleo-l053r8 -- @subpage arm-cm_dpp_nucleo-l152re -- @subpage arm-cm_dpp_stm32f4-discovery -- @subpage arm-cm_dpp_nucleo-h743zi -- @subpage arm-cm_dpp_nucleo-l552ze -- @subpage arm-cm_game_efm32-slstk3401a -- @ref tut_lowr -*/ -/*##########################################################################*/ -/*! @page exa_arm-cr ARM Cortex-R - -@note -You can hover the mouse cursor over the    icon in the list below to see the picture of the board. - -- @subpage arm-cr_blinky_launchxl2-tms57012 -- @subpage arm-cr_dpp_launchxl2-tms57012 -*/ -/*##########################################################################*/ -/*! @page exa_msp430 MSP430 ("classic" MSP430 and "extended" MSP430x) - -@note -You can hover the mouse cursor over the    icon in the list below to see the picture of the board. - - -- @subpage msp430_blinky_msp-exp430f5529lp -- @subpage msp430_dpp_msp-exp430f5529lp -*/ - -/*##########################################################################*/ -/*! @page arm-cm_blinky_ek-tm4c123gxl Blinky on EK-TM4C123GXL - -

This example implements the @ref blinky "Blinky sample application" on the EK-TM4C123GLX board (ARM Cortex-M4F). -

- -@image html bd_EK-TM4C123GXL.jpg EK-TM4C123GXL board - - -The Blinky example is located in the directory qpcpp/examples/arm-cm/blinky_ek-tm4c123gxl, which is organized as follows: - -@code{c} - qpcpp/ // QP/C++ installation directory - +-examples/ // QP/C++ examples directory (application) - | +-arm-cm/ // QP/C++ examples for ARM Cortex-M - | | +-blinky_ek-tm4c123gxl/ // Blinky example on the EK-TM4C123GLX board - | | | +-qk/ // QK version - | | | | +-armclang/ // ARM-KEIL with arm-clang (compiler 6) - | | | | | +-blinky-qk.uvprojx // uVision project - | | | | +-gnu/ // GNU-ARM toolchain - | | | | | +-Makefile // Makefile for building the project - | | | | +-iar/ // IAR-ARM toolchain - | | | | | +-blinky-qk.eww // IAR EW-ARM workspace - | | | | +-bsp.cpp // BSP for the QK kernel - | | | +-qv/ // QV version - | | | | +-armclang/ // ARM-KEIL with arm-clang (compiler 6) - | | | | | +-blinky-qk.uvprojx // uVision project - | | | | +-gnu/ // GNU-ARM toolchain - | | | | | +-Makefile // Makefile for building the project with GNU-ARM - | | | | +-iar/ // IAR-ARM toolchain - | | | | | +-blinky-qk.eww // IAR EW-ARM workspace - | | | | +-bsp.cpp // BSP for the QV kernel - | | | +-win32/ // Windows emulation (multithreaded) - | | | | +-Makefile // Makefile for building the project with MinGW - | | | | +-bsp.cpp // BSP for the Win32 - | | | +-win32-qv/ // Windows emulation (single thread) - | | | | +-Makefile // Makefile for building the project with MinGW - | | | | +-bsp.cpp // BSP for the Win32-QV -@endcode - - -@section arm-cm_blinky_ek-tm4c123gxl_feat 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 -- Windows emulation (console multithreaded) -- Windows emulation (console, single threaded: win32-qv) - - -@section arm-cm_blinky_ek-tm4c123gxl_run Running the Example -Once programmed into the board, the example blinks the on-board LED about once a second. - -@image html blinky_ek-tm4c123gxl.gif Blinky on EK-TM4C123GLX (TivaC LaunchPad) - - -@section arm-cm_blinky_ek-tm4c123gxl_win Windows Emulation -The Windows emulation is a simple console application that produces the following output: - -@image html blinky_win32.png Blinky emulation running in a Windows console - -@next{arm-cm_blinky_efm32-slstk3401a} -*/ -/*##########################################################################*/ -/*! @page arm-cm_blinky_efm32-slstk3401a Blinky on EFM32-SLSTK3401A - -

This example implements the @ref blinky "Blinky sample application" on the EFM32-SLSTK3401A board (ARM Cortex-M4F). -

- -@image html bd_EFM32-SLSTK3401A.jpg EFM32-SLSTK3401A board - -The Blinky example is located in the directory qpcpp/examples/arm-cm/blinky_efm32-slstk3401a, which is organized as follows: - -@code{c} - qpcpp/ // QP/C++ installation directory - +-examples/ // QP/C++ examples directory (application) - | +-arm-cm/ // QP/C++ examples for ARM Cortex-M - | | +-blinky_efm32-slstk3401a/ // Blinky example on the EFM32-SLSTK3401A board - | | | +-qk/ // QK version - | | | | +-armclang/ // ARM-KEIL with arm-clang (compiler 6) - | | | | | +-blinky-qk.uvprojx // uVision project - | | | | +-gnu/ // GNU-ARM toolchain - | | | | | +-Makefile // Makefile for building the project - | | | | +-iar/ // IAR-ARM toolchain - | | | | | +-blinky-qk.eww // IAR EW-ARM workspace - | | | | +-bsp.cpp // BSP for the QK kernel - | | | +-qv/ // QV version - | | | | +-armclang/ // ARM-KEIL with arm-clang (compiler 6) - | | | | | +-blinky-qk.uvprojx // uVision project - | | | | +-gnu/ // GNU-ARM toolchain - | | | | | +-Makefile // Makefile for building the project with GNU-ARM - | | | | +-iar/ // IAR-ARM toolchain - | | | | | +-blinky-qk.eww // IAR EW-ARM workspace - | | | | +-bsp.cpp // BSP for the QV kernel - | | | +-win32/ // Windows emulation (multithreaded) - | | | | +-Makefile // Makefile for building the project with MinGW - | | | | +-bsp.cpp // BSP for the Win32 - | | | +-win32-qv/ // Windows emulation (single thread) - | | | | +-Makefile // Makefile for building the project with MinGW - | | | | +-bsp.cpp // BSP for the Win32-QV -@endcode - - - -@section arm-cm_blinky_efm32-slstk3401a_feat 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 -- Windows emulation (console multithreaded) -- Windows emulation (console, single threaded: win32-qv) - - -@section arm-cm_blinky_efm32-slstk3401a_run Running the Example -Once programmed into the board, the example blinks the on-board LED about once a second. - - -@section arm-cm_blinky_efm32-slstk3401a_win Windows Emulation -The Windows emulation is a simple console application that produces the following output: - -@image html blinky_win32.png Blinky emulation running in a Windows console - -@next{arm-cm_dpp_ek-tm4c123gxl} -*/ -/*##########################################################################*/ -/*! @page arm-cm_dpp_ek-tm4c123gxl DPP on EK-TM4C123GXL - -

This example implements the @ref dpp "Dining Philosophers Problem" sample application on the EK-TM4C123GLX board (ARM Cortex-M4F). -

- -@image html bd_EK-TM4C123GXL.jpg EK-TM4C123GXL board - -The DPP example is located in the directory qpcpp/examples/arm-cm/dpp_ek-tm4c123gxl, which is organized as follows: - -@code{c} - qpcpp/ // QP/C++ installation directory - +-examples/ // QP/C++ examples directory (applications) - | +-arm-cm/ // QP/C++ examples for ARM Cortex-M - | | +-dpp_ek-tm4c123gxl/ // DPP example on the EK-TM4C123GLX board - | | | +-lint-plus/ // PC-Lint-Plus version (static analysis of the application code) - | | | | +-lin.bat // batch file for running the PC-Lint - | | | | +-options.lnt // PC-Lint options file for the application code - | | | +-qk/ // QK version - | | | | +-armclang/ // ARM-KEIL with arm-clang (compiler 6) - | | | | | +-dpp-qk.uvprojx // uVision project - | | | | +-gnu/ // GNU-ARM toolchain - | | | | | +-Makefile // Makefile for building the project - | | | | +-iar/ // IAR-ARM toolchain - | | | | | +-dpp-qk.eww // IAR EW-ARM workspace - | | | | +-ti/ // TI-ARM toolchain (CCS) - | | | | | +-.ccsproject // CCS project - | | | | | +-.cproject // C Eclipse project - | | | | | +-.project // Eclipse project - | | | | +-bsp.cpp // BSP for the QK kernel - | | | | +-main.cpp // main() for the QK kernel - | | | +-qv/ // QV version - | | | | +-armclang/ // ARM-KEIL with arm-clang (compiler 6) - | | | | | +-dpp-qk.uvprojx // uVision project - | | | | +-gnu/ // GNU-ARM toolchain - | | | | | +-Makefile // Makefile for building the project with GNU-ARM - | | | | +-iar/ // IAR-ARM toolchain - | | | | | +-blinky-qk.eww // IAR EW-ARM workspace - | | | | +-bsp.cpp // BSP for the QV kernel - | | | | +-main.cpp // main() for the QV kernel - | | | +-qxk/ // QXK version - | | | | +-armclang/ // ARM-KEIL with arm-clang (compiler 6) - | | | | | +-dpp-qk.uvprojx // uVision project - | | | | +-gnu/ // GNU-ARM toolchain - | | | | | +-Makefile // Makefile for building the project - | | | | +-iar/ // IAR-ARM toolchain - | | | | | +-dpp-qk.eww // IAR EW-ARM workspace - | | | | +-ti/ // TI-ARM toolchain (CCS) - | | | | | +-.ccsproject // CCS project - | | | | | +-.cproject // C Eclipse project - | | | | | +-.project // Eclipse project - | | | | +-bsp.cpp // BSP for the QXK kernel - | | | | +-main.cpp // main() for the QXK kernel - | | | | +-test.cpp // extended (blocking) test threads - | | | +-qspyview/ // visualization and monitoring for the DPP example - | | | | +-dpp.py // QSpyView specialization for the DPP - | | | | +-qspyview.bat // batch file for launching QSpyView for DPP -@endcode - - -@section arm-cm_dpp_ek-tm4c123gxl_feat Features Demonstrated -- cooperative QV kernel - + with ARM-KEIL toolchain (arm-clang/compiler 6) - + with GNU-ARM toolchain - + with IAR-ARM toolchain - + with TI-ARM toolchain (CCS) -- preemptive run-to-completion QK kernel - + with ARM-KEIL toolchain (arm-clang/compiler 6) - + with GNU-ARM toolchain - + with IAR-ARM toolchain - + with TI-ARM toolchain (CCS) -- preemptive dual-mode QXK kernel - + with ARM-KEIL toolchain (arm-clang/compiler 6) - + with GNU-ARM toolchain - + with IAR-ARM toolchain - + with TI-ARM toolchain (CCS) -- QP/Spy software tracing (output) -- QP/Spy software tracing (input QS-RX) -- Unit Testing with QUTest -- Windows emulation with GUI (multithreaded) -- Windows emulation with GUI (single threaded, win32-qv) - - -@section arm-cm_dpp_ek-tm4c123gxl_run Running the Example -Once programmed into the board, the example rapidly toggles the Blue LED from the idle loop (blue LED glows) and toggles the Red and Green LEDs as the Philosophers change their state. Additionally, you can depress and hold the SW1 button (left) to PAUSE the application (Table transitions into the "paused" state). Releasing the SW1 button causes transition back to the "serving" state. - - -@section arm-cm_dpp_ek-tm4c123gxl_qutest Unit Testing -The examples demonstrates the QUTest unit tests for the application. - - -@section arm-cm_dpp_ek-tm4c123gxl_spy QP/Spy Software Tracing -The application also demonstrates QP/Spy software tracing output and input. To exercise this feature, you need to build and upload the Spy build configuration into the board. -*/ -/*##########################################################################*/ -/*! @page arm-cm_dpp_efm32-slstk3401a DPP on EFM32-SLSTK3401A - -

This example implements the @ref dpp "Dining Philosophers Problem" sample application on the EFM32-SLSTK3401A board (ARM Cortex-M4F). -

- -@image html bd_EFM32-SLSTK3401A.jpg EFM32-SLSTK3401A board - -The DPP example is located in the directory qpcpp/examples/arm-cm/dpp_efm32-slstk3401a and includes versions for @ref qv "cooperative QV kernel", the @ref qk "preemptive QK kernel", and the @ref qxk "preemptive dual mode QXK RTOS kernel" each provided for the ARM-KEIL, GNU-ARM, and IAR-ARM. The following annotated directory listing describes the contents of the example folder: - -@code{c} - qpcpp/ // QP/C++ installation directory - +-examples/ // QP/C++ examples directory (application) - | +-arm-cm/ // QP/C++ examples for ARM Cortex-M - | | +-dpp_efm32-slstk3401a/ // DPP example on the EK-TM4C123GLX board - | | | +-lint-plus/ // PC-Lint-Plus version (static analysis of the application code) - | | | | +-lin.bat // batch file for running the PC-Lint - | | | | +-options.lnt // PC-Lint options file for the DPP application code - | | | +-qk/ // QK version - | | | | +-armclang/ // ARM-KEIL with arm-clang (compiler 6) - | | | | | +-dpp-qk.uvprojx // uVision project - | | | | +-gnu/ // GNU-ARM toolchain - | | | | | +-Makefile // Makefile for building the project - | | | | +-iar/ // IAR-ARM toolchain - | | | | | +-dpp-qk.eww // IAR EW-ARM workspace - | | | | +-bsp.cpp // BSP for the QK kernel - | | | | +-main.cpp // main() for the QK kernel - | | | +-qv/ // QV version - | | | | +-armclang/ // ARM-KEIL with arm-clang (compiler 6) - | | | | | +-dpp-qk.uvprojx // uVision project - | | | | +-gnu/ // GNU-ARM toolchain - | | | | | +-Makefile // Makefile for building the project with GNU-ARM - | | | | +-iar/ // IAR-ARM toolchain - | | | | | +-blinky-qk.eww // IAR EW-ARM workspace - | | | | +-bsp.cpp // BSP for the QV kernel - | | | | +-main.cpp // main() for the QV kernel - | | | +-qxk/ // QXK version - | | | | +-arm/ // ARM-KEIL toolchain - | | | | | +-dpp-qk.uvprojx // uVision project - | | | | +-gnu/ // GNU-ARM toolchain - | | | | | +-Makefile // Makefile for building the project - | | | | +-iar/ // IAR-ARM toolchain - | | | | | +-dpp-qk.eww // IAR EW-ARM workspace - | | | | +-bsp.cpp // BSP for the QXK kernel - | | | | +-main.cpp // main() for the QXK kernel - | | | | +-test.cpp // extended (blocking) test threads - | | | +-qspyview/ // visualization and monitoring for the DPP example - | | | | +-dpp.py // QSpyView specialization for the DPP - | | | | +-qspyview.bat // batch file for launching QSpyView for DPP -@endcode - - -@section arm-cm_dpp_efm32-slstk3401a_feat 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 -- preemptive dual-mode QXK kernel - + with ARM-KEIL toolchain - + with GNU-ARM toolchain - + with IAR-ARM toolchain -- QP/Spy software tracing (output) -- QP/Spy software tracing (input QS-RX) -- Unit Testing with QUTest -- Windows emulation with GUI (multithreaded) -- Windows emulation with GUI (single threaded, win32-qv) - - -@section arm-cm_dpp_efm32-slstk3401a_run Running the Example -Once programmed into the board, the example rapidly toggles the LED1 from the idle loop (LED1 glows) and toggles LED0 as the Philosophers change their state. Additionally, you can depress and hold the BTN0 button (left) to PAUSE the application (Table transitions into the "paused" state). Releasing the BTN0 button causes transition back to the "serving" state. - - -@section arm-cm_dpp_efm32-slstk3401a_spy QP/Spy Software Tracing -The application also demonstrates QP/Spy software tracing output and input. To exercise this feature, you need to build and upload the Spy build configuration into the board. - -*/ -/*##########################################################################*/ -/*! @page arm-cm_dpp_mbed-lpc1768 DPP on mbed-LPC1768 - -@image html bd_mbed-LPC1768.jpg mbed-LPC1768 board - -Dining Philosophers Problem (DPP) example for NXP LPC1768 MCU (Cortex-M3) with GNU-ARM toolchain. - -@image html mbed-LPC1768_button.jpg Adding External Button to mbed-LPC1768 - -
-@image html under_construction.jpg -*/ -/*##########################################################################*/ -/*! @page arm-cm_dpp_nucleo-l053r8 DPP on STM32 NUCLEO-L053R8 - -@image html bd_NUCLEO-L053R8.jpg NUCLEO-L053R8 board - -@ref dpp "Dining Philosophers Problem (DPP)" example for STM32 NUCLEO-L053R8 MCU (Cortex-M0+). - -Demonstrated built-in kernels: -- cooperative @ref qv with ARM-Clang, ARM-Keil, GNU-ARM (Makefile and Atollic TRUEstudio), and IAR-ARM toolchains -- preemptive, run-to-completion @ref qk with ARM-Clang, ARM-Keil, GNU-ARM, and IAR-ARM toolchains -- dual-mode (run-to-completion/blocking) @ref qxk with ARM-Clang, ARM-Keil, GNU-ARM, and IAR-ARM toolchains - -Features: -- multiple active objects, including 5 instances of the same AO class (Philo) -- extended threads (the QXK version) -- [QP/Spy software tracing](https://www.state-machine.com/qtools/qpspy.html) using the virtual COM-port - -*/ -/*##########################################################################*/ -/*! @page arm-cm_dpp_nucleo-l152re DPP on STM32 NUCLEO-L152RE - -@image html bd_NUCLEO-L152RE.jpg NUCLEO-L152RE board - -@ref dpp "Dining Philosophers Problem (DPP)" example for STM32 NUCLEO-L152RE MCU (Cortex-M3). - -Demonstrated built-in kernels: -- cooperative @ref qv with ARM-Clang, ARM-Keil, GNU-ARM, and IAR-ARM toolchains -- preemptive, run-to-completion @ref qk with ARM-Clang, ARM-Keil, GNU-ARM, and IAR-ARM toolchains - -Features: -- multiple active objects, including 5 instances of the same AO class (Philo) -- [QP/Spy software tracing](https://www.state-machine.com/qtools/qpspy.html) using the virtual COM-port - -*/ -/*##########################################################################*/ -/*! @page arm-cm_dpp_stm32f4-discovery DPP on STM32F4-Discovery - -The @ref dpp "DPP example" for STM32F4-Discovery board is located directory examples/arm-cm/dpp_stm32f4-discovery. - -![STM32F4-Discovery board](bd_STM32F4-Disco.jpg) - -Demonstrated built-in kernels: -- cooperative @ref qv with ARM-Keil, GNU-ARM, and IAR-ARM toolchains -- preemptive, run-to-completion @ref qk with ARM-Keil, GNU-ARM, and IAR-ARM toolchains -- dual-mode (run-to-completion/blocking) @ref qxk with ARM-Keil, GNU-ARM, and IAR-ARM toolchains - - -Features: -- multiple active objects, including 5 instances of the same AO class (Philo) -- extended threads (the QXK version) -- [QP/Spy software tracing](https://www.state-machine.com/qtools/qpspy.html) using the virtual COM-port -- bi-directional [QP/Spy](https://www.state-machine.com/qtools/qs.html#qs_rx) (sending commands to the target) - -After you load the DPP example into the STM32F4-Discovery board, the application should start blinking the 4 on-board LEDs. You can press the User button (blue) to PAUSE the philosophers for as long as the button is depressed. The philosophers resume dining when you release the User button. (In the PAUSED state the Table active object stops granting permissions to eat, so eventually all philosophers end in the "hungry" state.) - - -@section arm-cm_dpp_stm32f4-discovery_qs QS Software Tracing -The DPP example for embOS on STM32F4-Discovery board provides the "Spy" build configuration, which outputs the QS (Quantum Spy) software tracing data through USART2. To get the data out of the board, you need to connect the TTL/RS232 converter as follows: - -
-STM32F4-Discovery | TTL/RS232 Converter --------------------|:------------------------ -PA2 | TX -PA3 | RX (currently not used) -VDD | VCC -GND | GND -
- -![STM32F4-Discovery board connected to RS232 level shifter](bd_STM32F4-Disco_RS232.jpg) - -The output is generated at 115200 baud rate. - -Here is an example invocation of the QSPY host application to receive the QS data from STM32F4-Discovery: - -@verbatim -qspy -cCOM1 -@endverbatim - -The actual COM port number might be different on your Windows machine. Please check the Device Manager to find the COM port number. - -@next{arm-cm_dpp_nucleo-l552ze} -*/ -/*##########################################################################*/ -/*! @page arm-cm_dpp_nucleo-h743zi DPP on STM32 NUCLEO-H743ZI - -![STM32 NUCLEO-H743ZI](bd_NUCLEO-H743ZI.jpg) - -@ref dpp "Dining Philosophers Problem (DPP)" example for STM32 NUCLEO-H743ZI MCU (Cortex-M7). - -Demonstrated built-in kernels: -- cooperative @ref qv with ARM-Clang, ARM-Keil, GNU-ARM (Makefile and Atollic TRUEstudio), and IAR-ARM toolchains -- preemptive, run-to-completion @ref qk with ARM-Clang, ARM-Keil, GNU-ARM, and IAR-ARM toolchains -- dual-mode (run-to-completion/blocking) @ref qxk with ARM-Clang, ARM-Keil, GNU-ARM, and IAR-ARM toolchains - -Features: -- multiple active objects, including 5 instances of the same AO class (Philo) -- extended threads (the QXK version) -- [QP/Spy software tracing](https://www.state-machine.com/qtools/qpspy.html) using the virtual COM-port -- bi-directional [QP/Spy](https://www.state-machine.com/qtools/qs.html#qs_rx) (sending commands to the target) - -*/ -/*##########################################################################*/ -/*! @page arm-cm_dpp_nucleo-l552ze DPP on STM32 STM32 NUCLEO-L552ZE Q - -![STM32 NUCLEO-L552ZE Q](bd_NUCLEO-L552ZE.jpg) - -@ref dpp "Dining Philosophers Problem (DPP)" example for STM32 NUCLEO-L552ZE Q (Cortex-M33). - -Demonstrated built-in kernels: -- cooperative @ref qv with ARM-Clang, ARM-Keil, GNU-ARM (Makefile and Atollic TRUEstudio), and IAR-ARM toolchains -- preemptive, run-to-completion @ref qk with ARM-Clang, ARM-Keil, GNU-ARM, and IAR-ARM toolchains -- dual-mode (run-to-completion/blocking) @ref qxk with ARM-Clang, ARM-Keil, GNU-ARM, and IAR-ARM toolchains - -Features: -- multiple active objects, including 5 instances of the same AO class (Philo) -- extended threads (the QXK version) -- [QP/Spy software tracing](https://www.state-machine.com/qtools/qpspy.html) using the virtual COM-port -- bi-directional [QP/Spy](https://www.state-machine.com/qtools/qs.html#qs_rx) (sending commands to the target) - -*/ -/*##########################################################################*/ -/*! @page arm-cm_game_efm32-slstk3401a "Fly 'n' Shoot" Game on EFM32-SLSTK3401A - -@image html bd_EFM32-SLSTK3401A.jpg EFM32-SLSTK3401A board - -"Fly 'n' Shoot" game example for Silicon Labs Pearl Gecko MCU (Cortex-M4F), ARM (MDK-ARM), GNU-ARM, IAR EWARM toolchains. - -@image html game_win32.jpg Game emulation running in Windows GUI -@n -@n -@image html under_construction.jpg -*/ -/*##########################################################################*/ -/*! @page arm-cr_blinky_launchxl2-tms57012 Blinky on LAUNCHXL2-TMS57012 - -@image html bd_LAUNCHXL2-TMS57012.jpg LAUNCHXL2-TMS57012 - -@ref blinky "Blinky" example for LAUNCHXL2-TMS57012 MCU (Cortex-R, Hercules) with IAR-ARM and TI toolchains. - -@image html under_construction.jpg -*/ -/*##########################################################################*/ -/*! @page arm-cr_dpp_launchxl2-tms57012 DPP on LAUNCHXL2-TMS57012 - -@image html bd_LAUNCHXL2-TMS57012.jpg LAUNCHXL2-TMS57012 - -Dining Philosophers Problem (DPP) example for LAUNCHXL2-TMS57012 MCU (Cortex-R, Hercules) with IAR-ARM and TI toolchains. - -@image html under_construction.jpg -*/ -/*##########################################################################*/ -/*! @page msp430_blinky_msp-exp430f5529lp Blinky on MSP-EXP430F5529LP - -@image html bd_MSP-EXP430F5529LP.jpg MSP-EXP430F5529LP board - -Simple Blinky example for MSP-EXP430F5529LP with CCS-430 and IAR-430 toolchains. The application blinks the LED1 (P1.0) once per second. The LED2 is rapidly toggled from the idle callback, which results in a "glow" with intensity proportional to the frequency of calling the idle callback. - -@note -The simple Blinky application does NOT support the Spy build configuration. Please see the @ref msp430_dpp_msp-exp430f5529lp "DPP example" for QS output. - -*/ -/*##########################################################################*/ -/*! @page msp430_dpp_msp-exp430f5529lp DPP on MSP-EXP430F5529LP - -@image html bd_MSP-EXP430F5529LP.jpg MSP-EXP430F5529LP board - -DPP example for MSP-EXP430F5529LP with CCS-430 and IAR-430 toolchains. The application blinks the LED1 (P1.0) when a Philosopher gets a permission to "eat". The LED2 is rapidly toggled from the idle callback, which results in a "glow" with intensity proportional to the frequency of calling the idle callback. - -@section msp430_dpp_msp-exp430f5529lp_qs QS Output -This example demonstrates the QS software tracing output in the Spy build configuration. QS uses the hardware UART1 of the MSP-EXP430F5529LP board connected to the Virtual COM Port on the debugger. This means that you don't need any additional wiring to receive the QS output on your development workstation. - -The QS trace date requires the following setting of the QSPY host utility - -@verbatim -qspy -cCOM_PORT -O2 -F2 -E1 -P1 -B1 -@endverbatim - -where `COM_PORT` denotes the Virtual COM port, which you can find out in the Device Manager. -*/ - -} // namespace QP diff --git a/doxygen/exa_os.dox b/doxygen/exa_os.dox deleted file mode 100644 index 4eddabeec..000000000 --- a/doxygen/exa_os.dox +++ /dev/null @@ -1,134 +0,0 @@ -/*! @page exa_os Examples for Workstations (Windows/POSIX) - -

The examples in the qpcpp/examples/workstation directory are designed for workstations (running Windows, Linux, or MacOS). Currently, the following examples are provided: -

- -- blinky — Simple "Blinky" active object (command-line) -- calc — Calculator example from Chapter 2 of [PSiCC2](https://www.state-machine.com/psicc2) -- calc1 — Improved Calculator example from Chapter 2 of [PSiCC2](https://www.state-machine.com/psicc2) -- calc1_sub — Calculator example with sub-machines -- comp — Orthogonal Component design pattern -- defer — Deferred Event design pattern -- dpp — DPP application from Chapter 9 of [PSiCC2](https://www.state-machine.com/psicc2) (**Spy**) -- dpp_comp — DPP with Orthogonal-Component pattern (**Spy**) -- dpp-gui — DPP (with GUI on Windows) (**Spy**) -- game-gui — "Fly 'n' Shoot" game from Chapter 1 of [PSiCC2](https://www.state-machine.com/psicc2) (**Spy**) -- history_qhsm — Transition-to-History (with QP::QHsm class) -- history_qmsm — Transition-to-History (with QP::QMsm class) -- qhsmtst — Test State Machine based on QP::QHsm from Chapter 2 of [PSiCC2](https://www.state-machine.com/psicc2) (**Spy**) -- qmsmtst — Test State Machine based on QP::QMsm (**Spy**) -- reminder — Reminder design pattern from Chapter 5 of PSiCC2 -- reminder2 — Reminder design pattern different version - -@remark -The examples marked with (**Spy**) provide the @ref exa_os-spy "Spy Configuration". - - - -@section exa_win_posix Windows and POSIX Workstations -All examples in the qpcpp/examples/workstation directory work both on Windows as well as on POSIX (Linux, MacOS). On each of these operating systems you use the same cross-platform `Makefile` co-located with each example. The provided cross-platform `Makefiles` assume the **GNU GCC toolchain**. The `Makefile` discovers the host operating system and chooses the appropriate QP port version: - -- On Windows — @ref win32 "win32" or @ref win32-qv "win32-qv"; and -- On POSIX — @ref posix "posix" or @ref posix-qv "posix-qv" (Linux, MacOS, etc.) - -@note -On Windows, the **make** utility and the GNU GCC toolchain (**MinGW**) are provided in the [QTools collection](https://www.state-machine.com/qtools), which is available for a separate download. The code can be also built with other tools as well, such as the Microsoft Visual Studio 2013 and newer. - - -@n -![Blinky example on Windows (QP linked from a library)](blinky_win.png) -@n -![Blinky example on Linux (QP built from sources)](blinky_posix.png) - - - -@section exa_os-qv Single-Threaded and Multi-Threaded QP/C++ Ports -Each of the examples can be linked to either the single-threaded QP/C++ ports (@ref win32-qv or @ref posix-qv) or multi-threaded ports (@ref win32 or @ref posix). The choice is made in the `Makefiles`, by editing the line, which defines the `QP_PORT_DIR` symbol. For instance, the following lines select the @ref win32-qv port and leave the @ref win32 port commented-out: - -@code -QP_PORT_DIR := $(QPC)/ports/win32-qv -#QP_PORT_DIR := $(QPC)/ports/win32 -@endcode - -To reverse the selection, you need to move the comment `#` character. - -@remarks -The single-threaded QP/C++ ports (@ref win32-qv "win32-qv" and @ref posix-qv "posix-qv") are recommended for **emulating** software intended for deeply-embedded targets ("dual-targeting" the embedded software development).@n - - -@attention -Examples in the workstation directory can also be used on the **embedded versions** of the desktop operating systems, such as **Embedded Linux** and **Windows Embedded**. For the embedded applications, the **multi-threaded** @ref ports_os "QP ports" ( @ref posix "posix" and @ref win32 "win32", respectively) are recommended. - - - -@section exa_os_conf Debug, Release, and Spy Build Configurations -The `Makefiles` for the examples generally support the following three build configurations. - - - -@subsection exa_os-dbg Debug Configuration -This is the default build configuration, with full debugging information and minimal optimization. To build this configuration, type: - -@code -make -@endcode - -To clean this build, type - -@code -make clean -@endcode - -The object files and the executable is located in the build sub-directory. - - - -@subsection exa_os-rel Release Configuration -This configuration is built with no debugging information and high optimization. Single-stepping and debugging might be difficult due -to the lack of debugging information and optimized code. To build this configuration, type: - -@code -make CONF=rel -@endcode - -To clean this build, type - -@code -make CONF=rel clean -@endcode - -The object files and the executable is located in the build_rel directory. - - - -@subsection exa_os-spy Spy Configuration -This configuration is built with the QP's Q-SPY trace functionality. The QP/Spy output is performed by a TCP/IP socket and requires launching the QSPY host application with the -t option. To build this configuration, type: - -@code -make CONF=spy -@endcode - -To clean this build, type - -@code -make CONF=spy clean -@endcode - -The object files and the executable are located in the build_spy sub-directory. - -@note -The Spy build configuration requires launching the [QSPY host utility](https://www.state-machine.com/qtools/qspy.html) with the `-t` command-line option **before** running the example. This is so that the example code can output the QS software tracing to the TCP/IP socket of QSPY. - - -@remark -Only specific examples support the Spy build configuration. The examples that don't support it, will report an error or will fail the linking stage. - - -@n -![DPP with QSPY example on Windows (QSPY running in a separate command-prompt)](dpp_win.png) -@n -![DPP with QSPY example on Linux (QSPY running in a separate terminal)](dpp_posix.png) - - -@next{exa_mware} -*/ diff --git a/doxygen/exa_qutest.dox b/doxygen/exa_qutest.dox deleted file mode 100644 index 84e8807e1..000000000 --- a/doxygen/exa_qutest.dox +++ /dev/null @@ -1,137 +0,0 @@ -/*! @page exa_qutest Examples for QUTest Unit Testing Harness - -

The examples in the qpcpp/examples/qutest directory demonstrate how to test embedded code with the [QUTest](https://www.state-machine.com/qtools/qutest.html) unit testing harness. Currently, the following examples are provided: -

- -- blinky — Simple "Blinky" single-active-object application -- dpp — DPP application from Chapter 9 of PSiCC2 -- evt-par — testing events with parameters -- qhsmtst — Test State Machine based on QP::QHsm with QM model -- qmsmtst — Test State Machine based on QP::QMsm with QM model -- unity_basic — Comparison of a basic testing with Unity and QUTest -- unity_mock — Comparison of a advanced testing (mocking) with Unity and QUTest - - - -@section exa_qutest-dir General Code Organization -The projects within the examples/qutest directory have the customary structure used for testing. The production code to be tested is located in the src sub-directory. The testing code is located in the test_... sub-folder(s). The following directory tree illustrates the structure for the `dpp` example: - - -
    -
  • examples/ -
  • -
      -
    • qutest/ — Examples for QUTest unit testing harness -
    • -
        -
      • dpp/ — The simple Blinky example -
      • -
          -
        • src/ — source code under test       A -
        • -
            -
          • bsp.h — BSP header -
          • -
          • dpp.h — DPP header -
          • -
          • dpp.qm — DPP model -
          • -
          • philo.cpp — `Philo` active object -
          • -
          • table.cpp — `Table` active object -
          • -
          -
        -
          -
        • test_philo/ — code for unit testing of `Philo` AO        B -
        • -
            -
          • Makefile — cross-platform makefile (host) -
          • -
          • test_philo.cpp — test fixture for `Philo` AO -
          • -
          • test_philo.py — test script for `Philo` (Python) -
          • -
          -
        -
          -
        • test_table/ — code for unit testing of `Table` AO        B -
        • -
            -
          • Makefile — cross-platform makefile (host) -
          • -
          • test_philo.cpp — test fixture for `Table` AO -
          • -
          • test_philo.py — test script for `Table` (Python) -
          • -
          -
        -
          -
        • test_dpp/ — code for unit testing of DPP application        C -
        • -
            -
          • Makefile — cross-platform makefile (host) -
          • -
          • make_efm32 — makefile for the EFM32 **embedded board** -
          • -
          • make_tm4c123 — makefile for the TM4C123 **embedded board** -
          • -
          • main.cpp — `main()` function for DPP application -
          • -
          • test_dpp.cpp — test fixture for DPP application -
          • -
          • test_init.py — test script for DPP initialization (Python) -
          • -
          • test_tick.py — test script for DPP tick processing (Python) -
          • -
          -
        -
      • .../ — Other QUTest examples... -
      • -
      • target_efm32/ — Code for the **embedded target** (EFM32)         D -
      • -
      • target_tm4c123/ — Code for the **embedded target** (TM4C123)        D -
      • -
      -
    -
- -
    -
  • A The src sub-directory contains the production code to be tested. This directory contains the .qm model file as well as the generated code from the model. -
  • - -
  • B The test_philo sub-directory contains the unit test code for a component, such as `Philo` in this case. Here, you can find the test_*.cpp **test fixture**, the test scripts test_*.py (Python) as well as the cross-platform Makefile to build the code and *run* the tests on the host. -
  • - -
  • C The test_dpp sub-directory contains integration-test code for the application, such as `DPP` in this case. The objective is to test the initialization and interactions *among* components. Here, you can find the main.c `main()` function as well as the test_dpp.cpp *test fixture*. This directory also contains make_* *makefiles* to build and run the code on the **embedded targets**. -
  • - -
  • D The target_efm32 sub-directory contains the Code needed to build and run the test code on the **embedded target**, like EFM32 in this case. -
  • -
- - -@section exa_qutest-test Building and Running the Tests -As usual in Test-Driven Development (TDD), the provided Makefiles both *build* the code and *run* the tests. - - -@subsection exa_qutest_host Host Computers -Typically, you start testing on your host computer. Before building/running the code, you need to open a terminal window and launch the [QSPY host application](https://www.state-machine.com/qtools/qspy.html) with the `-t` [command-line option](https://www.state-machine.com/qtools/qspy.html#qspy_command). - -Next, you open another terminal window, change directory to the test_... folder of interest, and type `make`. This will build the application and run the tests (Python), as shown in the screen shot below: - -![Testing on the host (Python)](qutest_py.png) - - -@subsection exa_qutest_target Embedded Targets -The QUTest testing system allows you also to easily test the code directly on the embedded target board. The dpp/test_dpp/ directory illustrates this option by providing the `makefiles` for embedded boards, such as the TM4C123 (Tiva LaunchPad) make_tm4c123. - -To test the code on an embedded board, you need to connect the board to the host computer and launch the and launch the [QSPY host application](https://www.state-machine.com/qtools/qspy.html) with the `-c COM` [command-line option](https://www.state-machine.com/qtools/qspy.html#qspy_command), where `` is the specific COM port number on your host that the board is using. - -Next, you open another terminal window, change directory to the test_... folder of interest, and type `make -f make_tm4c123`. This will build the application and run the tests (Python), as shown in the screen shot below: - -![Testing on the TM4C123 embedded target (Python)](qutest_tm4c123_py.png) - - -@next{exa_os} -*/ diff --git a/doxygen/exa_rtos.dox b/doxygen/exa_rtos.dox deleted file mode 100644 index f66641366..000000000 --- a/doxygen/exa_rtos.dox +++ /dev/null @@ -1,687 +0,0 @@ -namespace QP { - -/*##########################################################################*/ -/*! @page exa_rtos Examples for Third-Party RTOS - -The main purpose of integrating QP/C++ with conventional RTOSes is to enable you to incorporate various communication stacks (TCP/IP, USB, CAN, etc.) as well as other middleware, which requires the ability to **block** the task code. Currently the following 3rd-party RTOSes are supported: - -- @subpage exa_embos (directory examples/embos/) -- @subpage exa_freertos (directory examples/freertos/) -- @subpage exa_threadx (directory examples/threadx/) -- @subpage exa_uc-os2 (directory examples/uc-os2/) -- @subpage exa_zephyr (directory examples/zephyr/) - -@note -You do **not** need to use a third-party RTOS just to achieve preemptive multitasking with QP/C++. The framework contains a selection of built-in real-time kernels, such as the cooperative @ref srs_qv "QV kernel", the preemptive non-blocking @ref srs_qk "QK kernel", and the preemptive, dual-mode, blocking @ref srs_qxk "QXK kernel". Specifically, the QXK kernel has been designed specifically for mixing event-driven active objects with traditional **blocking code**, such as commercial middleware (TCP/IP stacks, UDP stacks, embedded file systems, etc.) or legacy software. - -@ifnot LATEX -@nav_next{exa_embos} -@endif -*/ - -/*##########################################################################*/ -/*! @page exa_embos embOS - -The QP/C++ examples for SEGGER embOS are as follows: - -- ARM Cortex-M - - @subpage embos_dpp_nucleo-h743zi (Cortex-M7)
(GNU-ARM and IAR EWARM toolsets) - -@note -You can hover the mouse cursor over the    icon in the list below to see the picture of the board. - -@ifnot LATEX -@nav_next{embos_dpp_nucleo-h743zi} -@endif -*/ -/*##########################################################################*/ -/*! @page embos_dpp_nucleo-h743zi DPP on NUCLEO-H743ZI - -The @ref dpp "DPP example" for embOS on NUCLEO-H743ZI board is located directory examples/embos/arm-cm/dpp_nucleo-h743zi. - -@image html bd_NUCLEO-H743ZI.jpg -@image latex bd_NUCLEO-H743ZI.jpg width=4.5in -@caption{NUCLEO-H743ZI} - -@ref dpp "Dining Philosophers Problem (DPP)" example for NUCLEO-H743ZI MCU (Cortex-M7). - - -Toolsets: -- GNU-ARM in directory examples/embos/arm-cm/dpp_nucleo-h743zi/gnu. Makefile provided. - -@verbatim -make -make CONF=rel -make CONF=spy -@endverbatim - -- IAR EWARM in directory examples/embos/arm-cm/dpp_nucleo-h743zi/iar. Workspace `dpp.eww` provided. - -Features: -- embOS RTOS kernel -- BSP with embOS-specific: OS_TICK_HOOK, OS_Idle(), "kernel unaware" ISRs -- multiple active objects, including 5 instances of the same AO class (Philo) -- [QP/Spy software tracing](https://www.state-machine.com/qtools/qpspy.html) using the virtual COM-port -- bi-directional [QP/Spy](https://www.state-machine.com/qtools/qs.html#qs_rx) (sending commands to the target) - -The output is generated at 115200 baud rate. - -Here is an example invocation of the QSPY host application to receive the QS data from NUCLEO-H743ZI: - -@verbatim -qspy -c COM4 -@endverbatim - -The actual COM port number might be different on your Windows machine. Please check the Device Manager to find the COM port number. - -@ifnot LATEX -@nav_next{exa_freertos} -@endif -*/ - -/*##########################################################################*/ -/*! @page exa_freertos FreeRTOS - -The QP/C++ examples for FreeRTOS are as follows: - -- ARM Cortex-M - - @subpage freertos_dpp_ek-tm4c123gxl (Cortex-M4F)
(ARM-KEIL, GNU-ARM and IAR EWARM toolchains) - - @subpage freertos_dpp_stm32f746g-disco (Cortex-M7)
(ARM-KEIL, GNU-ARM and IAR EWARM toolchains) - - @subpage freertos_dpp_nucleo-h743zi (Cortex-M7)
(ARM-KEIL, GNU-ARM and IAR EWARM toolchains) - - @subpage freertos_start-stop_nucleo-h743zi (Cortex-M7)
(ARM-KEIL, GNU-ARM and IAR EWARM toolchains) - -@note -You can hover the mouse cursor over the    icon in the list below to see the picture of the board. - -@ifnot LATEX -@nav_next{exa_os} -@endif -*/ -/*##########################################################################*/ -/*! @page freertos_dpp_ek-tm4c123gxl DPP on EK-TM4C123GXL - -@image html bd_EK-TM4C123GXL.jpg -@image latex bd_EK-TM4C123GXL.jpg width=2.5in -@caption{EK-TM4C123GXL (TivaC LaunchPad)} - -@ref dpp "DPP example" for @ref freertos "FreeRTOS" on Texas Instruments TivaC123GXL MCU (Cortex-M4F) with the following toolchains: -- ARM-Keil -- GNU-ARM -- IAR-ARM - -Demonstrated features: -- Multiple Active Objects -- Regular "kernel-aware" ISR with "FromISR" APIs - + `QF::TICK_X_FROM_ISR()` - + `QF::PUBLISH_FROM_ISR()` - + `Q_NEW_FROM_ISR()` - + `QActive::POST_FROM_ISR()` -- Hi-priority "kernel-unaware" ISR -- `vApplicationTickHook()` -- QP/Spy output over the virtual COM port (Spy build configuration) -- QP/Spy input over the virtual COM port (bi-directional Spy) (Spy build configuration) - - -@ifnot LATEX -@nav_next{freertos_dpp_stm32f746g-disco} -@endif -*/ -/*##########################################################################*/ -/*! @page freertos_dpp_stm32f746g-disco DPP on STM32F746G-Discovery - -@image html bd_STM32F746G-Disco.jpg -@image latex bd_STM32F746G-Disco.jpg width=4.75in -@caption{STM32F746G-Discovery} - -@ref dpp "DPP example" for @ref freertos "FreeRTOS" on STM32F746G-Discovery MCU (Cortex-M7) with the following toolchains: -- ARM-Keil -- GNU-ARM -- IAR-ARM - -Demonstrated features: -- Multiple Active Objects -- Regular "kernel-aware" ISR with "FromISR" APIs - + `QF::TICK_X_FROM_ISR()` - + `QF::PUBLISH_FROM_ISR()` - + `Q_NEW_FROM_ISR()` - + `QActive::POST_FROM_ISR()` -- Hi-priority "kernel-unaware" ISR -- `vApplicationTickHook()` -- QP/Spy output over the virtual COM port (Spy build configuration) -- QP/Spy input over the virtual COM port (bi-directional Spy) (Spy build configuration) - -@ifnot LATEX -@nav_next{freertos_dpp_nucleo-h743zi} -@endif -*/ -/*##########################################################################*/ -/*! @page freertos_dpp_nucleo-h743zi DPP on NUCLEO-H743ZI - -@image html bd_NUCLEO-H743ZI.jpg -@image latex bd_NUCLEO-H743ZI.jpg width=4.5in -@caption{NUCLEO-H743ZI} - -@ref dpp "Dining Philosophers Problem (DPP)" example for NUCLEO-H743ZI MCU (Cortex-M7). - -Features: -- multiple active objects, including 5 instances of the same AO class (Philo) -- [QP/Spy software tracing](https://www.state-machine.com/qtools/qpspy.html) using the virtual COM-port -- bi-directional [QP/Spy](https://www.state-machine.com/qtools/qs.html#qs_rx) (sending commands to the target) - -@ifnot LATEX -@nav_next{freertos_start-stop_nucleo-h743zi} -@endif -*/ -/*##########################################################################*/ -/*! @page freertos_start-stop_nucleo-h743zi Start-Stop on NUCLEO-H743ZI - -@image html bd_NUCLEO-H743ZI.jpg -@image latex bd_NUCLEO-H743ZI.jpg width=4.5in -@caption{NUCLEO-H743ZI} - -Start-Stop example for NUCLEO-H743ZI MCU (Cortex-M7) demonstrates staring and stopping active objects multiple times -during the runtime, as opposed to starting AOs only at the beginning. - -The code for the example is generated automatically by the [QM Model-Based Design tool](https://www.state-machine.com/products/qm/) (QM version 4.5.0 or higher). - -The start-stop application consists of two AOs: - -- the Launcher AO is started at the beginning and its job is to periodically (re)start another AO - -- the Worker AO is NOT started at the beginning, but instead it is instantiated and started by the Launcher AO. - - -@image html start-stop.png -@image latex start-stop.png width=5.0in -@caption{Launcher and Worker state machines} - - -The actual visible work is performed by the Worker AO, which blinks the yellow LED (LD1) on the NUCLEO-H743ZI board. After blinking the LED five times, the Worker AO publishes turns the blue LED (LD2), publishes the DONE event and stops itself (by calling QP::QActive::stop() on itself). - -The Launcher AO subscribes to the DONE event. Upon reception of this event, The Launcher AO gives the Worker a bit of time (at least one clock tick) to cleanly terminate and then it explicitly destroys the Worker. The Worker destructor turns the blue LED (LD2) off. - -Next the Launcher instantiates the Worker AO by means of the placement new operator and then it starts it again to repeat the cycle, which goes no forever. - - -@remarks -Because this application is intended for embedded real-time systems, it does not use the dynamic memory (heap). Instead it uses statically allocated memory (static mode of FreeRTOS) as well as **placement-new** and explicit destructor call. - - -It is possible to use the standard **new** and **delete** operators with the standard heap, or some customized memory allocation (overloaded new/delete). This goes beyond the scope of this example. - - -**Supported Toolchains**
-This example contains sub-directories for building it with various toolchains. The following toolchains are supported: - -- ARM-Keil MDK -- GNU-ARM -- IAR EWARM - -Please refer to the README.txt files in these sub-directories for more information about building and running the examples. - - -**QP/Spy Support**
-This example demonstrates the [QP/Spy software tracing](https://www.state-machine.com/qtools/qpspy.html) in the **Spy build configuration**. The QP/Spy uses the virtual COM port provided by the NUCLEO-H743ZI board. To see the QP/Spy output, you need to launch the qspy host utility, as follows (Windows command prompt): - -@verbatim -qspy -u -c COM4 -@endverbatim - -where COM4 is the particular virtual serial port registered by your NUCLEO board. You need to adjust the COM port number for your machine. - - -**Programming the NUCLEO Board**
-The NUCLEO boards appear as a USB-flash drive in the file system. Programming of the board is done by simply copying the binary into -thy flash drive letter. - -For example, assuming that the NUCLEO board appears as drive E:, you program it with the following command: - -@verbatim -copy dbg\start-stop.bin E: -@endverbatim - - -**Demonstrated Features** @n -- multiple active objects (Launcher and Worker) -- instantiating, starting and stopping active objects multiple times -- [QP/Spy software tracing](https://www.state-machine.com/qtools/qpspy.html) using the virtual COM-port -- bi-directional [QP/Spy](https://www.state-machine.com/qtools/qs.html#qs_rx) (sending commands to the target) - -@ifnot LATEX -@nav_next{exa_threadx} -@endif -*/ - -/*##########################################################################*/ -/*! @page exa_threadx ThreadX - -The QP/C++ examples for ThreadX (Express Logic) are as follows: - -- @subpage threadx_dpp_ek-tm4c123gxl (Cortex-M4F)
(IAR EWARM toolchain) -- @subpage threadx_dpp_stm32f429-discovery
(IAR EWARM toolchain) - -@note -You can hover the mouse cursor over the    icon in the list below to see the picture of the board. - -@ifnot LATEX -@nav_next{exa_uc-os2} -@endif -*/ -/*##########################################################################*/ -/*! @page threadx_dpp_ek-tm4c123gxl DPP on EK-TM4C123GXL - -@image html bd_EK-TM4C123GXL.jpg -@image latex bd_EK-TM4C123GXL.jpg width=2.5in -@caption{EK-TM4C123GXL (TivaC LaunchPad)} - -@ref dpp "DPP example" for ThreadX on Texas Instruments TivaC123GXL MCU (Cortex-M4F) with the following toolchain: -- IAR-ARM - -Demonstrated features: -- Multiple Active Objects -- QP/Spy output over the virtual COM port (Spy build configuration) -- QP/Spy input over the virtual COM port (bi-directional Spy) (Spy build configuration) - -@ifnot LATEX -@nav_next{threadx_dpp_stm32f429-discovery} -@endif -*/ -/*##########################################################################*/ -/*! @page threadx_dpp_stm32f429-discovery DPP on STM32F4-Discovery - -The @ref dpp "DPP example" for ThreadX on STM32F4-Discovery board is located directory examples/threadx/arm-cm/dpp_stm32f429-discovery. - -@image html bd_STM32F4-Disco.jpg -@image latex bd_STM32F4-Disco.jpg width=2.8in -@caption{STM32F4-Discovery} - -The sub-directory iar contains the workspace and project file that you can open in IAR EWARM IDE. - -After you load the DPP example into the STM32F4-Discovery board, the application should start blinking the 4 on-board LEDs. You can press the User button (blue) to PAUSE the philosophers for as long as the button is depressed. The philosophers resume dining when you release the User button. (In the PAUSED state the Table active object stops granting permissions to eat, so eventually all philosophers end in the "hungry" state.) - - -@section threadx_dpp_stm32f429-discovery_qs QS Software Tracing - -The DPP example for ThreadX on STM32F4-Discovery board provides the "Spy" build configuration, which outputs the QS (Quantum Spy) software tracing data through USART2. To get the data out of the board, you need to connect the TTL/RS232 converter as follows: - -
-STM32F4-Discovery | TTL/RS232 Converter --------------------|:------------------------ -PA2 | TX -PA3 | RX (currently not used) -VDD | VCC -GND | GND -
- -@image html bd_STM32F4-Disco.jpg -@image latex bd_STM32F4-Disco.jpg width=2.8in -@caption{STM32F4-Discovery} - -The output is generated at 115200 baud rate. - -Here is an example invocation of the QSPY host application to receive the QS data from STM32F4-Discovery: - -@verbatim -qspy -cCOM1 -@endverbatim - -The actual COM port number might be different on your Windows machine. Please check the Device Manager to find the COM port number. - -@ifnot LATEX -@nav_next{exa_uc-os2} -@endif -*/ - -/*##########################################################################*/ -/*! @page exa_uc-os2 uC-OS2 - -The QP/C++ examples for uC-OS2 are as follows: - -- ARM Cortex-M - - @subpage uc-os2_dpp_ek-tm4c123gxl (Cortex-M4F)
(ARM-CLANG, GNU-ARM and IAR EWARM toolsets) - - @subpage uc-os2_dpp_nucleo-l053r8 (Cortex-M0+)
(ARM-CLANG, GNU-ARM, and IAR EWARM toolsets) - -@note -You can hover the mouse cursor over the    icon in the list below to see the picture of the board. - -@ifnot LATEX -@nav_next{exa_os} -@endif -*/ -/*##########################################################################*/ -/*! @page uc-os2_dpp_ek-tm4c123gxl DPP on EK-TM4C123GXL - -@image html bd_EK-TM4C123GXL.jpg -@image latex bd_EK-TM4C123GXL.jpg width=2.5in -@caption{EK-TM4C123GXL (TivaC LaunchPad)} - -DPP example for Texas Instruments TivaC123GXL MCU (Cortex-M4F) and ARM-CLANG, GNU-ARM and IAR EWARM toolsets. - -@image html under-constr.png -@image latex under-constr.png width=1in - -@ifnot LATEX -@nav_next{uc-os2_dpp_nucleo-l053r8} -@endif -*/ -/*##########################################################################*/ -/*! @page uc-os2_dpp_nucleo-l053r8 DPP on STM32-NUCLEO-L053R8 - -@image html bd_NUCLEO-L053R8.jpg -@image latex bd_NUCLEO-L053R8.jpg width=2.5in -@caption{NUCLEO-L053R8} - -DPP example for STM32 L053R8 MCU (Cortex-M0+) and ARM-CLANG, GNU-ARM and IAR EWARM toolsets. - -@image html under-constr.png -@image latex under-constr.png width=1in - -@ifnot LATEX -@nav_next{exa_zephyr} -@endif -*/ - -/*##########################################################################*/ -/*! @page exa_zephyr Zephyr - -The QP/C++ examples for Zephyr are as follows: - -- @subpage zephyr_blinky -- @subpage zephyr_dpp - -@ifnot LATEX -@nav_next{zephyr_blinky} -@endif -*/ -/*##########################################################################*/ -/*! @page zephyr_blinky Blinky - -The "Blinky" example blinks an on-board LED once per second. The blinking is done by an Active Object (Blinky) with a state machine. The example directory contains the following files: - -@verbatim -/examples/zephyr/blinky - | - +-src/ - project sources - | | - | +-bsp.hpp - | +-bsp.cpp - | +-blinky.hpp - | +-blinky.cpp - | +-main.cpp - | - +-CMakeLists.txt - project files - +-prj.conf - project config - +-README.md -@endverbatim - - -@section zephyr_blinky-build Building and Running - -- Linux: - -@verbatim -[1] cd /examples/zephyr/blinky - -[2] source ~/zephyrproject/zephyr/zephyr-env.sh - -[3] west build -b -[3a] west build -b nucleo_h743zi -[3b] west build -b nucleo_l053r8 -... - -[4] west flush -@endverbatim - -`[1]` Open a terminal in the Blinky example directory.
-`[2]` If Zephyr project is not in your path, you might need to source the `zephyr-env.sh` shell script.
-`[3]` build the example project, where `` is any of the boards supported by Zepyr. The example has been tested with the following boards:
-`[3a]` nucleo_h743zi (ARM Cortex-M7)
-`[3b]` nucleo_l053r8 (ARM Cortex-M0+)
-`[4]` flash the board - -@remark -The example has been tested with the following boards: - -@image html bd_NUCLEO-L053R8.jpg -@image latex bd_NUCLEO-L053R8.jpg width=2.5in -@caption{NUCLEO-L053R8} - -
- -@image html bd_NUCLEO-H743ZI.jpg -@image latex bd_NUCLEO-H743ZI.jpg width=4.5in -@caption{NUCLEO-H743ZI} - -@note -The example should also work with most boards supported by Zephyr. - - -@section zephyr_blinky-output Sample Output -Once flashed to the board, the application also produces ASCII output to the serial terminal (if supported by the board): - -@verbatim -*** Booting Zephyr OS build v2.6.0-rc2-88-g3d39f72a88b3 *** -BSP::ledOff -QF::onStartup -BSP::ledOn -BSP::ledOff -BSP::ledOn -BSP::ledOff -@endverbatim - -@section zephyr_blinky-limits Limitations -The simple Blinky example does not support the QS software tracing. - -@ifnot LATEX -@nav_next{zephyr_dpp} -@endif -*/ -/*##########################################################################*/ -/*! @page zephyr_dpp DPP - -DPP example with multiple active objects. - -@verbatim -/examples/zephyr/dpp - | - +-src/ - project sources - | | - | +-bsp.hpp - | +-bsp.cpp - | +-dpp.hpp - | +-philo.cpp - | +-table.cpp - | +-main.cpp - | - +-CMakeLists.txt - project files - +-prj.conf - project config - +-README.md -@endverbatim - -@section zephyr_dpp-build Building and Running - -- Linux: - -@verbatim -[1] cd /examples/zephyr/dpp - -[2] source ~/zephyrproject/zephyr/zephyr-env.sh - -[3] west build -b -[3a] west build -b nucleo_h743zi -[3b] west build -b nucleo_l053r8 -... - -[4] west flush -@endverbatim - -`[1]` Open a terminal in the DPP example directory.
-`[2]` If Zephyr project is not in your path, you might need to source the `zephyr-env.sh` shell script.
-`[3]` build the example project, where `` is any of the boards supported by Zepyr. The example has been tested with the following boards:
-`[3a]` nucleo_h743zi (ARM Cortex-M7)
-`[3b]` nucleo_l053r8 (ARM Cortex-M0+)
-`[4]` flash the board - -@remark -The example has been tested with the following boards: - -@image html bd_NUCLEO-L053R8.jpg -@image latex bd_NUCLEO-L053R8.jpg width=2.5in -@caption{NUCLEO-L053R8} - -
- -@image html bd_NUCLEO-H743ZI.jpg -@image latex bd_NUCLEO-H743ZI.jpg width=4.5in -@caption{NUCLEO-H743ZI} - -@note -The example should also work with most boards supported by Zephyr. - - -@section zephyr_dpp-output Sample Output -Once flashed to the board, the application also produces ASCII output to the serial terminal (if supported by the board): - -@verbatim -*** Booting Zephyr OS build v2.6.0-rc2-88-g3d39f72a88b3 *** -Philo[4]->thinking -Philo[3]->eating -Philo[1]->thinking -Philo[0]->eating -Philo[4]->hungry -Philo[3]->thinking -Philo[2]->eating -Philo[1]->hungry -Philo[0]->thinking -Philo[4]->eating -Philo[3]->hungry -Philo[0]->hungry -Philo[4]->thinking -Philo[0]->eating -Philo[2]->thinking -Philo[3]->eating -Philo[4]->hungry -Philo[2]->hungry -Philo[3]->thinking -Philo[2]->eating -Philo[0]->thinking -@endverbatim - - -@section zephyr_dpp-qpspy Using the QP/SPY Software Tracing -The @ref zephyr "QP/C Zephyr port" supports the -[QSPY Software Tracing](https://www.state-machine.com/qtools/qpspy.html) -option and will add the appropriate macros and files to build the "QSPY" -configuration. - -If you wish to enable "QSPY" you can provide the option "QSPY" -in the command-line for the build. For example: - -@verbatim -west build -b nucleo_h743zi -- -DQSPY=ON -@endverbatim - -@note -The QP/Spy software tracing uses the Zephyr's console UART. This means that the Zephyr `printk()` facility cannot be used while QP/Spy is configured. - - -If yo have built the example with QP/Spy, you might want to watch the QP/Spy output. - - -@section zephyr_dpp-qspy The QSPY Host Utility -To receive the QP/Spy software tracing output you need to run a special [qspy host application](https://www.state-machine.com/qtools/qspy.html). - -@note -You might need to build the `qspy` host utility on your Linux machine. The QSPY utility is available in -[QTools collection](https://github.com/QuantumLeaps/qtools/tree/master/qspy). - - -To launch the `qspy` host utility, open a separate terminal and run -@verbatim -qspy -c -``` -specific example: -``` -qspy -c /dev/ttyACM0 -@endverbatim - - -@subsection zephyr_dpp-qs-output QSPY Output Example -After resetting the board, you should see output similar to the following: -@verbatim -########## Trg-RST QP-Ver=701,Build=220810_150847 - Obj-Dict 0x20003154->QS_RX - Obj-Dict 0x20000680->AO_Table - Obj-Dict 0x20000180->AO_Philo[0] - Obj-Dict 0x20000280->AO_Philo[1] - Obj-Dict 0x20000380->AO_Philo[2] - Obj-Dict 0x20000480->AO_Philo[3] - Obj-Dict 0x20000580->AO_Philo[4] - Obj-Dict 0x0000A52C->timerID - Usr-Dict 00000100->PHILO_STAT - Usr-Dict 00000101->PAUSED_STAT - Usr-Dict 00000102->COMMAND_STAT - Usr-Dict 00000103->CONTEXT_SW - Obj-Dict 0x20003054->EvtPool1 - Obj-Dict 0x20000180->Philo::inst[0] - Obj-Dict 0x2000026C->Philo::inst[0].m_timeEvt - Obj-Dict 0x20000280->Philo::inst[1] - Obj-Dict 0x2000036C->Philo::inst[1].m_timeEvt - Obj-Dict 0x20000380->Philo::inst[2] - Obj-Dict 0x2000046C->Philo::inst[2].m_timeEvt - Obj-Dict 0x20000480->Philo::inst[3] - Obj-Dict 0x2000056C->Philo::inst[3].m_timeEvt - Obj-Dict 0x20000580->Philo::inst[4] - Obj-Dict 0x2000066C->Philo::inst[4].m_timeEvt - Fun-Dict 0x00008929->Philo::initial - Fun-Dict 0x0000890F->Philo::thinking - Fun-Dict 0x00008917->Philo::hungry - Fun-Dict 0x0000891F->Philo::eating - Sig-Dict 00000004,Obj=0x00000000->TIMEOUT_SIG -0000000327 AO-Subsc Obj=Philo::inst[0],Sig=00000005,Obj=0x20000180 -0000000327 AO-Subsc Obj=Philo::inst[0],Sig=00000009,Obj=0x20000180 -===RTC===> St-Init Obj=Philo::inst[0],State=0x00009B1B->Philo::thinking -===RTC===> St-Entry Obj=Philo::inst[0],State=Philo::thinking -0000000328 Init===> Obj=Philo::inst[0],State=Philo::thinking -0000000334 AO-Subsc Obj=Philo::inst[1],Sig=00000005,Obj=0x20000280 -0000000334 AO-Subsc Obj=Philo::inst[1],Sig=00000009,Obj=0x20000280 -===RTC===> St-Init Obj=Philo::inst[1],State=0x00009B1B->Philo::thinking -===RTC===> St-Entry Obj=Philo::inst[1],State=Philo::thinking -0000000334 Init===> Obj=Philo::inst[1],State=Philo::thinking -0000000340 AO-Subsc Obj=Philo::inst[2],Sig=00000005,Obj=0x20000380 -0000000340 AO-Subsc Obj=Philo::inst[2],Sig=00000009,Obj=0x20000380 -===RTC===> St-Init Obj=Philo::inst[2],State=0x00009B1B->Philo::thinking -===RTC===> St-Entry Obj=Philo::inst[2],State=Philo::thinking -0000000340 Init===> Obj=Philo::inst[2],State=Philo::thinking -0000000346 AO-Subsc Obj=Philo::inst[3],Sig=00000005,Obj=0x20000480 -0000000346 AO-Subsc Obj=Philo::inst[3],Sig=00000009,Obj=0x20000480 -===RTC===> St-Init Obj=Philo::inst[3],State=0x00009B1B->Philo::thinking -===RTC===> St-Entry Obj=Philo::inst[3],State=Philo::thinking -0000000346 Init===> Obj=Philo::inst[3],State=Philo::thinking -0000000352 AO-Subsc Obj=Philo::inst[4],Sig=00000005,Obj=0x20000580 -0000000352 AO-Subsc Obj=Philo::inst[4],Sig=00000009,Obj=0x20000580 -===RTC===> St-Init Obj=Philo::inst[4],State=0x00009B1B->Philo::thinking -===RTC===> St-Entry Obj=Philo::inst[4],State=Philo::thinking -0000000352 Init===> Obj=Philo::inst[4],State=Philo::thinking - Obj-Dict 0x20000680->Table::inst - Sig-Dict 00000006,Obj=0x00000000->DONE_SIG - Sig-Dict 00000005,Obj=0x00000000->EAT_SIG - Sig-Dict 00000007,Obj=0x00000000->PAUSE_SIG - Sig-Dict 00000008,Obj=0x00000000->SERVE_SIG - Sig-Dict 00000009,Obj=0x00000000->TEST_SIG - Sig-Dict 00000011,Obj=0x20000680->HUNGRY_SIG -0000000370 AO-Subsc Obj=Table::inst,Sig=DONE_SIG -0000000370 AO-Subsc Obj=Table::inst,Sig=PAUSE_SIG -0000000370 AO-Subsc Obj=Table::inst,Sig=SERVE_SIG -0000000371 AO-Subsc Obj=Table::inst,Sig=TEST_SIG -0000000371 PHILO_STAT 0 thinking -0000000371 PHILO_STAT 1 thinking -0000000371 PHILO_STAT 2 thinking -0000000371 PHILO_STAT 3 thinking -@endverbatim - -@ifnot LATEX -@nav_next{exa_os} -@endif -*/ -} // namespace QP diff --git a/doxygen/gen/metrics.txt b/doxygen/gen/metrics.txt deleted file mode 100644 index 9c6d70d61..000000000 --- a/doxygen/gen/metrics.txt +++ /dev/null @@ -1,232 +0,0 @@ -@code{.c} -================================================ - NLOC CCN token PARAM length location ------------------------------------------------- - 3 1 13 1 4 QP::QEvt::QEvt@182-185@..\include\qep.hpp - 7 1 27 2 7 QP::QEvt::QEvt@190-196@..\include\qep.hpp - 2 1 6 0 3 QP::QEvt::~QEvt@201-203@..\include\qep.hpp - 2 1 6 0 3 QP::QHsm::~QHsm@373-375@..\include\qep.hpp - 3 1 17 1 3 QP::QHsm::init@404-406@..\include\qep.hpp - 3 1 12 0 3 QP::QHsm::state@453-455@..\include\qep.hpp - 3 1 11 0 3 QP::QHsm::getStateHandler@459-461@..\include\qep.hpp - 4 1 18 1 4 QP::QHsm::tran@491-494@..\include\qep.hpp - 4 1 18 1 4 QP::QHsm::tran_hist@497-500@..\include\qep.hpp - 4 1 18 1 4 QP::QHsm::super@503-506@..\include\qep.hpp - 4 1 30 1 4 QP::QHsm::qm_tran@510-513@..\include\qep.hpp - 4 1 30 1 4 QP::QHsm::qm_tran_init@517-520@..\include\qep.hpp - 8 1 42 2 8 QP::QHsm::qm_tran_hist@524-531@..\include\qep.hpp - 4 1 30 1 4 QP::QHsm::qm_tran_ep@535-538@..\include\qep.hpp - 8 1 40 2 8 QP::QHsm::qm_tran_xp@542-549@..\include\qep.hpp - 4 1 20 1 4 QP::QHsm::qm_entry@553-556@..\include\qep.hpp - 4 1 22 1 4 QP::QHsm::qm_entry@561-564@..\include\qep.hpp - 4 1 20 1 4 QP::QHsm::qm_exit@569-572@..\include\qep.hpp - 4 1 22 1 4 QP::QHsm::qm_exit@577-580@..\include\qep.hpp - 4 1 20 1 4 QP::QHsm::qm_sm_exit@584-587@..\include\qep.hpp - 4 1 20 1 4 QP::QHsm::qm_super_sub@591-594@..\include\qep.hpp - 6 1 26 1 6 QP::QMsm::QMsm@680-685@..\include\qep.hpp - 3 1 20 1 3 QP::QMsm::init@698-700@..\include\qep.hpp - 3 1 12 0 3 QP::QMsm::stateObj@743-745@..\include\qep.hpp - 3 1 14 0 3 QP::QMsm::getStateHandler@774-776@..\include\qep.hpp - 3 1 10 0 3 QP::QEQueue::getNFree@289-291@..\include\qequeue.hpp - 3 1 10 0 3 QP::QEQueue::getNMin@304-306@..\include\qequeue.hpp - 3 1 12 0 3 QP::QEQueue::isEmpty@318-320@..\include\qequeue.hpp - 5 2 24 0 8 QP::QPSet::setEmpty@234-241@..\include\qf.hpp - 4 3 35 0 7 QP::QPSet::isEmpty@244-250@..\include\qf.hpp - 4 3 35 0 7 QP::QPSet::notEmpty@253-259@..\include\qf.hpp - 6 3 97 1 9 QP::QPSet::hasElement@262-270@..\include\qf.hpp - 11 3 101 1 14 QP::QPSet::insert@273-286@..\include\qf.hpp - 12 3 117 1 15 QP::QPSet::remove@289-303@..\include\qf.hpp - 6 3 45 0 9 QP::QPSet::findMax@306-314@..\include\qf.hpp - 9 1 49 5 9 QP::QActive::start@481-489@..\include\qf.hpp - 3 1 18 0 3 QP::QActive::getPrio@713-715@..\include\qf.hpp - 4 1 38 1 4 QP::QActive::setPrio@720-723@..\include\qf.hpp - 3 1 9 0 3 QP::QActive::getOsObject@735-737@..\include\qf.hpp - 3 1 9 0 3 QP::QActive::getThread@743-745@..\include\qf.hpp - 5 1 20 1 5 QP::QMActive::QMActive@895-899@..\include\qf.hpp - 3 1 12 0 3 QP::QMActive::stateObj@920-922@..\include\qf.hpp - 3 1 10 0 3 QP::QTimeEvt::getAct@1115-1117@..\include\qf.hpp - 3 1 10 0 3 QP::QTimeEvt::getCtr@1120-1122@..\include\qf.hpp - 3 1 10 0 3 QP::QTimeEvt::getInterval@1125-1127@..\include\qf.hpp - 3 1 16 0 3 QP::QTimeEvt::toActive@1182-1184@..\include\qf.hpp - 3 1 16 0 3 QP::QTimeEvt::toTimeEvt@1187-1189@..\include\qf.hpp - 6 1 23 2 6 QP::QF::psInit@1348-1353@..\include\qf.hpp - 7 1 34 3 7 QP::QF::publish_@1360-1366@..\include\qf.hpp - 6 1 26 2 6 QP::QF::tick_@1373-1378@..\include\qf.hpp - 3 1 29 1 3 QP::QEvt_refCtr_inc_@112-114@..\include\qf_pkg.hpp - 3 1 29 1 3 QP::QEvt_refCtr_dec_@117-119@..\include\qf_pkg.hpp - 3 1 10 0 3 QP::QMPool::getNMin@263-265@..\include\qmpool.hpp - 3 1 10 0 3 QP::QMPool::getNFree@275-277@..\include\qmpool.hpp - 3 1 18 0 3 QP::QSpyId::getPrio@335-337@..\include\qs.hpp - 7 1 28 1 7 QP::QS::force_cast@417-423@..\include\qs.hpp - 14 3 70 1 14 QP::QS::rxPut@831-844@..\include\qs.hpp - 9 1 49 5 9 QP::QActiveDummy::start@1562-1570@..\include\qs.hpp - 3 1 18 0 3 QP::QSpyId::getPrio@137-139@..\include\qs_dummy.hpp - 3 1 11 0 3 QP::QXThread::getTimeEvt@208-210@..\include\qxk.hpp - 9 1 49 5 9 QP::QXThread::start@310-318@..\include\qxk.hpp - 2 1 39 2 3 QP::QEvt@86-88@..\src\qf\qep_hsm.cpp - 7 1 41 3 7 hsm_reservedEvt_@103-109@..\src\qf\qep_hsm.cpp - 17 3 102 3 20 hsm_state_entry_@117-136@..\src\qf\qep_hsm.cpp - 23 3 114 3 26 hsm_state_exit_@148-173@..\src\qf\qep_hsm.cpp - 4 1 27 1 4 QP::QHsm::QHsm@183-186@..\src\qf\qep_hsm.cpp - 54 9 359 2 78 QP::QHsm::init@189-266@..\src\qf\qep_hsm.cpp - 103 15 609 2 158 QP::QHsm::dispatch@269-426@..\src\qf\qep_hsm.cpp - 8 1 31 2 8 QP::QHsm::top@429-436@..\src\qf\qep_hsm.cpp - 16 3 87 1 22 QP::QHsm::isIn@439-460@..\src\qf\qep_hsm.cpp - 20 4 107 1 29 QP::QHsm::childState@463-491@..\src\qf\qep_hsm.cpp - 90 15 487 2 132 QP::QHsm::hsm_tran@494-625@..\src\qf\qep_hsm.cpp - 25 3 165 2 38 QP::QMsm::init@79-116@..\src\qf\qep_msm.cpp - 117 21 664 2 169 QP::QMsm::dispatch@119-287@..\src\qf\qep_msm.cpp - 13 3 59 1 14 QP::QMsm::isInState@290-303@..\src\qf\qep_msm.cpp - 28 7 137 1 35 QP::QMsm::childStateObj@306-340@..\src\qf\qep_msm.cpp - 51 9 294 2 62 QP::QMsm::execTatbl_@343-404@..\src\qf\qep_msm.cpp - 22 4 107 3 29 QP::QMsm::exitToTranSource_@407-435@..\src\qf\qep_msm.cpp - 44 6 227 2 55 QP::QMsm::enterHistory_@438-492@..\src\qf\qep_msm.cpp - 82 14 410 3 120 QP::QActive::post_@77-196@..\src\qf\qf_actq.cpp - 42 7 237 1 63 QP::QActive::postLIFO@204-266@..\src\qf\qf_actq.cpp - 34 3 205 0 45 QP::QActive::get_@274-318@..\src\qf\qf_actq.cpp - 10 2 72 1 11 QP::QF::getQueueMin@328-338@..\src\qf\qf_actq.cpp - 5 1 30 1 6 QP::QTicker::QTicker@351-356@..\src\qf\qf_actq.cpp - 8 1 34 2 8 QP::QTicker::init@359-366@..\src\qf\qf_actq.cpp - 3 1 21 1 3 QP::QTicker::init@369-371@..\src\qf\qf_actq.cpp - 16 2 81 2 18 QP::QTicker::dispatch@374-391@..\src\qf\qf_actq.cpp - 30 3 166 3 42 QP::QTicker::post_@394-435@..\src\qf\qf_actq.cpp - 15 1 79 2 17 QP::QActive::defer@70-86@..\src\qf\qf_defer.cpp - 32 3 157 1 50 QP::QActive::recall@94-143@..\src\qf\qf_defer.cpp - 11 3 62 1 13 QP::QActive::flushDeferred@151-163@..\src\qf\qf_defer.cpp - 18 3 151 3 26 QP::QF::poolInit@97-122@..\src\qf\qf_dyn.cpp - 41 7 282 3 57 QP::QF::newX_@125-181@..\src\qf\qf_dyn.cpp - 35 5 257 1 57 QP::QF::gc@184-240@..\src\qf\qf_dyn.cpp - 3 1 21 0 3 QP::QF::poolGetMaxBlockSize@243-245@..\src\qf\qf_dyn.cpp - 19 2 104 2 26 QP::QF::newRef_@248-273@..\src\qf\qf_dyn.cpp - 11 2 68 1 14 QP::QF::deleteRef_@276-289@..\src\qf\qf_dyn.cpp - 10 3 77 1 12 QP::QF::getPoolMin@292-303@..\src\qf\qf_dyn.cpp - 9 1 42 0 9 QP::QMPool::QMPool@71-79@..\src\qf\qf_mem.cpp - 33 5 234 3 55 QP::QMPool::init@82-136@..\src\qf\qf_mem.cpp - 43 4 208 2 71 QP::QMPool::get@139-209@..\src\qf\qf_mem.cpp - 20 2 107 2 26 QP::QMPool::put@212-237@..\src\qf\qf_mem.cpp - 3 1 12 0 3 QP::QMPool::getBlockSize@240-242@..\src\qf\qf_mem.cpp - 9 1 44 2 9 QP::QActive::psInit@83-91@..\src\qf\qf_ps.cpp - 42 6 238 3 71 QP::QActive::publish_@99-169@..\src\qf\qf_ps.cpp - 16 5 108 1 20 QP::QActive::subscribe@177-196@..\src\qf\qf_ps.cpp - 16 5 108 1 23 QP::QActive::unsubscribe@204-226@..\src\qf\qf_ps.cpp - 19 5 127 0 25 QP::QActive::unsubscribeAll@234-258@..\src\qf\qf_ps.cpp - 10 2 59 2 10 QP::QF::bzero@107-116@..\src\qf\qf_qact.cpp - 9 4 65 1 17 QP::QActive::QActive@127-143@..\src\qf\qf_qact.cpp - 30 10 198 0 46 QP::QActive::register_@151-196@..\src\qf\qf_qact.cpp - 10 3 72 0 11 QP::QActive::unregister_@204-214@..\src\qf\qf_qact.cpp - 24 6 158 1 29 QP::QPSet::QF_LOG2@225-253@..\src\qf\qf_qact.cpp - 9 1 43 0 9 QP::QEQueue::QEQueue@71-79@..\src\qf\qf_qeq.cpp - 14 2 74 2 14 QP::QEQueue::init@82-95@..\src\qf\qf_qeq.cpp - 57 8 281 3 76 QP::QEQueue::post@98-173@..\src\qf\qf_qeq.cpp - 36 5 174 2 46 QP::QEQueue::postLIFO@176-221@..\src\qf\qf_qeq.cpp - 36 4 190 1 46 QP::QEQueue::get@224-269@..\src\qf\qf_qeq.cpp - 7 1 41 2 7 QP::QMActive::init@78-84@..\src\qf\qf_qmact.cpp - 4 1 33 1 4 QP::QMActive::init@87-90@..\src\qf\qf_qmact.cpp - 6 1 32 2 6 QP::QMActive::dispatch@93-98@..\src\qf\qf_qmact.cpp - 3 1 27 1 3 QP::QMActive::isInState@101-103@..\src\qf\qf_qmact.cpp - 4 1 27 1 4 QP::QMActive::childStateObj@106-109@..\src\qf\qf_qmact.cpp - 3 1 20 0 3 QP::QMActive::getStateHandler@113-115@..\src\qf\qf_qmact.cpp - 18 2 101 3 34 QP::QTimeEvt::QTimeEvt@72-105@..\src\qf\qf_time.cpp - 34 8 217 2 58 QP::QTimeEvt::armX@108-165@..\src\qf\qf_time.cpp - 32 3 169 0 41 QP::QTimeEvt::disarm@168-208@..\src\qf\qf_time.cpp - 33 8 217 1 58 QP::QTimeEvt::rearm@211-268@..\src\qf\qf_time.cpp - 5 1 37 0 6 QP::QTimeEvt::wasDisarmed@271-276@..\src\qf\qf_time.cpp - 72 7 396 2 112 QP::QTimeEvt::tick_@279-390@..\src\qf\qf_time.cpp - 14 3 70 1 16 QP::QTimeEvt::noActive@393-408@..\src\qf\qf_time.cpp - 13 1 50 0 27 QP::QTimeEvt::QTimeEvt@411-437@..\src\qf\qf_time.cpp - 22 2 136 1 32 QP::QK::schedLock@76-107@..\src\qk\qk.cpp - 20 4 129 1 32 QP::QK::schedUnlock@110-141@..\src\qk\qk.cpp - 14 3 144 0 25 QP::QF::init@151-175@..\src\qk\qk.cpp - 3 1 9 0 4 QP::QF::stop@178-181@..\src\qk\qk.cpp - 19 6 85 0 34 QP::QF::run@184-217@..\src\qk\qk.cpp - 25 3 146 6 34 QP::QActive::start@228-261@..\src\qk\qk.cpp - 19 4 93 0 24 QK_sched_@274-297@..\src\qk\qk.cpp - 66 17 426 0 113 QK_activate_@300-412@..\src\qk\qk.cpp - 7 3 66 0 13 QP::QF::init@83-95@..\src\qv\qv.cpp - 3 1 9 0 4 QP::QF::stop@98-101@..\src\qv\qv.cpp - 45 15 248 0 92 QP::QF::run@104-195@..\src\qv\qv.cpp - 18 1 114 6 25 QP::QActive::start@206-230@..\src\qv\qv.cpp - 24 3 152 1 35 QP::QXK::schedLock@77-111@..\src\qxk\qxk.cpp - 20 4 129 1 32 QP::QXK::schedUnlock@114-145@..\src\qxk\qxk.cpp - 14 3 144 0 25 QP::QF::init@155-179@..\src\qxk\qxk.cpp - 3 1 9 0 4 QP::QF::stop@182-185@..\src\qxk\qxk.cpp - 20 6 103 0 36 QP::QF::run@188-223@..\src\qxk\qxk.cpp - 29 5 159 6 40 QP::QActive::start@234-273@..\src\qxk\qxk.cpp - 43 8 230 0 54 QXK_sched_@286-339@..\src\qxk\qxk.cpp - 59 16 382 0 96 QXK_activate_@342-437@..\src\qxk\qxk.cpp - 12 2 69 0 18 QXK_current@440-457@..\src\qxk\qxk.cpp - 19 5 105 1 26 QXK_contextSw@461-486@..\src\qxk\qxk.cpp - 14 2 110 0 23 QXK_threadExit_@490-512@..\src\qxk\qxk.cpp - 3 1 15 0 3 QP::QXMutex::QXMutex@76-78@..\src\qxk\qxk_mutex.cpp - 8 2 60 1 11 QP::QXMutex::init@81-91@..\src\qxk\qxk_mutex.cpp - 59 9 467 0 94 QP::QXMutex::tryLock@94-187@..\src\qxk\qxk_mutex.cpp - 80 11 644 1 133 QP::QXMutex::lock@190-322@..\src\qxk\qxk_mutex.cpp - 76 13 599 0 128 QP::QXMutex::unlock@325-452@..\src\qxk\qxk_mutex.cpp - 9 1 58 2 11 QP::QXSemaphore::init@76-86@..\src\qxk\qxk_sema.cpp - 54 7 346 1 79 QP::QXSemaphore::wait@89-167@..\src\qxk\qxk_sema.cpp - 27 3 131 0 38 QP::QXSemaphore::tryWait@170-207@..\src\qxk\qxk_sema.cpp - 41 7 251 0 64 QP::QXSemaphore::signal@210-273@..\src\qxk\qxk_sema.cpp - 9 1 56 2 9 QP::QXThread::QXThread@77-85@..\src\qxk\qxk_xthr.cpp - 21 4 178 1 36 QP::QXThread::delay@88-123@..\src\qxk\qxk_xthr.cpp - 14 2 57 0 16 QP::QXThread::delayCancel@126-141@..\src\qxk\qxk_xthr.cpp - 58 7 429 1 86 QP::QXThread::queueGet@144-229@..\src\qxk\qxk_xthr.cpp - 8 1 33 2 8 QP::QXThread::init@232-239@..\src\qxk\qxk_xthr.cpp - 4 1 22 1 4 QP::QXThread::init@242-245@..\src\qxk\qxk_xthr.cpp - 8 1 33 2 8 QP::QXThread::dispatch@248-255@..\src\qxk\qxk_xthr.cpp - 30 7 191 6 49 QP::QXThread::start@258-306@..\src\qxk\qxk_xthr.cpp - 96 15 480 3 133 QP::QXThread::post_@309-441@..\src\qxk\qxk_xthr.cpp - 4 1 23 1 4 QP::QXThread::postLIFO@444-447@..\src\qxk\qxk_xthr.cpp - 5 1 49 0 6 QP::QXThread::block_@450-455@..\src\qxk\qxk_xthr.cpp - 8 3 58 0 9 QP::QXThread::unblock_@458-466@..\src\qxk\qxk_xthr.cpp - 22 3 153 2 40 QP::QXThread::teArm_@469-508@..\src\qxk\qxk_xthr.cpp - 11 2 41 0 14 QP::QXThread::teDisarm_@511-524@..\src\qxk\qxk_xthr.cpp -34 file analyzed. -============================================================== -NLOC Avg.NLOC AvgCCN Avg.token function_cnt file --------------------------------------------------------------- - 6 0.0 0.0 0.0 0 ..\include\qassert.h - 235 4.1 1.0 20.6 25 ..\include\qep.hpp - 46 3.0 1.0 10.7 3 ..\include\qequeue.hpp - 322 5.1 1.6 34.3 22 ..\include\qf.hpp - 24 3.0 1.0 29.0 2 ..\include\qf_pkg.hpp - 22 0.0 0.0 0.0 0 ..\include\qk.hpp - 49 3.0 1.0 10.0 2 ..\include\qmpool.hpp - 5 0.0 0.0 0.0 0 ..\include\qpcpp.hpp - 401 8.2 1.5 41.2 4 ..\include\qs.hpp - 5 0.0 0.0 0.0 0 ..\include\qstamp.cpp - 4 0.0 0.0 0.0 0 ..\include\qstamp.hpp - 25 3.0 1.0 18.0 1 ..\include\qs_dummy.hpp - 25 0.0 0.0 0.0 0 ..\include\qs_pkg.hpp - 9 0.0 0.0 0.0 0 ..\include\quit.hpp - 8 0.0 0.0 0.0 0 ..\include\qv.hpp - 119 6.0 1.0 30.0 2 ..\include\qxk.hpp - 364 31.3 5.1 182.1 11 ..\src\qf\qep_hsm.cpp - 317 42.9 7.6 236.1 7 ..\src\qf\qep_msm.cpp - 2 0.0 0.0 0.0 0 ..\src\qf\qf_act.cpp - 251 25.6 3.8 139.6 9 ..\src\qf\qf_actq.cpp - 73 19.3 2.3 99.3 3 ..\src\qf\qf_defer.cpp - 160 19.6 3.3 137.1 7 ..\src\qf\qf_dyn.cpp - 119 21.6 2.6 120.6 5 ..\src\qf\qf_mem.cpp - 127 20.4 4.4 125.0 5 ..\src\qf\qf_ps.cpp - 122 16.6 5.0 110.4 5 ..\src\qf\qf_qact.cpp - 163 30.4 4.0 152.4 5 ..\src\qf\qf_qeq.cpp - 33 4.5 1.0 30.0 6 ..\src\qf\qf_qmact.cpp - 233 27.6 4.1 157.1 8 ..\src\qf\qf_time.cpp - 210 23.5 5.0 146.0 8 ..\src\qk\qk.cpp - 92 18.2 5.0 109.2 4 ..\src\qv\qv.cpp - 279 23.4 5.0 144.7 11 ..\src\qxk\qxk.cpp - 237 45.2 7.2 357.0 5 ..\src\qxk\qxk_mutex.cpp - 142 32.8 4.5 196.5 4 ..\src\qxk\qxk_sema.cpp - 309 21.3 3.5 128.8 14 ..\src\qxk\qxk_xthr.cpp - -========================================================================================================= -!!!! Warnings (cyclomatic_complexity > 20 or length > 500 or nloc > 1000000 or parameter_count > 10) !!!! -================================================ - NLOC CCN token PARAM length location ------------------------------------------------- - 117 21 664 2 169 QP::QMsm::dispatch@119-287@..\src\qf\qep_msm.cpp -========================================================================================== -Total nloc Avg.NLOC AvgCCN Avg.token Fun Cnt Warning cnt Fun Rt nloc Rt ------------------------------------------------------------------------------------------- - 4538 18.1 3.3 108.7 178 1 0.01 0.04 -@endcode diff --git a/doxygen/gs.dox b/doxygen/gs.dox deleted file mode 100644 index 49ab1e804..000000000 --- a/doxygen/gs.dox +++ /dev/null @@ -1,503 +0,0 @@ -/*! @page gs Getting Started - -The following sections describe how to get started with QP™/C++ quickly: -- @subpage gs_get -- @subpage gs_tut - -The YouTube Video Getting Started with QP™ Frameworks provides instructions on how to download, install and get started with QP quickly. - -[![Video: Getting Started with QP™ Real-Time Embedded Framework](gs-video.jpg)](https://youtu.be/O7ER6_VqIH0) - -@note - -Information about the QP/C++ functionality, architecture, design, and other aspects is provided in the [Certification Package](modules.html): -- @ref srs — QP/C++ functionality -- @ref sas — QP/C++ architecture -- @ref sds — QP/C++ design -- @ref autosar — QP/C++ compliance with AUTOSAR-C++ guidelines - -@nav{index,gs_get} -*/ -/*##########################################################################*/ -/*! @page gs_get Downloading & Installing QP™/C++ -@nav{gs,gs_tut} - -@section gs_bundle Downloading QP™/C++ in QP™-Bundle -The most recommended way of obtaining QP™/C++ is by downloading the @webref{#Downloads, QP-bundle™}, which includes QP™/C++ as well as other QP™ frameworks and also the @webref{products/qm, QM™ modeling tool} and the @webref{products/qtools, QTools™ collection}. The main advantage of obtaining QP™/C++ bundled together like that is that you get all components, tools and examples ready to go. - -[![QP-bundle Downloads](qp-bundle.png)](https://www.state-machine.com/#Downloads) - -@note - -If you are allergic to installers and GUIs or don't have administrator privileges you can also **download and install QP™/C++ separately** from the QP™/C++ GitHub repository, as described in the next section. - - -@section gs_gh Downloading QP™/C++ from GitHub -Go to the QP™/C++ release page on GitHub, and choose the QP™/C++ version number you wish to download. You should select the latest QP™/C++ version, unless you have a very specific reason to go with an older release. - -![QP™/C++ downloads from GitHub](qpcpp_gh.jpg) - - -@section gs_dir QP™/C++ Installation Folder -The following annotated directory tree lists the top-level directories provided in the standard QP™/C++ distribution. - -
    -
  • qpcpp/ -
  • -
      -
    • 3rd_party/ — 3rd-Party code used in the @ref exa "QP™/C++ Examples" -
    • -
    • examples/ — @ref exa "QP™/C++ Examples" -
    • -
    • ports/ — @ref ports "QP™/C++ Ports" -
    • -
    • @ref /qp-dev/qpcpp/include "include/" — Platform-independent QP™/C++ API, see also @ref api -
    • -
    • @ref /qp-dev/qpcpp/src "src/" — Platform-independent QP™/C++ source code -
    • -
    -
- -@attention -The QP/C++ GitHub repository does not contain the `3rd_party` folder, which is needed to build the @ref exa "QP™/C++ Examples". Therefore, it is highly **recommended** to download the latest [QP/C++ Release](https://github.com/QuantumLeaps/qpcpp/releases) as opposed to cloning the repo directly. - -@remark -The standard QP™/C++ distribution contains the `examples` folder with many @ref exa "Example Projects", which are specifically designed to help you learn to use QP™/C++ and to serve you as starting points for your own projects. - -
-@nav{gs,gs_tut} -*/ -/*##########################################################################*/ -/*! @page gs_tut QP™/C++ Tutorial -@nav{gs_over,tut_blinky} - -This Tutorial describes how to use the QP/C++™ real-time embedded framework in a series of progressively advancing examples. The first example ("Blinky") uses only one Active Object with a simple non-hierarchical state machine. The following example ("DPP") demonstrates multiple, communicating Active Objects. Finally, the last example ("Fly'n'Shoot" game) demonstrates all features the QP™ framework. It is highly recommended to study the simpler examples before the more advanced ones, as the basic information won't be repeated in the later examples. - -This Tutorial consists of the following lessons: -- @subpage tut_blinky -- @subpage tut_dpp -- @subpage tut_game -- @subpage tut_low - -@remark -Perhaps the most important fact of life to remember is that in embedded systems nothing works until everything works. This means that you should always start with a *working* system and *gradually* evolve it, changing one thing at a time and making sure that it keeps *working* every step of the way.
-
-Keeping this in mind, the provided @ref exa "QP™/C++ application examples", such as the super-simple Blinky, or a bit more advanced DPP or “Fly 'n' Shoot” game, allow you to get started with a working project rather than starting from scratch. You should also always try one of the provided example projects on the same evaluation board that it was designed for, before making any changes. - - -Only after convincing yourself that the example project works "as is", you can think about creating your own projects. At this point, the easiest and recommended way is to copy the existing working example project folder (such as the Blinky example) and rename it. - -After copying the project folder, you still need to change the name of the project/workspace. The easiest and safest way to do this is to open the project/workspace in the corresponding IDE and use the Save As... option to save the project under a different name. (You can do this also with the @webref{products/qm, QM model file}, which you can open in QM and "Save As" a different model.) - -@note -By copying and re-naming an existing, working project, as opposed to creating a new one from scratch, you inherit the correct compiler and linker options an other project settings, which will help you get started much faster. - -
-@nav{gs_over,tut_blinky} -*/ -/*##########################################################################*/ -/*! @page tut_blinky Simple Blinky Application -@nav{gs_tut,tut_dpp} - -The ultra-simple Blinky example is the embedded systems' equivalent of the venerable "Hello World!" program, that is, the simplest possible working QP™ application that does "something". In the case of Blinky, this "something" is blinking an LED at the rate of 1Hz, where an LED turns on and remains on for 0.5 seconds on then turns off and remains off for 0.5 seconds. - -![Blinky on EK-TM4C123GLX (TivaC LaunchPad)](blinky_ek-tm4c123gxl.gif) - -@note -The Blinky example is provided for other supported boards as well, not just TivaC LaunchPad. Please look for examples named dpp_ in the @ref exa "qpcpp/examples/examples" directory (e.g., `qpcpp/examples/arm-cm/blinky_ek-tm4c123gxl` for the EK-TM4C123GXL board (TivaC LaunchPad)). - - -The ultra-simple Blinky application, which consists of just one active object named `Blinky`, is intentionally kept small and illustrates only the most basic QP features, such as: - -- a simple Blinky active object (AO) @ref oop "class"; -- hand-coding the simple state machine of the Blinky AO; -- using a periodic time event; -- initializing the QP™ framework; -- starting an active object; and -- transferring control to QP™ to run the application. - -The details of the Blinky application are describe in the Quantum Leaps Application Note @webref{doc/AN_Getting_Started_with_QP.pdf, Getting Started with QP™ Real-Time Embedded Frameworks}. - -[![Application Note: Getting Started with QP™](AN-getting_started.jpg)](https://www.state-machine.com/doc/AN_Getting_Started_with_QP.pdf) - -
-@nav{gs_tut,tut_dpp} -*/ -/*##########################################################################*/ -/*! @page tut_dpp Dining Philosophers Problem (DPP) -@nav{tut_blinky,tut_game} - -The Dining Philosophers Problem (DPP) example is an intermediate-level application with *multiple* active objects. It illustrates the following QP™ features, such as: - -- multiple active objects, including an array of active objects; -- designing the simple state machines in the QM tool and generating the code automatically (can be also done manually); -- using multiple periodic time events; -- using mutable events with parameters; -- direct event posting to active objects; -- publish-subscribe event delivery; -- initializing the QP™ framework; -- starting multiple active objects; and -- transferring control to QP™ to run the application. - -@note -The DPP example is provided for most supported boards as well as in the command-line version (on the host). Please look for examples named dpp_ in the @ref exa "qpcpp/examples/examples" directory (e.g., `qpcpp/examples/arm-cm/dpp_ek-tm4c123gxl` for the EK-TM4C123GXL board (TivaC LaunchPad)). - -The Dining Philosophers Problem (DPP) example is described in the @webref{doc/AN_DPP.pdf, Application Note: Dining Philosophers Problem (DPP) Example}. - -[![Application Note: Dining Philosophers Problem (DPP) Example](AN_DPP.jpg)](https://www.state-machine.com/doc/AN_DPP.pdf) - - -@note -There is also a DPP variant that implements the "Philosophers" as passive "Orthogonal Components" of the "Table" active object. That DPP version is located in qpcpp/examples/examples/workstation/dpp-comp/ - -
-@nav{tut_blinky,tut_game} -*/ -/*##########################################################################*/ -/*! @page tut_game "Fly 'n' Shoot" Game -@nav{tut_dpp,tut_low} - -The "Fly 'n' shoot" game example is a moderately advanced application of a vintage computer game. It requires a LCD screen and push-buttons on the board. - -![EFM32 Pearl-Gecko board](bd_EFM32-SLSTK3401A.jpg) - -"Fly 'n' shoot" game and illustrates the following QP™ features, such as: - -- multiple active objects; -- multiple passive state machines ("Orthogonal Components"); -- multiple periodic time events; -- mutable events with parameters; -- direct event posting to active objects; -- publish-subscribe event delivery; -- developing of embedded software on Windows (see also @webref{qtools/qwin.html,QWin™ GUI Prototyping Toolkit}) - -!["Fly 'n' Shoot" game running on Windows](qwin_ani.gif) - -The "Fly 'n' Shoot" game example is described in the @webref{doc/AN_Fly-n-Shoot.pdf, Application Note: Fly 'n' Shoot Game Example}. - - -[![Application Note: Fly 'n' Shoot Game Example](AN-game.jpg)](https://www.state-machine.com/doc/AN_Fly-n-Shoot.pdf) - - -[!["Fly'n'Shoot" game tutorial video](game-video.jpg)](https://youtu.be/h_u92uLssDo) - -
-@nav{tut_dpp,tut_low} -*/ -/*##########################################################################*/ -/*! @page tut_low Low-Power Example -@nav{tut_game,exa} - -The main principle of low-power design for software is to keep the hardware in the most appropriate low-power sleep mode for as long as possible. Most commonly, the software enters a low-power sleep mode from the **idle callback** (a.k.a. "idle hook"), which is called when the software has nothing left to do and is waiting for an interrupt to deliver more work. The QP/C++ and QP/C++ Real-Time Embedded Frameworks (RTEFs) support the *idle callback* in all of the built-in real-time kernels, such as the cooperative @ref srs_qv "QV kernel", the preemptive non-blocking @ref srs_qk "QK kernel" and the preemptive blocking @ref srs_qxk "QXK kernel". Also, such an *idle callback* is provided in all 3rd-party traditional RTOS kernels that QP/C/C++ have been @ref ports_rtos "ported to". - -@remark -Design for low-power is a broad subject that requires a holistic system approach to achieve a really long battery-powered operation. This example covers only certain *software-related* aspects of the problem. - - -@section arm-cm_low_power_tick The System Clock Tick -Most real-time systems, including traditional RTOSes and RTEFs, require a periodic time -source called the **system clock tick** to keep track of time delays, timeouts, and QP::QTimeEvt "time events" in case of the event-driven QP frameworks. The system clock tick is typically a periodic -interrupt that occurs at a predetermined rate, typically between 10Hz and 1000Hz. - -While the system clock tick is very useful, it also has the unfortunate side effect of taking the processor out of a low power state as many as 1000 times per second regardless if real work needs to be done or not. This effect can have a significant negative impact on the power efficiency of the system. - -![Additional power dissipation caused by the system clock tick](exa_low-power_tick.gif) - - -@subsection arm-cm_low_power_tickless The "Tickless Mode" -Some real-time kernels use the low-power optimization called the "tickless mode" (a.k.a. "tick supression" or "dynamic tick"). In this mode, instead of indiscriminately making the clock tick fire with a fixed period, the kernel adjusts the clock ticks *dynamically*, as needed. Specifically, after each clock tick the kernel re-calculates the time for the next clock tick and then sets the clock tick interrupt for the earliest timeout it has to wait for. So for example, if the shortest wait the kernel has to attend to is 300 milliseconds into the future, then the clock interrupt will be set for 300 milliseconds. - -This approach maximizes the amount of time the processor can remain asleep, but requires the kernel to perform the additional work to calculate the dynamic tick intervals and to program them into the hardware. This additional bookkeeping adds complexity to the kernel, is often non-deterministic and, most importantly, extends the time CPU spends in the high-power active mode and thus eliminates some of the power gains the "tickless mode" was supposed to bring. - -Also, the "tickless mode" requires a more capable hardware timer that must be able of being reprogrammed for every interrupt in a wide dynamic range and also must accurately keep track of the elapsed time to correct for the irregular (dynamic) tick intervals. Still, "tickless mode" often causes a drift in the timing of the clock tick. - - -@subsection arm-cm_low_power_multiple Multiple Tick Rates -For the reasons just mentioned, the QP™ Real-Time Embedded Frameworks don't provide the "tickless mode". Instead, the QP™ frameworks support **multiple clock tick rates**, which can be turned on and off, as needed. The QP™ frameworks also provide methods for finding out *when* a given clock tick rate is not used, which allows the idle callback inside the application to shut down the given clock tick rate and also to decide which sleep mode to use for the CPU and the peripherals. - -The support for multiple static clock tick rates is much *simpler* than the "dynamic tick", and essentially does not increase the complexity of the kernel (because the same code for the single tick rate can handle other tick rates the same way). Also, multiple static tick rates require much simpler hardware timers, which can be clocked specifically to the desired frequency and don't need particularly wide dynamic range. For example, 16-bit timers or even 8-bit timers are completely adequate. - -Yet the *multiple clock rates* can deliver similar low-power operation for the system, while keeping the QP framework much simpler and easier to certify than "tickless" kernels. The rest of this example explains how to use the multiple static clock rates in QP/C/C++ and shows how to leverage this feature to achieve low-power software design. - - -@section arm-cm_low_power_app The Low-Power Example Application -The low-power example is located in QP/C and QP/C++ distributions, in the directory with the following structure: - -@code{.c} - qpc|qpcpp/ // QP/C/C++ installation directory - +-examples/ // QP/C/C++ examples directory (application) - | +-arm-cm/ // QP/C/C++ examples for ARM Cortex-M - | | +-low-power_ek-tm4c123gxl/ // Low-Power example on the EK-TM4C123GLX board - | | | +-qk/ //----------- Projects for the preemptive QK kernel - | | | | +-arm/ // ARM-KEIL toolchain - | | | | | +-low-power-qk.uvprojx // uVision project - | | | | +-gnu/ // GNU-ARM toolchain - | | | | | +-Makefile // Makefile for building the project - | | | | +-iar/ // IAR-ARM toolchain - | | | | | +-low-power-qk.eww // IAR EW-ARM workspace - | | | | +-bsp.c // BSP for the QK kernel - | | | +-qv/ //----------- Projects for the cooperative QV kernel - | | | | +-arm/ // ARM-KEIL toolchain - | | | | | +-low-power-qv.uvprojx // uVision project - | | | | +-gnu/ // GNU-ARM toolchain - | | | | | +-Makefile // Makefile for building the project with GNU-ARM - | | | | +-iar/ // IAR-ARM toolchain - | | | | | +-low-power-qk.eww // IAR EW-ARM workspace - | | | | +-bsp.c|.cpp // BSP for the QV kernel - | | | +-qxk/ //----------- Projects for the dual-mode QXK kernel - | | | | +-arm/ // ARM-KEIL toolchain - | | | | | +-low-power-qxk.uvprojx // uVision project - | | | | +-gnu/ // GNU-ARM toolchain - | | | | | +-Makefile // Makefile for building the project - | | | | +-iar/ // IAR-ARM toolchain - | | | | | +-low-power-qxk.eww // IAR EW-ARM workspace - | | | | +-bsp.c|.cpp // BSP for the QxK kernel - | | | | +-xblinky1.c|.cpp // eXtended thread for the QXK kernel -@endcode - - -@note -To focus the discussion, this example uses the **EK-TM4C123GXL** evaluation board (a.k.a. TivaC LaunchPad) with Cortex-M4 MCU. However, the general demonstrated principles apply to most modern microcontrollers. - -
-![EK-TM4C123GXL evaluation board](bd_EK-TM4C123GXL_pins.jpg) - -@subsection arm-cm_low_power_behave Behavior -The the low-power example illustrates the use of two clock tick rates to toggle the LEDs available on the EK-TM4C123GXL board. After the application code is loaded to the board, the **Green-LED** starts blinking once per two seconds (a second on and a second off), while the **Red-LED** lights up and stays on. If no buttons on the board are pressed, the **Green-LED** stops blinking after 4 times. The **Red-LED** shows the **idle** condition, where the system is in a sleep mode. - -When your press the **SW1-Button**, the **Green-LED** starts blinking as before, but additionally, the **Blue-LED** starts blinking rapidly for 13 times (1/10 of a second on and 1/10 off). - -So, depending when the SW1 switch is pressed, you can have only **Green-LED** blinking, or both green and blue blinking at different rates. The **Red-LED** appears to be on all the time. - -@note -Actually, the **Red-LED** is also turned off for very brief moments, but this is imperceptible to the human eye. Instead, the **Red-LED** appears to be on all the time, which corresponds to the application being mostly idle. - - -The behavior just described is designed for the slow human interaction with the application. However, for more precise measurements with a logic analyzer, it is more convenient to speed up the application by factor of 100. This speed up can be achieved by editing the `bsp.h` header file: - -@code{.c} -/* The following ticks-per-second constants determine the speed of the app. -* The default (#if 1) is the SLOW speed for humans to see the blinking. -* Change the #if 1 into #if 0 for FAST speed appropriate for logic analyzers. -*/ -#if 0 - #define BSP_TICKS0_PER_SEC 2U - #define BSP_TICKS1_PER_SEC 20U -#else - #define BSP_TICKS0_PER_SEC 200U - #define BSP_TICKS1_PER_SEC 2000U -#endif - -. . . -@endcode - -The following logic analyzer trace shows the behavior of the low-power application at the faster time scale. The explanation section immediately following the tarce explains the most interesting points: - -![low-power application after pressing the SW1 button](exa_low-power_sig.png) - -
-
0
-The plot shows the logic-analyzer traces of the following signals (from the top): **SW1** button (active low), **Blinky1** (Blue-LED), **Blinky0** (Green-LED) and **Idle** (Red-LED). The Idle callback turns the **Red-LED** on when the system enters the low-power sleep mode and it turns the **Red-LED** off when the system is active. -
-
1
-At this time the **SW1** button is depressed, which triggers an interrupt that activates both the slow and the fast clock tick rates. The clock tick interrupts trigger toggling of the **Blinky0** (Green-LED) at the slower tick rate-0 and **Blinky1** (Blue-LED) at the faster tick rate-1. -
-
2
-The **Blinky1** (Blue-LED) stops toggling after 13 cycles. At this point also the **Idle** callback turns the **fast tick rate-1** off. -
-
3
-The **Blinky0** (Green-LED) stops toggling after 4 cycles. -
-
4
-The **Idle** callback turns the **slow tick rate-0** off. The system enters the low-power sleep mode without any clock ticks running and remains in this state until the **SW1** button is pressed again. -
-
-
- -@note -The **Idle** line (Red-LED) goes down twice as fast as the changes in the state of the **Green-LED** or the **Blue-LED**. This is because the application uses timeouts of **2 clock ticks** for toggling these lines instead of just one clock tick, which then could be slower. This is not quite optimal for the energy dissipation (as the CPU is woken up twice as often as it needs to be), but it illustrates more accurately how the fixed clock rates work as well as the one-tick delay to enter the low-power sleep mode from the idle callback. - - -@subsection arm-cm_low_power_sm State Machines -The versions of this low-power example for the **QK** and **QV** kernels use two active objects **Blinky0** and **Blinky1**, which toggle the **Green-LED** at the slow tick rate 0, and the **Blue-LED** at the fast tick rate 1, respectively. The state machines of the Blinky0 and Blinky1 active objects are shown below: - -![state machines Blinky0 and Blinky1 active objects](exa_low-power_sm.png) - -
-
0
-The **Blinky0** state machine, in the entry action to the "active" state, calls `BSP_tickRate0_on()` to turn the tick rate-0 on. This is done *before* arming the time event `me->timeEvt0` that uses the clock rate-0. -
-
1
-Similarly, the **Blinky1** state machine, in the entry action to the "active" state, calls `BSP_tickRate1_on()` to turn the tick rate-1 on. This is done *before* arming the time event `me->timeEvt1` that uses the clock rate-1. -
-
-
- - -@subsection arm-cm_low_power_xt Extended Thread (QXK) -The version of this low-power example for the **QXK** kernel uses one active object **Blinky0** (with the state machine shown above), but instead of the Blinky1 active object, the QXK version uses an eXtended thread (::QXThread) called **XBlinky1**, with the code shown below: - -@code{.cpp} - #include "qpcpp.hpp" - #include "low_power.hpp" - #include "bsp.hpp" - - /* local objects -----------------------------------------------------------*/ - static void XBlinky1_run(QXThread * const me); - - /* global objects ----------------------------------------------------------*/ - QXThread XT_Blinky1; - QXSemaphore XSEM_sw1; - - /*..........................................................................*/ - void XBlinky1_ctor(void) { - QXThread_ctor(&XT_Blinky1, - &XBlinky1_run, /* thread routine */ - 1U); /* associate the thread with tick rate-1 */ - } - - /*..........................................................................*/ - static void XBlinky1_run(QXThread * const me) { - bool isActive = false; - - (void)me; /* unused parameter */ - for (;;) { - if (!isActive) { -[0] QXSemaphore_wait(&XSEM_sw1, QXTHREAD_NO_TIMEOUT); - isActive = true; - } - else { - uint8_t count; -[1] BSP_tickRate1_on(); - for (count = 13U; count > 0U; --count) { - BSP_led1_on(); - QXThread_delay(1U); - BSP_led1_off(); - QXThread_delay(1U); - } - isActive = false; - } - } - } -@endcode - -
-
0
The **XBlinky1** extended thread emulates the states with the `isActive` flag. When the flag is not set (meaning that the system is not active), the thread waits (and blocks) on the global semaphore `XSEM_sw1`. -
-
1
After the semaphore is signalled (from the GPIO interrupt in the BSP), the **XBlinky1** extened thread calls `BSP_tickRate1_on()` to turn the tick rate-1 on. This is done *before* later calling QXThread_delay() function, which in case uses the clock rate-1. -
-
-
- - -@subsection arm-cm_low_power_idle The Idle Callback (QK/QXK) -The most important functionality in this low-power example is implemented in the **idle callback** located in the BSP (Board Support Package). The idle callback QK_onIdle() for the preemptive QK kernel and the idle callback QXK_onIdle() for the QXK kernel are almost identical and are explained in this section. - -@code{.cpp} -[0] void QXK::onIdle(void) { - -[1] QF_INT_DISABLE(); -[2] if (((l_activeSet & (1U << SYSTICK_ACTIVE)) != 0U) /* rate-0 enabled? */ -[3] && QF_noTimeEvtsActiveX(0U)) /* no time events at rate-0? */ - { - /* safe to disable SysTick and interrupt */ -[4] SysTick->CTRL &= ~(SysTick_CTRL_TICKINT_Msk | SysTick_CTRL_ENABLE_Msk); -[5] l_activeSet &= ~(1U << SYSTICK_ACTIVE); /* mark rate-0 as disabled */ - } -[6] if (((l_activeSet & (1U << TIMER0_ACTIVE)) != 0U) /* rate-1 enabled? */ -[7] && QF_noTimeEvtsActiveX(1U)) /* no time events at rate-1? */ - { - /* safe to disable Timer0 and interrupt */ -[8] TIMER0->CTL &= ~(1U << 0); /* disable Timer0 */ -[9] TIMER0->IMR &= ~(1U << 0); /* disable timer interrupt */ -[10] l_activeSet &= ~(1U << TIMER0_ACTIVE); /* mark rate-1 as disabled */ - } -[11] QF_INT_ENABLE(); - -[12] GPIOF->DATA_Bits[LED_RED] = 0xFFU; /* turn LED on, see NOTE2 */ -[13] __WFI(); // wait for interrupt */ -[14] GPIOF->DATA_Bits[LED_RED] = 0x00U; /* turn LED off, see NOTE2 */ - } -@endcode - -
-
0
The idle callback for QK and QXK are called from the idle loop with interrupts enabled. -
-
1
Interrupts are disabled to access the shared bitmask `l_activeSet`, which stores the information about active clock rates and peripherals. This bitmask is shared between the idle callback and the application-level threads. -
-
2
If the SYSTICK timer is active (source of the tick-0 rate)... -
-
3
The `QF_noTimeEvtsActiveX(0)` function is called to check whether no time events are active at the clock rate-0. - -> NOTE: The QF_noTimeEvtsActiveX() function is designed to be called from a critical section, which is the case here. - -
-
4
If both of these conditions hold, it is safe to turn the clock rate-0 off, which is done here. -
-
5
The bit indicating that SYSTICK timer is active is cleared in the `l_activeSet` bitmask. -
-
6
Simliarly, the bit corresponding to TIMER0 is checked in the `l_activeSet` bitmask. -
-
7
The `QF_noTimeEvtsActiveX(1)` function is called to check whether no time events are active at the clock rate-1. -
-
8-9
If both of these conditions hold, it is safe to turn the clock rate-1 off, which is done here. -
-
10
The bit indicating that TIMER0 timer is active is cleared in the `l_activeSet` bitmask. -
-
11
Interrupts are enabled, so the following code is no logner inside critical section -
-
12
The **Red-LED** is turned ON right before entering the low-power sleep mode -
-
13
The `__WFI()` instruction stops the CPU and enters the **low-power sleep mode** -
-
14
The **Red-LED** is turned off after waking up from the sleep mode -
-
-
- - -@subsection arm-cm_low_power_idle-qv The Idle Callback (QV) -The idle callback QV_onIdle() for the cooperative QV kernel is slightly different, because it is called with interrupts **disabled**. The following listing shows the complete QV_onIdle() callback, with the most important points explained in the section below: - -@code{.cpp} -[0] void QV::onIdle(void) { /* NOTE: called with interrupts DISABLED */ - -[1] if (((l_activeSet & (1U << SYSTICK_ACTIVE)) != 0U) /* rate-0 enabled? */ -[2] && QF_noTimeEvtsActiveX(0U)) /* no time events at rate-0? */ - { - /* safe to disable SysTick and interrupt */ - SysTick->CTRL &= ~(SysTick_CTRL_TICKINT_Msk | SysTick_CTRL_ENABLE_Msk); - l_activeSet &= ~(1U << SYSTICK_ACTIVE); /* mark rate-0 as disabled */ - } - if (((l_activeSet & (1U << TIMER0_ACTIVE)) != 0U) /* rate-1 enabled? */ - && QF_noTimeEvtsActiveX(1U)) /* no time events at rate-1? */ - { - /* safe to disable Timer0 and interrupt */ - TIMER0->CTL &= ~(1U << 0); /* disable Timer0 */ - TIMER0->IMR &= ~(1U << 0); /* disable timer interrupt */ - l_activeSet &= ~(1U << TIMER0_ACTIVE); /* mark rate-1 as disabled */ - } - - GPIOF->DATA_Bits[LED_RED] = 0xFFU; /* turn LED on, see NOTE2 */ -[3] QV_CPU_SLEEP(); /* atomically go to sleep and enable interrupts */ - GPIOF->DATA_Bits[LED_RED] = 0x00U; /* turn LED off, see NOTE2 */ - } -@endcode - -
-
0
The idle callback for QV is called from the QV event-loop with interrupts **disabled**. -
-
1
The `l_activeSet` bitmask is tested right away, because interrupts are already disabled -
-
2
The `QF_noTimeEvtsActiveX(0)` function is called to check whether no time events are active at the clock rate-0. - -> NOTE: The QF_noTimeEvtsActiveX() function is designed to be called from a critical section, which is the case here. - -
-
3
The QV_CPU_SLEEP() macro enters **low-power sleep mode** with interrupts still disabled. This port-specific macro is designed to re-anable interrupts **atomically** with entering the sleep mode. -
-
- -
-@nav{tut_game,exa} -*/ diff --git a/doxygen/history.dox b/doxygen/history.dox deleted file mode 100644 index a93e13f0c..000000000 --- a/doxygen/history.dox +++ /dev/null @@ -1,2959 +0,0 @@ -/** @page history Design History File (DHF) - -@image html qcp_banner.jpg -@image latex qcp_banner.jpg width=6.5in - -@remark -This document is part of the @webref{products/qp#CERT,QP Certification Pack}, which has been specifically designed to aid companies in **safety certification** of their software based on the QP real-time embedded frameworks. - -@section qpcpp_7_2_1 Version 7.2.1, 2023-01-15 -__QP/C++ Source Code:__ -- Changed the design of the QP::QXMutex class to include QP::QActive by composition rather than inheritance. - -__Ports:__ -- Fixed problems in QK ports for ARM Cortex-M: in case a regular IRQ is used for returning to the thread context. The port didn't handle correctly #QK_USE_IRQ_NUM above 32. -- Fixed problems in QXK ports for ARM Cortex-M: in case a regular IRQ is used for returning to the thread context. The port didn't handle correctly #QK_USE_IRQ_NUM above 32. - -__Bug Fixes:__ -- [bug#328 Assertion qxk:720 in QP/​C/​C++ 7.2.0](https://sourceforge.net/p/qpc/bugs/328) - -@attention -This bug in QXK affects releases QP/C++ @ref qpcpp_7_1_0 "7.1.0" through @ref qpcpp_7_2_0 "7.2.0" - - -@section qpcpp_7_2_0 Version 7.2.0, 2023-01-06 -__QP/C++ Source Code:__ -- Added "enumeration dictionaries" for QS software tracing (see QS_ENUM_DICTIONARY()) -- Introduced common callback `QF_onContextSw()` used in all built-in kernels (QV, QK, QXK). This callback is enabled by the macro #QF_ON_CONTEXT_SW. -- Removed callback `QK_onContextSW()` and macro QK_ON_CONTEXT_SW and replaced with `QF_onContextSw()`/#QF_ON_CONTEXT_SW. -- Removed callback `QXK_onContextSW()` and macro QXK_ON_CONTEXT_SW and replaced with `QF_onContextSw()`/#QF_ON_CONTEXT_SW. -- Added callback `QF_onContextSW()` and macro #QF_ON_CONTEXT_SW to the QV kernel. -- added configuration macro #QS_CTR_SIZE to determine the size of the type QS::QSCtr (see also [feature#195](https://sourceforge.net/p/qpc/feature-requests/195)) -- Modified QMsm::childStateObj() implementation to correctly handle submachine states (see also [bug#316](https://sourceforge.net/p/qpc/bugs/316)) -- Added automatic generation of the QS function dictionary for the QP::QHsm::top() state handler function. This happens only once on the first call to QP::QHsm::init(). - -@note -It is no longer necessary to generate QS function dictionary for QP::QHsm::top() in the application (although it is still allowed, but wasteful). - -__Ports:__ -- `ports/arm-cm` added setup of the FPU (if configured) to all build-in kernels (QV, QK, QXK) and toolchains (ARMCLANG, GNU-ARM, IAR). -- `ports/arm-cm` all ports now clear the FPCA bit in the CONTROL register (if FPU configured) right before starting the interrupts. That potentially saves the stack space (MSP) for the automatically reserved FPU context. - -@note -This change means that the applications no longer need to setup the FPU, which was done typically in the BSP. - -- `ports/posix` added configuration macro #QS_CTR_SIZE 4U, to allow QS trace buffers > 64KB (see also [feature#195](https://sourceforge.net/p/qpc/feature-requests/195)) -- `ports/win32` added configuration macro #QS_CTR_SIZE 4U, to allow QS trace buffers > 64KB (see also [feature#195](https://sourceforge.net/p/qpc/feature-requests/195)) -- `ports/esp-idf` fixed compilation error caused by obsolete macro `QF_PTR_RANGE_()` -- `ports/sample` added a sample QP/C port for reference and documentation of all available configuration options. -- `zephyr` updated `qf_port.hpp` to include `` rather than `` (see also [bug#321](https://sourceforge.net/p/qpc/bugs/321)) - - -__Examples:__ -- examples for QV: added callback `QF_onContextSw()` -- exampels for QK, QXK: replaced callbacks `QK_onContextSw()/QXK_onContextSw()` with `QF_onContextSw()` -- `examples/arm-cm` removed setting up the FPU from the BSPs (the FPU is now setup in the ports). -- `examples/arm-cm` added setting up the MPU (Memory Protection Unit) to catch [NULL-pointer dereferencing](https://www.state-machine.com/null-pointer-protection-with-arm-cortex-m-mpu) and other incorrect memory access. - - -__Testing:__ -- changed the QUTest assertion handler Q_onAssert() (file qutest.cpp) to reset the target rather than wait for user commands. This allows proper assertion handling even inside exception handlers, where the target really cannot handle interrupts (which were needed for reception of commands). This change matches the updated policy of **assertion failures** in [QUTest 7.2.0](https://www.state-machine.com/qtools/history.html#qtools_7_2_0). -- examples for QUTest (`examples/qutest` and `test` directories): adjusted makefiels to invoke the `qutest.py` utility with the new [command-line parameters](https://www.state-machine.com/qtools/qutest_use.html#qutest_command). -- modified the test fixtures to use "enum dictionaries" for commands -- added example `examples/qutest/start_seq` that demonstrates testing of start sequences. - - -__Bug Fixes:__ -- [bug#316 Using History with Submachines does not work](https://sourceforge.net/p/qpc/bugs/316) -- [bug#321 zephyr port build error](https://sourceforge.net/p/qpc/bugs/321) - -- [bug#325 QSpy shows Sig=NULL if #Q_EVT_CTOR is used](https://sourceforge.net/p/qpc/bugs/325) - -__Feature Requests:__ -- [feature#195 allow > 64K QS trace buffer on target](https://sourceforge.net/p/qpc/feature-requests/195). This is configurable by setting the macro #QS_CTR_SIZE. - - -@section qpcpp_7_1_3 Version 7.1.3, 2022-11-18 -__Bug Fixes:__ -- This release fixes [bug#317](https://sourceforge.net/p/qpc/bugs/317) in QK kernel - -__Source__ -- The file `qstamp.cpp` has been copied from the `include/` folder to `src/qs/`. This makes it easier to build SPY configuration. (The file `qstamp.cpp` has been left in the `include/` folder for backwards compatibility). - -__Ports__ -- This release removes the QP libraries from the **Windows** ports -- `CMakeLists.txt` file in the zephyr port has been modified to use `zephyr_library_named(qpcpp)` instead of `zephyr_library()` - -__Examples__ -- This release changes all examples for **Windows** (Makefiles for GCC and project files for Visual Studio) to build the QP framework from sources rather than using QP libraries. This slightly extends the first build of the application, but avoids any problems with library incompatibilities (e.g., 32-bit/64-bit compilers used to build the application vs. the QP libraries). -- updated examples for emWin Embedded GUI (for emWin v6.28) -- updated examples for MSP430 - -__Documentation__ -- Modified the `doxygen/` folder for generation of QM Manual in LaTeX (enables generation of PDF) - -__Licensing__ -- This release removes the `QM-EVAL-QPC.qlc` file from the `LICENSES` folder. This "QM License Certificate" is no longer needed for QM 5.2.3, where "QM License Certificates" are no longer needed for generating QMsm-style state machines. - - -@section qpcpp_7_1_2 Version 7.1.2, 2022-10-07 -This release improves preemption-threshold scheduling (PTS) in @ref srs_qk "QK" kernel, especially the generation of the software tracing information about the scheduler activity. Also, PTS has been removed from the @ref srs_qxk "QXK" kernel because of the inherent complexity of that kernel. - -Additionally, the default for #QF_TIMEEVT_CTR_SIZE has been increased from 2 to 4 bytes. This increases the default dynamic range for QTimeEvt counters to 32-bits. - -__Source__ -- Modified QK_sched_() and QK_activate_() -- Modified QXK_sched_() and QXK_activate_() -- Added QXK_contextSw() to handle context switching (generation of software tracing information and invoking of the QXK_onContextSw() callback, if configured -- increased default for #QF_TIMEEVT_CTR_SIZE 4 -- changed inclusion guards in the QP/C++ header files (e.g. `QF_HPP` -> `QP_INC_QF_HPP_`) for compliance with the updated Quantum Leaps coding standard and to make the names more unique. - -__Ports__ -- Modified QXK ports (assembly) to call QXK_contextSw() -- Added port to RISC-V with the cooperative @ref srs_qvk "QV" kernel - -__Testing__ -- Added new directory `qpcpp/test/` for **system**-level testing of QP/C itself. -- Added new tests for QK: `qpcpp/test/qk` -- Added new tests for QXK: `qpcpp/test/qutest/qxk` - -@note -The `qpcpp/test/` directory is planned to contain a growing number of system-level tests, which are based on QUTest, but *without* the QP-stub. The tests take advantage of the new QUTest configuration, where the QP-stub is NOT included (because the actual QP framework is linked). This configuration is activated by defining macro `Q_UTEST=0`. - -@attention -Most tests provided in the `qpcpp/test/` directory run only on embedded targets and cannot run on the host machine. - - -@section qpcpp_7_1_0 Version 7.1.0, 2022-08-30 -This QP/C++ release introduces [preemption-threshold scheduling (PTS)](https://www.state-machine.com/doc/Ghattas07.pdf) for the preemptive QK and QXK kernels. Specifically, it is now possible to limit preemption of a given QActive/QXThread by giving it both the QF-priority and preemption-threshold. - -The following diagram shows the relationship between the "QF-priority" and "preemption-threshold" (see also QP::QPrioSpec): - -![QF-priority and preemption-threshold relations](qp-prio.png) - -@note -For backwards-compatibility, ::QPrioSpec data type might contain only the "QF-priority" component (and the "preemption-threshold" component left at zero). In that case, the "preemption-threshold" will be assumed to be the same as the "QF-priority". This corresponds exactly to the previous semantics of AO priority. - - -__Source__ -- modified the QP/C code for preemption-threshold -- improved QS tracing of Scheduler activities in QK and QXK -- improved implementation of QXSemaphore and QXMutex in QXK - -__Ports__ -- Modified QK and QXK ports to ARM Cortex-M for preemption-threshold and for handling the context-switch callback -- Updated Zephyr port and examples for Zephyr 3.1.99 - -__Examples__ -- Added Q_PRIO() macro for setting QF-priority and preemption-threshold to various examples (in calls to QAcive::START()) -- increased size of the main stack in most examples from 1024 to 2048 bytes. This is to prevent stack overflow that was observed with the lower limit. - -__Testing__ -- modified QUTest to also allow testing of the QP framework itself. - - -@section qpcpp_7_0_2 Version 7.0.2, 2022-08-12 - -__Bug Fixes:__ -- [bug#312 "Bug in QK and QXK 7.0.1"](https://sourceforge.net/p/qpc/bugs/312) - -__Ports__ -Modified QK and QXK ports to ARM Cortex-M -- `qpcpp/ports/arm-cm/qk` -- `qpcpp/ports/arm-cm/qxk` - -Modified Zephyr port -- moved the port from the usual location in `qpcpp/ports/zephyr` up a level to `qpcpp/zephyr`. This was done to make QPCPP into an external [Zephyr module](https://docs.zephyr project.org/latest/develop/modules.html), which has to comply with the Zephyr specification. - - -__Examples (ARM Cortex-M):__ -- `qpcpp/examples/arm-cm/dpp_efm32-slstk3401a/qk` provided examples of configuring either NMI or IRQ for Cortex-M4 (ARMv7m) -- `qpcpp/examples/arm-cm/dpp_efm32-slstk3401a/qxk` provided examples of configuring either NMI or IRQ for Cortex-M4 (ARMv7m) -- `qpcpp/examples/arm-cm/dpp_nucleo-l053r8/qk` provided examples of configuring either NMI or IRQ for Cortex-M0+ (ARMv6m) -- `qpcpp/examples/arm-cm/dpp_nucleo-l053r8/qk` provided examples of configuring either NMI or IRQ for Cortex-M0+ (ARMv6m) - -__Examples (Zephyr):__ -- `qpcpp/examples/zephyr/blinky` - modified to use the new Zephyr port -- `qpcpp/examples/zephyr/dpp` - modified to use the new Zephyr port and to demonstrate QSPY software tracing. - - -@section qpcpp_7_0_1 Version 7.0.1, 2022-07-31 -This release is the first one that contains the complete [QM model](https://www.state-machine.com/products/qm) of the QP/C++ framework (in the file `qpcpp/qpcpp.qm`). This model is then used to **generate all QP/C++ source code**: -- `qpcpp/` - + @ref C:/qp-dev/qpcpp/include "include" - + @ref C:/qp-dev/qpcpp/src "src" - -The QM model of QP/C++ explicitly captures the *logical design* of the framework, which is then mapped to the preexisting [physical design](https://www.state-machine.com/qm/ce.html#ce_phys). The *logical design*, which consists of packages (often associated with namespaces), classes, types, and macros traces explicitly to the @ref sas "Software Architecture Specification (SAS)" and is easier to manipulate and refactor. - -__Source Code Changes:__ -- The whole QP/C++ source code is now generated from the `qpcpp.qm` model. -- Refactored classes with only static members (QF, QV, QK, QXK, QS) into [namespaces](namespaces.html). This allows the namespaces to be extended in the QP ports. -- Refactored: - + QF::publish_() -> QActive::publish_() - + QF::psInit() -> QActive::psInit() - + QF::tickX_() -> QTimeEvt::tick_() - -@note -The old APIs (QF::PUBLISH(), QF::TICK_X(), QF::psInit()) are still provided, but are tagged as [deprecated](deprecated.html). - -- Moved package-scope header files qf_pkg.hpp and qs_pkg.hpp from the `qpcpp/src` directory to `qpcpp/include`. This allows the build process to specify only the `qpcpp/include` directory to build applications and QP/C++ source code. Previously, the build process had to specify additionally `qpcpp/src`, but this is no longer needed. - -@note -This change allowed all provided examples to be simplified by removing the `qpcpp/src` include directory from the various project files. - -Adapted QP/C++ source code to avoid warnings from the new C++20 standard about: "compound assignment with 'volatile'-qualified left operand is deprecated". - -__Ports/Examples:__ -- Removed port and examples for the older ARM7/ARM9 -- Added port to the @ref zephyr "Zephyr RTOS" -- Added examples for the @ref exa_zephyr "Zephyr RTOS" -- redesigned QP/C++ @ref freertos "port to FreeRTOS", see `qpcpp/ports/freertos` -- slightly improved QP/C++ @ref threadx "port to ThreadX", see `qpcpp/ports/threadx` - -__Improved Documentation:__ -The Doxygen documentation has been re-structured and improved. Also the more attractive styling of the HTML has been applied. - - -@section qpcpp_7_0_0 Version 7.0.0, 2022-04-30 -This major focus of this release is the adaptation of the code and documentation to better support safety certification (see [QP Certification Pack](modules.html)) - -__Modified QP/C++ source code:__ -- updated QP/C++ source code for AUTOSAR:C++14 -- made the compliant with the updated "Quantum Leaps Embedded C/C++ Coding Style (QL-C/C++:2022)" -- added traceability links between QP/C++ source code and requirements, architecture, design, and MISRA deviation permits. -- modified the top-level file comments now have standard-compliant license specification (SPDX-License-Identifiers). This allows QP/C++ to be included in automatic generation of Software Bill Of Materials (SBOM). - -__Modified QP/C++ ports:__ -- modified the QK and QXK ports to ARM Cortex-M to allow compile-time selection between using either NMI or an unused IRQ (via macro QK_USE_IRQ_HANDLER) as a mechanism to return to the thread mode -- removed unused `ARM_ARCH` symbol from Makefiles for GNU-ARM -- fixed the following bugs in QXK port to ARM Cortex-M - + [bug#305 Floating-point context corruption in QXK](https://sourceforge.net/p/qpc/bugs/305) - + [bug#306 QXK_ON_CONTEXT_SW option is not compatible with soft-float](https://sourceforge.net/p/qpc/bugs/306) - -__Modified GitHub repository:__ -- removed the `3rd_party` directory from the [qpcpp GitHub repository](https://github.com/QuantumLeaps/qpcpp) to avoid tracking changes caused by updates to the 3rd-party components. (The QP/C++ releases still have the `3rd_party` directory, because it is needed for building the examples). - -__Added/Modified examples:__ -- modified examples for ARM Cortex-M7 (to integrate better with STM32CubeH7) -- added examples for ARM Cortex-M33 (for STM32 NUCLEO-L552ZE and STM32CubeL5) -- added `qutest` examples for Unity (comparison between Unity and QUTest) - -__Modified QP/C++ documentation:__ -- restructured the Doxygen documentation for traceability -- added the @ref gs_tut "QP/C++ Tutorial" -- added the @ref srs "QP Certification Pack" - -@remark -The [QP Certification Pack](https://www.state-machine.com/products/qp#CERT) is still work in progress in this release, but the remaining work is limited to documentation only and no code restructuring is anticipated for that. - - -@section qpcpp_6_9_3 Version 6.9.3, 2021-04-12 -__Feature Requests:__ -- [feature#191 "Add QS local filtering to QF_PUBLISH()"](https://sourceforge.net/p/qpc/feature-requests/191/) - -The feature has been implemented by means of the "sender" parameter of the `PUBLISH()` macro, which must now be a pointer to a struct that has the `prio` member. This design enables applying QS local filter to the `prio` as the QS-Id. This works for publishing events from active objects. For publishing events outside active objects (e.g., from ISRs), the header file `qs.h` provides a type `QP::QSpyId`, which should be used to define QS ID variables to be used as "sender" in `PUBLISH()`. - -@note -This change only affects the Spy build configuration, where the QS software tracing instrumentation is enabled. - - -- [feature#185 "Add possibility of assigning name to AO threads in QP-RTOS ports"](https://sourceforge.net/p/qpc/feature-requests/185/) - -This feature request is now implemented uniformely in all QP-ports to 3rd-party RTOSes by means of the generic QP API QP::QActive::setAttr(). Specifically, the QP port will allow you to set the thread name by calling QP::QActive::setAttr() before calling QACTIVE_START(). - - -__Bug Fixes:__ -- [bug#292 "QP-C-C++ on 64 Bit Linux - Setting of Current-Obj - AO_Obj from QView raises segmentation fault"](https://sourceforge.net/p/qpc/bugs/292/) -- [bug#293 "[Qpccp 6.9.2] test of assertion fail now"](https://sourceforge.net/p/qpc/bugs/293/) -- [bug#298 "ARM Cortex-M Erratum 838869 Handled Inconsistently in Ports"](https://sourceforge.net/p/qpc/bugs/298/) - - -__Source code changes:__ -- `qpcpp/include/qf.hpp` - feature#191 -- `qpcpp/include/qs.hpp` - feature#191 -- `qpcpp/src/qf/qf_ps.cpp` - feature#191 -- `qpcpp/src/qs/qs_rx.cpp` - feature#191 and bug#292 - - -__Modified QP/C ports:__ -- `qpcpp/ports/arm-cm/` - fixed [bug#298](https://sourceforge.net/p/qpc/bugs/298/) -- `qpcpp/ports/embos/` - implemented [feature#185](https://sourceforge.net/p/qpc/feature-requests/185/) -- `qpcpp/ports/threadx/` - implemented [feature#185](https://sourceforge.net/p/qpc/feature-requests/185/) -- `qpcpp/ports/ucos2/` - implemented [feature#185](https://sourceforge.net/p/qpc/feature-requests/185/) -- `qpcpp/ports/win32/` - added QSpy64 (64-bit) build configuration to the Visual Studio project -- `qpcpp/ports/win32-qv/` - added QSpy64 (64-bit) build configuration to the Visual Studio project -- `qpcpp/ports/win32-quit/` - added "port" used for "QP Unit Internal Testing" (QUIT) - - -__Updated examples:__ -- all examples using `PUBLISH()` - adjusted the `sender` parameter of the macro to have the `prio` member -- `qpcpp/examples/arm-cm/` - fixed [bug#298](https://sourceforge.net/p/qpc/bugs/298/) (added calls to `QV|QK|QXK_ARM_ERRATUM_838869()`) -- `qpcpp/examples/qutest/self_test/test/` - added examples of the Python include files (`*.pyi`) for the new [include command](https://www.state-machine.com/qtools/namespacequtest__dsl.html). -- `qpcpp/examples/arm-cm/dpp_efm32-slstk3401a/win32-gui/` - corrected handling of user-drawn buttons in `bsp.cpp` -- `qpcpp/examples/arm-cm/game_efm32-slstk3401a/win32-gui/` - corrected handling of user-drawn buttons in `bsp.cpp` - - -__Updated 3rd-Party Components:__ -- `qpcpp/3rd_party/threadx` to version 6.1.6 (latest open source version from [GitHub](https://github.com/azure-rtos/threadx) ) - - -@section qpcpp_6_9_2 Version 6.9.2, 2021-01-18 -The main purpose of this release is a redesign of the QS-RX (software tracing input) to implement the feature request #187: - -- [feature#187 "Make the byte order in QS-RX buffer compatible with DMA"](https://sourceforge.net/p/qpc/feature-requests/187/) - -Additionally, as part of the re-design of the internal QS-RX implementation, this release fixes the bug #287 ("QP::QS::rxGetNfree() returns too low value", see the "Bug Fixes" section) - -Additionally, this release introduces a new virtual function `getStateHandler()` in the `QHsm` base class. This is part of the fix for bug #290 ("QView query object state reports wrong state with QMsm strategy", see the "Bug Fixes" section) - -__Source code changes:__ - -The introduction of the `QHsm::getStateHandler()` virtual function involves the following code changes: -- `qpcpp/include/qep.hpp` -- `qpcpp/include/qf.hpp` -- `qpcpp/src/qf/qep_hsm.cpp` -- `qpcpp/src/qf/qep_msm.cpp` -- `qpcpp/src/qf/qf_qmact.cpp` -- `qpcpp/src/qs/qs_rx.cpp` -- `qpcpp/include/qs.hpp` file -- added new API QS::queryCurrObj() - -The redesign of QS-RX implementation involves the following code changes: -- `qpcpp/include/qs.hpp` -- inline function `QS::rxPut()` now returns `bool` (true if the byte was inserted into the QS-RX buffer and false otherwise) -- `qpcpp/src/qs/qs_rx.cpp` - changed several functions -- `qpcpp/src/qs/qs_fp.cpp` - improved implementation - - -__Modified QP/C++ ports:__ -- `qpcpp/ports/embos/` - added missing `noexcept` specifiers -- `qpcpp/ports/freertos/` - added missing `noexcept` specifiers -- `qpcpp/ports/threadx/` - added missing `noexcept` specifiers -- `qpcpp/ports/uc-os2/` - added missing `noexcept` specifiers -- `qpcpp/ports/qt/` - added missing `noexcept` specifiers - - -- `qpcpp/ports/posix/` - modified to take advantage of the QS-RX direct byte ordering -- `qpcpp/ports/posix-qutest/` - modified to take advantage of the QS-RX direct byte ordering -- `qpcpp/ports/posix-qv/` - modified to take advantage of the QS-RX direct byte ordering -- `qpcpp/ports/win32/` - modified to take advantage of the QS-RX direct byte ordering -- `qpcpp/ports/win32-qutest/` - modified to take advantage of the QS-RX direct byte ordering -- `qpcpp/ports/win32-qv/` - modified to take advantage of the QS-RX direct byte ordering - - - -__Updated examples:__ -- `qpcpp/examples/performance/dpp_efm32-slstk3401a` - adjusted `app_cfg.h` file for uC/OS-II -- `qpcpp/examples/workstation/calc` fixed minor bug in the calculator - - -__Bug Fixes:__ -- [bug#291 "QP/C++ ports fail to compile due to missing noexcept specifiers"](https://sourceforge.net/p/qpc/bugs/291/) -- [bug#289 "QS_OBJ_PTR() macro does not compile on 64-bit machine"](https://sourceforge.net/p/qpc/bugs/289/) -- [bug#288 "POSIX port does not compile in Spy build configuration"](https://sourceforge.net/p/qpc/bugs/288/) -- [bug#287 "QS_rxGetNfree() returns too low value"](https://sourceforge.net/p/qpc/bugs/287/) -- [bug#285 "QView bug with querying the state of QMsm-type state machines"](https://sourceforge.net/p/qpc/bugs/285/) -- [bug#284 "Typo in QM generated headers"](https://sourceforge.net/p/qpc/bugs/284/) - - -__Updated 3rd-Party Components:__ -- `qpcpp/3rd_party/CMSIS` to version 5.7.0 -- `qpcpp/3rd_party/FreeRTOS` to version 10.4.3 (202012LTS released December 2020) - - -@section qpcpp_6_9_1 Version 6.9.1, 2020-09-28 -The main purpose of this release is a redesign of the [QS Local Filter](https://www.state-machine.com/qtools/qs.html#qs_local) (see also [feature request #127](https://sourceforge.net/p/qpc/feature-requests/127)). This new design supports filtering on __multiple__ active objects (as well as other objects in the Target memory), as opposed to filtering just one such object at a time. The main use case for this redesign of QS Local Filter is an application, where some active objects are very "noisy", and would overwhelm your trace. The new QS Local Filter allows you to selectively silence the "noisy" active objects and let all the others through. - -The new QS Local Filter is based on "QS-IDs" associated with various objects in the Target memory. The QS-IDs are small integer numbers, such as the unique priorities assigned to QP Active Objects, but there are more such QS-IDs, which you can assign to various other objects through the macro QS_BEGIN_ID(). Then, you can setup the QS Local Filter to trace only a specific QS-IDs or whole groups of QS-IDs by means of the macro QS_LOC_FILTER() or remotely via the QS-RX channel. - - -__Source code changes:__ - -The redesign of the QS Local Filter impacts the QS trace instrumentation in QP/C++: both the [pre-defined QS trace records](https://www.state-machine.com/qtools/qs.html#qs_pre) and the [application-specific trace records](https://www.state-machine.com/qtools/qs.html#qs_app). The changes to the pre-defined records are confided to the QP/C++ source code and are transparent to the application developers. However, the changes to the application-specific trace records require adjusting existing applications as follows: - -- use the new macro QS_LOC_FILTER() to set/clear the QS Local Filter -- use the new macro QS_BEGIN_ID() to define [application-specific trace records](https://www.state-machine.com/qtools/qs.html#qs_app). - - -@note -The macro QS_BEGIN_ID() assigns the specified QS-ID number to the app-specific record, which can be subsequently filtered by the new QS Local Filter. The old macro QS_BEGIN(), with the old Local Filter interface, is still available, but is @ref deprecated "deprecated" and not recommended. - - -The following macros are __deprecated__: - -- macro QS_FILTER_SM_OBJ() does nothing in QP/C++ 6.9.1 -- macro QS_FILTER_AO_OBJ() does nothing in QP/C++ 6.9.1 -- macro QS_FILTER_MP_OBJ() does nothing in QP/C++ 6.9.1 -- macro QS_FILTER_EQ_OBJ() does nothing in QP/C++ 6.9.1 -- macro QS_FILTER_TE_OBJ() does nothing in QP/C++ 6.9.1 -- macro QS_FILTER_AP_OBJ() still works for QS_BEGIN() -- macro QS_FILTER_ON() still works, but uses QS_GLB_FILTER() internally -- macro QS_FILTER_OFF() still works, but uses QS_GLB_FILTER() internally -- macro QS_BEGIN() still works, but uses the old "AP-OBJ" pointer - - -The following APIs have been __changed__: - -- QHsm::init() now takes extra `qs_id` parameter -- QHSM::dispatch() now takes extra `qs_id` parameter -- QMPool::get() now takes extra `qs_id` parameter -- QMPool::put() now takes extra `qs_id` parameter -- QEQueue::post() now takes extra `qs_id` parameter -- QEQueue::postLIFO() now takes extra `qs_id` parameter -- QEQueue::get() now takes extra `qs_id` parameter - -@note -The API changes are __not backwards-compatible__ and require adjusting existing QP/C++ applications. - - -Additionally, this release introduces the new pre-defined QS record #QS_QF_NEW_ATTEMPT, which is generated when Q_NEW_X() fails to allocate a dynamic event. Also, this release __reverses the order__ of the pre-defined QS records #QS_QF_NEW and #QS_QF_MPOOL_GET. This was necessary if the dynamic allocation is allowed to fail, because only _after_ attempting to allocate a memory block, the QF::newX_() function can generate either #QS_QF_NEW or #QS_QF_NEW_ATTEMPT. - -@note -The reversal of #QS_QF_NEW and #QS_QF_MPOOL_GET trace records has implications for the existing [QUTest test scripts](https://www.state-machine.com/qtools/qutest_script.html), where the order of expectations for "QF-New" and "MP-Get" needs to be reversed as well. - - -Additionally, this release modifies the @ref qxk "QXK" source code, so that the `QActive.m_prio` attribute is the fixed priority assigned in QP::QActive::start(), while `QActive.m_dynPrio` is the "dynamic" priority that can be changed when a @ref qxk_extended "QXK extended thread" acquires a @ref QP::QXMutex "mutex". - - -__Updated Ports:__ - -- all ARM Cortex-M ports (added workaround for the [ARM Erratum 838869](https://www.state-machine.com/doc/Cortex-M4_Software_Developers_Errata_Notice_v3.pdf)) -- all QK ports (because of the changed QMPool::get() / QMPool::put() interface) -- all QXK ports (because of the changed QMPool::get() / QMPool::put() interface) -- embOS port (because of the changed QMPool::get() / QMPool::put() interface) -- FreeRTOS port (because of the changed QMPool::get() / QMPool::put() interface) -- ThreadX port (because of the changed QMPool::get() / QMPool::put() interface) -- uC/OS-II port (because of the changed QMPool::get() / QMPool::put() interface) -- posix, posix-qv (because of the changed QMPool::get() / QMPool::put() interface) -- win32, win32-qv (because of the changed QMPool::get() / QMPool::put() interface) - - -__Feature Requests:__ - -- [feature#181 "Use of QS_U64()) on 32 bit machine"](https://sourceforge.net/p/qpc/feature-requests/181) - -__Bug Fixes:__ - -- [bug#279 "Confusing documentation of QF_newX_()"](https://sourceforge.net/p/qpc/bugs/279) -- [bug#280 "QXK_onContextSw() not called at the end of QXK_activate_()"](https://sourceforge.net/p/qpc/bugs/280) - - -@section qpcpp_6_9_0 Version 6.9.0, 2020-08-21 -The main purpose of this release is to adjust the QP/C++ RTEF to the changes and improvements introduced in [QTools 6.9.0](https://www.state-machine.com/qtools/history.html). Specifically, QP/C++ now includes examples for the new [QView Visualization & Monitoring](https://www.state-machine.com/qtools/qview.html) as well as adjustments for the new version of [QUTest Unit Testing](https://www.state-machine.com/qtools/qutest.html). - - -__Source code changes:__ - -Added new #QS_QF_RUN trace record to [QS software tracing](https://www.state-machine.com/qtools/qs.html), which is now generated in all QP/C++ ports upon the entry to QF::run(). This trace record marks the end of the application startup, at which time all the [QS dictionaries](https://www.state-machine.com/qtools/qs.html#qs_dict) are typically produced. - -Also, added the information about the target **endianness** to the #QS_TARGET_INFO QS trace record. - -@note -The addition of the #QS_QF_RUN trace record affects only the [Spy build configuration](https://www.state-machine.com/qpc/struct.html#comp_qs) and is has **no impact** on the Release or Debug build configurations. - - -__Updated Ports:__ - - + All QP/C++ ports to 3rd-party RTOSes (embOS, FreeRTOS, ThreadX, uC/OS-II) and OSes (POSIX, POSIX-QV, WIN32, WIN32-QV) have been updated to generate the #QS_QF_RUN trace record. - - + The POSIX and POSIX-QV ports have been updated to add the call to `pthread_attr_setinheritsched(&attr, PTHREAD_EXPLICIT_SCHED)` (see also [bug#276](https://sourceforge.net/p/qpc/bugs/276)) - - + The MSP430 ports have been extended for the GNU-MSP430 compiler, so that they now work with IAR-MSP40, TI-MSP40 and GNU-MSP430 toolchains. - - -__Updated Examples:__ - - + All [QUTest](https://www.state-machine.com/qtools/qutest.html) examples (`qpcpp\examples\qutest` directory) have been modified to use the new location of the `qutest.py` Python module. Also, all QUTest examples that use the `on_reset()` callback have been modified to call `expect_run()`. - -@note -The #QS_QF_RUN record is now generated in [QUTest unit testing](https://www.state-machine.com/qtools/qutest.html), which requires adjustments in the existing [test scripts](https://www.state-machine.com/qtools/qutest_script.html). Specifically, the test scripts that provide their own [on_reset() callback](https://www.state-machine.com/qtools/namespacequtest__dsl.html#aa40735b0e2865f928331d30798090ee2) must now also call [expect_run()](https://www.state-machine.com/qtools/namespacequtest__dsl.html#a6a958064a793bd7edd6ecc39e03c356a). - - + ARM Cortex-M examples for STM32 NUCLEO-L053RE (`qpcpp\examples\arm-cm\dpp_nucleo-l053r8`) and NUCLEO-L152RE (`qpcpp\examples\arm-cm\dpp_nucleo-l152re`) have been modified to support bi-directional QSPY communication. These examples now include the QView demos. - + Added examples of new [Sequence Diagram Generation](https://www.state-machine.com/qtools/html/qspy_seq.html) in QSPY 6.9.0 - - + The example projects for MSP430 now contain the `ccs-ti` and `ccs-gnu` directories, for the TI-MSP430 and GNU-MSP430 toolchains, respectively. - - -__Bug Fixes:__ - - + [bug#276 "QP/C/C++ POSIX port doesn't set thread priorities correctly"](https://sourceforge.net/p/qpc/bugs/276) - - + [bug#277 "QP/​C++6.8.2 game-gui and dpp-gui examples fail to compile with Visual Studio"](https://sourceforge.net/p/qpc/bugs/277) - - - -@section qpcpp_6_8_2 Version 6.8.2, 2020-07-17 - -__Source code changes:__ - -- Cleaned up the code to remove violations of AUTOSAR-C++ rules - + Changed casts of type `(void)xxx` into `static_cast(xxx)`. This is done to avoid static analysis warnings about "C-style casts" - + Added suffixes 'U' to unsigned integer literals - + Changed qxk_xthr.cpp to use the QP::TE_IS_LINKED constant instead of a "magic" number 0x80U. -- Fixed errors in the Doxygen documentation, such as: missing documentation for parameters, wrong parameter names, unresolved references, etc. -- Applied new, clearer styling to the Doxygen documentation. -- Changed the QS trace record name QS_QF_ACTIVE_POST_FIFO to QP::QS_QF_ACTIVE_POST and QS_QF_EQUEUE_POST_FIFO to QP::QS_QF_EQUEUE_POST. This refactoring now better matches the QP/C++ API POST() and QEQueue::post(). - - -__Updated Ports:__ - + enabled #QF_ACTIVE_STOP in the ports: Win32, Win32-QV, Win32-QUTEST, POSIX, POSIX-QV, and POSIX-QUTEST. - + @ref uc-os2 "port to uC/OS2" has been adapted to the new uC/OS2 v2.93.00 (recently released by Silicon Labs under the open source Apache 2.0 license). - - -__Updated Examples:__ - - + Modidfied `Makefile`s for the workstation examples to add the `-no-pie` linker option only when `GCC_OLD` environment variable is NOT defined. This is to accommodates older POSIX platforms with older GCC distribution. - + Modified all ARM-KEIL uVision projects for ARM-CLANG to use the startup code in the ARM-ASM syntax. - + New uC/OS-II example @ref uc-os2_dpp_nucleo-l053r8 (Cortex-M0+) - + Removed uC/OS-II example for the STM32-NUCLEO-L152RE (Cortex-M3) - + Added QM model files: `workstation/defer/defer.qm` and `workstation/reminder2/reminder2.qm` - -__Updated QUTest examples to generate code-coverage information:__ - + Modified `Makefile`s in QUTest examples (directory `examples\qutest`) to generate **code-coverage information**. Specifically, when the `GCOV` environment variable is defined, the `Makefile`s generate code-coverage information for [GCOV](https://en.wikipedia.org/wiki/Gcov). - - @note - The GCOV code-coverage generation is currently available only on the hosts. - - -__Updated 3rd-Party Components:__ - - + CMSIS from 5.6.0 to 5.7.0 - + uC/OS-II from 2.92.10 to 2.93.00 (open source Apache 2.0 license) - -__Bug Fixes:__ - -- [bug#268 QP/C++ Spy build configuration fails on 64-bit target](https://sourceforge.net/p/qpc/bugs/268/) -- [bug#269 Protect QSPY TX Buffer During QSPY RX](https://sourceforge.net/p/qpc/bugs/269/) -- [bug#271 Assert 250 upon semaphone wait timeout](https://sourceforge.net/p/qpc/bugs/271/) - - -@section qpcpp_6_8_1 Version 6.8.1, 2020-04-04 -__Bug Fixes:__ - -- [bug#261 QTime::disarm() clears the wrong flag](https://sourceforge.net/p/qpc/bugs/261/) - - -Also, this release updates the QP/C++ ports and examples for workstations (Windows and POSIX) by consistently applying the "safe" versions of services from `` and ``. The "portable" versions of these services are defined as macros in the `safe_std.h` header file and include the following services: - -- `MEMMOVE_S()` -> `memmove_s()` -- `STRCPY_S()` -> `strcpy_s()` -- `STRCPY_S()` -> `strcpy_s()` -- `STRCAT_S()` -> `strcat_s()` -- `SNPRINTF_S()` -> `_snprintf_s()` -- `PRINTF_S()` -> `printf_s()` -- `FPRINTF_S()` ->`fprintf_s()` -- `FREAD_S()` -> `fread_s()` -- `FOPEN_S()` -> `fopen_s()` -- `LOCALTIME_S()` -> `localtime_s()` - -These "safe" functions are mapped to the best approximation of these services available on a given platform. For example, `STRCPY_S()` is mapped to `strcpy_s()` on Windows and `strcpy()` on POSIX (Linux/MacOS/etc.). - -Finally, this release improves the comments in the QF::stop() function. The comments now make it very clear that after calling QF_stop() the application must terminate and cannot continue. In particular, QF::stop() is **not** intended to be followed by a call to QF::init() to "resurrect" the application. The previous comments apparently were confusing and some developers attempted to "restart" a running application, which led to system crashes. - - -@section qpcpp_6_8_0 Version 6.8.0, 2020-03-21 -This release updates the QP/C++ source code from C++98/03 to the **C++11 Standard**. Specifically, the following C++11 features are now used. - -__Source Code Changes:__ - -- C++11 function specifiers: `noexcept`, `override`, `=delete` -- `constexpr` for compile-time constants -- typed enums -- `using` instead of `typedef` -- new style initializers `{...}` -- `#include ` instead of `` -- `std::uint8_t`, etc. for integer types defined in `` -- `nullptr` instead of `static_cast(0)` or similar - - -@note -This switch to the newer C++11 Standard requires compiling QP/C++ and the application-level code according to C++11 or newer standards. - - -Also, the PC-Lint-Plus "port" (`qpcpp\ports\lint-plus`) in this QP/C++ release has been changed to check the **AUTOSAR:C++14** rules, instead of MISRA:C++08. This is because the older MISRA:C++ rule checker assumes C++03 standard, which is inadequate for checking C++11 or newer C++ standards. - - -__Other changes in QP/C++ source code:__ - -- Deprecated macros for coding state machines the "old" way with the `me->` pointer, such as `Q_TRAN()`, `Q_SUPER()`, `QM_TRAN()`, `QM_SUPER()`, etc. These macros have been moved to the backward-compatibility layer in the qpcpp.hpp header file (compatibility before version 6.8.0). - -@note -The only recommended way of coding state machines with QP/C++ is the "new" method, where state-handler functions are members of the state machine class, so the `me->` pointer is not needed (see also @ref qpcpp_6_5_0). - - -- Fixed inconsistencies between QP API declarations in the `.hpp` files and definitions in the `.cpp` files, such as different parameter names in declarations and definitions. - -- Removed a lot of excessive type casting of compile-time constants, such as `static_cast(0)`, which is now coded simply as `0U` - -- Introduced #Q_NORETURN macro for Q_onAssert(), which can (if defined) inform the compiler that Q_onAssert() does not return. This can potentially improve the code generation and can improve diagnostics generated by the compiler. - -- Moved many @ref QS facilities for internal use from qs.hpp to qs_pkg.hpp. These are mostly facilities related to internal QS implementation as well as pre-defined QS trace records, which are only used inside QP and are not needed in the QP applications. - -- Removed all pre-conditions from QP::QActiveDummy::start() function in qutest.cpp. This is to allow starting dummy AOs the exact same way as the real counterparts (e.g., with stack storage, which QP::QActiveDummy does not really need). - - -__Updated 3rd-Party Components:__ - - + FreeRTOS from 10.2.1 to 10.3.0 - + SEGGER embOS from 4.34.1 to 5.06.1 - + SEGGER emWin from 5.32 to 6.10 - + Removed TI-RTOS - - -__Updated Examples:__ - -Converted all the examples for ARM-MDK from compiler-5 (RVDS) to the new ARM Compiler-6 (ARM-clang). The examples for ARM Compiler-6 are located in the `armclang` sub-directories. - -@note -The older ARM Compiler-5 does not support the C++11 standard, and consequently it cannot compile QP/C++ code. - -- Removed the ports and examples for ARM Compiler-5. -- Removed support for the TI-RTOS, both in the ports and examples. - - -__Bugs Fixes:__ - -- [bug#256 Programming error in QP/C++ posix port](https://sourceforge.net/p/qpc/bugs/256/) - - -@section qpcpp_6_7_0 Version 6.7.0, 2019-12-30 -The main purpose of this release is providing support for the [PC-Lint-Plus](https://www.gimpel.com/) static analysis tool and improved compliance with MISRA-C++:2008 (see also feature request [#169](https://sourceforge.net/p/qpc/feature-requests/169/)). Specifically, the QP/C++ source code and some examples have been adjusted to comply with MISRA-C++:2008 rules, with all deviations captured in the PC-Lint-Plus configuration files. These PC-Lint-Plus configuration files have been provided in the new "port" to PC-Lint-Plus in the directory qpcpp/ports/lint-plus/. - -@note -The support for the older PC-Lint 9.x and the older MISRA-C:2004 has been dropped to avoid confusion and conflicts with the newer PC-Lint-Plus. - - -This release also includes the offline documentation for **this** particular version of QP/C++ (in the `html/` folder). To view the offline documentation, open the file `html/index.html` in your web browser. (The online HTML documention for the **latest** version of QP/C++ remains located at: https://www.state-machine.com/qpcpp/ ) - -The backwards-compatiblity layer for QP 4.x has been removed. Among others, the macros Q_ROM and Q_ROM_VAR are no longer defined. - -Also, this release updates the Windows-GUI examples with the QWIN Prototyping Toolkit to work with the latest Visual Studio 2019 and specifically with the Resource Editor now available. Specifically here, the Game-GUI example (`qpcpp\examples\arm-cm\game_efm32-slstk3401a\win32-gui`) and the DPP-GUI example (`qpcpp\examples\arm-cm\dpp_efm32-slstk3401a\win32-gui`) have been updated to build with the Visual Studio 2019. - -__Bugs Fixes:__ - -- [bug#255 "IAR-ARM "Multi-file Compilation" fails for QK and QXK applications"](https://sourceforge.net/p/qpc/bugs/255/) - - -@section qpcpp_6_6_0 Version 6.6.0, 2019-10-31 -The main purpose of this release is the change in distribution of the QP/C++ framework, which is now bundled together with the other QP frameworks (QP/C and QP-nano) as well as QM, and the QTools collection into "QP-bundle". This "QP-bundle" provides a single, streamlined and simplified download and installation of all QP frameworks and all the accompanying tools. - -This release brings also the following changes: - -- changed all C++ header file names from "*.h" to "*.hpp" - -@note The change means that the QP/C++ applications now should include "qpcpp.hpp" instead of "qpcpp.h". The latter file is still provided for backwards-compatibility, but it will be phased out in the future. - -- changed inclusion guards in header files from "..._h" to "..._HPP" in all uppercase -- removed "//" (double slash) from all comments for compliance with - the MISRA-C:2012 required Rule 3.1. (The "//" sequence was used in the URLs, such as "http://..."). -- changed the type of the last parameter in QHsm::init() from "QP::QEvt const *" - to "void const *" -- shifted QP::QS_USER from 70 to 100 and made the freed-up records reserved -- changed the QS_Ux_RECORDS groups to partition user records 100-124. -- removed Tcl test scripts from QUTest examples -- fixed [bug#248 Compilation error for the Q_EVT_CTOR configuration with QXK](https://sourceforge.net/p/qpc/bugs/248/) - - -@section qpcpp_6_5_1 Version 6.5.1, 2019-05-24 -This release fixes the following bugs in the QP/C++ code supporting [QUTest unit testing](https://www.state-machine.com/qtools/qutest.html): - -- [bug#241 "QUTest produces superfluous “Trg-Done QS_RX_EVENT” after publish"](https://sourceforge.net/p/qpc/bugs/241/). -- [bug#242 "QUTest fails to process events posted/​published from user commands"](https://sourceforge.net/p/qpc/bugs/242/). - -Also, this release extends the `Makefiles` in the `qpcpp\examples\qutest` directory to provide the `debug` target. Also, this release extends the `qpcpp\examples\qutest\blinky` example with projects to build/debug this example with Visual C++ (on the host) and with ARM-KEIL on embedded target (EK-TM4C123). - -Finally, this release adds ports and examples for PIC32 with MPLAB-X/XC32 toolchain. - - -@section qpcpp_6_5_0 Version 6.5.0, 2019-03-30 -This release brings new, much more natural and convenient way of @ref sm "implementing state machines" in QP/C++, in which state-handler functions are regular **members** of the state machine class. This means that state-handlers have direct access to all class members via the implicit `this` pointer, **without the need to use the "me->" pointer**. - -@note -The previous "me-> pointer" state machine implementation style is still supported in QP/C++ for backwards compatibility with the existing code, but it is **not** recommended for new designs. - - -@remark -This "no me-> pointer" state machine implementation is supported in the [QM model-based design tool](https://www.state-machine.com/products/qm/) starting from **QM 4.5.0**. - - -This release comes with several models for **QM 4.5.0**, which demonstrate how to use this state-machine implementation style from QM. - -Additionally, this release changes the API `QTimeEvt::ctr()` to QP::QTimeEvt::currCtr(). This is to avoid name shadowing with the `ctr` variables, which is not compliant with MISRA. - -Additionally, the examples for `calc1` and `calc1_sub` (with QM 4.5.0 models) have been extended to properly handle the operator precedence (multiplication and division have higher precedence than addition and subtraction). - -Finally, this release adds the example `start-stop` located in the directory `qpcpp/examples/freertos/arm-cm/start-stop_nucleo-h743zi/` for the @ref freertos "QP port to FreeRTOS", which demonstrates how to dynamically start and stop active objects multiple times during the lifetime of the application. (NOTE: Starting and stopping active objects dynamically is generally not recommended, but the example has been requested by a commercial customer.) - - -@section qpcpp_6_4_0 Version 6.4.0, 2019-02-10 -This release brings the following changes: - -- removed QActive::stop() -- modified examples for ThreadX to define BSP_TICKS_PER_SEC as TX_TIMER_TICKS_PER_SECOND instead of a hardcoded value -- modified examples for uC/OS-II to define BSP_TICKS_PER_SEC as OS_TICKS_PER_SEC instead of a hardcoded value -- modified qassert.h to work correctly when assertions are disabled with #Q_NASSERT and also updated the QP/C++ source code to build correctly without assertions -- improved the QXK semaphores to handle correctly the maximum number of tokens -- reduced the size of QPSet in case #QF_MAX_ACTIVE does not exceed 8 or 16. -- improved performance of the QF_qlog2() algorithm when #QF_MAX_ACTIVE does not exceed 8 or 16. -- modified Makefiles for workstations (Windows and POSIX) to use compiler options -std=c99 for C and -std=c++11 for C++ as well as -pedantic option. -- fixed examples for MSP430 with CCS and added QUTest support for MSP430. - - -@section qpcpp_6_3_8 Version 6.3.8, 2018-12-31 -The main purpose of this release is the update the `Makefiles` that use the [GNU-ARM Embedded Toolchain](https://developer.arm.com/open-source/gnu-toolchain/gnu-rm) to match the recent update in [QTools for Windows 6.3.8](https://sourceforge.net/projects/qpc/files/QTools/). Specifically, all `Makefiles` in the `examples` directory have been updated to use the GNU-ARM toolchain located in `qtools\gnu_arm-none-eabi` and use the tools prefix **arm-none-eabi-**. - -@note -The `Makefiles` that use the GNU-ARM included in this release require [QTools for Windows version 6.3.8 or newer](https://sourceforge.net/projects/qpc/files/QTools/) and will **NOT** work with the older QTools collection. - - -@section qpcpp_6_3_7 Version 6.3.7, 2018-11-20 -The main goal of this release is to provide Python test scripts that match the newly re-designed Python support for the [QUTest unit testing harness](https://www.state-machine.com/qtools/qutest.html) (see QTools **6.3.7**). Specifically, the Python tests scripts (*.py files) in the `qpcpp/examples/qutest` directory) have been all upgraded to the new syntax and format. Also, all the makefiles in that directory have been modified to execute Python test scripts by default, and Tcl test scripts only when the argument `SCRIPTS=tcl` is specified. - -@note -The new scripting interface [qutest.py](https://www.state-machine.com/qtools/qutest_script.html) is now the primary supported QUTest scripting interface. The older interfaces, such as TCL ("qutest.tcl") and "qspypy" are considered *obsolete* and are **not recommended** for writing new test scripts. - -The second change in this release is updating the QP ports to Win32 and POSIX to eliminate the obsolete function `gethostbyname()` and replacing it with `getaddrinfo()`. This change has ripple effects on Windows, because it requires linking with "ws2_32" library, instead of "wsock2". All affected `Makefiles` in the `qpcpp\examples` directory have been updated to link the newer "ws2_32" library. - -Finally, this release updates the internal implementation of QXK function `QXThread::post_()` for software tracing and testing with QUTest. - - -@section qpcpp_6_3_6 Version 6.3.6, 2018-10-20 -This release brings important changes and improvements to the unit-testing support for [QUTest](https://www.state-machine.com/qtools/qutest.html). Specifically, a new "dummy" active object class QP::QActiveDummy for testing has been added. Instances of this "dummy" AO can be now used as test-doubles for active objects that are recipients of events directly posted by the active object under test (AOUT). This, in turn, eliminates the need to alter the existing event-posting implementation, so that more of the actual QP code can be used in the QP test-stub (qutest.c). - -@note -The QUTest projects that are built QP from sources need to include the qf_time.cpp file. - - -As a consequence of the changes in the [QUTest](https://www.state-machine.com/qtools/qutest.html) support, the @ref exa_qutest "QUTest examples" have been re-designed and improved. Here, the most important changes include the new code organization, which reflects the customary separation of the code-under-test (CUT) from the code for testing. Also, the tests based on the ["TDD book" by James Grenning](https://www.amazon.com/Driven-Development-Embedded-Pragmatic-Programmers/dp/193435662X) have been replaced with fully functional tests based on the [Unity testing framework](http://www.throwtheswitch.org/unity/). This is to directly compare the traditional approach (Unity) with QUTest. - -The next change related to unit testing is adding QP::QS_RX_QUERY_CURR facility to QS-RX (software tracing input channel) and the reply QP::QS_QUERY_DATA to the QS output channel. These two extensions allow you to query the status of the "current object" inside the target. The most important example is querying the current state-machine object (QP::SM_OBJ), which returns the **current state**. - -@note -The new "query" facilities in QP/C++ match the latest additions to the [QSPY host application](https://www.state-machine.com/qtools/qspy.html). - -Also this release adds [QS dictionary](https://www.state-machine.com/qtools/qs.html#qs_dict) generation for all registered event pools. The generated object dictionaries are `EvtPool1` for pool-1, `EvtPool2` for pool-2, etc. - -@note -Applications no longer need to generate QS object dictionaries for the event pool storage buffers, such as `smlPoolSto[]`, etc. - - -Another big change in this release is re-designing of the @ref exa_os "examples for workstations" (previously `win32`, `win32-qv`, `posix` and `posix-qv`). All these types of examples have been consolidated in the @ref exa_os "exampes/workstation" folder, where the provided `Makefiles` have been extended to be cross-platform so that they work on Windows, Linux, and MacOS without changes. - -To facilitate the creation of truly portable, cross-platform examples, the existing @ref ports_os "QP ports to Windows/POSIX" have been augmented with abstractions for portable console access. Also, the [QS software tracing](https://www.state-machine.com/qtools/qs.html) support via TCP/IP has been now added to the ports themselves. This means that applications no longer need to repeat the code for QS callbacks in the BSP implementation. - -Finally, this release fixes a bug in the @ref posix-qv "POSIX-QV port", where the internal condition variable `QV_condVar_` has not been initialized. - - -@section qpcpp_6_3_4 Version 6.3.4, 2018-08-10 -This release adds new API QP::QTimeEvt::wasDisarmed() for checking the status of a QP::QTimeEvt object after it has been disarmed. Specifically, the status of the last call to QP::QTimeEvt::disarm() is kept inside the time event object and can be subsequently checked with the QP::QTimeEvt::wasDisarmed() API. This new function is designed to be used directly as a guard condition on the timeout event, as described in the [PSiCC2 book](/psicc2), Section 7.7.3 "Arming and Disarming a Time Event" on page 359. The QP::QTimeEvt::wasDisarmed() has a side effect of setting the "was disabled" status, so the guard evaluates to 'true' the next time it is checked. - - -@section qpcpp_6_3_3a Version 6.3.3a, 2018-07-16 -This release adds Python test scripts to the QUTest examples (folder `qpcpp/examples/qutest`). Specifically, the makefiles have been augmented to accept symbol `SCRIPT=py`, in which case the Python test scripts (`*.py`) are used instead of the default Tcl test scripts (`*.tcl`). - -@remark -This release does not change any QP/C++ APIs, QP/C++ implementation, ports, or other examples. - - -@section qpcpp_6_3_3 Version 6.3.3, 2018-06-22 -This release fixes the following bugs: - -- [bug#216 "Generated code for QP version check violates MISRA-C Rule 10.1"](https://sourceforge.net/p/qpc/bugs/216/). - -- [bug#217 "GNU-ARM -fstack-protector incompatible with the QP ports to GNU-ARM"](https://sourceforge.net/p/qpc/bugs/217/). - -Also, this release demonstrates the new features of QM 4.3.0 in several example models (qpcpp/examples/ directory). - -Finally, this release updates `3rd_party/CMSIS/Include` to the latest version from GitHub. - - -@section qpcpp_6_3_2 Version 6.3.2, 2018-06-20 -This release fixes the following bugs: - -- [bug#215 "QP is internally inconsistent in calling assertion macros"](https://sourceforge.net/p/qpc/bugs/215/). - - -Also, this release improves the QUTest DPP example (directory `qpcpp/examples/qutest/dpp`) by demonstrating the proper use of QS_TEST_PAUSE() and the corresponding test scripts. This example now matches the [QUTest documentation of this feature](https://www.state-machine.com/qtools/qutest_rtc.html#qutest_pause). - -Finally, this release modifies the QP/C++ ports to POSIX and POSIX-QV by allowing to configure the p-thread priority of the ticker thread. This is achieved by adding a `tickPrio` parameter to the `QF_setTickRate()` function. (**NOTE** this modification will require changing existing QP applications for POSIX or POSIX-QV that call `QF_setTickRate()`. - - -@section qpcpp_6_3_1 Version 6.3.1, 2018-05-24 -This release migrates the [QUTest](https://www.state-machine.com/qtools/qutest.html) examples to [QM 4.2.1](https://www.state-machine.com/qm/history.html#qm_4_2_1), which now can generate QS_FUN_DICTIONARY() records automatically. This release also adds a generic, simple blinky example for QUTest located in `examples/qutest/blinky`. Also, this release fixes the QF_INT_DISABLE() / QF_INT_ENABLE() macros in the QUTest ports to use the QP namespace. Without this fix, the code fails to compile when the directive "using namespace QP" is not used. - -Also, this release adds the missing QS macro QS_SIG() to produce symbolic signal output from [application specific QS records](https://www.state-machine.com/qtools/qs.html#qs_app). - -Finally, this release adjusts the code in qs_rx.cpp to use QF_EVT_REF_CTR_INC_() instead of accessing the event's reference counter directly. This direct access fails in case, when event constructors are configured (Q_EVT_CTOR is defined). In that case, the QP::QEvt class protects the reference counter, so it cannot be accessed directly. This option is currently used only in the QP/C++ port to Qt. - - -@section qpcpp_6_3_0 Version 6.3.0, 2018-05-10 -The main purpose of this release is fixing the sub-machine support in the QP/Spy build configuration. Specifically, this release fixes the following bug: - -- [bug#213 "QP/C/C++ applications with submachines occasionally crash in Spy build configuration"](https://sourceforge.net/p/qpc/bugs/213/) - -@attention -This release matches [QM 4.2.0](https://www.state-machine.com/qm/history.html#qm_4_2_0). - -Additionally, the release contains some re-factoring of the QS-RX input channel. - - -@section qpcpp_6_2_2 Version 6.2.0, 2018-03-16 -The main purpose of this release is extednding the functionality of the [QUTest unit testing](https://www.state-machine.com/qtools/qutest.html) for QP/C++ applications. Specifically, this release adds support for testing of **self-posting** of events in active objects, which is an essential element in the [Reminder](https://www.state-machine.com/doc/Pattern_Reminder.pdf) and [Deferred Event](https://www.state-machine.com/doc/Pattern_DeferredEvent.pdf) design patterns. To implement this new feature, the QS-RX (QS receive channel) has been extened by a small scheduler that processes all secondary events gnenerated by dispatching, posting, or publishing events (only active when the #Q_UTEST macro is defined). Also, the implementation of the target resident QUTest components (file `src/qs/qutest.cpp` and `src/qf/qf_actq.cpp`) have been modified to allow posting of events during unit testing. - -Additionally, the release adds standard QS trace records (the `qs.h` header file) for event deferring and recalling (::QS_QF_ACTIVE_DEFER and QP::QS_QF_ACTIVE_RECALL) as well as recall-attempt (::QS_QF_ACTIVE_RECALL_ATTEMPT). Also standard QS trace records have been added for creating/deleting new event references (::QS_QF_NEW_REF and QP::QS_QF_DELETE_REF, respectively). To make room for these new records, the following rarely-used records have been removed: QS_QF_ACTIVE_ADD, QS_QF_ACTIVE_REMOVE, QS_QF_EQUEUE_INIT, and QS_QF_MPOOL_INIT. The global filter settings in the QS_filterOn() and QS_filterOff() functions have been updated to the augmented and re-organized QS trace records. - -@note -Because of the changes in the standard QS trace recods, this release requires the matching **QSPY 6.2.0** or later. Also, because of the changes this release might break some existing QUTest unit test scripts, which need to be re-adjusted to the new trace records. - - -Additionally, this release improves support for tracing and unit-testing embedded POSIX targets, such as embedded Linux, or OSes/RTOSes with the POSIX compatiblity layer. Specifically, the POSIX ports (`qpcpp/ports/posix/` and `qpcpp/ports/posix-qutest`) no longer produce libraries. Instead all examples for POSIX (`qpcpp/examples/posix/` and `qpcpp/ports/qutest`) build the QP/C framework directly from the sources, which promotes consisentcy in the toolchain and options used. For unit testing, `posix.mak` makefiles have been added for projects `qpcpp/examples/qutest/dpp` and `qpcpp/examples/qutest/self_test`. These makefiles support remote testing of embedded POSIX targets over TCP/IP, where the POSIX target runs only the test fixture, but the host (e.g., Windows host) executes both the QSPY host application and runs the QUTest scripts. The previous makefiles for POSIX have been renamed to `posix_host.mak`, because they are intended to use POSIX as a *host*, as opposed to a *target*. - -Also, this release adds new QUTest exampes, which illustrate: -- event deferral (`qpcpp/examples/qutest/defer`) -- dispatching/posting events with parameters (`qpcpp/examples/qutest/evt_par`). - -Additionally, this release updates the QP/C++ ports to win32-qv and posix-qv to allow a "tickless" mode, where the "tickerThread" is not created. This mode is set by configuring the system clock tick rate to 0 (QF_setTickRate(0)). - -Finally, this release phases out the `qp_port.h` header file. If any of your projects still includes this file, please replace it with the qpc.h heder file. - - -@section qpcpp_6_1_1 Version 6.1.1, 2018-02-18 -The main purpose of this release is adding the context-switch callbacks to the preemptive @ref qk "QK" and @ref qxk "QXK" kernels. The QK_onContextSw() and QXK_onContextSw() callback functions provide a mechanism to perform additional custom operations when QK/QXK switches context from one thread to another. To avoid extra overhead when this functionality is not needed and for backwards-compatiblity with the existing applications, the callbacks are enabled only when the macros #QK_ON_CONTEXT_SW (for QK) and #QXK_ON_CONTEXT_SW (for QXK) are defined. These macros can be defined either directly in command-line for the compiler, or in the QK/QXK port files (qk_port.c for QK and qxk_port.c for QXK). Examples for the context-switch callbacks have been provided for for the @ref arm-cm_dpp_nucleo-l053r8 "NUCLEO-L053R8" (Cortex-M0+) and the @ref arm-cm_dpp_nucleo-h743zi "NUCLEO-H743ZI" (Cortex-M7). - -Also, this release changes the ARM Cortex-M ports for the IAR-ARM toolchain in that it replaces the assembly modules with the equivalent C implementation. This change enables using the configuration macros #QK_ON_CONTEXT_SW (for QK) and QXK_ON_CONTEXT_SW (for QXK) in the ports. All existing example projects for IAR-ARM have been updated to use the `q(x)k_port.c` files instead of `q(x)k_port.s` files. - -Also, this release adds new project files for the Atollic TRUEstudio for STM32. The TRUEstudio projects (Eclipse) have been added for the @ref arm-cm_dpp_nucleo-l053r8 "NUCLEO-L053R8" (Cortex-M0+) and the @ref arm-cm_dpp_nucleo-h743zi "NUCLEO-H743ZI" (Cortex-M7). - -Also, this relese updates the CMSIS to version 5.3.0 (see `qpcpp/3rd_party/CMSIS` - -Finally, this release fixes the following bug: - -- [bug#203 QXK: precondition in QXSemaphore::wait() incorrectly handles the scheduler lock"](https://sourceforge.net/p/qpc/bugs/203/) - - -@section qpcpp_6_1_0 Version 6.1.0, 2018-02-04 -The main purpose of this release is adding the support for the [ARM Compiler 6 (ARM-Clang)](https://developer.arm.com/products/software-development-tools/compilers/arm-compiler), which is a C/C++ toolchain for ARM processors based on the modern [Clang frontend](https://clang.llvm.org/) and the [LLVM framework](https://llvm.org/). This release adds the ARM-Clang ports and examples for all built-in kernels (QV, QK, and QXK) for the ARM Cortex-M CPU cores. - -This release also adds support for the STM32H7 high-performance Cortex-M7 with the **double-precision FPU** (FPv5-DP-D16-M). Specifically, this release provides examples for the [NUCLEO-H743ZI board](http://www.st.com/en/evaluation-tools/nucleo-h743zi.html) (Cortex-M7 with FPv5-DP-D16-M). The @ref arm-cm_dpp_nucleo-h743zi "examples for NUCLEO-H743ZI board" include all built-in kernels with ARM-CLANG, ARM-KEIL, GNU-ARM, and IAR-ARM. Additionally the NUCLEO-H743ZI examples also include the QP FreeRTOS with ARM-KEIL, GNU-ARM, and IAR-ARM. - -Also, this release changes the ARM Cortex-M ports for the GNU-ARM toolchain in that it replaces the assembly modules with the equivalent C implementation. This change enables using wider range of GNU-ARM toolchain distributions, such as GNU-ARM Linaro, which had trouble with the assembly modules, but compiles correctly the C modules. All related GNU-ARM example projects have been modifed to use the new C-ports. - -Also, this release fixes build problems with IAR EWARM caused by the CMSIS v5.1.1, where the IAR C++ compiler failed to compile the CMSIS "mpu_armv7.h" header file. The problem was caused by the `restrict` keyword, which was supported by default in the IAR C compiler, but was **not** supported by default by the IAR C++ compiler. The fix was to add explicit compiler option `--enable-restrict` to all IAR projects for Cortex-M processors. - -Also, this release updates the existing projects for the Code Composer Studio (CCS) to CCSv7. All existing CCS projects for the EK-TM4C123GXL (TivaC LauchPad) and LaunchXL2-TMS57012 (Hercules) boards have been upgraded and tested. - -Also, all examples for MSP430 with CCS have been updated to CCSv7 and re-tested on the supported boards. - - -@section qpcpp_6_0_4 Version 6.0.4, 2018-01-10 -The main purpose of this release is the provision of the official @ref freertos "QP/C++ port to FreeRTOS" (version 10). The QP/C++ port to FreeRTOS is completely generic and should work on any CPU supported by FreeRTOS. The port comes with the following examples (see examples/freertos/): -- @ref freertos_dpp_ek-tm4c123gxl "DPP on EK-TM4C123GXL (ARM Cortex-M4F)" with ARM-KEIL, GNU-ARM and IAR-ARM toolchains. -- @ref freertos_dpp_stm32f746g-disco "DPP on STM32F746G-Discovery (ARM Cortex-M7)" with ARM-KEIL, GNU-ARM and IAR-ARM toolchains. - -This release also replaces assembly with C implementation in the ARM-KEIL ports or the QK and QXK kernels to Cortex-M to take advantage of the `__asm` functions. (NOTE: this change has impact on the existing QP/C++ applications that use the ARM-KEIL toolchain and the QK or QXK kernels.) - -Additionally, this release modifies all IAR-ARM example projects by adding compiler option "--enable_restrict". This option is necessary to compile the CMSIS header file "mpu_armv7.h" under the IAR C++, where the "restrict" keyword is not supported by default. - -Additionally, this release fixes some problems with the native examples for STM32F4 and STM32F7 boards. - -Additionally, this release adds a generic function QP::QActive::setAttr() to set thread attributes in various QP ports to 3rd-party RTOSes. This function is then used in the @ref embos "embOS port" and the @ref uc-os2 "uC/OS-II port". - -Finally, this release fixes the following bug in the @ref threadx "ThreadX port": - -- [bug#197 "Problems with scheduler locking in QP/C/C++ ports to ThreadX"](https://sourceforge.net/p/qpc/bugs/197/) - - -@section qpcpp_6_0_3 Version 6.0.3, 2017-12-12 -Changes since version 6.0.1: - -- fixed [bug#193 "QXK: context switch from extended to basic thread fails"](https://sourceforge.net/p/qpc/bugs/193/) - -- replaced attributes of QP::QActive and QP::QEQueue classes from type `uint_fastX_t` to `uintX_t`. For the ARM Cortex-M port, these changes reduce the memory footprint of each QP::QActive instance from 50 to 38 bytes (25% improvement). - -- improved the performance of the ARM Cortex-M0/M0+ ports, which do not supprt the CLZ (count leading zeros) instruction. All QP ports to Cortex-M0/M0+ (qv, qk and qxk) now contain hand-optimized assembly implementation of the LOG2 (log-base-2) function. The implementation executes only in 14 machine instructions and uses only 16-byte look-up-table (LUT). This replaces LOG2 implementation based on a 256-byte LUT. - -- changed the interrupt disabling policy in ARM Cortex-M ports back to "unconditional interrupt disabling", which is simpler and faster than "saving-and-restoring interrupt status". - -- added a port to ARM Cortex-M with the LLVM compiler (currently only for the dual-mode QXK kernel). Unlike the other ARM Cortex-M ports, the port to LLVM uses the "saving-and-restoring interrupt status" interrupt disabling policy (explicit request from a commercial customer). - -- removed ARM Cortex-M port and examples for the TI-ARM compiler. (Projects for the TI CCS can use the GNU-ARM toolchain and the existing GNU-ARM ports). - -- Added the DPP-COMP example (Dining Philosophers Problem) with the "Orthogonal Component" state pattern located in `qpcpp/examples/win32/dpp-comp`. This example demonstrates also a partitioned QM model into external packages for the Container (Table active object) and the Components (Philo active objects). - -@note -This release does not change any of the QP/C++ APIs. - - -@section qpcpp_6_0_1 Version 6.0.1, 2017-12-10 -The main focus of this release is to fix the remaining problems with transitions out of eXit-Points in sub-machines. Specifically, this release modifies the QMsm-based state machine implementation strategy (file src/qf/qep_msm.cpp to properly handle transitions from eXit-Points to Entry-Points and to History connectors in sub-machines. These changes are part of fixing the following bugs reported for QM: - -- [bug#190 "Exit-Point segment targeting History doesn't work](https://sourceforge.net/p/qpc/bugs/190/) - -- [bug#189 "Exit-Point segment targeting an Entry-Point to sub-machine state doesn't work"](https://sourceforge.net/p/qpc/bugs/189/) - -Additionally, this release fixes the following bug in transitions to "shallow history": -- [bug#191 "Transition to shallow history in QMsm causes assertion qep_msm#810"](https://sourceforge.net/p/qpc/bugs/191/) - -The bug#191 is fixed by modifying the function QMsm::childStateObj() in qep_msm.cpp to return the parent state in the corner case when the current state is the parent state. - - -@note -This QP/C++ 6.0.1 release is the minium version required in the upcoming QM 4.1.0. This is because QM 4.1.0 assumes the modified QMsm-state machine implementation strategy in order to properly handle the various transitions out of eXit-Points in sub-machine states. - - -Additionally, this release changes the QXK implementation still related to the [bug#186 "QXK: Extended thread context switch causes assertion in PendSV_Handler"](https://sourceforge.net/p/qpc/bugs/186/). Specifically, the case of context switching away and back to the same thread (which can arise under specific interrupt preemption scenarios) is now handled as a simple return from PendSV. The QXK scheduler has been modified to set the "next" thread pointer to NULL when it detects switching back to the "current" thread. - - -@section qpcpp_6_0_0 Version 6.0.0, 2017-10-13 -This release fixes two bugs found in the QXK kernel: -- [bug#185](https://sourceforge.net/p/qpc/bugs/185/) "QXK: PendSV_Handler uses inconsistent stack frames for saving and restoring AO for Cortex-M0(+)" -- [bug#186](https://sourceforge.net/p/qpc/bugs/186/) "QXK: Extended thread context switch causes assertion in PendSV_Handler" - -Additionally, this release includes a workaround for a [bug indetified in the GNU-ARM toolset](https://bugs.launchpad.net/gcc-arm-embedded/+bug/1722849). This problem affected the ARMv6-M architecture (Cortex-M0/M0+/M1) and manifested itself in generation of incorrect code for the QP critical section at certain gcc optimization levels (such as -O). This bug was first discovered and filed as [bug#184](https://sourceforge.net/p/qpc/bugs/184/). The bug affected the GNU-ARM ports to all built-in kernels @ref qv "QV", @ref qk "QK", and @ref qxk "QXK". - -@note -This release no longer contains the directory `qpcpp/source`, which was scheduled to be phased out in QP5. In QP6 the source code is found only in the `qpcpp/src` directory. - - -@section qpcpp_5_9_9 Version 5.9.9, 2017-09-29 -This release implements the feature request [#132 "Extend the QXK mutex to support also simple operation without the priority-ceiling protocol"](https://sourceforge.net/p/qpc/feature-requests/132/). - -@note -This release is completely backwards-compatible with the @ref qpcpp_5_9_8 "previous QP/C++ release 5.9.8". - -Specifically, the QP::QXMutex class has been extended as follows: -- a mutex initialized with ceiling==0 (see QP::QXMutex::init()) means "no ceiling", so such mutex will NOT use the priority-ceiling protocol. -- in this case the mutex will NOT require a unique priority level -- in this case the mutex will not change (boost) the priority of the holding thread in the QP::QXMutex::lock() operation. -- in this case the mutex will still support nesting of locks (as before), up to 255 levels of nesting. -- when initialized with `ceiling>0`, QP::QXMutex WILL use the priority-ceiling protocol, as before. It will require that the ceiling priority be unique and not used by any other thread or mutex. In other words, the previous functionality remains unchanged. - - -@section qpcpp_5_9_8 Version 5.9.8, 2017-09-15 -This release fixes the QXK kernel [bug#182 " Inconsistent QXThread::post_() behavior with respect to the 'margin' parameter"](https://sourceforge.net/p/qpc/bugs/182/). - -Also, the pre-condition assertion in the function QF::newRef_() (file `src/qf/qf_dyn.cpp`) has been modified to allow creating event references only for dynamic events `(e->poolId_ == 0)`. - -Modifed ARM Cortex-M examples with the GNU-ARM toolset to be compatible with C++ RTTI and C++ Exception handling, as follows: - -- removed definitions of `_init()` and `_fini()` from the GNU-ARM startup code for all supported boards in the `3rd_party` directory - -- added the empty definitions of `_init()` and `_fini()` to `mini_cpp.cpp` in the `3rd_party/gnu_cpp directory` - -- Modified all GNU-ARM linker scripts (.ld files) to add the following symbols: - -@verbatim - __exidx_start = .; - .ARM.exidx : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) } >RAM - __exidx_end = .; -@endverbatim - -Provided C++ example with RTTI and Exception hanlding in the directory: -`examples/arm-cm/dpp_efm32-slstk3401a/qxk/gnu_with-rtti` - - -@section qpcpp_5_9_7 Version 5.9.7, 2017-08-18 -The main focus of this release are new requested features for the @ref qxk "dual-mode QXK kernel": -- feature#129 "Allow blocking while holding a mutex in QXK"; and -- feature#130 "Allow QXK mutex locks to nest while acquired by the same thread"; and -- feature#131 "Add a non-blocking "tryLock()" operation to the QXK mutex". - -Additionally, this release adds also the non-blocking QXSemaphore::tryWait() operation. - -In the process of re-implementing the QP::QXMutex, the previouis non-blocking priority ceiling mutex has been replaced with an equivalent selective QXK scheduler locking up to the specified ceiling priority. Specifically, this feature has been implemented with two new operations QXK::schedLock() and QXK::schedUnlock(). - -For consistency, the non-blocking mutex of the @ref qk "QK kernel" has been also replaced by the operations QK::schedLock() and QK::schedUnlock(). - -All related QXK and QK examples have been updated to use the selective scheduler locking instead of the mutex. The new blocking QXK mutex has been demonstrated in the following updated examples: -- @ref arm-cm_dpp_efm32-slstk3401a -- @ref arm-cm_dpp_ek-tm4c123gxl - -@attention -The changes to QP::QXMutex in QXK and the now obsolete QMutex in QK **break backwards-compatiblity** with the exising code that relies these features. In the exising code, the mutexes should be replaced with selective scheduler locking. - -@attention -Also, the blocking APIs with timeouts, such as QXMutex::lock(), QXSemaphore::wait(), QXThread::delay(), and QXThread::queueGet() no longer require the last `tickRate` parameter. This also **breaks backward-compatiblity** with the exising code that uses these operations. - -This release also updates CMSIS to version 5.1.0 (3rd_party/CMSIS). - -This release also adds the @ref api "API Reference" section to the QP/C++ documentation. - - -@section qpcpp_5_9_6 Version 5.9.6, 2017-08-04 -The main focus of this release are improvements to the "dual-mode" QXK kernel. Specifically, this release implements the featrue request #128 "QP Semaphore Max Value Setting" for QXK. This feature changes the QXK function QP::QXSemaphore::init(), which now takes additional parameter `count`. This parameter specifies the maximum allowed count for the semaphore (e.g., count of 1 makes the semaphore a binary-semaphore). - -@note -This change does NOT break any existing code, because the additional parameter has a default value (0xFFFF). - -This release also fixes a bug inside the assertions in QP::QXSemaphore::signal(), where the check for the extended-thread is performed. - -Also, this release adds assertions to the QXK code, which ensure that any available blocking calls can only be made from extended-threads and not from basic-threads (active objects) or ISRs. - -Also, this release adds protection in the IRQ priorities initialization in QK/QV/QXK for ARM Cortex-M3/M4/M7, so that the number of IRQs is extracted from bits 0-2 of the ICTR register (INTLINESNUM). - -Finally, this release consistently changes all example projects (for all toolchains) to use the **src** directory for QP/C++ source code, instead of the **source** directory. The source/ directory is now truly obsolete, but is still provided in this release for backwards compatibility with user projects. - - -@section qpcpp_5_9_5 Version 5.9.5, 2017-07-20 -This release fixes the following bugs: -- bug#178 "GNU-ARM compiler reports "Error: unaligned opcodes..." in startup code for QP/C/C++/nano examples". The bug fix entails modifying the startup code for the GNU-ARM compiler in the `3rd_party` directory. Specifically, the proper alignment directives have been added to the inline assembly in the exception handlers. -- bug#179 "Assertion ID 210 fires when signaling on a QXK semaphore" - -This release fixes the naming problem of the startup code for the -STM32F7-Discovery board (in the `3rd_party/stm32f7-discovery/gnu/ and arm/` -directories), where the startup code was renamed from `startup_stm32f4xx.c/s` -to `startup_stm32f746xx.c/s`. The change has been also made in the example -projects for the STM32F7-Discovery board (for ARM-KEIL and GNU-ARM toolsets). - -Finally, this release modifies the example code (mostly `bsp.cpp` files) -so that the Q_DEFINE_THIS_FILE() macro is used consistently *outside* -a namespace at the top of the file scope. - - -@section qpcpp_5_9_4 Version 5.9.4, 2017-07-07 -This release adds Thread-Local Storage (TLS) feature for the dual-mode -QXK kernel (see @ref qxk_tls). - - -@section qpcpp_5_9_3 Version 5.9.3, 2017-06-19 -This release implements the feature request -#126 "Allow non-asserting -event allocation for zero-margin allocations". Specifically, calling -Q_NEW_X() or QP::QActive::post_() with the @p margin argument of zero will no -longer assert if the allocation/posting fails. - - -@section qpcpp_5_9_2 Version 5.9.2, 2017-06-05 -This release adapts the Makefiles for GNU-ARM to the new location of the -GNU-ARM toolset, which is now included in the QTools Collection (v 5.9.1) -for Windows. - -Also, this release improves the flash loading scripts for the JLink -hardware debugger (for GNU-ARM projects for the EFM32-SLSTK3401A board). -Specifically, the JLink configuration file for flash download is -generated by the flash batch script based on the command-line paramter -(the binary file to load into the flash). This eliminates the need to -manually maintain JLink configuration files. - -Also, this release adds bi-directional QP/Spy to the embOS example -project for the STM32F4-Discovery board. - -Also, this release adds GNU-ARM port to uC/OS-II and adds GNU-ARM example -project for the EK-TM4C123GXL board. - -Finally, this release implements the feature request #125 "Include QPC -Demo application for STM32F4 processor without RTOS" (see -https://sourceforge.net/p/qpc/feature-requests/125/ ). The DPP demo for -the STM32F4-Discovery board has been added in the directory: -qpc/examples/arm-cm/dpp_stm32f4-discovery . This demo includes QV, QK and -QXK kernels and ARM-Keil, GNU-ARM, and IAR-ARM toolsets. The demos support -bi-directional QP/Spy. - - -@section qpcpp_5_9_1 Version 5.9.1, 2017-05-26 -This release fixes the following bug: -- bug#169 "Submachine-state eXit Point does not work correctly" - -@note -The bug only affects sub-machines and does not affect any other -aspects of QMsm-style state machines. - -Also, this release changes the organization of the QP/C++ source code to -make it more friendly for the Eclipse CDT, as proposed in the feature -request #123 "Eclipse-friendly source directory structure for QP/C/C++". -Specifically, the QP/C++ source code is now provided in the -`qpc/src/` directory with the following structure: - -@verbatim -qpcpp/ - +-source/ - exitsting source directory with "flat" structure - | (for backwards-compatibility) - +-src/ - new source directory grouped by functionality - +-qf/ - core framework (QEP + QF) - +-qk/ - QK kernel - +-qv/ - QV kernel (only one file qv.c) - +-qxk/ - QXK kernel - +-qs/ - QS software tracing - +-qf_pkg.h - +-qs_pkg.h - +-qxk_pkg.h -@endverbatim - -@note The original `qpcpp/source` directory is still provided for backwards -compatibility with the existing QP/C projects. This directory will be -phased out in the future QP/C++ releases. Please use the new source code -structure provided in the `qpcpp/src` directory. - - -@section qpcpp_5_9_0 Version 5.9.0, 2017-05-19 -The main purpose of this milestone QP/C++ release is to provide support for the powerful **Unit Testing Framework** called -QUTest™ (pronounced *cutest*). -QUTest™ is the fundamental tooling for Test-Driven Development (TDD) of QP/C++ applications, which is a highly recommended best-practice. This release introduces changes in the QS-RX (receive) channel and adds several new callbacks. - -@note The signature of the QS::onCommand() has changed and the function now takes 3 arbitrary 32-bit parameters instead of one. This introduces backwards-incompatibility with previous code that used QS::onCommand(). - - -This release also changes the critical section for QP/C++ ports to ARM Cortex-M -in that the policy of "save and restore interrupt status" is used. This policy -permits nesting of critical sections, which was requested by customers. - -Additionally, this release changes the selective interrupt disabling for -ARM Cortex-M3/4/7 (with the BASEPRI register) to address the hardware problem -on ARM Cortex-M7 core r0p1 (ARM-EPM-064408, errata 837070). The QP ports to -ARM Cortex-M3/4/7 now implement the workaround recommended by ARM, which is -to surround MSR BASEPRI with the "CPSID i"/"CPSIE i" pair. This workaround -works also for Cortex-M3/M4 cores. - -New ports: -- ports/win32-qutest folder contains port to QUTest for Windows -- ports/posix-qutest folder contains port to QUTest for POSIX (Linux) -- ports/arm-cm/qutest folder contains port to QUTest for ARM Cortex-M - -New examples: -- examples/qutest/dpp folder contains the QUTest DPP test for various - platforms (Win32, EFM32-SLSTK3401A and EK-TM4C123GXL) -- examples/qutest/qhsmtst folder contains the QUTest test for - the QHsmTst state machine (structural test) -- examples/qutest/qmsmtst folder contains the QUTest test for - the QMsmTst state machine (structural test) -- examples/qutest/self_test folder contains the QUTest self-test for - various features of QUTest - -Updates of 3rd_party software: -- the 3rd_party/CMSIS folder has been updated to CMSIS 5.0.2. -- the 3rd_party/embOS folder has been updated to embOS 4.34.1 - -Finally, this release fixes the following bugs: -- bug#162 "QF critical sections require modification for M7 core" - - -@section qpcpp_5_8_2 Version 5.8.2, 2017-02-08 -This release adds examples for the ARM Cortex-M7 CPU. Specifically, -the release contains the standard @ref dpp "Dining Philosophers Problem (DPP)" -examples for the @ref arm-cm_dpp_stm32f746g-disco "STM32F746G-Discovery board", -all build-in kernels (QV, QK, and QXK), and ARM-KEIL, IAR EWARM, GNU-ARM toolsets. - -To provide examples for STM32F746G-Discovery board, the release now -provides the folder `3rd_party/stm32f7-discovery` with the support code -for the STM32F7xx MCUs, which contains parts of STM32CubeF7 library. - -Also, the `3rd_party/CMSIS` folder now provides the new CMSIS V5.0.1. - -Also, the file `3rd_party/gnu_cpp/mini_cpp.cpp` has been updated to provide -compatibility with the latest GNU-ARM (gcc 6.2.0). - -Finally, this release fixes the following bugs: -- bug#159 QP/C/C++ Win32 ports don't work on all x86 CPUs -- bug#157 In QPC ucosii port, conversion of AO's priority to OS task - priority is incorrect. -- bug#152 Typo (qpcpp/ports/arm7-9/qk/gnu/qk_port.s:42) prevents - compilation -- bug#151 QTicker compile error when #Q_EVT_CTOR is defined -- bug#154 qspy.c parses history transitions incorrectly - - -@section qpcpp_5_8_1 Version 5.8.1, 2016-12-16 -This release is in response to a recent finding that many QP users of the -ports to ARM Cortex-M3/M4 forget to explicitly set their interrupt priorities, -as described in the AppNote -"Setting ARM Cortex-M Interrupt Priorities in QP 5.x". - -Specifically, this release improves safety of QP ports to ARM Cortex-M3/M4, -by initializing the interrupt priorities to a safe default in a generic, -portable way. This QP port includes such a fix for QV/QK/QXK ports to ARM Cortex-M3/M4. - -Additionally, this release introduces the new QP::QTicker class, which is an -efficient active object specialized to process QF system clock tick at a -specified tick frequency [0..#QF_MAX_TICK_RATE]. Placing system clock tick -processing in an active object allows you to remove the non-deterministic -TICK_X() processing from the interrupt level and move it into the thread-level, -where you can prioritize it as low as you wish. - -Changes in detail: -- modified the QV, QK, and QXK source code to call QV_init(), QK_init(), and - QXK_init(), respectively. -- modified the ARM Cortex-M ports of QV, QK, and QXK to initialize - priorities all exceptions and IRQs to the safe value QF_BASEPRI. - -@note The QV port now has a new **qv_port.cpp** module that needs to - be added to the build. - -- added declaration of the QP::QTicker class to qf.h -- added implementation of the QP::QTicker class to qf_actq.cpp -- modified the following examples to demonstrate the use of the QP::QTicker: - + qpcpp/examples/arm-cm/dpp_efm32-slstk3401a/qk - + qpcpp/examples/arm-cm/game_efm32-slstk3401a/qv - + qpcpp/examples/arm-cm/game_efm32-slstk3401a/qk -- added the header file **cmsis_ccs.h** to qpcpp/3rd_party/CMSIS/Include directory - (used in the examples for the Code Composer Studio). The file has been - dropped during the upgrade to CMSIS 5.0.1, because it is not part of the - standard distribution. - - -@section qpcpp_5_8_0 Version 5.8.0, 2016-11-30 -The main purpose of this milestone QP/C++ release is to finally provide -the baseline framework fully compatible with the upcoming QM 4.0.0. - -This release changes the class hierarchy so that QP::QHsm becomes the base -class of QP::QMsm and QP::QActive. Also, QP::QActive becomes the base class of -QP::QMActive, which reverses the changes introduced in version 4.1. - -The modified @ref classes "class hierarchy" better reflects the fact that QP::QHsm state -machine implementation strategy is simpler and supports less functionality -than the more advanced QP::QMsm strategy. For example, only the QP::QMsm class -fully supports sub-machines and sub-machine states that are the main -feature of QM 4.x. This clean progression of supported functionality from -subclasses to superclasses allows QM to easier check and enforce that -advanced features are not generated for subclasses that don't have the -required capabilities. (With previous class hierarchy with QP::QMsm as the -base class all subclasses, including QP::QHsm, would technically inherit the -advanced functionality, which is not the case). - -@note -The changes in QP/C++ 5.8.0 might occasionally require changing existing -QP/C++ applications by changing the type of pointers to QP::QMsm with -pointers to QP::QHsm or pointers to QP::QMActive with QP::QActive, -because of the reverse superclass-subclass relationship between these -classes. - -Also, this release changes the implementation of the QV, QK, and QXK kernels -in that the ready-set representing active threads is cleared only *after* -completion of the RTC-step, not when the last event is removed from the -corresponding event queue. In case of the QXK kernel this change fixes the -high-priority bug#147. -But even in case of the QV and QK kernels, where this behavior didn't lead -to any bugs, the policy better reflects the semantics of the ready-set. - -This release also updates the CMSIS interface included in the 3rd_party/CMSIS -folder to the latest CMSIS-5. - -All examples and QM models have been updated to the new upcoming QM 4.0.0. -All these models require QM 4.x. - -Finally, the complete list of bugs fixed in this release is as follows: - -- bug#147 "QXK: PendSV_error is triggered on special conditions" -- bug#144 "Obsolete Win32 API in qwin_gui.c" -- bug#124 "Windows port now cause memory leakage" - - -@section qpcpp_5_7_4 Version 5.7.4, 2016-11-04 -This release fixes the following bugs: -- bug#145 QP::QF::publish_() leaks events that have no subscribers -- bug#144 Obsolete Win32 API in qwin_gui.c -- bug#143 QP::QMActive::postLIFO on initial transition asserts on QXK - - -@section qpcpp_5_7_3 Version 5.7.3, 2016-10-07 -This release adds QP ports to the TI-RTOS kernel (SYS/BIOS) with TI-CCS -and IAR EWARM toolsets. Examples are provided for the EK-TM4C123GXL -(TivaC LaunchPad) in the directory: - -qpcpp/examples/ti-rtos/arm-cm/dpp_ek-tm4c123gxl - -NOTE: The examples require a separate installation of the TI-RTOS -(file tirtos_tivac_setupwin32_2_16_01_14.exe) - -Also, this release fixes the following bugs: -- bug#140 (PendSV_Handler() exception stacked PC not halfword aligned). -- bug#142 (PendSV_restore_ex may not be able to enable interrupt before - returning to task). - - -@section qpcpp_5_7_2 Version 5.7.2, 2016-09-30 -This is the first production release of the "dual-mode" QXK kernel. -"Dual-mode" QXK means that QXK supports both basic-threads (BC1 class -from the OSEK/VDX RTOS specification) as well as extended-threads -(EC1 class from the OSEK/VDX RTOS specification. In other words, -QXK executes active objects (basic threads) like the QK kernel using the -single stack (Main Stack on ARM Cortex-M), but can also execute -traditional *blocking* threads (extended threads). - -Only the extended threads (QP::QXThread class) need their private stack -spaces and the overhead of the full context switch. The basic threads -(QP::QMActive and QP::QActive classes) run efficiently using the main stack with -much lower context switch overhead. - -The QXK examples have been updated for more thorough demonstration of -the QXK features. The QXK examples are available in the following -directories: dpp_efm32-slstk3401a, dpp_ek-tm4c123gxl, and dpp_nucleo-l053r8. - -This release also changes the internal QK implementation to match the -terminology applied in the QXK kernel (e.g., QK_sched_() has been renamed -to QK_activate_() and QK_schedPrio_() to QK_sched_()). These changes fall -into the category of refactoring and have no impact on the API or -performance. - -Finally, this release improves the implementation of scheduler locking -in publish-subscribe event delivery. - - -@section qpcpp_5_7_0 Version 5.7.0, 2016-08-31 -This release adds support for sub-machines and sub-machine states for reusing pieces of state machines (an advanced UML concept) to the QMsm-state machine implementation strategy. This feature is to match the upcoming QM 4.0.0. - -Also, this release adds support for the ARM Cortex-R processor. Specifically, the release contains a generic port to ARM Cortex-R with the IAR and TI-CCS toolsets and @ref arm-cr_dpp_launchxl2-tms57012 "examples for the TI Hercules TMS570LS12x" safety MCU (LAUNCHPADXL2-TMS57012). - -Also, this release changes once more the QK port to ARM Cortex-M, to reduce the interrupt latecy. This has been achieved by shortening the critical section in the PendSV exception. Also, this QK port to Cortex-M no longer uses the NMI exception. - -Also, this release changes slightly the QXK port to ARM Cortex-M, where again the critical section in PendSV has been slighly shortened. - -Finally, this release replaces all absolute paths with relative paths in all CCS-Eclipse project files (for TivaC, Hercules, and MSP430). - -Changes in detail: - -1. Modified qep_msm.cpp to correct the support for sub-machines and sub-machine states -2. Added new port to ARM Cortex-R in the directory ports/arm-cr -3. Added examples for ARM Cortex-R in the directory examples/arm-cr -4. Modified the ARM Cortex-M QK ports (ARM-KEIL, GNU, IAR, and TI) -5. Modified the ARM Cortex-M QXK ports (ARM-KEIL, GNU, IAR, and TI) - - -@section qpcpp_5_6_5 Version 5.6.5, 2016-06-06 -This release adds support for the new board: EFM32-SLSTK3401A (Pearl Gecko Starter Kit from Silicon Labs). This board replaces the Stellaris EK-LM3S811 board, which has been discontinued. (The Stellaris EK-LM3S811 board had been used in the "Fly 'n' Shoot" game example accompanying the PSiCC2 book). - -This release also introduces a new version of the QWIN GUI Toolkit in the Windows prototypes for the "Fly 'n' Shoot" game and the DPP-GUI -version (see https://www.state-machine.com/products/index#QWIN). - -Additionally, this release also includes the QP/C integration with the emWin emgedded GUI from SEGGER, which is also the same product as -uC/GUI distributed by Micrium (@ref exa_emwin). - -Finally, this relase comes with updated project files for TI Code Composer Studio (both for ARM Cortex-M and for MSP430). - -This release fixes the following bugs: -- bug#130 (POSIX port stop->start leads to reuse of sestroyed mutex). -- bug#131 (QP::QF::newRef_() increments reference counter without QF_CRIT_ENTRY_()). - - -@section qpcpp_5_6_4 Version 5.6.4, 2016-04-25 -This release fixes a serious Bug #128 (https://sourceforge.net/p/qpc/bugs/128 ) in the QK port to ARM Cortex-M introduced back in QP 5.6.1 - - -@section qpcpp_5_6_3 Version 5.6.3, 2016-04-12 -This release fixes a serious Bug #127 (https://sourceforge.net/p/qpc/bugs/127 ) in the QK preemptive scheduler introduced in QP 5.6.2. - - -@section qpcpp_5_6_2 Version 5.6.2, 2016-03-31 -The main purpose of this release is to introduce _atomic event multicasting_, meaning that event publishing to all subscribers is now protected from preemption. This eliminates potential for re-ordering of events under preemptive kernels (such as QK, QXK, or 3rd-party RTOSes), when events are published from low-priority AOs and some higher-priority subscribers can preempt multicasting and post/publish events of their own (before the original event is posted to all subscribers). - -The atomic event multicasting is implemented by means of selective scheduler locking--very much like a priory-ceiling mutex. During event multicasting the scheduler gets locked, but only up to the highest-priority subscriber to a given event. The whole point here is that active objects with priorities above such "priority ceiling" are _not_ affected. Please see the discussion thread: - -https://sourceforge.net/p/qpc/discussion/668726/thread/c186bf45 - -This release also changes the implementation of the priority-ceiling mutex in the preemptive built-in kernels: QK and QXK. Specifically, the implementation now re-uses the selective scheduler locking mechanism. In this new implementation, the QXMutex of the QXK kernel is much more efficient and lightweight, but it _cannot block_ while holding a mutex. - -Finally, this release changes the QP ports to 3rd-party RTOSes by performing any RTOS operations (like posting events to message queues) outside critical sections. Also the ports have been augmented to support scheduler locking (this feature depends on what's available in the specific RTOSes). - -Changes in detail: - -1. Added scheduler locking to QF::publish_() in qf_ps.cpp. This feature is added in a portable way, via macros QF_SCHED_STAT_TYPE_, QF_SCHED_LOCK_() and QF_SCHED_UNLOCK_(), which need to be implemented in every QP port. - -2. Modified QV kernel to provide (dummy) implementation of selective scheduler locking. - -3. Modified QK kernel to implement selective scheduler locking via modified priority-ceiling mutex QMutex. - -4. Modified QXK kernel to implement selective scheduler locking via modified priority-ceiling mutex QXMutex. - -5. Modified embOS port to provide (global) scheduler locking, which affects all priorities, because that's all embOS supports. Also, modified the embOS port to perform event posting outside the QF critical section. - -6. Modified uC/OS-II port to provide (global) scheduler locking, which affects all priorities, because that's all uC/OS-II supports. Also, modified the uC/OS-II port to perform event posting outside the QF critical section. - -7. Modified ThreadX port to provide selective scheduler locking, by means of "priority-threshold" available in ThreadX. Also, modified the ThreadX port to perform event posting outside the QF critical section. - -8. Changed the ThreadX example to run on ARM Cortex-M4 board (STM32DiscoveryF4), instead of Win32 emulation (see qpcpp/examples/threadx/arm-cm/dpp_stm32f429-discovery). - -9. Modified the Win32 port to provide (global) scheduler locking, which is implemented by Win32 critical section. - -10. Fixed Bug#122 (QP didn't initiate some internal variables) https://sourceforge.net/p/qpc/bugs/122/ by adding explicit clearing of all QP variables in QF::init(). - -11. Modified the POSIX port to dummy-out scheduler locking. This means that this port currently does NOT lock scheduler around event publishing. (At this point it is not clear how to implement POSIX scheduler locking in a portable way.) - -12. Modified QK and QXK examples in qpcpp/examples/arm-cm/dpp_ek-tm4c123gxl to demonstrate the usage of the new priority-ceiling mutexes. - -13. Fixed the 3rd-party file startup_stm32l32l1xx.c to include exceptions for Cortex-M3 (MemManage_Handler, BusFault_Handler, and UsageFault_Handler). - -14. Updated the 3rd-party files for the EK-TM4C123GXL board (TivaC LaunchPad). - -15. Modified Makefiles for the EK-TM4C123GXL board with GNU-ARM toolset to define the symbol TARGET_IS_TM4C123_RB1 for compatibility with the updated 3rd-party files. - -16. Implemented Feature Request #110 as well as the duplicate Request #62 by adding function QMActive::flushDeferred() - - -@section qpcpp_5_6_1 Version 5.6.1, 2016-01-01 -This release is the first official (production) release of the new blocking @ref qxk "QXK kernel" ("eXtended Quantum Kernel"). QXK is a small, preemptive, priority-based, **blocking** kernel that provides most features you might expect of a traditional blocking RTOS kernel. - -QXK has been designed specifically for applications that need to mix event-driven active objects with traditional blocking code, such as commercial middleware (TCP/IP stacks, UDP stacks, embedded file systems, etc.) or legacy software. The QXK kernel is integrated tightly and optimally with the rest of the QP. It reuses all mechanisms already provided in QP, thus avoiding any code duplication, inefficient layers of indirection, and additional licensing costs, which are inevitable when using 3rd-party RTOS kernels to run QP/C++ applications. - -@note -The QXK documentation is available in the QP/C Reference Manual at @ref qxk - -Additionally, this release removes the macros Q_ROM, Q_ROM_BYTE, and Q_ROM_VAR from the QP/C++ code. These macros have been necessary for odd Harvard-architecture 8-bit CPUs (such as AVR, 8051) to place constant data in ROM. As QP/C++ stopped supporting those CPUs, the non-standard extensions could be removed from the QP/C++ code base. - -Additionally, this release re-designs the priority-ceiling mutex in the QK kernel, which now works the same as the mutex of the new QXK kernel. Also, the QK ports to ARM Cortex-M no longer need or use the SVC_Handler (Supervisor Call). This is done to make the QK ports compatible with various "hypervisors" (such as mbed uVisor or Nordic SoftDevice), which use the SVC exception. - -Finally, this release modifies the GNU-ARM ports of QK for ARM Cortex-M, to use the __ARM_ARCH macro to distinguish among different architectures (ARCHv6 vs ARCHv7). - -Changes in detail: - -1. Added new header files for QXK: qxk.h, and qxthread.h. - -2. Added new source files for QXK: qxk.cpp, qxk_mutex.cpp, qxk_pkg.h, qxk_sema.cpp, qxk_xthr.cpp. - -3. Added QXK ports to ARM Cortex-M for ARM-KEIL, GNU-ARM, IAR, and TI-ARM toolsets (see qpcpp/ports/arm-cm/qxk) - -4. Added QXK examples for ARM Cortex-M (in qpcpp/examples/arm-cm/dpp_ek-tm4c123gxl/qxk and qpcpp/examples/arm-cm/dpp_nucleo-l053r8/qxk) for all supported toolsets. - -5. Removed Q_ROM, Q_ROM_BYTE, and Q_ROM_VAR from the QP/C++ code. - -6. Added Q_ROM, Q_ROM_BYTE to the compatibility-layer in qpcpp.h. - -7. Removed ports and examples for the following 3rd-party RTOSes: CMSIS-RTX and FreeRTOS, as QXK provided all the features found in those kernels and is recommended over those kernels. - -8. Removed AVR ports and examples. - -9. Re-designed the QK priority-mutex in files qk.h and qk_mutex.cpp. - -10. Provided QK mutex examples in qpcpp/examples/arm-cm/dpp_ek-tm4c123gxl/qk and qpcpp/examples/arm-cm/dpp_nucleo-l053r8/qk. - -11. Updated Makefiles for GNU-ARM to use the __ARM_ARCH macro for defining the ARM architecture. - -12. Updated CMSIS from 4.2 to 4.3 in qpcpp/3rd-party/CMSIS - -13. Added error directives to source files from different built-in kernels (QV, QK, and QXK) to generate meaningful error messages when these files are mixed in one project. For example, a project based on QK will report errors when source files for QV or QXK are included in it. - -14. Corrected example projects for the ARM Cortex-M with TI/CCS toolset - - -@section qpcpp_5_5_1 Version 5.5.1, 2015-10-05 -The purpose of this release is to improve the AAPCS compliance of the ARM Cortex-M port to the QK preemptive kernel. Specifically, the PendSV handler in assembly did not always maintain the 8-byte stack alignment, which is required by AAPCS. This version corrects the stack misalignment in the qk_port.s files for all supported ARM compilers (ARM-Keil, GNU, and IAR). All these ports should also be ready for ARM Cortex-M7. - - -@section qpcpp_5_5_0 Version 5.5.0, 2015-09-28 -The main purpose of this release is the extension of the QS software -tracing system to bi-directional communication with embedded Targets. -Specifically, the QS-RX (receive channel for QS) has been added with the -following capabilities: - -1. Set global QS filters inside the Target - -2. Set local QS filters inside the Target - -3. Inject an arbitrary event to the Target (direct post or publish) - -4. Execute a user-defined callback function inside the Target with -arguments supplied from QSPY - -5. Peek data inside the Target and send to QSPY - -6. Poke data (supplied from QSPY) into the Target - -7. Execute clock tick inside the Target - -8. Request target information (version, all sizes of objects, build -time-stamp) - -9. Remotely reset of the Target - -This QP/C++ version complements the recent release of Qtools 5.5.0, -where the QSPY host application (https://www.state-machine.com/qspy ) has -been extended with a UDP socket, which is open for communication with -various Front-Ends (GUI-based or headless). An example Front-End written -in Tcl/Tk called "QSpyView" has been developed to demonstrate all the -features. The example application located in the directory -qpcpp/examples/arm-cm/dpp_ek-tm4c123gxl/qspy contains customization of -the "qspyview" script for the DPP application. Please refer to the -documentation of this example -(https://www.state-machine.com/qpcpp/arm-cm_dpp_ek-tm4c123gxl.html ) for -more information. - -Also, this release adds a state machine operation for implementing the -shallow history mechanism. The operation is called "childState", because -it computes a child state of a given parent, such that the child belongs -to the same state hierarchy as the current state. - -Also, this release fixes problems with QP/C++ examples for Qt. The Qt -project files have been modified to build QP/C++ from sources rather -than using QP as a library. - -Finally, this release fixes bugs #110 and #115 reported against QP/C++ -on SourceForge.net. - - -Changes in detail: - -1. Modified the QS software tracing component to add new functionality, -such as the QS-RX input channel. Also added new trace records. - -2. Added file "qstamp.cpp" (in the qpcpp/include/ folder) to provide -time-stamp of the application build. - -3. Added function QMsm::childStateObj() to the QMsm class and -QHsm::childState() to the QHsm class. These functions have been added to -support the shallow-history mechanism. - -4. Modified all example projects (qpcpp/examples/ folder) to include the -"qstamp.cpp" file and force its re-compilation for each new build, so -that every build has an up-to-date and unique time stamp. - -5. Extended the DPP on TivaC LauchPad example (directory -qpcpp/examples/arm-cm/dpp_ek-tm4c123gxl/) to demonstrate QS-RX (QS -receive channel). - -6. Provided example of customizing the "QSpyView" Tcl/Tk script for the -DPP application in the directory -qpcpp/examples/arm-cm/dpp_ek-tm4c123gxl/qspy/ - -7. Modified all examples (qpcpp/examples/ folder) to call the -QS_ASSERTION() macro to the Q_onAssert() callback function. - -8. Modified the startup code (in the qpcpp/3rd_party/ folder) for ARM -Cortex-M to invoke the Q_onAssert() callback from the assert_failure() -exception handler. This is to allow application-level code to define -Q_onAssert() for each specific project. - -9. Replaced deprecated registers in TM4C (TivaC) projects -(SYSCTL->RCGCGPIO rather than the deprecated SYSCTL->RCGC2). - -10. Fixed bug #110 "QF::init() failed to initialize the last entry in -active_[] array" - -11. Fixed bug #115 "QMsm::isInState() implementation missing" - - -@section qpcpp_5_4_2 Version 5.4.2, 2015-06-06 -The main focus of this release is to improve the support for "dual targeting" of QP/C++ applications, which is developing of deeply embedded code as much as possible on the desktop OS, such as Windows. Experience shows that "dual targeting" dramatically improves productivity of embedded systems developers, perhaps more than any other technique. - -This release makes it possible to use exactly the **same** application code, main function, and the Board Support Package interface (bsp.h) on both deeply embedded target and on Windows. The only differences between these targets can be completely encapsulated in the Board Support Package implementation (bsp.cpp). - -The support for "dual targeting" in this QP/C++ release works both for Win32 console and Win32 GUI applications. The Win32-GUI support enables developers to easily emulate the front-panels of the embedded devices, with LCD-screens (graphical and segmented), LEDs, buttons, switches, sliders, etc. - -Changes in detail: - -1. Modified the QP/C++ ports to Windows (both @ref win32 and @ref win32-qv) so that they support both Win32 console and Win32-GUI applications. The newly introduced pre-processor #WIN32_GUI macro is now required to use the Win32-GUI facilities. - -2. Added portable "safe" macros from `` and `` to the QP/C++ ports to Windows. These macros encapsulate the differences between Microsoft Visual C++ and other compilers (such as MinGW). - -3. Simplified the structure of the QP/C++ Windows ports by eliminating one level of directories for the compilers used. Both VC++ and MinGW builds can now be run in the same port directory. - -4. Modified the QF::stop() function in the QP/C++ port to @ref win32-qv, so that it unblocks the QV event-loop and thus lets the application terminate. - -5. Modified all examples for Windows to use the new port structure. - -6. Improved all Makefiles (for the MinGW toolset) in all Windows examples, to make them easier to adapt to custom applications, both Win32 console and Win32 GUI. - -7. Moved several examples from the `examples/win32/` and examples/win32-qv directories to `examples/arm-cm/` directory with native embedded examples for ARM Cortex-M. This co-location of the Win32 emulation with the embedded code running on the actual board demonstrates better the "dual targeting" development approach. - -8. Updated all Windows examples to the latest QP API by compiling the code with the macro #QP_API_VERSION set to 9999 (latest API without backwards compatibility) - -9. Improved the PC-Lint support for checking the application-level code located in in `examples/arm-cm/dpp_ek-tm4c123gxl/lint` - - -@section qpcpp_5_4_1 Version 5.4.1, 2015-05-21 -This release changes the active object class hierarchy so that QP::QMActive is now more fundamental and is the base class for QP::QActive. (Previously QP::QMActive was a subclass of QP::QActive). The newly added documentation section about @ref classes "QP/C++ Design" shows the current class hierarchy. - -@note -Because the types QP::QMActive and QActive are equivalent in QP/C++, this change has minimal impact on the applications, but it is now more correct to use QMActive as the base class for all "opaque" active object pointers. - -Also, this release brings several cosmetic improvements: - -1. All QM models have been saved with QM 3.3.0, which means that they will not open with QM 3.2.x or earlier QM versions. - -2. The `qpcpp/ports/arm-cm/qk/gnu/qk_port.s` ARM Cortex-M port to QK with GNU has been modified to use the CMSIS-compliant symbol __FPU_PRESENT instead of the FPU_VFP_V4_SP_D16 symbol. - -3. All Makefiles for the GNU toolset have been cleaned up, whereas any `/` (back-slash) characters in the paths have been repalced with `/` (forward-slash) characters. Also all these Makefiles have been updated to provide the __FPU_PRESENT to C/C++ and assembler when the hardware FPU is used. - -4. The file display drver for the EK-LM2S811 board locate at `qpc/3rd_party/ek-lm3s811/display96x16x1.c` has been modified to fix the problem with incorrect hardware delay with the GNU compiler at higher levels of optimization. The in-line assembly for the GNU compiler has been updated such that the delay loop cannot be "optimized away". - -5. Several README files have been updated. - - -@section qpcpp_5_4_0 Version 5.4.0, 2015-05-14 -This release changes the basic philosophy of distributing the QP frameworks by **combining** the "QP/C++ Baseline Code" with all currently available "QP/C++ Development Kits" (QDK/C++). This is done to eliminate any potential mistakes in downloading and installing separate pieces of code. - -Additionally, this release changes the basic philosophy of building your embedded applications with the QP/C++ framework. Starting with this release, all @ref exa "examples" for embedded boards include the QP/C++ framework as **source code** within the projects, instead of statically linking with a QP/C++ library. (**NOTE:** It is still possible to use QP/C++ as a library, but you need to build such libraries yourself, as they are no longer provided in the QP/C++ distribution.) - -The move to building QP/C++ from sources ensures the consistent toolset version and compiler options applied to the application code as well as the QP/C++ framework code. (**NOTE:** The QP/C++ examples for "big operating systems", like @ref exa_native "Windows orLinux", still use QP/C++ as a pre-compiled library that is statically linked with the application code.) - -This release also changes the active object class hierarchy so that QMActive is now more fundamental and is the base class for QActive. (Previously QMActive was a subclass of QP::QActive). The newly added documentation section about @ref classes "QP/C++ Design" shows the current class hierarchy. - -@note -Even though the QP/C++ source has been re-packaged in this release, the changes have minimal impact on the existing QP/C++ applications. The biggest difference is that "opaque" pointers to active objects derived from QMActive now need to be also typed QMActive (as opposed to QActive), because QMActive is no longer a subclass of QActive and the automatic upcast no longer applies. - -The changes in basic approach to distributing and building the framework have also the following ripple effects: - -1. The QP/C++ source code has been simplified and has been re-packaged into a much smaller number of source files. The whole QP/C++ source code now resides in the single source folder. Additionally, the source code files have now the **read-only** protection to prevent inadvertent changes to the QP/C++ source code that is part of your projects. - -2. It is no longer necessary to define the **QPCPP environment variable** to build the QP/C++ examples. All directories and files referenced by example projects are **relative** to the project folder. This change reflects the fact that most development tools add source files to the project using relative paths (and now the projects contain QP/C++ source code, not just the QP library). - -3. The QP/C++ @ref ports folder has been reorganized to contain all currently available QP/C++ ports. The ports are organized into three categories: @ref ports_native "native QP/C++ ports" ("bare-metal"), @ref ports_rtos "ports to 3rd-party RTOSes", and @ref ports_os "ports to big operating systems" (Windows and Linux).(**NOTE**: the ports are now documented in the this QP/C++ Reference Manual. Each port sub-directory contains a README link to the corresponding page in the online documentation) - -5. The QP/C++ @ref exa folder has been reorganized to reduce the repetitions and contains all currently available QP/C++ examples. The folder includes four categories of examples: @ref exa_native "native QP/C++ examples" ("bare-metal"), @ref exa_rtos "examples for 3rd-party RTOSes", @ref exa_os "examples for big operating systems" (Windows and Linux), and @ref exa_mware "examples for 3rd-party Middleware". As mentioned before, all example projects for embedded systems use QP/C++ as source code and not as a library. The examples folder has been expanded to contain all currently available QP/C++ examples, many of them are new in this release. (**NOTE**: the currently available examples are now documented in the QP/C++ Reference Manual. Each example sub-directory contains a README link to the corresponding page in the online documentation) - -6. A new 3rd_party folder created to contain the Third-Party code used in the QP/C++ ports and examples, such as MCU register files, low-level startup code, device drivers, etc. The 3rd_party folder avoids the need to repeat such code in every project. Also, the separation of the Third-Party components helps to clearly indicate code that comes from various sources, and to which Quantum Leaps, LLC expressly makes **no claims of ownership**. The Third-Party software components included in this "3rd_party" folder are licensed under a variety of different licensing terms that are defined by the respective owners of this software and are spelled out in the README.txt or LICENSE.txt files included in the respective sub-folders. - -7. This release also comes with the much expanded online QP/C++ Reference Manual, which is cross-linked with the ports and examples. - - -Changes in detail: - -1. Renamed the "Vanilla" scheduler to the @ref comp_qv "QV cooperative kernel" for symmetry with the @ref comp_qk "QK preemptive kernel". Renamed QF::onIdle() callback to QV::onIdle(). - -2. Removed class QFsm (which is now deprecated). Legacy state machines coded in the "QFsm-style" will continue to work, but will use the QHsm implementation internally. There is no longer any efficiency advantage in using the "QFsm-style" state machines. - -3. Applied a slight performance improvement to the ARM Cortex-M port to the QK preemptive kernel. The QK port now checks for ISR context by looking at the IPSR register, instead of incrementing and decrementing the `QK_intNest_` up-down counter. - -4. Updated @ref exa_arm-cm "ARM Cortex-M examples" and provided new examples for NXP mbed-LPC1768, and STM32 NUCLEO-L053R8, and NUCLEO-L152RE boards. All examples now use the latest CMSIS (V4.3.0). All ARM Cortex-M exampels are provided for the ARM-KEIL, GNU-ARM, and IAR-ARM toolsets. - -5. Added the native @ref arm7-9 "port" and @ref exa_arm7-9 "examples" to the @ref arm7-9 "classic ARM7/9" with AT91SAM7S-EK board and the IAR-ARM toolset. - -6. Added the native port and examples to the AVR (AVRmega) with GNU-AVR and IAR-AVR toolsets. The examples are provided for the Arduino-UNO board. - -7. Added the native @ref msp430 "port" and @ref exa_msp430 "examples" to MSP430 with TI CCS-430 and IAR-430 toolsets. The @ref exa_msp430 "examples" are provided for the MSP430 LauchPad board (MSP-EXP430F5529LP for the "classic" MSP430 and "extened" MSP430X). - -8. Added port to CMSIS-RTOS RTX. Examples are available for TI EK-TM4C123GLX, STM32 NUCLEO-L053R8, and NUCLEO-L152RE boards with ARM-KEIL, GNU-ARM, and IAR-ARM toolsets. - -9. Updated port to @ref embos "embOS". Examples are available for STM32 STM32F4-Discovery board with IAR-ARM toolset. - -10. Updated port to @ref freertos "FreeRTOS" for the latest version 8.2.1. Examples are available for TI EK-TM4C123GLX board with GNU-ARM and IAR-ARM toolsets. - -11. Added @ref threadx "port to Thread-X". Example is available for the Thread-X demo with Visual Studio on Windows. - -12. Updated port to @ref uc-os2 "uC/OS-II" for the latest version v2.92. Examples are available for TI EK-TM4C123GLX and STM32 NUCLEO-L152RE boards with ARM-KEIL and IAR-ARM toolsets. - -13. Updated @ref win32 "port to Win32" (Windows). Modified the port to apply a generous "fudge factor" in over-sizing QP event queues and event pools, to minimize the risk of overflowing queues/pools due to non-deterministic Windows behavior. - -14. Updated the @ref qt "QP-Qt Port" (QP/C++ port to the Qt cross-platform GUI framework). - -15. Added new @ref win32-qv "port to Win32-QV" (Windows with cooperative "Vanilla" scheduler, previously known as Win32-1T). - -16. Updated the @ref lwip_ek-lm3s6965 "lwIP-QP example for EK-LM3S6965 board". - - -@section qpcpp_5_3_1 Version 5.3.1, 2014-09-20 -@note QP/C++ 5.3.1 remains backwards-compatible with all QP/C++ ports -and applications - -This release fixes the following bugs: - -1. QMsm::isInState() returns invalid result (bug #105) - -2. QF::gc() doc typo (bug #102) - -3. POSIX-port Makefile error (bug #65) - -4. Problematic friendship to extern "C" function in qf.h (bug #106) - - -Also, this release updates the PC-Lint options and removes all the remaining PC-Lint warnings for the latest PC-Lint 9.00k. - -Additionally, this release improves the uC/OS-II port in that it is now generic and applicable for any CPU, for which uC/OS-II port exists. Specifically, all references to DOS or x86 have been removed from the QP port and any CPU-specific dependencies have been placed in the separate part of the port. - -Finally, this release improves the "QP/C++ Reference Manual" generated by Doxygen and available both inside the QP/C++ baseline distribution (qpcpp.chm file) and online at: https://www.state-machine.com/qpcpp - - -@section qpcpp_5_3_0 Version 5.3.0, 2014-04-14 -This release adds the "transition to history" (deep history) feature to -both QHsm and QMsm state machines and their subclasses. This QP/C++ -release matches the new QM modeling tool version 3.1.0, which now -supports the "transition to history" connector and the corresponding -code generation for transitions to history. - -/note QP/C++ 5.3.0 remains backwards-compatible with QP/C++ applications -developed for QP/C++ 4.x and QP/5.x. However, any QM models created for -the previous QP/C++ versions require re-generating the code with QM 3.1.0. - -This release adds new QS (Quantum Spy) instrumentation for tracing -transitions to history as well as entry and exit points in submachines. -All these features require the matching QSPY host application included -in Qtools 5.3.0. - -Additionally, the QMsm state machine has been extended to add -implementation of the reusable submachine states and submachines with -entry points and exit points. The reusable submachines in QP/C++ 5.3.0 -lay the groundwork for providing reusable submachine states and -submachine diagrams in the next upcoming QM version. - -This release also uses the C99 data types uint_fast8_t and uint_fast16_t -instead of the non-standard uint_t. - -Finally, this QP/C++ release brings deep changes in the source code -comments and the doxygen documentation generated from the source code. -All comments have now more consistent structure, and every function is -now documented in the implementation file (.cpp file), whereas the -interface (.h files) contain only the brief descriptions of the -functions. This re-structuring of documentation is performed as part of -the validation and verification effort that has begun to provide a -certification package for QP/C++ for safety standards, such as IEC 61508 -and ISO 62304 (FDA 510(k)). - - -Changes in detail: - -1. Moved detailed documentation of functions from the header files (.h) -to implementation files (.cpp). - -2. Removed the header file "qevt.h" and merged its contents into "qep.h" - -3. Added macros: trace records QS_QEP_TRAN_HIST, QS_QEP_TRAN_EP, and -QS_QEP_TRAN_XP to "qs.h" - -4. Added macros: Q_TRAN_HIST(), QM_TRAN_HIST(), QM_TRAN_EP(), -QM_TRAN_XP(), and QM_SUPER_SUB() to "qep.h" - -5. Added attributes entryAction and initAction to the QMState struct in -"qep.h" (needed for transition to history). - -6. Added attribute act to the QP::QMAttr union in "qep.h" (needed for -transitions to entry point in submachine states). - -7. Changed the QState return type from action/state handler functions to -uint_fast8_t. - -8. Added QM models to the "Transition to History" design pattern example -(directory qpcpp/examples/win32/mingw/history) and also added an example -for "Transition to History" with the QMsm class (see -qpcpp/examples/win32/mingw/history_qm). - -9. Changed the m_prio attribute of QActive to uint_fast8_t. - -10. Changed the type of prio argument to uint_fast8_t and qlen/stkSize -to uint_fast16_t in the signature of QActive::start() - -11. Changed the type of the tickRate argument in QTimeEvt constructor -and QP::QF::tickX_(), and QP::QF::noTimeEvtsActiveX() to uint_fast8_t. - -12. Changed the type of the poolSize argument in QP::QF::poolInit() to -uint_fast16_t. - -13. Changed arguments evtSize and margin in QP::QF::newX_() to -uint_fast16_t. - -14. Changed attribute bits in QPSet8 as well as bytes and bits[] in -QPSet64 to uint_fast8_t. - -15. Changed the QEQueueCtr event queue counter type to uint_fast8_t. - -16. Changed type of arguments qLen and margin in QP::QEQueue::init() and -QEQueue/QActive::post() to uint_fast16_t. - -17. Changed the return type from QK_schedPrio_() (priority) as well as -the p argument in QK_sched_() and QK_schedExt_() to uint_fast8_t - -18. Added function QMsm::isInState() to "qep.h" and its implementation -file qmsm_in.cpp. This function tests whether the QMsm state machine (or -its subclasses like QMActive) "is in" the given state. - -19. Updated all make scripts for QP/C++ ports to include the new -qmsm_in.cpp in the QP/C++ library builds. - - -@section qpcpp_5_2_1 Version 5.2.1, 2014-01-06 -This release fixes two bugs. - -1. In file qmsm_dis.cpp added saving of the action-table into a -temporary variable *before* exiting the current state to the transition -source. Also, changed the signature of the QMsm::msm_tran() helper -function to take the action table as parameter. NOTE: This bug only -affected the Spy configuration and because of this escaped regression -testing. The internal testing process have been updated to test all -build configurations: Debug, Release, and Spy. - -2. In file qs_mem.cpp fixed an error in accounting used bytes in the QS -trace buffer. - - -@section qpcpp_5_2_0 Version 5.2.0, 2013-12-28 -This release matches the new QM 3.0.0, for which it provides model -examples based on the new QMsm/QMActive classes. This, in turn -demonstrates the new state machine code generation that QM3 was -specifically designed to do. - -This release also provides a clearly separated API compatibility layer, -whereas you can configure a level of backwards compatibility by means of -the #QP_API_VERSION macro. This facilitates migrating existing QP -applications to the newer API. - -An cyclomatic complexity (McCabe V(G)) analysis of this version has been -performed and the maximum V(G) complexity per function has been reduced -to 15 by breaking up the QHsm::dispatch() function. The code metrics -report, including cyclomatic complexity by function as well as other -standard code metrics (e.g., lines of code), is now included in the -"QP/C++ Reference Manual", see -https://www.state-machine.com/qpcpp/metrics.html - -Also, in this release all internal QP data that were previously -uninitialized are now explicitly initialized to zero. In other words, -this release no longer assumes that all uninitialized data (global and -static inside functions) is implicitly initialized to zero before the -control is transferred to main(). This is a requirement of the C -Standard, but some embedded startup code fails to do this. - -Finally, this release demonstrates safer stack allocation and safer -exception handlers in all ARM Cortex-M examples. The techniques are -described in the Embedded.com article "Are We Shooting Ourselves in the -Foot with Stack Overflow?". - -Changes in detail: - -1. for backwards compatibility, in file qp_port.h defined "API -Compatibility Layer", which is controlled by the macro #QP_API_VERSION. -For example, specifying QP_API_VERSION=500 chooses API compatible with -QP version 5.0.0 or newer, but excludes APIs that became deprecated in -the earlier versions. If the macro #QP_API_VERSION is not defined by the -user (typically on the command line for the compiler), the default value -of 0 is assumed. This default means maximum backwards compatibility -(from version 0.0.0). On the other hand, higher values of -#QP_API_VERSION mean less backwards compatibility. For example -QP_API_VERSION=9999 will specify compatibility only with the latest -version of QP. The API Compatibility Layer for QP_API_VERSION < 500 -provides macros: postLIFO(), publish(), and tick(). These macros resolve -to POST(), PUBLISH(), and TICK_X() respectively. - -2. In file qhsm_dis.cpp, broken up the function QHsm::dispatch() into -two functions QHsm::dispatch() and a private helper QHsm::hsm_tran(). -This has reduced the cyclomatic complexity from 25 for the original -function, to 11 and 15 for QHsm::dispatch_() and QHsm::hsm_tran(), -respectively. - -3. In file qmsm_dis.cpp, broken up the function QMsm::dispatch() into -two functions QMsm::dispatch() and a private helper QMsm::msm_tran(). -This has reduced the cyclomatic complexity from 15 for the original -function, to 9 and 7 for QMsm::dispatch() and QMsm::msm_tran(), -respectively. - -4. Changed QM models dpp.qm and game.qm to use QMActive and QMsm base -classes instead of QActive and QHsm, to showcase the new code generation -capabilities of QM3. - -5. Added the QMsmTst example application analogous to the QHsmTst to -test the QMsm base class. The QMsmTst comes with the QM model qmsmtst.qm. - -6. In file qf_act.cpp added the function QF::bzero(), and in files -qvanilla.cpp and qk.cpp added calls to QF::bzero() to explicitly clear -the uninitialized data. Also added calls to QF::bzero() inside -qf_psini.cpp. - -7. Updated all examples for ARM Cortex-M to use safer stack allocation -and safer exception handlers in all ARM Cortex-M examples, as described -in the Embedded.com article "Are We Shooting Ourselves in the Foot with -Stack Overflow?". - - -@section qpcpp_5_1_1 Version 5.1.1, 2013-10-10 -This release fixes reversal of logic in the QF::noTimeEvtsActiveX() -function as well as sleep mode transition in the ARM Cortex-M3/M4 ports -to the cooperative Vanilla kernel. Also, the native QP event queue -implementation has been changed to count the extra "front-event" -location into the number of free entries, which fixes the problem of -defer queues of depth 1. Finally, the release restores the support for -linting (with PC-Lint) of the QP/C++ applications for ARM Cortex-M (with -IAR and GNU compilers). - -Changes in detail: - -1. In file qf_tick.cpp reversed the logic inside QF::noTimeEvtsActiveX() - -2. Modified free entry accounting (nFree) in the files: qeq_init.cpp, -qeq_fifo.cpp, qeq_get.cpp, and qeq_lifo.cpp. - -3. Modified free entry accounting (nFree) in the files: qa_init.cpp, -qa_fifo.cpp, qa_get_.cpp, and qa_lifo.cpp. - -4. Introduced new macro QF_CPU_SLEEP() in the ARM Cortex-M Vanilla ports. - -5. Changed Board Support Package files (bsp.cpp) in the ARM Cortex-M -Vanilla examples. - -6. Modified the CMSIS-compliant startup code in all ARM Cortex-M Vanilla -examples. - -7. Modified the application examples with PC-Lint -(qpcpp/examples/arm-cm/qk/gnu/dpp-qk_ek-lm3s811-lint and -qpcpp/examples/arm-cm/qk/iar/dpp-qk_ek-lm3s811-lint). Updated lint files -for the latest PC-Lint - -8. Ported all state pattern examples to Win32/MinGW. That way, all these -examples can be run and modified directly on Windows, without going back -to DOS. - - -@section qpcpp_5_1_0 Version 5.1.0, 2013-10-02 -/note QP/C++ 5.1.0 remains backwards-compatible with the existing -QP/C 4.x applications, except the ARM Cortex-M applications need to -adjust the interrupt priorities. Specifically, you need to set the -interrupt priorities equal or lower than QF_AWARE_ISR_CMSIS_PRI -constant provided in the qf_port.h header file. - -The main purpose of this milestone QP/C++ release is to enable the QM -modeling tool to generate a new type of state machine code (requires QM -version 3.0.0, which is still in development as of this writing). - -This new type of state machine implementation in QP/C++ 5 is based on -the new QP::QMsm class, which takes advantage of the QM tool as an advanced -"state machine compiler". QM can perform optimizations that were not -possible with the C pre-processor alone. Specifically, the QM can easily -determine the LCA (Least-Common-Ancestor) state for every transition and -it can generate the complete transition-sequences (sequences of -exit/entry/initial actions) at code-generation time. The resulting code -can be still highly human-readable, but it will no longer be -human-maintainable. The lab tests indicate that the new "housekeeping" -code for executing hierarchical state machines can be about twice as -fast as the previous code based on the QP::QHsm class. - -The next important change introduced in QP/C++ 5 is making several -important functions in QP/C++ base classes virtual. The new virtual -functions include: QMsm::init() and QMsm::dispatch() and -QActive::start(), QActive::post(), and QActive::postLIFO() perations. -Making theses functions virtual means that all these operations can be -overridden in sub-classes of state machines and active objects. This, in -turn, allows a single application to use a mix of state machine classes -derived from the new QMsm base class with state machines derived from -the QHsm base class, each one using a different state machine -implementation strategy. Additionally, the virtual QActive::post() -operation could be very useful for implementing various Proxy active -objects (e.g., for active object event posting across networks). - -Another big feature introduced in QP/C++ 5 are the multiple, independent -system clock tick rates for time events. The number of system tick rates -can be now configured in the QP/C++ ports. For example, a digital watch -can use a "fast" clock tick rate of 100Hz and a "slow" clock tick rate -of only 1Hz. These clock tick rates can be managed independently, so for -example, the fast clock tick rate can be shut down in the absence of -time events assigned to this rate. This feature allows the applications -to implement sophisticated power-saving policies. - -As yet another important feature, QP/C++ adds a new "extended" API for -non-asserting event allocation and posting. This feature is intended for -situations, where an application is hammered with external events that -at times arrive too fast for processing, but that can be ignored under -the overload conditions. In those cases firing an assertion inside the -framework is undesirable. The non-asserting API allows a designer to -request a safety-margin when allocating or posting an event. The event -is not allocated/posted if the safety margin cannot be satisfied at the -time of the call. On the other hand, the safety margin allows the -application to still use the regular (asserting) event allocation and -posting, because the event pools and event queues are guaranteed to -maintain a minimal margin for safe operation. - -Finally, this QP/C++ release brings significant improvements to the QS -software tracing implementation and also brings important changes the -ARM Cortex-M port. Changes in detail are as follows: - -0. Removed the conditional compilation of the QP:: namespace based on -the macro Q_NNAMESPACE. The namespace QP:: is now enabled permanently, -which is a requirement of MISRA-C++:2004 and is also is part of the QM -code generation for QP/C++. Also, the use of explicit QP:: namespace -improves the doxygen documentation (QP/C++ Reference Manual). - -1. Added the new QMsm class to qep.h. Changed the inheritance tree by -deriving QHsm and QFsm from the QMsm base class. - -2. Added new source files qmsm_ini.cpp and qmsm_dis.cpp to the QEP. These -files implement the QMsm::init() and QMsm::dispatch() functions, respectively. - -3. Added the new QMActive class to qf.h. Extended the inheritance -tree to derive QMActive from QActive. - -4. Added the multiple system clock tick rates feature in qf.h: - - added new configuration macro #QF_MAX_TICK_RATE, which specifies - the number of clock tick rates. This macro is to be defined in - the QF ports (in the qf_port.h header file). If the macro is - undefined, the default value is 1 (one clock tick rate). - - renamed and re-implemented the QF::tick() function as the - "extended" QF::tickX() function with the argument 'tickRate' for - processing time events allocated to different clock rates. The - application must call QF::tickX(0), QF::tickX(1), ... at the - specified tick rates from ISRs or *tasks*. - - added an "extended" time event constructor, which assigns a time - event to a specific tick rate as well as specific active object. - - renamed and re-implemented the internal function QTimeEvt::arm_() - to a public function QTimeEvt::armX() for arming time events - initialized with the "extended" constructor. The QTimeEvt::armX() - function is the new recommended API for arming time events, both - one-shot and periodic. - - re-implemented QTimeEvt::disarm() and QTimeEvt::rarm(). - - renamed QF::noTimeEvtsActive() to the "extended" version - QF::noTimeEvtsActiveX(), which checks time events assigned to the - given tick rate. - -5. Added the new non-asserting API to qf.h: - - renamed internal function QF::new_() to QF::newX_(), the latter one - taking the argument 'margin' for allocating events. The function - returns NULL if the event pool has less free events than the - specified margin. The function asserts if the margin is zero and - the event can't be allocated. - - added function QActive::post() to post an event to the given - active object. The function does not post the event if the target - event queue has less free slots than the specified margin. The - function asserts if the margin is zero and the event can't be - posted. - - added "extended" macro Q_NEW_X() for allocating events with a - margin. - - added "extended" macro POST_X() for posting events with a - margin. - -6. Modified the QActive::defer() function to return the status of the - defer operation (true==success), instead of asserting when the defer - queue overflows. - -7. Modified QS (Quantum Spy) software tracing implementation: - - Optimized the internal QS implementation of all functions that - insert trace data into the trace buffer. The general idea of the - optimization is to extensively use automatic variables instead of - global variables (such as buffer head and tail indexes, the - running checksum, etc.). - - Reduced the number of QS global filters from 256 to 124 (0x7C). - This enables the code to avoid escaping the trace record numbers - - added additional tick rate byte to the trace records QS_QF_TICK - and QS_QFF_TIMEEVT_*. - - An empty QS record and the QS_RESET record are now inserted - automatically into the trace buffer in the function - QS::initBuf(). The empty QS record/QS_RESET pair provides a clean - start of a session and allows the QSPY host application to - re-synch with the data stream. - - added new trace records #QS_QF_ACTIVE_POST_ATTEMPT, - #QS_QF_EQUEUE_POST_ATTEMPT, and #QS_QF_MPOOL_GET_ATTEMPT for the - "extened" non-asserting event allocation and posting. - - added new trace records QS_TEST_RUN and QS_TEST_FAIL for future - support for unit testing. - - added new QS source file qs_dict.cpp with functions QS_*_dict() to - generate various dictionary entries. Changed the macros - QS_*_DICTIONARY() to call these functions. This was done to - significantly reduce the amount of tracing code needed to send the - dictionaries from applications. - - grouped together the various QS variables (such as filters, trace - buffer indexes, etc.) in a single struct, which results in a more - efficient code for various QS operations. - -8. Changed the structure of the ARM Cortex-M ports - - renamed the sub-directory for ARM Cortex-M ports and examples - from "arm-cortex" to "arm-cm". This is done to avoid confusion - with other ARM Cortex variants, such as Cortex-A/R, which very - different from Cortex-M. - - Changed the policy of disabling interrupts for Cortex-M3/M4. - For these cores, QP 5.1.0 never completely disables interrupts, - even inside the critical sections. The QP port disables - interrupts selectively using the BASEPRI register. (NOTE: The - BASEPRI register is not implemented in the ARMv6-M architecture - (Cortex-M0/M0+), so Cortex-M0/M0+ need to use the PRIMASK - register to disable interrupts globally). - - - removed the CMSIS (Cortex Microcontroller Software Interface - Standard) directories from the Cortex-M examples and moved it to - the common location in the %QPC%/ports/arm-cm/cmsis/ directory. - Upgraded the CMSIS to the latest version 3.20. - - added the ARM Cortex-M ports and examples with Keil/ARM MDK to - the QP Baseline Code. - - upgraded ARM Cortex-M ports with IAR to the latest IAR EWARM 6.60 - - upgraded ARM Cortex-M ports with Sourcery CodeBench to the latest - version 2013.05-53. - -9. Added the requested simple "Blinky" example for Windows and ARM - Cortex-M (with the GNU, IAR, and Keil toolsets). - - Added "Getting Started with QP/C++" guide based on the Blinky - example. - -10. Updated the Doxygen documentation (QP/C++ Reference Manual) - - removed the outdated tutorial section - - updated and added documentation and code samples - - added search box and tree-view panel to the HTML documentation - - -/note This new policy of disabling interrupts in ARM Cortex-M divides -interrupts into "kernel-unaware" interrupts, which are never disabled, -and "kernel-aware" interrupts, which are disabled in the QP critical -sections. Only "kernel-aware" interrupts are allowed to call QP -services. "Kernel-unaware" interrupts are *NOT* allowed to call any QP -services and they can communicate with QP only by triggering a -"kernel-aware" interrupt (which can post or publish events). - - -@section qpcpp_4_5_04 Version 4.5.04, 2013-02-10 -The main purpose of this release is adding support for the ARM Cortex-M4F -processors with the hardware Floating-Point Unit (FPU). The QP/C ports -to Cortex-M4F take full advantage of the "lazy stacking" feature of the -FPU registers, and by doing so offer the most efficient preemptive -multitasking on this processor. - -Changes in detail: - -1. Added ports and examples for ARM Cortex-M4F with the EK-LM4F120XL -board (Stellaris Launchpad). - -2. Added the macro QF_LOG2(), which can be re-implemented in the QP ports, -if the CPU supports special instructions, such as CLZ (count leading zeros -in Cortex-M3/M4). If the macro is not defined in the QP port, the default -implementation uses a lookup table. - -3. Updated all ARM Cortex-M ports and examples to the latest IAR EWARM -6.50 and Sourcery CodeBench 2012.09-85. - -4. Updated App Notes "QP and ARM Cortex-M with IAR" and "QP and ARM -Cortex-M with GNU". - -5. Updated the PC-Lint support files (include/lib-qpcpp.lnt, au-misra2.lnt) -to the latest PC-Lint 9.00j. - -6. Updated the Application Note: "QP/C++ MISRA-C:2004 Compliance Matrix". - -7. Spell-checked the comments in all QP/C++ source files and removed -several typos. - -8. Removed the Qt ports and examples from the QP/C++ Baseline Code and -moved them to the separate QDK/C++-Qt. - -/note QP/C++ Version 4.5.04 preserves full compatibility with QM 2.2.03 -and all existing QDKs for QP/C++ 4.5.xx. - - -@section qpcpp_4_5_03 Version 4.5.03, 2012-11-29 -This release changes the directory structure of QP ports to various -operating systems, such as POSIX (Linux, BSD, etc.), Win32 (Windows), -Qt, etc. The OS ports are moved from the ports/80x86/ directory one -level up to ports/. Also, the OS examples are moved from the -exampels/80x86/ directory one level up to examples/. - - - -@section qpcpp_4_5_02 Version 4.5.02, 2012-08-15 - -The main purpose of this release is providing QM models in most -examples and better, more comprehensive support for (rapid) -prototyping of embedded QP applications on the desktop with the -Win32 API and with Qt. Among others, this release adds a complete -toolkit for creating realistic embedded front panels with pure -Win32-GUI API and free Visual C++ Express and ResEdit. An extensive -Application Note "QP and Win32" is included in this release. - -This QP relase adds QM models, created with the new QM 2.2.01, -to most of the examples. The code generated by this new QM version -complies with MISRA-C++:2008 rules. For this compliance, the QM code -generator applies the QP:: namespace prefix to all QP/C++ elements, -such as classes, types, enumerations, etc. - -For compliance with MISRA-C++:2008 and compatibility with QM, all -QP/C++ ports in this release use the QP:: namespace. The namespace -generation can be suppressed by providing the new configuration -macro Q_NNAMESPACE, but this is generally *not* recommended, because -it breaks compatiblity with the QM code generation. (In other words, -a QP/C++ port without namespace cannot use the code generated by QM.) - -This release simplifies the QP ports to desktop OSs, such as -Windows (Win32), Linux, BSD, Mac OSX (POSIX) and combines 32-bit -and 64-bit ports in one with conditional compilation. - -This release also enhances the option for using constructors for -dynamically allocated events. When the configuration macro -Q_EVT_CTOR is defined, the QEvt class provides a non-default -constructor and the Q_NEW() macro becomes variadic and -takes the arguments for the event constructor. This generally -allows creating dynamic events "on-the-fly" without a temporary -pointer to the event. This QP configuration is demonstrated only -in the QP port to Qt, but can be used in any other port. -NOTE: The event constructor feature is NOT backward-compatible -with the existing applications. - -At the same time, the QEvt class in this release provides the virtual -destructor only when the new macro Q_EVT_XTOR is defined. This -separation of QEvt constructor from virtual destructor makes the -constructor more attractive, because it saves the virtual pointer -in every event, if no virtual functions are used in QEvt subclasses -(which seems to be generally the case). - -This release also adds a new macro QF_MPOOL_EL, which is intended -for allocating properly aligned storage for memory pools and event -pools. - -Finally, all QP ports included in this release use only a single QP -library, rather than separate libraries for QEP, QF, QK, and QS. - -Changes in detail: - -1. Modified QP port to Win32 and used the free Visual C++ Express -2010 with Platform SDK rather than Visual C++ Pro 2008. Renamed -the port directory from vc2008/ to vc/. Provided a completely -revised App Note "QP and Win32". - -2. Eliminated QP port to Win32 with one thread (Win32-1T). - -3. Consolidated all QP ports to POSIX OSs (Linux, Linux64, Mac_OSX) -into a single port to POSIX and placed it in the directory posix/. - -4. Renamed the port directory qt_1t/ to qt/. - -5. Added event constructor to qevt.h (controlled by the configuration -macro Q_EVT_CTOR). - -6. Added the conditional compilation with the macro Q_EVT_XTOR -around the virtual destructor in the QEvt class. - -7. Added macro QF_MPOOL_EL to qmpool.h. Modified all examples to -demonstrate the use of this macro to allocate properly aligned -storage for event pools. - -8. Added new typedef 'enum_t' and modified signatures of functions -taking event signals from QSignal to enum_t. This was done to -significantly reduce the number of casts necessary when enumerated -signals were passed to QP functions. - -9. Modified all QP ports distributed in the QP/C++ baseline code -to generate only a single QP library, rather than separate -libraries for QEP, QF, QK, and QS. This includes all QP ports -to the desktop (ports/80x86/ directory) and ARM Cortex-M ports -(ports/arm-cortex/ directory). - -10. Modified all examples to link only one QP library. - -11. Added QM models to most examples and used the automatically -generated code from the models instead of the hand-written code. - -12. Modified Qt ports to use the event constructors and -modified examples for Qt to demonstrate this feature. - -13. Added .ui files to the Qt examples for generating UIs -graphically with the Qt Designer tool. Revised and updated the -App Note "QP and Qt". - -14. Added new macro QS_USR_DICTIONARY() to QS for providing symbolic -names for user-defined trace records - -15. Added new macro QS_RESET() to QS for telling the QSPY application -when the target resets. This allows QSPY to reset its internal state. - - -@section qpcpp_4_5_01 Version 4.5.01, 2012-06-14 -The main purpose of this minor release is providing improved -MISRA-compliant state machine implementation. Specifically, a new -macro Q_UNHANDLED() has been added for a situation when a guard -condition evaluates to FALSE, but the state model does not prescribe -the explicit [else] case for this guard. In this case, the state -handler can return Q_UNHANDLED(), which will cause the QEP event -processor to propagate the event to the superstate, which is what -UML semantics prescribes. - -NOTE: These change to the QEP event processor is completely -backwards-compatible. All state hander functions coded the old -way will continue to handle the guard conditions correctly and -in accordance with the UML specification. The new Q_UNHANDLED() -macro is necessary only for MISRA-compliant state handler coding, -which will be applied in the upcoming release of the QM modeling -and code generation tool. - -Changes in detail: - -1. Added macro Q_UNHANDLED() and return value Q_RET_UNHANDLED in -qep.h. - -2. Modified qhsm_dis.cpp to handle the Q_RET_UNHANDLED return value. - -3. Updated the QP/C MISRA-C++:2008 compliance matrix to -include the new MISRA-compliant way of coding guard conditions. - -4. Modified qs.h and qs_dummy.h to add new trace record type -QS_QEP_UNHANDLED, which is generated when the state handler returns -Q_RET_UNHANDLED. - -5. Modified qs.h and qs_dummy.h to add the User record dictionary -trace record and macro QS_USR_DICTIONARY(). - -NOTE: This new trace record requires the updated QSPY 4.5.01. - -6. Corrected qfsm_dis.cpp, which did not generate QS trace records -for entry and exit from non-hierarchical states. - -7. Updated the IAR ARM compiler used in the ARM Cortex-M examples -to the latest version IAR EWARM 6.40. - -8. Modified the Qt port not to define the QPApp::onClockTick() -slot function, but instead to allow defining this slot function in -the BSP of the application. - - -@section qpcpp_4_5_00 Version 4.5.00, 2012-05-26 -The main pupose of this relase is to improve host-based development of QP -applications, which is critical for Test-Driven Development (TDD). Among -others, this release provides integration between QP and the popular -Qt GUI framework, which allows developers to easily build host-based -simulations of the embedded systems with the realistic user interfaces. - -This realase also simplifies implementing transitions to history, which -is a preparation to providing this feature in the QM modeling tool. - -Changes in detail: - -1. Renamed the event class from QEvent to QEvt to avoid a name conflict -with the Qt framework. Also, for consistency, renamed the file qevent.h -to qevt.h and the macro Q_EVENT_CAST() to Q_EVT_CAST(). - -NOTE: To minimize impact of this change on the existing QP ports and -applications, the name QEvent is provided as well, but this can be -suppressed by defining the configuration macro Q_NQEVENT in qep_port.h. - -2. Changed the design of QF::tick() (file qf_tick.cpp) to better support -calling this function from low-priority tasks (as opposed to interrupts -and highest-priority tasks), which often happens when QP is executed on -the desktop operating systems. In this design only QF::tick() can remove -time events from the active linked list, so no unexpected changes to the -list structure are eliminated - -3. Simplified the QTimeEvt class by removing the m_prev link pointer, -as the new design no longer needs a bi-directional list. These changes -impact the files: qte_*.cpp. - -4. Added return value to QF::run() to allow transfer of the exit -status to the destop operating systems. - -NOTE: This modification haves impact on most QP/C++ ports, because -the QF::run() function must now return a int16_t value. - -5. Eliminated the m_running member of the QActive class, which -has been used only in the QP ports to "big" OSes such as Linux -or Windows. - -6. Added member m_temp to the QHsm and QFsm base classes to prevent -clobbering the current state (the m_state member) during transitons. -This change allows keeping the current state unchanged during the -entire transition chain, which in turn allows easy and generic access -to the state information to store the state history in the exit -actions from states. Additional bonus of this re-design is the -opportunity of testing for stable state configuration in assertions -added to the qhsm_*.cpp and qfsm_*.cpp files. - -7. Added the QHsm::state() and QFsm::state() accessor methods. - -8. Modified the "Transition to History" pattern implementation to -use the simplified technique of obtaining the current state in the -exit action from the superstate rather than all the exit actions from -the substates. Modified the "State-Local Storage" (SLS) pattern as -well, because it was using the transition to history constructs. - -9. Re-designed the implementation of the QSPY host application, so -that it can be convenienty included as part of the QP library. -This allows direct QS tracing output to the screen for QP applications -running on the desktop. - -NOTE: This change is part of the Qtools release 4.5.00. - -10. Modified the QP ports to Win32_1t (both the MinGW and VC2008) to -output QS trace data directly to the stdout via the QSPY host-application -interface. Modified the DPP examples for Win32_1T to demonstrate the -direct QS output to the screen. - -11. Added QP port to Qt_1t (Qt with one thread) and two example -applications (DPP and PELICAN crossing). - -12. Added GNU compiler option -pthread to QP ports for POSIX with -P-threads, including QP ports and examples for Linux and Mac OS X. - - -@section qpcpp_4_4_00 Version 4.4.00, 2012-05-02 -The main pupose of this relase is MISRA-C++:2008 compliance, strong-type -checking compliance, update of PC-Lint option files and tests, and -general cleanup. - -1. Moved the qp_port.h header file from the port directories to -the qcppp/include/ directory. Also, moved the inclusion of the -QS (Spy) header files (qs_port.h/qs_dummy.h) from qep.h, qf.h, -and qk.h headers to qp_port.h. These structural changes were made -to reduce the number of preprocessor #if nesting levels below 8, -which is the ANSI-C limit. This was done to comply with the MISRA-C -rule 1.1 (all code shall conform to ANSI/ISO C). - -NOTE: This modifications have impact on most QP/C++ ports, because -the qp_port.h header file must be removed from the port. - -2. Enabled the QP namespace in most QP/C++ ports (except the DOS ports -with the Open Watcom compiler). This modification was needed for -MISRA-C++:2008 compliance with the rule 7-3-1. - -NOTE: This modifications have impact on most QP/C++ ports, because -all QP elements require now using the QP:: prefix. However, this prefix -can be dropped when the application applies the "using namespace QP" -directive. (The "using" directive deviates from MISRA-C++:2008 rule -7-3-4, so it is not used in the MISRA-compliant examples. However, -a number of QP ports applies the "using" directive for backwards -compatibilty.) - -3. Added the PC-Lint option files std.lnt and lib-qpcpp.lnt to the -qcppp/include/ directory. - -4. Cleaned the whole QP/C code from lint comments. All PC-Lint options -have been moved to PC-Lint option files. - -5. Modified QP assertion macro Q_DEFINE_THIS_MODULE() to avoid using -the # operator (MISRA rule 16-3-2). This macro now requires the argument -enclosed in doble quotes "". - -NOTE: This modification has impact on some QP/C++ ports. - -6. Added typedefs for char_t, int_t, float32_t, and float64_t to -event.h header file for compliance with MISRA-C++:2008 rules 3-9-2. - -7. Added macros Q_STATE_CAST() and Q_EVENT_CAST() to qep.h to -encapsulate deviation from MISRA-C++:2008 rule 5-2-7. - -8. Added macro Q_UINT2PTR_CAST() to encapsulate casting unsigned -integers to pointers, which deviates from MISRA-C++:2008 rules 5-2-7 -and 5-2-8. This macro has been added for *application-level* code. - -9. Updated ARM Cortex-M examples with the latest CMSIS v3.0, which -complies with more MISRA-C:2004 rules. - -10. Added DPP examples for MISRA-C++:2008 compliant applications (for -IAR-ARM and GNU-ARM). - -11. Updated ARM-Cortex-M3 port with GNU to the latest Sourcery -CodeBench 2011.09-60. - -12. Added QP/C++ port to Win32-1t and examples (Windows with 1 thread). -This port is useful for testing embedded QP/C++ applications on windows. - -13. Added documentation to QP/C++ distribution in the directory -qpcpp/doc/, with the following Application notes: -"MISRA-C++:2008 Compliance Matrix", "Quantum Leaps Coding Standard", -"QP and ARM Cortex-M, and QP and Windows", - - -@section qpcpp_4_3_00 Version 4.3.00, 2011-11-03 -1. This release changes the names of critical section macros and -introduces macros for unconditional interrupt disabling/enabling. -This is done to simplify and speed up the built-in Vanilla and QK -kernels, which no longer are dependent on the interrupt locking -policy. - -NOTE: The change in handling the critical section in the Vanilla and -QK kernels can break QP ports, which use the "save and restore -interrupt lock" policy, because all such ports must also define -unconditional interrupt disabling and enabling. - -2. This release changes the partitioning of the QK scheduler. -Specifically, the QK scheduler is now divided between two functions -QK_schedPrio_() and QK_sched_(), to calculate the highest-priority -task ready to run and to perform scheduling, respectively. The function -QK_schedPrio_() is useful to determine if scheduling is even necessary. - -3. Updated all QP ports to comply with the new critical section -names and policies. - -4. Modified the ARM Cortex-M port qk_port.s to take advantage of the -new structure of the QK scheduler. - -5. Upgraded the examples for ARM Cortex with IAR EWARM to the -latest IAR EWARM version 6.30. - -6. Upgraded the examples for ARM Cortex with GNU (CodeSourcery) to the -latest Sourcery CodeBench 2011.07-60. - - -@section qpcpp_4_2_04 Version 4.2.04, 2011-09-24 -The main pupose of this relase is to provide a bug fix for the QK port -to ARM Cortex processors. The bug fix addresses a very rare and -undocumented behavior of late-arrival of an interrupt while entering -the PendSV exception. In this case the PENDSVSET bit in the NVIC-ICSR -register is *not* cleared when finally PendSV is entered, so the -PendSV exception is entered in a *different* state when it is entered -via the late-arrival mechanism versus the normal activation of the -exception through tail-chaining. The consequence of this undocumented -and inconsistent hardware behavior, PendSV could be re-entered again -before the SVCall exception cleans up the stack. The bug fix is -implemented in the qk_port.s file and consists of clearing the -PENDSVSET bit programmatically inside PendSV_Handler. - - -@section qpcpp_4_2_02 Version 4.2.02, 2011-09-08 -1. The main pupose of this relase is to repackage the default QP/C++ -distribution to contain the single root directory qpcpp/ in the -archive. That way, unziping the archive will produce only one -directory (qpcpp/), which can be then changed by the user. - -2. This release also changes the ARM Cortex QP ports with GNU. The -suffix "_cs" has been added to all QP libraries generated by the -Code Sourcery toolset (now Mentor Sourcery CodeBench). This is to -distinguish libraries generated by different GNU-toolchains (such -as CodeRed, Attolic, DevKit ARM, etc.) - - -@section qpcpp_4_2_01 Version 4.2.01, 2011-08-13 -1. Modified file qassert.h to add assertion macros #Q_ASSERT_ID, -#Q_REQUIRE_ID, #Q_ENSURE_ID, #Q_INVARIANT_ID, and #Q_ERROR_ID, -which are better suited for unit testig, because they avoid the -volatility of line numbers for indentifying assertions. - -2. Added QP port and examples for Mac OS X on 80x86. - - -@section qpcpp_4_2_00 Version 4.2.00, 2011-07-15 -The goal of this milestone release is to extend the number of event -pools (theoretically up to 255 pools) instead of just three event -pools available up til now. This release adds an option to use -constructors/destructors and virtual functions in subclasses of QEvent. -Also, this release adds an option to wrap the whole QP framework in -the QP namespace to avoid name conflicts with other libraries and to -improve QP compliance with MISRA C++ 2008. This release adds also -several improvements to the QS/QSPY software tracing, such as adding -sender information to event posting so that sequence diagrams could be -easily and automatically reconstructed from tracing data. Also, the -tracing now supports 64-bit targets, such as embedded Linux 64-bit. -Finally, this milestone release migrates the examples to use the -environment variable QPCPP instead of relying on the relative path to -the QP/C++ framework. This allows easier adaptation of the examples for -real projects, which don't really belong to the examples directory. - -The changes in detail are: - -1. Changed the QEvent base class (file qevent.h). The private member -'dynamic_' has been replaced by two members 'poolId_' and 'refCtr_'. - -2. Added conditionally-compiled constructor and virtual destructor -to the QEvent base class (file qevent.h). Also added the inclusion -of the header file for placement new if the constructor/ -destructor option is configured. - -3. Added new version of the macro #Q_NEW() with variable number of -paramters, which invokes the event constructor (via placement new) -with any parameters requried by the event constructor (file qf.h). - -4. Added explicit call to the event destructor in QF::gc() (file -qf_gc.cpp). - -5. Added configuration macro QF_MAX_EPOOL (file qf.h) to define the -maximum number of event pools in the QP application (default to 3). -The maximum theoretical number of this macro is 255. - -6. Made algorithmic changes in the QF source code related to the change -of storing the event pool-IDs and reference counters inside QEvent. - -7. Changed the default signal size (macro Q_SIGNAL_SIZE in the file -qevent.h) from 1 to 2 bytes. - -8. Changed the signature of QActive::recall() to return uint8_t instead -of QEvent*, which this could encourage incorrect usage (processing of -the event at the point of recalling it). Now, the function only returns -1 (TRUE) if the event was recalled and 0 (FALSE) if the event was not -recalled. - -9. Added the QTimeEvt() constructor and new source file qte_ctr.cpp. -The function returns the counter of a time event, which allows using -a time event for measuring the time. - -10. Added new QF macros #QF_TICK, #QF_PUBLISH, and #QACTIVE_POST in -file qf.h to provide sender of the events for software tracing. - -11. Added new QS macros (files qs.h and qs_dummy.h) for handling 64-bit -integers. - -12. Added the functions QS::u64() and QS::u64_() and new source file -qs_u64.cpp. - -13. Added the QS macro #QS_U32_HEX_T for hexadecimal formatting of -integer numbers in the user-defined trace records. - -14. Added the new port linux64 for 64-bit Linux. Also added the -corresponding examples for 64-bit Linux. - -15. Adapted the QSPY host application for 64-bit pointer sizes and -the changed layout of trace records that contain event information -(such as PoolID and RefCtr). Also added the backwards-compatibility -option (-v) for switching the tool to the previous data format. - -16. Removed the tools directory from the QPC distribution and moved -the QSPY host application to the QTOOLS distribution, which now also -contains the GNU make tools for Windows. - -17. Modified the make files and project files to use the environment -variable QPCPP instead of relying on the relative path to the QP/C++ -framework. - -18. Upgraded the examples for ARM Cortex with IAR EWARM to the -latest IAR EWARM 6.20. - - -@section qpcpp_4_1_07 Version 4.1.07, 2011-02-28 -The goal of this release is to improve the ease of experimenting with -QP/C++ on the desktop. This release adds support for Windows (Win32) to -the baseline code. Two most popular compilers for Windows are supported: -Microsoft Visual Studio and MinGW (GNU). The support for Linux has been -improved by including pre-built QP/C++ libraries and improving makefiles -for Eclipse compatibility. - -The changes in detail are: - -1. Added Win32 port with the Visual C++ 2008 (ports/80x86/win32/vc2008). -This directory contains the Visual Studio solution all_qp.sln for -building all QP/C++ libraries from the IDE. Three build configurations -(Debug, Release, and Spy) are supported. - -2. Added Win32 port with the MinGW comiler (ports/80x86/win32/mingw). -This directory contains the Makefile for building all QP/C++ libraries. -Three build configurations (dbg, rel, and spy) are supported. -NOTE: the Makefile assumes that the MinGW/bin directory is added -to the PATH. - -3. Added Win32 examples for Visual C++ 2008 (examples/80x86/win32/ -vc2008/dpp and examples/80x86/win32/vc2008/qhsmtst). Visual Studio -soultions are provides for all build configurations. - -4. Added Win32 examples for MinGW (examples/80x86/win32/mingw/dpp -and examples/80x86/win32/mingw/qhsmtst). Eclipse-compatible makefiles -are provided for all build configurations. NOTE: the Makefiles assume -that the MinGW/bin directory is added to the PATH. - -5. Removed memory alignment correction in the file qmp_init.c. This -correction required casting of pointers to integers and was problematic -on 64-bit targets (such as 64-bit Linux). - -6. Upgraded the examples for ARM Cortex with CodeSourcery to the -latest Sourcery G++ 2011.02-2. - - -@section qpcpp_4_1_06 Version 4.1.06, 2011-01-07 -1. Fixed a bug in the software tracing instrumentation in the function -QF::unregister_(), file qf_act.cpp. - -2. Made cosmetic improvements to the example QM models of the -"Fly 'n' Shoot" game. - -3. Made improvements in make.bat files for building the examples for -DOS/Open Watcom to run better in DosBox on Linux. - -4. Upgraded the examples for ARM Cortex with IAR to the latest -IAR EWARM version 6.10. - -5. Upgraded the examples for ARM Cortex with CodeSourcery to the -latest Sourcery G++ 2010.09-66. - - -@section qpcpp_4_1_05 Version 4.1.05, 2010-11-01 -This release is adds examples for the QM (QP Modeler) graphical modeling -and code generation tool. The examples are based on the "Fly 'n' Shoot" -game described in the QP/C++ Tutorial and in Chapter 1 of the PSiCC2 book. - -Specifically, the directory /examples/80x86/dos/watcom/l/game-qm/ -contains the "Fly 'n' Shoot" game model file "game.qm". This model, when -opened in the QM tool contains all state machine diagrams and generates -code into the subdirectory qm_code/. This code can then be built and -executed on any 80x86 machine (newer versions of Windows or Linux require -the DOSbox application, see http://www.dosbox.com). - -The directory /examples/arm-cortex/vanilla/iar/game-ev-lm3s811-qm/ -contains the version of the game for the EV-LM3S811 ARM Cortex-M3 board. -This directory contains the model file "game.qm", which is actually -identical as the model in the DOS version. The LM3S811 version needs to -be compiled with the IAR compiler and executed on the EV-LM3S811 board. - -Additionally, the QP/C++ baseline code has been slighlty modified for -better conformance to the MISRA C++ 2008 rules and the latest PC-Lint 9.x. - - -@section qpcpp_4_1_04 Version 4.1.04, 2010-05-16 -This release is adds compatibility of all examples for DOS with the DOSBox -emulator (http://www.dosbox.com/) that recreates a MS-DOS compatible -environment on all versions of Windows, including 64-bit Windows that don't -run 16-bit DOS applications anymore. - -Also, this release includes QP ports and examples for EV-LM3S811 board with -the GNU-based Code Sourcery G++ toolset. Support for Sourcery G++ provides -a very cost-effective option for developing QP applications for ARM Cortex -MCUs. - -Finally, this release improves the Cortex Microcontroller Software Interface -Standard (CMSIS) for the whole family of the Stellaris LM3Sxxx MCUs. The -improvement extends the CMSIS from Sandstorm to Fury, DustDevil, and Tempest -Stellaris families. - - -@section qpcpp_4_1_03 Version 4.1.03, 2010-01-21 -This release is concerned with the ARM Cortex ports and examples. -Specifically, this release contains the following improvements: - -1. Unified source code for ARM Cortex-M3 and the new ARM Cortex-M0 cores, -including the code for the preemptive QK kernel. - -2. Compliance with the Cortex Microcontroller Software Interface Standard -(CMSIS) in all ARM Cortex examples. - -3. Backward-compatible support for the new LM3S811 EVAL Rev C board with -different OLED display than previous revisions. (NOTE: The OSRAM 96x16x1 OLED -used in REV A-B boards has been replaced RITEK 96x16x1 OLED used in Rev C.) - -In the process of making the examples CMSIS-compliant, the dependency on the -Luminary Micro driver library (driverlib.a) has been completely removed. - -Additionally, the screen saver of the "Fly 'n' Shoot" game has been improved -to periodically switch off the power of the OLED display, which better -protects the display from burn-in. The affected file is tunnel.cpp. - -Finally, this release introduces the QP_VERSION macro, which identifies the QP -version. Otherwise, this maintenance release does not change the QP/C API in -any way, so the release has NO IMPACT on the QP/C applications except for the -ARM Cortex ports and applications. - - -@section qpcpp_4_1_02 Version 4.1.02, 2010-01-14 -The purpose of this minor maintenance release is the change in the directory -structure for the ARM Cortex ports and examples. As new ARM Cortex cores are -becoming available, the old port name "cortex-m3" could be misleading, because -it actually applies to wider range of ARM Cortex cores. Consequently, all ARM -Cortex ports and examples are hosted in the directory tree called -"arm-cortex". - -This maintenance release does not change the QP/C++ API in any way, so the -release has NO IMPACT on the QP/C++ applications except for the ARM Cortex -ports. - - -@section qpcpp_4_1_01 Version 4.1.01, 2009-11-05 -The main purpose of this release is to replace the Turbo C++ 1.01 toolset -with the Open Watcom C/C++ toolset, because Turbo C++ 1.01 is no longer -available for a free download. In contrast, Open Watcom is distributed under -an OSI-certified open source license, which permits free commercial and -non-commercial use. Open Watcom can be downloaded from www.openwatcom.org. - -All 80x86/DOS and 80x86/qk ports and examples for Turbo C++ 1.01 have been -replaced with ports and examples for Open Watcom. The make.bat scripts are -provided to build the QP/C++ libraries and examples. - -In the process of converting the examples to Open Watcom two new examples -have been added to the standard QP/C++ distribution. The Calc2 example -located in <qpcpp>/examples/80x86/dos/watcom/l/calc2 shows how to derive -state machine classes with QP 4.x. The SLS example located in -<qpcpp>/examples/80x86/dos/watcom/l/sls shows the implemenation of the -new State-Local Storage state design pattern. - - -@section qpcpp_4_1_00 Version 4.1.00, 2009-10-09 -The release provides brings a number of improvements to QP/C++ and updates -the QP/C++ ARM Cortex-M3 examples for the EK-LM3S811 board to the latest -IAR EWARM 5.40. Due to the acquisition of Liminary Micro by Texas Instruments -the directory IAR structure for the examples and drivers has changed and the -QP examples had to be changed accordingly. - -This maintenance release does not change the QP/C++ API in any way, so the -release has NO IMPACT on the QP/C++ applications. - -The main changes in QP v4.1.00 with respect to earlier versions are as -follows: - -- in qs.h added a new trace record QS_QEP_DISPATCH logged when an event is -dispatched to a state machine. This timestamped trace record marks the -beginning of an RTC step. The end of the RTC step is marked by the existing -timestamped trace records QS_QEP_INTERN_TRAN, QS_QEP_INIT_TRAN, and -QS_QEP_IGNORED, depending on how the event is handled. The new QS_QEP_DISPATCH -record facilitates measurement of the RTC step lengths. -- in qhsm_dis.cpp added generation of the QS_QEP_DISPATCH trace record. -- in the tools/qspy/ sub-directory added output of the new trace record to the -Q-SPY host application. -- in the tools/qspy/matlab/ sub-directory added processing of the new trace -record to the qspy.m script. -- in qpset.h changed the implementation of the Priority Set. In particular, -the QPSet64 now derives from QPSet8, which enables a common way of testing for -non-empty set (e.g., useful in assembly). Also, the findMax() functions in -QPSet8 and QPSet64 now can work with an empty set, in which case they return -0. -- in qk_sched.cpp simplified the QK_schedule_() function to skip the testing -of the ready-set for non-empty condition. Such test is no longer necessary. -The test can still be performed outside the QK_schedule_() function (e.g., in -assembly) to avoid calling the scheduler if the ready set is empty. -- in qk_ext.cpp simplified the QK_scheduleExt_() function in the same way as -QK_schedule_(). -- modified make.bat files for building QP libraries in the ports/ directory -to use the externally defined environment variables for the location of the -toolchains. The defaults are applied only when the environment variable is -not defined. This enables greater flexibility in installing the development -tools in different directories than those chosen by Quantum Leaps. -- modified the ARM Cortex-M3 examples for the new IAR EWARM 5.40. -- modified slighlty the Calculator example to allow extensibility. -- in the ARM Cortex-M3 port file qk_port.s added explicit testing of the -QK_readySet_ set for empty condition. This test allows avoiding calling the QK -scheduler and two contex-switches if the ready-set is empty. -- in the game example moved setting up the QS filters from main.cpp to bsp.cpp. - - -@section qpcpp_4_0_04 Version 4.0.04 (Product) Apr 09, 2009 -The maintenance release introduces the virtual destructor in the QHsm and -QFsm base classes. This is done to allow proper handling of virtual functions -in the subclasses of QHsm or QFsm. Please note, however, that the change -increases the size of every state machine object by the additional (hidden) -virtual pointer (vptr). - -Also, this release provides a fix for the compile-time assertions, which did -not work correctly for the GNU compiler family. - -Finally, the ARM Cortex-M3 examples have been recompiled with the newer -IAR EWARM v5.30. - -This maintenance release does not change the QP/C++ API in any way, so the -release has NO IMPACT on the QP/C++ applications. - -The main changes in QP v4.0.04 with respect to earlier version are as follows: - -- in qep.h file, virtual destructors have been added to QFsm and QHsm. -- in qassert.h file the #Q_ASSERT_COMPILE macro has been modified to render -a negative array dimension when the asserted condition is not TRUE. - - -@section qpcpp_4_0_03 Version 4.0.03, 2008-12-27 -The main purpose of this release is to fix a bug in the QK preemptive kernel, -which occurs only when the advanced QK features are used. Specifically, the QK -priority-ceiling mutex could interfere with QK thread-local storage (TLS) or -QK extended context switch. When the QK mutex is in use, the TLS or the -extended context for this task could get saved to an incorrect priority level. - -The release 4.0.03 fixes the bug by strictly preserving the semantics of -QK_currPrio_ variable. The mutex locking now uses a different variable -QK_ceilingPrio_, which represents the ceiling-priority locked by the mutex. -The QK scheduler and extended scheduler now perform an additional check to -make sure that only tasks with priorities above the ceiling can run. To avoid -that additional overhead, the user can define the macro QK_NO_MUTEX, which -eliminates the QK mutex API and eliminates the additional tests in the QK -schedulers. - -This maintenance release does not change the QP/C++ API in any way, so the -release has NO IMPACT on the QP/C++ applications. - -The main changes in QP v4.0.03 with respect to earlier version are as follows: - -- in qk.h file, made the QK mutex API only visible when the macro QK_NO_MUTEX -is *not* defined. -- in qk_pkg.h file, added the QK_ceilingPrio_ external declaration when the -macro QK_NO_MUTEX is not defined. -- in qk_mutex.cpp file, changed priority-ceiling mutex implementation to use -the QK_ceilingPrio_ instead of QK_currPrio_. Also, added compiler error when -the macro QK_NO_MUTEX is definedthis and this file is included in the build. -- in qk_sched.cpp file added testing priority against the QK_ceilingPrio_, -when the macro QK_NO_MUTEX is not defined. -- in qk_ext.cpp file added testing priority against the QK_ceilingPrio_, -when the macro QK_NO_MUTEX is not defined. - - -@section qpcpp_4_0_02 Version 4.0.02, 2008-11-15 -This maintenance release does not change the QP/C API in any way, so the -release has NO IMPACT on the QP/C++ applications. - -The main changes in QP v4.0.02 with respect to earlier version are as follows: - -- in qep.h file, added comments to macros Q_TRAN() and Q_SUPER() to suppress -the PC-lint warining about using the comma-operator (MISRA rule 42). -- in qhsm_in.cpp file, fixed a bug in the QHsm::isIn() function. - fixed a bug -in tunnel.cpp file ("Fly 'n' Shoot" game). The constant event HIT_WALL was not -declared static. - - -@section qpcpp_4_0_01 Version 4.0.01, 2008-06-09 -This maintenace release is made to allow using QS software tracing with -the GNU compiler for AVR (WinAVR). Specifically, the output of the strings -residing in ROM has been fixed. - -This maintenance release does not change the QP/C++ API in any way, so the -release has NO IMPACT on the QP/C++ applications. - -The main changes in QP v4.0.01 with respect to earlier version are as follows: - -- in qs_.cpp file, updated the function QS::str_ROM_(). -- in qs_str.cpp file, updated the function QS::str_ROM(). -- in qvanilla.cpp file, funciton QF::run(), declared the temporary variables -as static to save stack space, because QF::run() never returns and is not -reentrant. - - -@section qpcpp_4_0_00 Version 4.0.00, 2008-04-07 -This milestone release is made for the book /ref PSiCC2. The book describes in -great detail this new release. The older "QP Programmer's Manual" is now -phased out and is replaced with this hyper-linked -/ref main_page "QP/C++ Reference Manual", which provides very detailed, easily -searchable reference to the software. The book /ref PSiCC2 provies in-depth -discussion of the relevant concepts as well as the design study of QP v4.0. - -The main changes in QP v4.0 with respect to earlier versions are as follows: - -- the coding techniques for hierarchical state machines (HSMs) and the simpler -finite state machines (FSMs) have changed. While the changes are quite simple, -the backward compatibility with QEP 3.x has been broken, meaning that some -manual changes to the state machines implemented with earlier versions are -necessary. Please refer to the "QP/C++ Tutorial" Section /ref coding_hsm for -more information about coding state machines with QEP 4.x. - - The main change is the signature of a state-handler function, which now - returns simply a byte. This return type (typedef'ed as QState) is the - status of the event-handling that the state handler conveys to the QEP - event processor. - - The macro #Q_TRAN() must now always follow the return statement. - - The new macro #Q_SUPER() designates the superstate of the given state. - Again, this macro must follow the return statement. - - Then two new macros #Q_HANDLED() and #Q_IGNORED() have been added to - return the status of event handled and event ignored, respectively. - -- all callback functions are now consistently called /c XXX_onYYY() or -/c XXX::onYYY(): - - Q_assert_handler() is now Q_onAssert() - - QF::start() is now QF::onStartup() - - QF::cleanup() is now QF::onCleanup() - -- the new header file qevent.h has been broken off the qep.h header file. -qevent.h contains the QEvent class and other basic facilities used in the -whole QP. This new file allows easier replacement of the entire QEP event -processor with custom event processors, if you wish do so. -- the macro QEP_SIGNAL_SIZE is renamed to #Q_SIGNAL_SIZE. -- the data type QSTATE is now deprecated. Please use QP::QState. -- the #QF_FSM_ACTIVE macro is now deprecated. Instead, please define -#QF_ACTIVE_SUPER_ to the base class of QP::QActive and #QF_ACTIVE_STATE_ to the -data type represented state. By default, these macros are defined to use the -QP::QHsm base class from the QEP hierarchical event processor, but you can -replace the event processor, if you wish. -- the internal macro QACTIVE_OSOBJECT_WAIT_() is now #QACTIVE_EQUEUE_WAIT_(). -- the internal macro QACTIVE_OSOBJECT_SIGNAL_() is now -#QACTIVE_EQUEUE_SIGNAL_(). -- the internal macro QACTIVE_OSOBJECT_ONIDLE_() is now -#QACTIVE_EQUEUE_ONEMPTY_(). -- the data mebers QActive::m_osObject and QActive::m_thread are now present -only if the macros #QF_OS_OBJECT_TYPE and #QF_THREAD_TYPE are defined. -- the QP::QPSet class has been renamed to QP::QPSet64. -- the QPSet::hasElements() has been renamed QPSet64::notEmpty() -- the QS software tracing is now better integrated with all QP components. You -no longer need to explicitly include qs_port.h, because it is automatically -included when you define the macro #Q_SPY. Also the file qs_dummy.h is -included automatically when the macro #Q_SPY is not defined. -- the new header file qvanilla.h now replaces the file qsched.h. -- the macros QF_SCHED_LOCK() and QF_SCHED_UNLOCK() are now obsolete. -- the native QF event queues (both the active object event queues and the -"raw" thread-safe queues) are slightly more efficient by counting down the -/c head and /c tail pointers rather than up. This leads to wrap-around at -zero, which is easier (faster) to test than any other wrap-around point. -Also the native QF event queues maintain the minimum of the free events in the -queue rather the maximum of used events. -- the data member of QEQueue::nTot class is removed. -- the QF::publish() function has been re-written so that QF no does not -need to lock the scheduler. The QF::publish() function posts events -to active objects with scheduler unlocked starting from the highest-priority -active objects. However, the event is protected from inadvertent recycling by -incrementing its reference counter before the publish operation. After the -event is posted to all subscribers, the garbage collector QF::gc() is called -to decrement the reference counter and recycle the event, if necessary. -- the qf_run.cpp file is obsolete. The QF::run() function for the cooperative -"vanilla" kernel is now implemented in the file qvanilla.cpp. -- the QF::tick() function has been rewritten to allow calling QF::tick() from -the task context as well as from the interrupt context. The nested critical -section around QF::tick() is no longer needed when it is called from the task -level. Among others, this re-design eliminates the need for the -recursive mutex in the POSIX QF port. -- the QMPool::init() function has been re-designed to optimally align the -memory buffer in a portable and platform-independent way. This should bring -some performance improvements on some CPUs (e.g., 80x86). -- the extended QK scheduler has been re-designed to save stack space. The -extended context (e.g., coprocessor registers) are no longer saved on the -precious stack, but rather in the active object. -- a bug has been fixed in handling of Thread-Local Storage (TLS) in the QK -scheduler and extended scheduler. - -- the -q (quiet) flag has been added to the QSPY host application. -- the support for two new compilers for Windows has been added for the QSPY -host application. The application can now be build with the MinGW GNU compiler -for Windows as well as the Microsoft Visual C++ 2005. - -- the QP port to Linux has been improved by eliminating the need for recursive -P-Thread mutex. - -- the QP port to MicroC/OS-II has been upgraded to the latest version 2.86. - -- all examples in the standard QP distribution have been cleaned up and -updated to the latest QP API changes. -- all examples that use QF now contain the QS software tracing support. - -*/ diff --git a/doxygen/images/AN-QL.png b/doxygen/images/AN-QL.png deleted file mode 100644 index 1cbeddfcd94bb40370db4f480f8930d50c029530..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 67603 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%0D)6!%gaJM$o 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∋8sWy*bh-NU)#~m!Q!jss7m0!v>LhL9{rXxZ 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%0AdP>VELI+*#zBws&;c{p0UlT&SPj2U2DZPs+f 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 LL0Z#66+i#kaoY3L diff --git a/doxygen/images/Arduino-UNO_button.jpg b/doxygen/images/Arduino-UNO_button.jpg deleted file mode 100644 index 8ef02e72e11b0fd4e5a9fcf0c39d99c2a227a24f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 84029 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 diff --git a/doxygen/images/Arduino-UNO_button_schem.jpg b/doxygen/images/Arduino-UNO_button_schem.jpg deleted file mode 100644 index d1f7517c56b63b8c59d2f7f677e2e7e8b3327765..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26885 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 diff --git a/doxygen/images/PSiCC2-3D.jpg b/doxygen/images/PSiCC2-3D.jpg deleted file mode 100644 index 27ed0c69d3df4ff268d3b27875c921b8ed1708a2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30952 zcma%ibyQo;*KUA9ix+M2;v`scEv}&y2u_gV1sb$S&)WZ_sIaoni0f2@M09ZU;fQLN*k({f!9UOoL zcmeb+U}0inVPif1aGzmeJ;TMr!NJAB z!F!JPul5{|fbcmX0UiknDJcmFH5C;VHQoO-w5Ly>;^X1JeE$3;B^ePJ<^N3l|K2?O z1`s_1T%*A;(1-x&L}(a9Xbh0Jk>CDDkJ?8oyjZXT+aBc1!DF! zCd;LQjQnVrPu84?|C4~AP^)Gvvn$K;@yNGqISVcM7mp^Pp+7-?`s67V7TObxM_bU) zi7@DSh@VJfJ}&o#mjtVcb?aZSeKm~s~~0okn9Z%;Lu$RB0^co>f+ z6JZbmBmvji>KV`7>4|<}dPYWz`)HHNeAC{*ya~V8xCe#C%C;oFL3wp1g=9|ky^7#W z_e~1UoZPqaQZN0AAQh$1>pBdo)67@jvdBssJ=9ds9O{<8x$z22ipm^HCVc=1znQU> zQ$GVo_@$^dgTH0mu*Qa5cBo2kIaTyX-Bdo+eOmpQ4gG&Rw-m$P)PT1;X4m@_U!2fb z>B5t(r?p?bcLekEGk^CLRb?KIYVeD_Gh$7)Ud+v6`@}l{4SjZ5pdmXPAHJr3iTN&5 zwk$T(ORY&&CPlay#i%hhRn=$-s+*BI(g*SE8IN{b;$!``+uUn z3H`PsWUJ=)4G%i%fK>)n0Yqw%tMMle-v(s83E9EYx8tEDb>V+NtY*F;(~`J#wAVKp ztaM#_Q8ksOdM2rP@!$ToXqUOLcCv2+2Z!SC_oun0@-B!qZhbq__l5PJot!Pm+()Te z)qVHqxMM>~${5|$nBAC7&VUt<2Q5YHEBN%@)Y!1oC1vZQ?rKIf>$XyNdS(;6jK`F_ zj$PWi_PvvSG@BRKCwpbGRCBK9U54_V<-Lx)7rg*W+5qW%KEegJHZxpv4rXhCSiXm&6VwdGN%0ryyvz`%mqm225vX?AT;>yiCq(Ez57Bz5Y>QJf&NF;I zQ;Qc7FIC8fJU+-+#nZyemh(`pP+GCt^oUe7@i^9AlmLMivqH9B!#*!>S=nAhrjHFc z6*v-w{i22{%{8=6$7;W_(9q5)|M4Y?>}%zN^g98slH#=tBXW>dJ>mp8#n3sV^h>u~ zX@&u7OTU9EvX&$MZ_=9IYJ`XtU0%070F((I0J8b{SuA<1gbmTh#$9jL8yu>3pm8H0 z57UEo+{D+Zchof+N1Wew^G8(Q3E1=BdQ*;H1K+X-t)3O+gr_0%89f=(Xd14X z6I3v!5c-KFL+rCoq=7uciF}!gxq8k!{mD<^)b5-_U1^QpI#gOBg8$XAvZKqmpD+^e z!yt(9NS)S8wx=pyv0fg4eG^t6S&3)9jMFT~R&_EPl=|m}!Rq<)kXnp?A z=OE#DBl`eIGkXAx&feJ}+BZyi+~{=AB)8V@S1;uL(6{l5hC%ZqDWY&s4C}zI-ddld zw2+`V;y2m~JOw+YCc|>^1>!Mx<-0U%uLd>WS6^oo;QSR8o+GiJ z)q&I~$~1*vr`S#)S~gN?_zdk@Q~mXXUYtyn|J_Gh2iQDKrzFu#OLA}oNEkd9w)%L1 zKNWYXv!2Owvp3~d+q&0BwI*=Ti(LotD$es%HZk1}w(|K&KRK^jT*j{+ z$+R+EI_@B>Kg4stnC8@~=FClnY@*kBHhem&F72S}^TfPR#E{W(`UiZ3ARl*gMEZ-u z&!|`Y8_8ia%d+E!Vhy!2_FT21w4<0(4r`TSxFss3nUisv z3)KNs(a;dAW4Q|~vodRN^1C$V_X9`z=avV4=!Emx6j`cg;GjK4?eiS=BcLa$fF^)C z=0Dxve~z-3YcU~PuS9TTb&Jgl_&86d^4gdn%;h-p>x$2X-<(t^7`Z#e$I0DeTiuUwVy-OpbH>@ zGUvO7o8a(|wwoafj2)7iwYgEk(;f7KxdCl^pYX(Cm`muh7;e zWmT24`}qd|@!?(j-(n3qn?+(hL3ql?Xg>svl4RmiFiR;QQmIpUp>mjIQT)T4Dv^)T#>?2Kz8$vnWJHuuRbqeBqqTaJUf9>4u z@6NKHT~uAvU%qH2b^Q5LA1~gfz4~-EN$!K*MNoHe{E#IZQFkd=opXA-$g7r3hPW}jDEg9|Evtpb(L{*)>XhwbwqGOAaS#fP$Dx3R|iK3tO;L9FAL{^NZK@zFGU zO`S!2I?q1fKTTJWZvC2(j0CR2bXJW=W0g6}_pRHTVB~+}9sqbg{sz?>FfQ_Td7#iXHqmzj0E{n$d?zK)VrVb@xG)?ik6X^^=?R~x!U3d>Ns<{ z6scP=>#`1mdr2#iZogur1kZF1`(?OdV$@JWv-nlhU0UWqMI=k_*u|Ho+H25$Q8b+Y zW`NH>JISsVHE5S=^rbNWbK>ITvd{FDHlZv1stv8H4*(k}>YK17U(ceA#?$izF`q7- zu0Dl`Z|AVv;oTCAT06GOB=Lr>ZLR09S@+wgGv zxhY^kV#~>K*X7_|<6qk9E@9}jGuiU1BLTX@k$fobGL6R#SMFGH8h)Dx2VBppgh@5` zX<$pKiQQB+IJrQLh?Le&eA3r5-5&rwo@@Ed2*KFBfw93jB&WRXRWGyRi0V%48$)d} zbpL>V0|nZ027h?bvQUsnQ_P>W!Lq1}OE-05L=SW*LY^DsXyL^Rs$+$ z<-QjlpY(GT+NflJ_Ut0xQw=U}9cJ%VAa_!{+@$iwzj!hvO|?a`W}~~M+m*2SyJLsb zM$0pUi2(3E#>3 zo?Wu%cz48G6M8>x{5k~l;t+o{wE1S^&McQA8`}a_|>ZHyz!X$4v*6v$18_0~Hs2*b&uF+L2dV>fwMaC|S~i_`S9lipu!bJn2!iy)`Q zKn{;DKa6Fb=xZdZsP)8;6@cg~u~vJaPi5jV7hw3iCKzo!e+r8tniOp}I%mRMJ!79MxIR`&E^arTB&k~h!7){gssr7ZyY4BYZ48{wYfDu- z-;o6zudmDtbSwAyGS*f>Z(rb+wT{ggjpPK7QW2+0*{Vg$ekq#B%_)p<-Q}&}&l;%h$lNsne*aZpu-aanCHdL9+z@2HYa;V z!2sMf*|6EcjR)C>7`s+wZF}YCni07*el~7s?|$8v`fJU3&%5%&?`ix9H>D=$foy$~ zfwTd+d&hjN<~1xJCT+MLn@DvO%f*XL?LX7||A{u#X=$~v zE|=pv+K+NcdZIysDc^pVP`z;_Dli()D|=cwnX%r?y)7ZVt2Wu(MrZmyq;?^K7JHE2 zgX+iY@6IoBd&bmbo;5pIr_~eCD8?3W`~NxM2(fWW>s(u*9}011K$%K|)PX?dWyi1f z*k?MNOcp;*gMynk_uKCN9vZ=Y2Ky6iF5k)j|`NbG?}Znjg0MNe8oUhD3wKukD$oW|dyeRPN-Vql$FaegSQKzP)hy`;&^$yc{FE+cnS_tVl4% zL@U}PKzSX$7#r5RrcmyZh|QC*f2`;Ft0YK2HbO()$sf5~Os{fP^F-@!SaIal4I<0Q z+eJ7mb-Ft~BtH_3gu-nL;#pkGt(mP|Z{c(iL`e6G|CD5fj;rz4R*J9(((Lr*L|!us zi(c(t#Y%bg(7ZVaV&tG|VEk5>yLX)Ey9XbvFJWv|M0O>D!dm`(NkMKpQRn2)!kKluuBQ{1AtKZ?OY;G+Mo|JQ2TkD}Ae;u4^yV@NfTGtw9nv6I|8k``Qlkuht`YMoK>(tOdA zgs)^Z#70_)Ak*L(5Tbg8)>#oTR2&-09=UXo?S z;K2gUK4E3|EEc+;hOAEyfcO5R5T>*ef9A1l_4k5?qorycyDa4q6V5$a(=KB-V)n7l zk!Q`W3e)(A2B$+*h)2!Ps#PC0TA$mgw6-mxKz=wo(>!_KK4;aL-)CWjR)v^>^I81N zD(bh2jVm*z)IXlYc)_+yWs6hM#r|EWhR@c@YM);6;D^Vk|1p4en_l2L@F@s;$AwE| z;*UW64jO9mOcBzBv#S-NrWW4KWFZMf2Hx=1EX&w!}*v*s1K? zHdp*1=7!uC!>6kD|Df56|Df63SGw`x1J6e=YnA`D?sQKL(!dCB=yEX|eD9iWWJx_t z+&v4LR(}jfgXV-kP*}=_39xI@j|+?13y*w_nJJb@hLFv!=R2vA3(o$Sj?afQ*+>?Q zMTp_Bn@sajczi2kOIi(~^=}#{3yQDT_qsPz>#*-{fFbXbXnptWt(wd2d)#PZvOD}1 z%PIMXxuPEc^fkVmjgq;Vkxgkggu(p}0Ot74ezh1mAp^;{(RN=LP$Euz-oK*8`Aw|a zEFFBa`YNKUt7DagaErOIM`AUceG)vFNwWTt8PONL?{8ABnBM4>8uo(A`#+crng0mv#gLl?}cw=&!x53VsSXkyAmd3i~ zO#)1!FYaQ<>R|b(046-TTr0g#Kh{ikl~<2a{#8BPV`wYhP4xn_n46-BkPOsFC@V|< z>0!jJ6e2;P{TZ$93)2)dnEeJ(&NaJYm-@>T=B-|LuXsVQYHr#Vnw!~}Hvy`TbaOM*)Hqt-HA{(0OBDVroO z_qacp$=;nKS~g3X-d0oac~n>nD~NKOLAD2+>t7rTr0e5`b@WGt}Uj{^aeAtdJhvsXJg5%V!YFP!f?j_KN5V=(mL6igB#=s$W@V04aKB@yFR zj&;f7=ShJ_?`u-LPj;Ab>0-@y3X_q_71_O;Q1-%HjMcU~3Xi~CR#a%r=)6=3b5J5g zD`DoAof{n6WBz52(RX-hK)iMFl99pF+tt$h#mwI-<{C@0iN=q0urJn0Pml?&dc>r0 z+37@Hv;v4-yNoooraFpV(VU`*{spf={#0cq3@^766u6xZ(+kHSJk4zB54_F7}eIzKl!Q01`hM!py|U z7k*ktzCXFQ&{$Tx3BdALroikPE6;zTA%PhC9n-ZcvfFCG;YtSg!ErD%uh;*6~f zI}2rUB>8M61xWw&^RG*8J5(z{?cMrx#hxc@P2Pk}4PZQx$i$leHg3eXftRB3j{uN~ zk=jUjNXvKDf4$4LAy@uL|Fs_JKSiH1UnU(xisY?@*4Ku#SRhps(J1poq7J2b$1{Df zXL$V(c)t%KGZ3y_$6Au!`)6Wg%y_&fXMI!JvZcUus`uW(-JV14`x?vIj%$rsZ>Q)E zad~2d(p&4{Zgj{d``x)s>b4@JR9;Ltl{1f{%vUgX^_%ARt^4bU{9osLoU@vol8iTo zDhAqnBEaWUz<05ucJE?JK@H zKU@|1+d-^7$aIsYBgH{qdYrd+Xd4HFhDmQTBm=HWcCSOX!?rH~sn1(S7fkEAj^Z?m zId@Ul3+G69wR7Oov&Dd^U(X~}+kefRtd9T8WNU=*rRLOc>eulhWABPti0A2phCAKV z{mK#P!;fS1dZ!@%;)nWEgJhdoqze8nIgY3dqCG;p9P(A$Dz#$4b`VTcxrFTG-fR_dfikIKD?aU7x(qOQrw6l zAGy~W?#V_~Xs@sb^jhxkuVwEkXu?VrT^ZS>psy&cCU+=X_c|p5V>iS^2@cwpkb>;R zW^G}7W}*yp_O&S7{n|g?@4(*RR0b9HP$;Z34bmDA*5tpY_tq@ zx2~13QrfUe!ddIa|ZQPx3n~t$fTR6|xzu)U-+Ahc>inMvF zcOYKwK>+Z-Su-eN)~9g=$rOcz`DDEs=n$)5k!L25vV@f{{pEgbV4(JkTlZp+58+Fe zXWC@tvbX8>j>Mx~3Bu9|d&l|{_!}qss%R`}yeR@l;g9kuv&}`i7Lo<$sDI1weqYZN_Riz+#UB|`{i+2SefeUg8KU z52VCOg2dch+B{Hj0+|jM`9h~2$sAxLZpX5}AdyCUZXvbl;Foxuo@+g+N!=Z=6H3Tn)mi`?lySjcw%Z+W*{+N<>5yi~+c$ORL&hrA+7YW1hDGjfMyY@c}v4}B< z7rYT#YvQ@ufvDKQ&$b{X#AJ5PFY?1t+*p==iQqj_%a;>8-!(fc_0FQ+?&%L9-*8js zQW`3w?Qysi)3X^z+7N=;cU;**-f$VfD$_(cr~CxBkY2c>csY zE^45@I53cszrHyLuZ(06wpTYGDUb*U1m@N+MN=r%Lk%rz#x0o@HEPSxS$3$=R&B%L z7Yc_r5BR1JVQ>(E&dw5o+3>tZ`ID>0u(%w-n@Q)N{V{uPSv<7L(0(!nnW?TCSK&`{ zcRSI3k~|uDE80u3*Wqc-I>_AcUPuJ-Ra#Lbcco>D|Kve6uifier<>Ke+-Iywt=>ytP%9o#%AO$hh)hTa_J6nlJW z;_<*g=4DY%h-=R;qlHaS*{mQ0ja1`;l*mQvzIl$iyHn{JBa`HtBIz4`O?T?7lP-%C zN^Vnh9LrkN>b#Sm!09PB4x`UNuUnj+*K4}56X^f=i(}Yj_~vT;Wna0#M>^&-cNdQA0*@uf z#1-Y)Z8zi0l(ei(j%cL)ITKfp*$<;Q2&iuAtHybzzSF%D>vT-ARy@l7Bi?fpzVQHP zD)z=Mj6LR^SYK~t6dpN4hfxM8tRkLnit0WH)+$}DE$C1 zx+v`rzn-*K(Do4#VZB(#t-0o^NL!7IJo9ROPHo+n(I`RyE31+eteecN^JLu)ZEfc3TvRMK>Ih>Cj%eGfhy{O~sk{JDGq9&b?MRNy`cz`BY%r)`*y9{6ZbX zMH?xgT^n}s!_3=HgHA*sJd#K=%{Tozp)vM%Cp8b>$6MS!zq!h`lc!8jodTJ8oW z@Q(5w2BsM4dUawQ&2EI@7|Yz*B#z|IX)(9`eeVGtm&uov6Uup#rJy6FSSpm`d@7|O zoc;AnnDjAC2lM#04st%@CvjF9S=jQ!bc@!PVH9W#)Qe_$_bNmg}dUadlmi zUr`%EBn*bR)6l(o%NsDRdI(XtDnoK=P{~&$|b(4S_porX8?8jfXgPXOg=sfMH!Bh{;|5TVSizXm84v+4JoWF z0A_dvC87dEpWXlY$`oRRb%z9QBk!;$h%PgAYH4l5K~;i(D@Jom)#M$i@*Gx(X@)7D z?J|#vHk`)|a#8)|K7twLO!Rl(L-_{prdjRw$48cQxuR4L^@|7TOP&Q6O$O5x1 z8K}~`tWP=2jGuEj^Cwc2=j;!Rb8C#)7fs-&T{AduO;=vpyvyVY<{fghT(C(yZ} zle<~K3jRbVf9AF`=2k-Bq&aa^BEl#_4R@lo7wEIDP!$Mds*qw41L@H-3qBDuElOvO zi*zpLh>#m~v3b;(2&V+Jq;>I5d>5ZAM3b5X%kOb9b%=z8Wnmpixab^8Yq4GYOos@)=CeuoSO=?ke zT!jMea@uC{&zicJUArBuHE9GXE>H!c^il7$VoSM*Ku>Glt?LIR`6AgxWs31+@5(xj zgTQwyaLUbkf$8R(P2$2l%-l^oE|dCF7?mN(b^4U|qbO0qwN#_P_O)5qm9<8&9%`?ukFb^`4)oe0U$!or`mpAJ|qc9GBD zzA92S_#~R`D%3-B*hCXpU0$pK>tN4SS8nR^n_u;7I2^ZG`2>5f%0F9_Q1S|M4PD1q z86%)XLIcIkp#nlJ>FK-XWdsnbv`BHVSM-x~>j-KyX>AfT_%0#kZ0J$)V}KM|4cm_J1;$fT`OZCLPDn1&{ZN5|DR z0;Q_br2BMiH=M@~ja={mp8I+qIMwrxO=1)oRn$PE`oXrxq{E;a(_6K6Y63KupCGSV zu`umiyUl%IV_Vs(UDWq=Np-(g<=dC8PS>Aff!Vx4Bb>)WQ_6MJSD~}E{Gmqj_~+}+ zXKSfuYcqQvV^IN*)hht;e8L|RBVL4#;02id%kB^cykM9-USswcu8j)Q%mf|X7o4Ja zZUvs~0)zeBd5tiUYIh8LHdgYIl4Rx$y8V;wrw2NdVvs-SQvQd~qdKn6?sNP}!qqJ3 zd!G{>#a4V%&a@dnH|AOI(?n?R{$TE}(asuLCtMXv`AJe4$V@V(yxbH3@FZ4yv&U^P zK#XFzVpqZvZv#0?b`x22A<^w(ho85F5HEcqNZ9O|T{F`;Vq+eX zAiViPXcQ7Nl1<6H@3R*<;57fY^svM;z*Le1D9hy9rJF%$B%K&`8}vuFB;%W7#{(cx z?he;aO1mRkV?(syzm)@cYJLxZQZd~Pg*&^d-Z|f_N2({neaCq}?Zp6WZUoOk{n~BR zS2xTBaM<+_inFEV0b*}7b5KE}G{0pF44$Lc+R|zm?YhN=+l+>sb{^AxjC{eTnOFPA z+Z;hQ^@HL#^>bBFq5~CU&I*fQ`OmL8Q91ckF3T$MklswCsP?Pb(1h|Vd!Sw&%z{N# zxLWYm@dxoF*UZQa_bArBkL5sdQpc37R;h>PZ{-KT%f?qJX4yRF?1>V^7OzBQjKE>` zudB``;_636AeD;&=6~T56>JN+@BA-ZBk|l>L;@@qzTS!_I^!uCdh;5W#|2T^7({8w zlyHdI$(HHH%ZGUtMTLF0l;`Lr*WC+P=4daPmi%C@1^>i!PW+}T=CGt(py>N>-p9*@ z7BeT*ysMisVeWqRDqDGSo_#u=vH~!C61&R4~L7(dSgM67wg4G>0zqBmOyKLRLi?Zd6M# z{^jM3S7l5>$BmigG$$&(gIU21WC%$!vZ9u{?1kxo25g;j@p%@;^kO3sWMDL|dDWa- zJ2o2-3l*rJ2f~`br$gUe_j3JE2nif*pamxI`(reHn(;vE#B;TsP*Ykflho7 zzSW8gYJ*pwwd`c#Y-%KHrI(r@P+1xx8)5@i0#9V;M8V#B=*)VBy_AxIt6@l=4Eum$J)SPC6`|>p&>P@Qc}N;)VvB-A85;XcFoC$wv_nxRaZm3RD%BDe!|Y@Wag+`jsbE%fJWLI=D*d#l^zFb8OeUey zwS@;`BV#LDS3^lzv}yqj@1*J}Mt$X3`wXU;-j-ti>}!@@XE=MpQHo)NOTfd-{DEFI zKjKJT=m~8r$hJEZSnVdb`z<|)m06@G+T3L^7_2W*WzCxQP&RR z{Gr5`p5|?bi@s?RMRQA8g{yA+ys^0;7Woj0Kx!N2w;+a8T@3=N)d%nE z#2=p)u`cb|30cU|5^WK+uik_WzO_;QkXIDN&7$T5)byA4X=ig`V(rl(yQ+zNs%4r1 zp-pl(PbtRExqmr7=QPceKV3Jul5%6%5d7p6v2spE2FSR z;@+d}+1LbZXC<({+CH4YyuZNk`HEPOfk)`92!9dv?g2w$R2h5M z{sld7of9(Mt!R)Mr`F+^+4Zu%X@(s(>tU^XMpQ(iab!*(m0o5L9Tl}!ATb;DvGF8y z5?NQ0i9O~q4OGGy&_2vTeu<;ST&bc601$bi3+l|wj`V01TPVhPka5QMHr*I!c1U1N znWWH|vxJTfVm9)}twyA4(a&RDC6PX`Rdi&kw_Y3p-7f(5Yh-T&jLp}aN)U$~F$SVgwEWB;7 zOYg8I%#2RXGq*ZQZ0||TCI1btz7A(Q1_{!PMB9$yS1yAZzt_yoOsxC~9tRik3$$bn zkNP!9)GtIZGR1J{Zr>nYK{4*d!tdDqlprG66c#W6$Na~LT5%Af8Qt|*89jE$3y{?D zu6h;Kj5~(T{YlQ*e!jciru;PKB~DOO_(C^aZzjt)tLL>E4apYj>VsE3Pc z`TIw?GO-aO+%bd2#XtjTHqPX!g{rC%(J(u z1fp37S@E;m+qLRCnWiTWh;^&=UFVpHRA&_BJqJ0p$*^MN^TJqupYLarf^((Y;u`I#rs6RTmjU7Md()RigJ3W>Nb~^^WR3BWmvtvPO8up;x`~?=p>=h` z4jDwhe9l=hL%(hIx91LC;K3uSDb>%npmO8873JQ7UNe+1WK)m*FO_R0pSY~${g>K(V=hm<5NG0 zrW%v7R#SYw#9INQX{L#Y@d6FD$?6Kwj0yl#GkHCq^2ZeGl8;DyOrPHlPLDVx*0I4P z9$hhW2yq-(<2=MJtWdcg&URW{;Ebou>#Wc^C4wiRX5Y?P&fL#u`SK4ELYYV{TR)^- zT%A);IW72;n$xzeA7RU%jSBzCx(|dvtsQ&P{e9F#|FEcV0QyE~xj8?;E0GpP;DdBd z)xP>#jR49QViVb~{(EQ#J$B{jaqDC64kSlV?#_ZU{R2nuy?Di!?ijTP9!qdzeu;DW zXrW&beca&xOXDz+l(=Ee5uSxY$b4qQ2?}mKcDlF0xicvIGudv}5UmplvJ>Q#SoIUI zrOnng)LgPr4INyhz!Q9P>t9#m#pFo34UzRn&q&j07SPdglkgs6_yr`{;1_H6NLjn2 zwdeg2pWg>n)5n#MpQ+?9Nx;;hiqP3-TB|Hzn)ECH9luUJqy~Zz08Dg_$^s#rGW40x ztL@_seG+(s156YPSK3n?wZpeehQ6>}%~@p%_F&)6<<=$`302*m#^@PJPYhy+JrOj} zZ943h0`6MMr_;8}6cEd#Z~e@{hThgADUw0?@_@JpgX9lx38o{s8_^NvWDNHqfVKUt!*$7*fki<(DKw95`r zdnf1Bv^fM9x?}!_JQ&st2B^F1$o1b9alhDiipJn=H=<;fl?`Yw->A&b`HIB1S+yiG zDsrzZq!V*0FiBquE3wR0v+}aD7w>OhrBQ;QN66ESLzlETX%^0R1^fszK9Ekm&8AJ@<5005p2Vdbv)nN?)3j%LrW{=`8z!}d0#i$vbCE# zd$g}vDBZ1vu8?kkRPf6@{*oJyj>6W9nQ_3XgN%wN#|PA4EY-!CWL(>QCUX``ofSTP z<>*&}2~3Q+x4~t!5YikYHeZEOZubC(2x4axuL5rmgB2I9?E!T=es`mna!*r*abFWK zBiHaQw=LL4jUywc;Db(1s&-gxXx{1bvTLkaGh=6#k=dz6=|R|bL$19bUU9@Dsj*d* zcS?ymy=q-q0E>PhU$rxI%*iU8&CV3y3SCJ4W`0miySMSavpr zl{C-;y})CL?WH1bPwcT5ZrFUR;O*Y0GXdhxwxkzz`=`|VAgc75CV_s3}4 z5UpvND@CKNT1)dEb|Z1# zGwMimdj#ixmA%rcT;*!#C2j#~2D@T&MI;T(%7i7zTy0}(@8WtR9P5n0pGt8o<6)X) zo%vI1_4xAp>1b$q&ricqEnb2dMUHhsg0-{;Cxb3r!pV&}OvP3Tylqa-gG^IV9vo}4rwx~L- z&iWmcW?epRNSY>21@WiXUHzGtg7 z5X(WztH)NsuS94%p1h!PbdQ1=tdpi;DJ8tsd#s}Vpu$GDy&d#b$~bIiv~aTOYNo7! ziO-9~j@OVUgMr7HDfnrQRup63r^XZFrtXne6lvka<=in+Wo*a!B z6^3$Uk z&+kd2Z(T@HDhc1Fu@(Z7ySh8tJ07DTGJ&*r!V6RG;`Zq(nmO^T;;S)uDWD!_S z{FEaWq?qg-EsxmBc(dk*G&s0Yjj!M<7Q&+Z8+z?(`18&3kp5{J?K+^E@YWXX{zr4p zKMr3!Jni2O-z22mtTQOWO(iqlKY-OBJl1)p7~fzlrgb|DSz6P&T*m7Af zS{>R|i?W;$gv#k%p42ClTpW7LQge2|9(#P9>TV3m9C@sFHi~!UlRM57b&Yj2D;7jO zlM_796O%`E0mre+&nXvLW4HuI}Nrgq(oyTKvJ5xYDi@2V|d)L7Ta&qf+L+ z^eX*4%{;}jP7`C05sPXXcn*i~&zX-(+Xy>dd_azOwsAw;Z1shUOZJ~cmI<sxd^!sy5m1d2F%^X`eD2QQxf&`BgB^GNVQ8 zr50b!*}gzX@&ZPtP($mJzP8z9{~KvXm+INH)^fzYo1l!^J$-! zN7cq;Ys*ziTi%MysjiTT^7Zr{u<3VCcZa|SXh+7#W67$iKZP-ObSX3Ij28c87jV)o zjN@?MzLWHIh8DP4pY zQW||L2gy`_24!s&q{<6$P{Dla0@EWkO9WkF8CvL<;0YNxO09+JlQJYEH5sH>1xiTn z+%1Fh2=)bKo43tc^SlOh8k65$*+rX??Eb{!*0jM!bz z*L{h#{$B8#Vgbe+Bzx{UBNkWpypafHpE4NS5hZr-lB(-glq*1BQS88XhvsYo{Gtv@EF8irZ&%Nu#4R0$y1-dn`ioKt096 zvtJE<73E1g3~ZFoCvjO&`wyLUf~*?B=oM>V672gWLPCCn*e>TN7G?ic37O5uTIemq%X4y7PfNr1oa3C)1 za3JpxupUJ=(IAC))c~wciL-eH1375G(JESU8#*3F$UfAd$-hLUeoJ#&If^wam0XGwPK>_WH|&6KbUnP4dc~|dU>)xZ zH?C`s2`Butwq|W?m#885IVSbGKi?iSKEzd2Z0HzUFbcm5rCU|8OI@znH&iL%0e8#@ zK)wi{8YFNbCP7&Pt4+VC==XfP1B)-gU%412Zk2T3(eEY%vSPJTyB$p2C&@)R!q^u^ z*$fKOgFxD6AL{S<_1Z}7GQJlne& z82MUN8h-w1e#KSuJ{eX+WyY4(+cg9dRZ^S@z^>PIUj}WI(pro*?8spXG`aXSJ6fE( zQ26ZTWQh@$KpY^_tY3%|Wk>>Y*x9hCXnt*x95RUa6hmUbK{oTqKu^HF_W7CLOZ)1q5A`(Lnz zL;7EFNdYC}mMz-s$lp56a{Wa+us{*9frFC!+}A@W-|NR=$h^q2`^%1jN@Or~)J1X5 zZ`qMrDrK%f-guJd5ThK=C)YTEo+SAd5}p%e5d?REG@`lh!9*W2rb68OJ(OK?aP$EN znof(vz-iGemcExlWP8E&O#B$}CEfJ>qX7Fznye`~F5XiJHpn16tFIc0F^$WHSD|OZ z%1^T7rT05-gSfS+#K(qg5j0X97e$Yx6{I;x=dhM!B~lY;{~47lJ4f}k{}^=5S`>m$biDC7OZE#9f&~hGKKXQg z7+S0eCy~W{BsE*L%w?Rfpnht{s;ecDmMyJFSPUf7S+}!yg!{6dpB2aV%EK7|Yp2iU z<$3moo`DRvi5DeFdzwqUV_fs}3DFi{v19sP%Zzp}Rt$CB*#+v)h5McJEq_J?Ct<1YG68zne z_SXiW?KWRrm8R}A3;*(?nlVxIr=?~;`h?18ms6#AI;)FHR*vHlF6heo3_miSr9g3W zbNF+HqWAQ%YxeYfK43S-xWmGi6`2FuGblGOT`TA>D|5OmgAs`-GWGl7?*h;?3s}*G z*nz-HtRh$HWT^-o)`l0M*(DQ(Ps}T zklG6R_-C?~CH8e_oVuKp2mleoA^;VivBkX?wz+)PI(ZLdagS1^oUsQSzp{@zNRiadnxnBd-I8+>wE=EifCe>FmMm_{- z7DR;Nb1B-kq8PpzN-#fGT}CFMFbJ8-mF)GrPjq14(j4%*o8yk)FPgp~u}o@XHrdQn z5nF_kUA4ZAEJ5xl3pUjq@_f7qK(O1p^&^!_9`A57JM(&S9YoFkDZzC5cc^?aOHsK= z#ng<7!g;Qvoj5=_8fnK8$@)Cg9#50i_aGXPcJ6^Oae}$GX3x@#C1_~f`Y6wMs2sV? z@J3qhJj@{^`(=!f-{zu+Qwx3nQ9x}1*&vBlDz0j2)d!Kn12(4n9*~CRhEm5$ zL!f1ax@EUnAFqSHf|4q|q7@eAvbr%cAQi-j@DiTkda4D*^s6Y?vdn58jG^D5G~~Q` zkwZUCUmFz2Y44#Z--=r!TQ{znHF4;I+;k?RI;iWZiDL#UVz~&`uT_dq=^&E*@hV(}bR5!43<`e9}mv(%_UH{Wtlz_tpJ1D#yk9p6Dn#!af#7tHG!9HpK z!9IM~xhxMIA@TPO1&WuKGrrsIBKD7)hgO_-Ijt91DDKv2yN>Iqs}w`guK$;V0Mo4U z^WJhU_E9jHSWH{bnOG@rO4D;;o0Z|05f>AszBNC3HWfCF@DU1EUB~BtBdGa{wy8z! zJ#tmbAtR{Kn^yo%ezs-xjh?(8SJ|%I&>!vrpf?V9^svO*F-za8P8<(qvdllU6lfR;D7i1O-lRqm$&*$HtAIx99%drM=z z(_a>ANAA8lWO#+zI#}a8I*`V`5%b*(NVZCo1gj+5C3+0hE0L;45!aVD9SkZ)gW}dB z5oa{x!A~#t#jCN?9CI_Jy=DBzyR4*vWe69=%kvC6n!cwln_DGEPu|dY%Ya*OiV+_Z zzTqkKA~_emF{obB=a5(QG;j|>yQ^za23Yp}90hG8*9LyRdoq=$`b)T_;0(`;*9tP= zMj5cXKc10>W|)#(Pbet=nPi{%Sc3oCn01gV@A3igK)sAXrLdcJ#JR8pl5J3BG*471 zl(y!IH%q@I0jl?)QUn6`r;NqKK2__cEGyRnrhzm*QUF!aoO}XZ7SdfIyhOmlXh|F1 z>#tW%uLbP*C~_YJ49j0PNkR1fq8$>oy@O@3ZLmiDPuvBD|4rEuPM>eBvBk{6#}zLr`6d`q zo1D~?P6FV#+&1Yvinvqi)Q*koY@E1JmGj^t9ME&T7jOcOKo!!KyonvQm(|YLKC|g> zd>UDg(#I}vZKRx3&&_+A0guOL1?U)XeEu{Y;(R2*FPschaz1((@e9nm=0!=Q5=srA zuE8+sl%Vm8@z)@lD${|*T&Gm=6mbE2p}0y9;lyj9k}v%r@q)~7U#cEQQ3|+4rW&bW z03D0_JFQ+>5IaC&A(9Dng~YQ8m+Oy5 z+dh7+9BE+-%ziq&Yx$~#qZih(-+8U4RF5*n8rOfm$_@O+?(r#<%Bh64yDQ>881Bt; z7#9Usd~z$+e@QtayPIbYXYrKgmJ?5`lcG;Bl;GvM^ zAJh@!D`GAJxYdkTZw6e)$Z;t-;xF4(%092`uD8Sc>*v1_*HJ`9D{W9K;u<$+8n1ry z-%>SX1*j;8BK%9m<=cS+2T`&kQo6IzJxQceo5@(cq#w9-4yJ;?o;4M&nfew%cDo&=ds;~XT=#ZdQ24Gk7aG^*B z$V!=tvg}tpyc+m!kKhie6z_<|wg5JZJzLxY*|&{s;dOmTb^%@8h(Q=}>{u!~QAB48 zAt$lYmobj)+y+25PCGqw-Xwad@{Dut7JDQ*YkbHdVvD&x(QtM$6gS5|IsV(Yz7l0C zFy1f{{lXL`f;F(RXNHI8#P1LZY;D=4dHq8}w{~cqf9X@`krp7uQ0hY0`)a;+pccrt}%@XT+5VK1y!i~K(# z9_CJ4HTliM>m~hLCtboH_oJJ?Ou`=U|Dw5?bX(U*U3Ey2;P|6uWOm5HgE3FSa6$zl zRu=on%`gRc;s{i(w5ok&u9(+KD%ym%=0}%YBTG(b>Lm_*>;tPPHc`TCs2Kq2`jq;1 zcu#kmU*n+Y?G8D)tng=;ykp+_G-`w5QCW4Zg~TLuBuMk=2H~J9d#1%X_0wBzbLtVF zE$Bzu?+Kozd4J+1YQXd1XH#7bwaT$H->S~7c&lN9iUz)vRWuKIy}`sNruyUcd06_o z!>YU?v?&j=O-u?Kl#BP3&Wq0RRTL^BYND_lW!f~WuezXTxz1HOAT7`T4E@(uUu=hN z4WA;0%ZSGsfxzL2^`sOF@H>9f6W{&9p06LjUb`KS$F{VBDqa4fp(-uVhI$wfQ=ttn zM>+6KmyT*1J`L3_!swmZc#YMi4lWh3*?{rpjt(rBE}L@}0L{3gS4vTVjdzhC862=I z=qWXN9lpW97We#UW{nXk5vzu}liqF4Mnz78b2I#KcGf*dX(|&fF8Oz{Fia%NuGy8e zKzihlY&y3XXI>28x55mEiw5wI$>X+->t^i1nhKuda&kS?Y#B<9Gzgp7_)3>%oCXRO zokXYy=m_M_fvosV+zE>{aKJF)PhMPJ8bcd}?F3LSl^%4AcfjHZhf@54+!TK=eY2CEsK!dKiEwhH-q%>^ zZ;ocbjw{dAHqVI^+ANE%|7}mZ;Dd#P5-mw}mYSz3!}SRUWwEFAxiE4vo(z^OubVlM z7V2zO$>jAvGQ20QJ2s;?^Bui4XS{i5Jvnwq>f6JQh!o=EsGknXtn}x!{A&C|K9rP- zKeCk@8>c+{(YB1H{sw;k{s=XgcdD-HG)_8FR4UB?{T~+K&kO0QbrfQ%ABc1&)OG$* zd;eL4KU>EocP~*vEjIfNMiLemVz3f#_Djio_%(xIAxaq{In9Y=pZsHT zvTq#5cy&?TZaN+Yc;Z*RVuHD=B<(Bg;!jQ=w?NfJH4Oh-axnQa0@j3xev@ zC&NfC1YNKh4cFk9p#o+>T9<2GBI%pFq5h-`QhQhtd5?k`WVf`mne4RoTL`4^$Nm>)>FE zJ9|T(bUWz|k@u9rt0JUpemw2zIXVoeAb~Jua_F8A>ht6#vBl?~?$8%pF3N+@JQBj$yq|o_Vi6OFn^?sCm zfALl(m*R&SgHe&(hYUPSfwK{nJan|Okn2*+zi1F`zeMiikCZ~RFR}VRCAD5}eE;D% z9Hg&?GAV5^@|gW0a8UfsX>8m(xs+|7k+Sb(L&3&tih14IFJ*`~e6)A*k`YTW3D;zJ z-$0mHJ!3;lcnM0{-hh>yIbC}YQwlk$h6OhGJoWwjBY4(qDs5iI$uCE~_TdU|TGKkg zwwzbbvHQb4uEsf0{J;!Zu*L}@M&^kKO>&*h_t~IGg>6Q?dlGCl*0oW_<0b}Q6Vz*^nA?#v1+h;OBs!}iCET_PT@hQ0zCKVnW;a=jtZd*|k~Ked8F z?EEe@Dop|>{7VfAGF&(zul8|y+#IvsYr8_}?5Xd1Bus@XN~#tFBHmic-)?}ixHJ(q zN7PNDU5c-#;rndVBKq=6z%bP0H>1lCT4NC%r$+i)OXwj@1F}sQz3E(++2PEUDp5Fh z9sMcGgHUsmY(DxtX=vkR0aMRTrxx(xXOZc)!QeY&94zH@i0#{p+c`#Kl|ZUF=#~d1 z`25!^5>_f@hixm?UgpZpD31KhOM1|T^J1n};7!lH2634AIgk(jB)=n1!A8aEHAcOz z3|0RbTazNZyI1Se19l|4Z5)dip45}(p5OWdS5-xXc(g=U%8xYh#lsL%a(oHr&CF-> zo8fQg&H)mIwOSDIw>Ueys%JFpi!fS#x!P+bB+Sqd{Q_v+Wdne%+L8+VKh9Jx>GaILaB;>{G!8383Jy%=dTq00%+^YZ9FV z@P@qjog0R;o%<;InhwQdf|h@11t)a>i2No|kyU~g`vF(F=0pLv57E1F;!xjN5xeKt z>>Rg5k&>*!7vrP$Mx;vG4h^x;yVHKQiKUrlqGvpOuCTv~A+AOlD@cw#9j7^)}^< zZdE{RiV^8jcQr@}eGMgCiIJ1j0!E)YqQ7W7-)}u1H_`<(vTz*T({7yjTfi!v*MVBrsT~nbrG2kpIa@nK{#KJB-9rqT#CGrdw zHBVUgrtD@3RORY7r~B3P9E zws&qvFEwo))LFR;7S=j>G8iSWl$`XX zy18u27Bne&jXwoGA8FAZU+7zdnT<6*GD#n$KNli6klETC4>=t#p`E!6d!Z!~fJTyI zSQiLcaw=Ku)W3RVSi`y<9c5$hd=$z_tXvcoPbI_?=wRjNUj!Rb&krbG)iP~PVqJXQ zu__$du0i;zorjU0Qh!7a%Z~YEk_!PFRQsWmK9G1D90Z3`43qU}`n_`gd3vzWntL4U9`vC-4e4;sC6&tZmtQ1f{T)Jk3*SpH92%O z8Anf2{wVg#hsP+ADfwjP}DPLF5Az)D*-T%atZcqC%inFoUbH}SPODmTt$8JX9lPfa$fcn0+_;j5cQKlT4 zBH+A`vMj6>snAPcMZ09;p)5M%O2`R zmS2g?%3Y1x=R}aMs;T(CJ0%T|qwFz?CwvHeFm*iBd1z4q#~JC4e#ppgY|a!Cu+7qjb7_6t zYE!9v0HNUiU$msnzRUf#Hho#tfN3va`_F)B)5=HB*4fc=%t%Fq5?jRBeskZX_9j2R z#2xwLLF{04M$ynSBKWLj!kt~NshcrvRKQn9(?cbzwoaCR&~Z-qzK|H9+FR%PnwRod zHE}B%HZLy2kA}jJ#RKkqVnQ!14XMoEy+@=dzkHQ6L3c$30OA5Clf9C5AZBv-H=DBW8~<ptA-0Xl4L@to{AQ@+ptUoOe=FD^N_)flKIMBWqV}A)E3UQpE)jU;40TTK> zR9!Fpx2}cmGzVj-ddfEmSZg92O;{xZj@&)3GhL^dV&&_dxsHxm7h(e%HBw|(z~dN} z)rtN$O2K58Uze1w>)bw$}9^MwOCq8vM!%*OCLXIkGNc=J6}6s|6FxAuJwyar@{-cw(l ziZ|%QN4X`W=?v<$cKtLr6~l=i$=So0>0>CQBlr*Sz*0xJ219f zQWF!%`HW-3syVB^5?z$|>2anJX*>HW>1e_Dc-XP2bxDKrs~cQ6%G=&#i!AyWrV#xz zZrJFli15If+H55P{k$RU=a2F7KSp;7KI`r3jaDd53tqT)B%!j>ZI@lN(1% zx7|l5n|K%R@ddWeBJ?nNp}FGqaSZ|-o>5KI4>?a(-ys2m3G20uQd?Sd-!u*-0u-yZ z^+YJjt$7650~>gB67}_VNWMe=qD6WaNQ3yj_+S(o$Xi*T0aTPI{<#PiGYHTDS@$I) zAYog5?ln^EzN(z10RB}{dmF)R??j#OdNE7Rqr6uIKHSZUZi&D)RN9GM5g6Y&eH<-i zUopDu$#L^~)m-7X-8}&$F_Ql++lMf6dFR@r5ZtF=<#p6dqXs=F;2z@cZHYjh>qiK# zcv{;#Ls^p2~ z--fW#dJr0ep3U|A%jy5`V8YiFK1F}groW^1e1@aIbnQ^P=8`p-Cx&OtVlDKkY*^Uj zc=b7(8(mJWILgCW`n$uBaoO}J2A7Qp?70-c$XS=f4kkHZa8P#%DEN>g3Ku9GiFe!H zUDq%8(PUu*Jz}6DP*u+TNFW`Jyg5(a`v^M2U4eFEwPnvtd@` zdFUsH*JTUd;&o+0Gxzr7-16>)uBBOUCYVLkC&>|guGIO7pZ zBrH)9Vew3r0?Spng-T3{z03MDTqNg=h<&#A36rOyQW&@O=cE-T@L#M(+n!ckYU}Pa z4GnKA@vw^V(Vu#8A<8S~r`+Rf9XVvG7h&u(CXOc14ON>hnCdverM2J++Y%orOMjHr8t>eiM5{zfoYrZ}!rC6SrrVST zFm!#6J=Rw^Z^>v;wJ>$J{9f8Fax$+OVITy zC$o!A*|O_aG%9RFnz}X^D%N;%7dLp^bKHDrEOMcg^G;=clQ%9By>}`z`ZC|#Vg*I2 z-h1pGmHkC?xQ&Xv@#%F~pPBF3t}uifA@kcJ!V9URR;A775+2h<3P#u>H*)hdEjTJ6+} z57+vyWjs7>0dM*?Z0TM|1^`*e>D?}k;Y&4_z){R zEEbaFk8r2hu6{4=MoOGRo4i`BoXb@=C1us-RAt*#eVpi!<`$fv^lmv~qc`8b_}Qsm5N8bsSnj%rum(1uOLSkBSgGgaap|8quPcq`ZcOHG zasu|K)E>N>%+xFC&B!3Jmpx+FRAsH&R$`deQ$^ZrC|xHXI+ZSX)UnE435GtsOME*< zP^TfGfTsH>FxE6EcyU*KDE?%22G~2cI@6ZKe6@Q8cXZap4hUJh(VDMocm7ohSykh1 zkVO2`g}ULLSBTqvq)*F|S-x!O_a)42T;yzFC^_rDDJvG~Z3=h5IqjqHXvJ?@oHKfpJ27=HX5X>- zM8w=DeTlX)n%~aB`XJip9>=SQ7Y0R_%dRHsHh z*(6!ci_C&I_f3fmW1aa*bpaX^b;30|%7CMS7wF{F4NitP`uN8yGk>y!F|uzM#=x~x z363MHVFNUe*H)A6?RGz&wv4}murfqt_NC)9oXa^y4M4j)jwwEz7MjSIJai=ylq`Z! z!6}Mp0LAs4st=#z?F=Ivmy|OCndaHs3|W^%0_~rwC+sURhtL~IP*&CWVSUEa)$JbX zgY57mhdXqqI9+J!?GM_zP##Tr;iTJ2JV3c+bdCkaM*}G1G$Q&>HC-dS4tW+JdR7hY zTZ3@-3ctAUg9G$A9MQv4GaS4&a%rWbw9;(#vp2*Br<Ye<6S|?>YRxa&Rct0r(>SM zbn+W0w*7avJKbVok~f-?-j`)-)%QkUQ2kC zqP)*7-ftgmte6Td4eVJlb&|||w4bP+0U`f9xc>R>%CS&ce&sl(`zMAD7mClQj6~;o z>B>1|?3ux2zCBsa4pmZ5` zSLQ+t97!b|#r|1HI&A!#?qvF_UZU4X{vs2aqDu z3R7)qFO-F_yw%utkG+hO3&YrW_Z2d?(+XA~)@co@)E3M};=MiVzLPo^OGFHe?APXC z#w}X40n0Dp*Q{O3v?uW9z?S0FSzMpl&?{fNv6A_D&Yn75=ogx@!wnzFhHO46M=_cJ zK&`>E%-l(ixEyvxG(tMkB{;%GLab!aAdRyb^u>AWDqiD3O6OKEi zCZ=nH&_|}KE-B!g{l%hBr?5eB{1Aa8ZMMT%21hy1QoTCyE;_LT4Xz{Lx|ATEKw6>Y5s>PU1O~WcOnXNDMOSYhRqP?lW zVqy;km%9Mr?iL8=AM92U4%QQ#M2Bo9PQ@2pD(5>$pSf5nqX=O9 zFKD%4{!~Jp2HG4IEFx_ob!Ws_+k}zhnA*jQ(!{1$JpCmlN*;3cl|o#;;w(V~8h(W; zWBQ-t&x)>c)^96)2q#`f33jhfu-lkBZg>&wn&&)c%O0N8I_nS+5V%vZ$XLh9m0;yY zrG3D=N+_5n$%o@I1kZbM&Bo%(V<&}?Meb6b;UxC0#LcUXQ{nq>a&ZBVh2>sl!OP#u z81rjgx=WLB3Me3NeczTM=d~#EoAzSbG#9pM(rXM(#PmogdN7*#Rx^;CA-ZXt@XU+C26C4Vu* z>qSy}SgopGIDE_~G4PJJUnM{o&ttKkq@kLCP4ba&Oux)08q&`-p)rI=+%6@CikftP zWO2V0+Y7G|Mgp9eA}eqQ2F5f*mmfRfiSX&Vlpg(NgG&YzgT;{(30CrpIL={pf?MV> zDNYoqFq8UJJ6;`ELazjz%!HnflZtn&3kBWWrQ|LL{0iH-g9I6)JmWKgUj%A}ax1O5 zaFcTV4udOl?M~DF$q;h-jr}_iMq?DyG2LADaz=Rix{kucP(U$mxVf*`LT?3SBx3-n;`pQ)|P< z>}axo9F+vo{|oluI96Yb2@bJnmWd)VbECO(IOPXG3U-VOndR|n%|MdVD??@r*}fr= zs<{*@gegrBY9uRl9rSf-zu~C#`7)O)e8Uq^-yr4^kZJ(|i|ZjPPY9^Il`iUTyJrfv z%$^Nee(*_^I4Pbs@1RPCJ`Jhi2tY80!MGOav_;)22c7fr=xcfs)G%^qUb4nYPE9)`Ju$Wv-toKOhv77IZ>8iL523mAuGt?39^ zDza)$;N`DQ|2;x)=}jWnV?`klOJBI7S(%3I=;a;pPBKz|d)y7oeL+J&=v^Y~=LvLJ zaPTz$L;60^Uqn7E5tdAA?(9RD`JQ{i{p#gGk@^nogu!sJ6bs9gP)L>BYi)O^2N=SG zARUaGNnDh1k0vRN0hj!#vAe(r*8mIz10ei^o;R9YHkI4>SX`PpxGg9 zgEvc3RqC@4EUv8TSg$=Bct?^`3_5lKc=6B!Uv6o%Wk*V5v-UArDpc}2!o{{yj*&&eQ)VECQtPIS}pUStfNL`tpCy z2>I8XPb8(w_egap-cEQF@r>0$S4e9Rd~*K|t8Bd_rU?+svix35U)+5SmCok8dIJ*$H+&VdHm1skj-3RT8#=H&Za{4ywwASi^A@Y6JCXs zE6b;R#vSYAp`ZQ0m7hJ$^%Z)3;y%loCX7~`OoyxnR9feuERgEzEc!AXpsDsunL(UU zLdpd*S-(4uPX^7UHosSyR_~k0YJ|cdvfnF9tVH^@DhUZYZ)#+{yu(2pbHOiv(Qz70 zPCRe+8>&PdfbbVh?`NkMg)DEvP>2&*PBK8K;kSw|C?}|YdSlyi8MH;06Gv6ucc*;* zv*M}x1S>M-YwgWPc0P-O|GhQfpDPlRBY}`G z*0B!$t-G5D!d)9I5iP)46Z2dvd*=)0=_Z2*AMTPv-gc*lBKb}D3~Zz*;U;j;iaYP+ z``Ym@cw9DzJskErRD!_@7Mcd*ej5V$zE&o6DBe=z7Vmtn^qHEc1<=gdKDGXO(Oh1H zLx6h7zly#y!F}Gq1KVhCbE%-h&w0ne74A{Wj^QM;lgckAYXNcmJa;r&yrj#p1)YFj zl1P?{g&HSlTe7QWwwnez?$m9H*~v|lKZvm|EcX;s*^7@oQTZdz#YdGO<%8rm2~(e` z!8*`~GJ~8K&5Wo>3Qoi|?7@qLO#2+ZK@1yz(VlO$v4r*AX|-%HPrXJw7La%V1T|3J zAEY}wEv`YwrnPD_)awcfV&p%`)lAm28!&TGu6o~^RW&3 zV3kTj(1;?BRsUfH`99G5^asqgc!TyXY>OUfb-B zYyRw#O)uJR9wcdldLqTU^n16mV|k$OKYwfAa1qY`lk(0|w(p&4$XRl0+&3lQvC2RL z;|y=CQ}N*Ub9?mXjpJJ>&+3brwSr}2ZN(Q;Eh5KaQ!M~m?~N&*!xlzgz)yT+L(Vb0 z7P8(dCMi{V3qB8OXC#!fHdhp)$?fx?Q^)(CLw^3vll}Mle8*yK#I}Z)4{Z3Rhmf9& zsc$&L7SGqP14dXW8pqSxy)Sei3w?if^X=#nLJ%0`&``6UQZNgv%~6xQ_Df_n+Y|fR zmk{t|QC^xx=0$o~T9Fk~*UnEG@v{6~XPl?tny&SS9zwpg2e-6XfOC6#>LPFo2g4)U=P9B$M zwNEmHJ$1U27?C;#G|2E9TkQYyi2r9N%>O?0|NOGP8hY+W6_0)(!LogjTSWmO09JK$GGC;!;I>hZNxIu7yQak(|M?>{gwa(24|!!oj_~@MQ2xI-04S*c@p?t`+AM?r9}Wa$G!!HZ6jZcVn6Ld`f#6f45_}Ow zBYXwn@C%(iCa01}tm7^1S3}3DSLPg?T;OWpM^)$CPU2V2{;_8-3ji#n*P-}G_yA!* z+qc$8QL6L|uUh`ttZy#>Z&{PLoj_*bGg52u!9w$qM5_nmK2C_`;#8OqL?%N_LjJ^? zje31O(*YTUE9cbjm!A}D$|J|qr|8Ic&889}l^-Rpr(qWbSg+^V&J0{3YDh+NyedhS`}N z?oIXrP%qY7xxSt|pZKM+_|Qc2=h$cA>!PJA<+ zf$M)<`$s*fVU=7&Y@C8w_%jsf8@z@7j^SP&>{>bOh4Gvv3a^i(f;g{imr4Uwj`2RWX&^ImVSj-==oN;3K}$ESrBxs49XE00xrm*&LO zy<1ZW;k93-!!w2q(IHr5Ug;!e=uT0KzQ;4@F6-O8cxZ`WPKAaG%(V2lnUG=LYaOxH zEu@l1hpS1(_2yX6xzriIFKfl)`m?7%z%!5%o>z9Nwm-S7Lp!c@+J`h0Qy`(XXOmta zRwW3&4?Z4gk>66akYPvwKB-V$KixN0{cdNnrEgwFvlFnQI^{Vjkl|0zG2p#v)Vwcb zzLTu7b33s4kphg`VD}f!)3D34hnBP;^f;7@XYZiN9cZs;h@q;HZQRP?yZ|Z=Jo#S$ zg2*V9AIxq`O3c&_v`~xEg8khHN?rh$vrR^2k+p@1eBji$3N<>*)j#7);AMwzt5^sD zo7ercBo3}_&Lqp&_4!LN>y6l{)pS!;>s1A(5TL)55u9GlxYXevs5s9_QW`W&(*0)B zcebQ9Ml*th!(5ERd^`tz=FLW2x|N`%3)T5a!rK)+ND8pY3<&_F{LP82YZeL$pt zJ6qT-Gfi+Nsxj`^a5#x(h-jOZw#Tx}l;a_?IBDJ`QwC!l(2MBpX@So^zbtL>CdTaO zN$rP;B>6leB<@_==fl%JNliT&CMqv9)^ummr~y11L3JNbkMRW6=W}zUNeGmP&gvrn z%Br~32j8^8x*1LR%-ZBM_egdcA}m^}a7;HSFU8m_--O?Bh=k90!Ry;E2lS!UJbjj> z6?cb@myQ*b_~rM15bi*uY}3|WvNViDT$Z`7Q%DwV#iz+Gaw%=RtjRlKl895%61{UY zsYiI^x7rp2&wYWPZt1X2rc+vQVt%{T5pH6wcm=ZGc~f*{v#A5ZJtUyUoN9cb?LPo5xI3D zuKaNP0$>Xq6(l!mj%nbZTn{TsZ|$_UegU{e*hn}Mt~w-rKSlj&1pm5ywG?`dksv%&&$w^DTjG^R0}Ka#bk7*zw-vwH5v%8_>I}i{ z*RbA_0k!2xY4HZ?m3Iq>PTd^yAFzt^j%KEex6~%T0BpLla_1E<$*rxt_AQh)mn6L3 z(6=4(6-GO%E>ZKZjd@E(;d%9>7Tg>wNrQ96gnczJlRy3vJe#u^symjn^}u3^|55Im zMc&Bb_+H~}HX|>k0De)OWV1h6FNbm99t6e~a+*@@v2I0Z=x-om!DVKxc^=Yrxea|h8&)=f7gGJbQ~ zm1dBDFQB#BnN4e7FQT;Sv&mwz`6|1PWGhn0=^KgOnpt^>qy(tgPTgW^ivgG7n;JC+ z{rjy)tWBdtfvXOgH;1Y?oZR)o^Dh9$IS!#zn^eyeur2dMf@-18

IFz+xHaN70y= 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®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 M{^Lh7{5StU09i>PTL1t6 diff --git a/doxygen/images/PSiCC2_250x200.jpg b/doxygen/images/PSiCC2_250x200.jpg deleted file mode 100644 index 190836559f24daeb0b4742c623ca335477e896d2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18189 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 NxBFQcXEFc32>>BiXOjQ` diff --git a/doxygen/images/SM_blinky.png b/doxygen/images/SM_blinky.png deleted file mode 100644 index 9c9594e454f3624fd34f7c7e20b1f6760e5cfe86..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9396 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 z 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 diff --git a/doxygen/images/bd_AT91SAM7S-EK_J-Link.jpg b/doxygen/images/bd_AT91SAM7S-EK_J-Link.jpg deleted file mode 100644 index 3657a646606782857ad7fd89537374183c2eee69..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 46739 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