QL há 5 anos atrás
pai
commit
0f0450f490
100 ficheiros alterados com 5591 adições e 1601 exclusões
  1. 4 2
      doxygen/Doxyfile
  2. 1 1
      doxygen/Doxyfile-CHM
  3. 1 1
      doxygen/Doxyfile-DOC
  4. 3 21
      doxygen/api.dox
  5. 1 0
      doxygen/exa_rtos.dox
  6. 79 2
      doxygen/history.dox
  7. 16 11
      doxygen/macros.h
  8. 107 106
      doxygen/metrics.dox
  9. 2 2
      doxygen/snippets/qep_qmsm_use.c
  10. 1 1
      doxygen/snippets/qk_oncontextsw.c
  11. 15 0
      doxygen/snippets/qs_ap.c
  12. 16 11
      doxygen/snippets/qs_filter.c
  13. 0 14
      doxygen/snippets/qs_user.c
  14. 1 1
      doxygen/snippets/qxk_oncontextsw.c
  15. 10 29
      examples/arm-cm/blinky_efm32-slstk3401a/qk/bsp.c
  16. 8 26
      examples/arm-cm/blinky_efm32-slstk3401a/qv/bsp.c
  17. 10 29
      examples/arm-cm/blinky_ek-tm4c123gxl/qk/bsp.c
  18. 14 33
      examples/arm-cm/blinky_ek-tm4c123gxl/qv/bsp.c
  19. 22 43
      examples/arm-cm/dpp_efm32-slstk3401a/qk/bsp.c
  20. 25 49
      examples/arm-cm/dpp_efm32-slstk3401a/qv/bsp.c
  21. 2 3
      examples/arm-cm/dpp_efm32-slstk3401a/qview/dpp.py
  22. 2 3
      examples/arm-cm/dpp_efm32-slstk3401a/qview/dpp1.py
  23. 23 43
      examples/arm-cm/dpp_efm32-slstk3401a/qxk/bsp.c
  24. 3 3
      examples/arm-cm/dpp_efm32-slstk3401a/win32-gui/bsp.c
  25. 4 0
      examples/arm-cm/dpp_ek-tm4c123gxl/qk/armclang/dpp-qk.uvoptx
  26. 17 38
      examples/arm-cm/dpp_ek-tm4c123gxl/qk/bsp.c
  27. 17 38
      examples/arm-cm/dpp_ek-tm4c123gxl/qk/gnu_with-stack-prot/bsp_stack-prot.c
  28. 16 46
      examples/arm-cm/dpp_ek-tm4c123gxl/qv/bsp.c
  29. 2 3
      examples/arm-cm/dpp_ek-tm4c123gxl/qview/dpp.py
  30. 2 3
      examples/arm-cm/dpp_ek-tm4c123gxl/qview/dpp1.py
  31. 0 2
      examples/arm-cm/dpp_ek-tm4c123gxl/qxk/arm/dpp-qxk.uvoptx
  32. 5 0
      examples/arm-cm/dpp_ek-tm4c123gxl/qxk/armclang/dpp-qxk.uvoptx
  33. 19 41
      examples/arm-cm/dpp_ek-tm4c123gxl/qxk/bsp.c
  34. 18 46
      examples/arm-cm/dpp_mbed-lpc1768/qk/bsp.c
  35. 16 43
      examples/arm-cm/dpp_mbed-lpc1768/qv/bsp.c
  36. 19 40
      examples/arm-cm/dpp_nucleo-h743zi/qk/bsp.c
  37. 16 36
      examples/arm-cm/dpp_nucleo-h743zi/qv/bsp.c
  38. 2 3
      examples/arm-cm/dpp_nucleo-h743zi/qview/dpp.py
  39. 2 3
      examples/arm-cm/dpp_nucleo-h743zi/qview/dpp1.py
  40. 19 40
      examples/arm-cm/dpp_nucleo-h743zi/qxk/bsp.c
  41. 1 1
      examples/arm-cm/dpp_nucleo-l053r8/qk/armclang/dpp-qk.uvoptx
  42. 11 11
      examples/arm-cm/dpp_nucleo-l053r8/qk/bsp.c
  43. 18 33
      examples/arm-cm/dpp_nucleo-l053r8/qk/gnu_with-stack-prot/bsp_stack-prot.c
  44. 8 5
      examples/arm-cm/dpp_nucleo-l053r8/qk/iar/dpp-qk.ewp
  45. 16 14
      examples/arm-cm/dpp_nucleo-l053r8/qv/bsp.c
  46. 2 3
      examples/arm-cm/dpp_nucleo-l053r8/qview/dpp.py
  47. 2 3
      examples/arm-cm/dpp_nucleo-l053r8/qview/dpp1.py
  48. 11 11
      examples/arm-cm/dpp_nucleo-l053r8/qxk/bsp.c
  49. 124 22
      examples/arm-cm/dpp_nucleo-l053r8/qxk/iar/dpp-qxk.ewp
  50. 11 11
      examples/arm-cm/dpp_nucleo-l152re/qk/bsp.c
  51. 3 2
      examples/arm-cm/dpp_nucleo-l152re/qk/gnu/Makefile
  52. 135 0
      examples/arm-cm/dpp_nucleo-l152re/qk/visualgdb/dpp-qk-Debug.vgdbsettings
  53. 135 0
      examples/arm-cm/dpp_nucleo-l152re/qk/visualgdb/dpp-qk-Release.vgdbsettings
  54. 134 0
      examples/arm-cm/dpp_nucleo-l152re/qk/visualgdb/dpp-qk-Spy.vgdbsettings
  55. 139 0
      examples/arm-cm/dpp_nucleo-l152re/qk/visualgdb/dpp-qk.ld
  56. 28 0
      examples/arm-cm/dpp_nucleo-l152re/qk/visualgdb/dpp-qk.sln
  57. 148 0
      examples/arm-cm/dpp_nucleo-l152re/qk/visualgdb/dpp-qk.vcxproj
  58. 137 0
      examples/arm-cm/dpp_nucleo-l152re/qk/visualgdb/dpp-qk.vcxproj.filters
  59. 31 0
      examples/arm-cm/dpp_nucleo-l152re/qk/visualgdb/stm32.props
  60. 39 0
      examples/arm-cm/dpp_nucleo-l152re/qk/visualgdb/stm32.xml
  61. 11 9
      examples/arm-cm/dpp_nucleo-l152re/qv/bsp.c
  62. 2 3
      examples/arm-cm/dpp_nucleo-l152re/qview/dpp.py
  63. 2 3
      examples/arm-cm/dpp_nucleo-l152re/qview/dpp1.py
  64. 9 9
      examples/arm-cm/dpp_nucleo-l152re/qxk/bsp.c
  65. 3 3
      examples/arm-cm/dpp_nucleo-l152re/qxk/gnu/Makefile
  66. 10 10
      examples/arm-cm/dpp_stm32f4-discovery/qk/bsp.c
  67. 12 10
      examples/arm-cm/dpp_stm32f4-discovery/qv/bsp.c
  68. 10 10
      examples/arm-cm/dpp_stm32f4-discovery/qxk/bsp.c
  69. 19 40
      examples/arm-cm/dpp_stm32f746g-discovery/qk/bsp.c
  70. 17 36
      examples/arm-cm/dpp_stm32f746g-discovery/qv/bsp.c
  71. 18 39
      examples/arm-cm/dpp_stm32f746g-discovery/qxk/bsp.c
  72. 1 1
      examples/arm-cm/game_efm32-slstk3401a/game.h
  73. 6 6
      examples/arm-cm/game_efm32-slstk3401a/game.qm
  74. 1 1
      examples/arm-cm/game_efm32-slstk3401a/mine1.c
  75. 1 1
      examples/arm-cm/game_efm32-slstk3401a/mine2.c
  76. 1 1
      examples/arm-cm/game_efm32-slstk3401a/missile.c
  77. 20 47
      examples/arm-cm/game_efm32-slstk3401a/qk/bsp.c
  78. 18 43
      examples/arm-cm/game_efm32-slstk3401a/qv/bsp.c
  79. 1 1
      examples/arm-cm/game_efm32-slstk3401a/ship.c
  80. 6 6
      examples/arm-cm/game_efm32-slstk3401a/tunnel.c
  81. 4 4
      examples/arm-cm/game_efm32-slstk3401a/win32-gui/bsp.c
  82. 24 0
      examples/arm-cm/game_efm32-slstk3401a/win32-gui/make.bat
  83. 2 0
      examples/arm-cm/low-power_ek-tm4c123gxl/qv/bsp.c
  84. 12 21
      examples/arm-cr/dpp_launchxl2-tms57012/qk/bsp.c
  85. 13 22
      examples/arm-cr/dpp_launchxl2-tms57012/qv/bsp.c
  86. 2 3
      examples/arm-cr/dpp_launchxl2-tms57012/qview/dpp.py
  87. 2 3
      examples/arm-cr/dpp_launchxl2-tms57012/qview/dpp1.py
  88. 12 20
      examples/arm7-9/dpp_at91sam7s-ek/qk/iar/bsp.c
  89. 12 20
      examples/arm7-9/dpp_at91sam7s-ek/qv/iar/bsp.c
  90. 13 13
      examples/embos/arm-cm/dpp_stm32f429-discovery/bsp.c
  91. 21 21
      examples/emwin/demo_no_wm/table.c
  92. 18 43
      examples/freertos/arm-cm/dpp_ek-tm4c123gxl/bsp.c
  93. 19 42
      examples/freertos/arm-cm/dpp_nucleo-h743zi/bsp.c
  94. 18 41
      examples/freertos/arm-cm/dpp_stm32f746g-discovery/bsp.c
  95. 33 32
      examples/lwip/arm-cm/lwip_ek-lm3s6965/lwipmgr.c
  96. 17 43
      examples/lwip/arm-cm/lwip_ek-lm3s6965/qk/bsp.c
  97. 19 45
      examples/lwip/arm-cm/lwip_ek-lm3s6965/qv/bsp.c
  98. 15 15
      examples/lwip/arm-cm/lwip_ek-lm3s6965/table.c
  99. 2 2
      examples/msp430/blinky_msp-exp430f5529lp/qk/ccs-gnu/msp430f5529.ld
  100. 3492 0
      examples/msp430/blinky_msp-exp430f5529lp/qk/iar/Backup (2) of blinky-qk.ewp

+ 4 - 2
doxygen/Doxyfile

@@ -1,11 +1,11 @@
-# Doxyfile 1.8.18
+# Doxyfile 1.8.20
 
 #---------------------------------------------------------------------------
 # Project related configuration options
 #---------------------------------------------------------------------------
 DOXYFILE_ENCODING      = UTF-8
 PROJECT_NAME           = "QP/C"
-PROJECT_NUMBER         = "6.9.0"
+PROJECT_NUMBER         = "6.9.1"
 PROJECT_BRIEF          =
 PROJECT_LOGO           = images/header_logo_ql.png
 OUTPUT_DIRECTORY       =
@@ -26,6 +26,7 @@ JAVADOC_AUTOBRIEF      = NO
 JAVADOC_BANNER         = NO
 QT_AUTOBRIEF           = YES
 MULTILINE_CPP_IS_BRIEF = YES
+PYTHON_DOCSTRING       = YES
 INHERIT_DOCS           = YES
 SEPARATE_MEMBER_PAGES  = NO
 TAB_SIZE               = 4
@@ -57,6 +58,7 @@ INLINE_GROUPED_CLASSES = YES
 INLINE_SIMPLE_STRUCTS  = YES
 TYPEDEF_HIDES_STRUCT   = YES
 LOOKUP_CACHE_SIZE      = 0
+NUM_PROC_THREADS       = 1
 #---------------------------------------------------------------------------
 # Build related configuration options
 #---------------------------------------------------------------------------

+ 1 - 1
doxygen/Doxyfile-CHM

@@ -5,7 +5,7 @@
 #---------------------------------------------------------------------------
 DOXYFILE_ENCODING      = UTF-8
 PROJECT_NAME           = "QP/C"
-PROJECT_NUMBER         = "6.9.0"
+PROJECT_NUMBER         = "6.9.1"
 PROJECT_BRIEF          =
 PROJECT_LOGO           = images/header_logo_ql.png
 OUTPUT_DIRECTORY       =

+ 1 - 1
doxygen/Doxyfile-DOC

@@ -5,7 +5,7 @@
 #---------------------------------------------------------------------------
 DOXYFILE_ENCODING      = UTF-8
 PROJECT_NAME           = "QP/C"
-PROJECT_NUMBER         = "6.9.0"
+PROJECT_NUMBER         = "6.9.1"
 PROJECT_BRIEF          =
 PROJECT_LOGO           = images/header_logo_ql.png
 OUTPUT_DIRECTORY       =

+ 3 - 21
doxygen/api.dox

@@ -113,13 +113,8 @@ QS is a software tracing system that enables developers to monitor live event-dr
 
 
 @subsection api_qs_filter QS Filters
-- QS_FILTER_ON()
-- QS_FILTER_OFF()
-- QS_FILTER_SM_OBJ()
-- QS_FILTER_AO_OBJ()
-- QS_FILTER_MP_OBJ()
-- QS_FILTER_EQ_OBJ()
-- QS_FILTER_TE_OBJ()
+- QS_GLB_FILTER()
+- QS_LOC_FILTER()
 - QS_FILTER_AP_OBJ()
 
 
@@ -132,7 +127,7 @@ QS is a software tracing system that enables developers to monitor live event-dr
 
 @subsection api_qs_user QS Application-Specific Records
 - ::QS_USER enumeration
-- QS_BEGIN()
+- QS_BEGIN_ID()
 - QS_END()
 - QS_U8() / QS_I8()
 - QS_U16() / QS_I16()
@@ -142,7 +137,6 @@ QS is a software tracing system that enables developers to monitor live event-dr
 - 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.
 
@@ -160,23 +154,18 @@ Given the simplicity, portability, and low-resource consumption, the QV schedule
 - <a href="qv_8c.html#a779a1bc9482e2d489dc87751cd100fdb"><b>QF_run()</b></a>
 - QV_onIdle()
 - QV_CPU_SLEEP()
-- QV_getVersion()
-
 
 
 @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()
 - <a href="qk_8c.html#a779a1bc9482e2d489dc87751cd100fdb"><b>QF_run()</b></a>
 - QK_onIdle()
 - QK_schedLock()
 - QK_schedUnlock()
-- QK_getVersion()
-
 
 
 @subsection api_qk_isr Interrupt Management
@@ -184,7 +173,6 @@ QK is a tiny **preemptive**, priority-based, non-blocking kernel designed specif
 - QK_ISR_EXIT()
 
 
-
 @section api_qxk QXK (Preemptive Dual-Mode 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.
 
@@ -196,8 +184,6 @@ QXK is a small, preemptive, priority-based, dual-mode **blocking** kernel that e
 - QXK_onIdle()
 - QXK_schedLock()
 - QXK_schedUnlock()
-- QXK_getVersion()
-
 
 
 @subsection api_qxk_isr Interrupt Management
@@ -205,7 +191,6 @@ QXK is a small, preemptive, priority-based, dual-mode **blocking** kernel that e
 - QXK_ISR_EXIT()
 
 
-
 @subsection api_qxk_xthr Extended Thread Management
 - ::QXThread class
 - QXThread_ctor()
@@ -217,7 +202,6 @@ QXK is a small, preemptive, priority-based, dual-mode **blocking** kernel that e
 - QXThread_queueGet()
 
 
-
 @subsection api_qxk_sema Semaphores
 - ::QXSemaphore class (Semaphore Control Block)
 - QXSemaphore_init()
@@ -226,7 +210,6 @@ QXK is a small, preemptive, priority-based, dual-mode **blocking** kernel that e
 - QXSemaphore_signal()
 
 
-
 @subsection api_qxk_mutex Mutexes
 - ::QXMutex class (Mutex Control Block)
 - QXMutex_init()
@@ -235,7 +218,6 @@ QXK is a small, preemptive, priority-based, dual-mode **blocking** kernel that e
 - QXMutex_unlock()
 
 
-
 @subsection api_qxk_queue Message Queues
 - QXTHREAD_POST_X() - posting messages to blocking threads
 - QACTIVE_POST_X()  - posting events to Active Objects

+ 1 - 0
doxygen/exa_rtos.dox

@@ -84,6 +84,7 @@ The QP/C examples for FreeRTOS are as follows:
     - @subpage freertos_dpp_ek-tm4c123gxl (Cortex-M4F) <a class="preview board" href="bd_EK-TM4C123GXL.jpg" title="EK-TM4C123GXL"></a><br>(ARM-KEIL, GNU-ARM and IAR EWARM toolchains)
     - @subpage freertos_dpp_stm32f746g-disco (Cortex-M7) <a class="preview board" href="bd_STM32F746G-Disco.jpg" title="STM32F746G-Discovery"></a><br>(ARM-KEIL, GNU-ARM and IAR EWARM toolchains)
     - @subpage freertos_dpp_nucleo-h743zi (Cortex-M7) <a class="preview board" href="bd_NUCLEO-H743ZI.jpg" title="NUCLEO-H743ZI"></a><br>(ARM-KEIL, GNU-ARM and IAR EWARM toolchains)
+    - @subpage freertos_start-stop_nucleo-h743zi (Cortex-M7) <a class="preview board" href="bd_NUCLEO-H743ZI.jpg" title="NUCLEO-H743ZI"></a><br>(ARM-KEIL, GNU-ARM and IAR EWARM toolchains)
 
 @note
 You can hover the mouse cursor over the <span class="board"></span>&nbsp;&nbsp; icon in the list below to see the picture of the board.

+ 79 - 2
doxygen/history.dox

@@ -1,6 +1,83 @@
 /**
 @page history Revision History
 
+@section qpc_6_9_1 Version 6.9.1, 2020-09-28
+The main purpose of this release is a redesign of the [<b>QS Local Filter</b>](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 [<b>pre-defined QS trace records</b>](https://www.state-machine.com/qtools/qs.html#qs_pre) and the [<b>application-specific trace records</b>](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 [<b>application-specific trace records</b>](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 [<b>QUTest test scripts</b>](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.prio` attribute is the fixed priority assigned in QActive_start(), while `QActive.dynPrio` is the "dynamic" priority that can be changed when a @ref qxk_extended "QXK extended thread" acquires a @ref ::QXMutex "mutex".  
+
+
+__Updated Ports:__
+
+- all ARM Cortex-M ports (added workaround for the [<b>ARM Erratum 838869</b>](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 qpc_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 &amp; 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).
 
@@ -36,7 +113,7 @@ The #QS_QF_RUN record is now generated in [QUTest unit testing](https://www.stat
   + ARM Cortex-M examples for STM32 NUCLEO-L053RE (`qpc\examples\arm-cm\dpp_nucleo-l053r8`) and NUCLEO-L152RE (`qpc\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. 
+  + 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:__
@@ -661,7 +738,7 @@ 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
+on ARM Cortex-M7 core r0p1 ([SDEN-1068427, erratum 837070](https://www.state-machine.com/doc/Cortex-M7_Software_Developers_Errata_Notice_v8.pdf)). 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.

+ 16 - 11
doxygen/macros.h

@@ -118,9 +118,10 @@
 
 /*! Platform-dependent macro defining the event pool initialization */
 /**
-* @note This is a specific implementation for the QK-port of QF.
-* In other QF ports you need to define the macro appropriately for
-* the underlying kernel/OS you're using.
+* @note
+* This is an example implementation based on the native ::QMPool class.
+* In other QF ports, the port might be using a memory pool from the
+* underlying kernel/OS.
 */
 #define QF_EPOOL_INIT_(p_, poolSto_, poolSize_, evtSize_) \
     (QMPool_init(&(p_), (poolSto_), (poolSize_), (QMPoolSize)(evtSize_)))
@@ -137,20 +138,24 @@
 /*! Platform-dependent macro defining how QF should obtain an event
 * @a e_ from the event pool @a p_ with the free margin @a m_. */
 /**
-* @note This is a specific implementation for the QK-port of QF.
-* In other QF ports you need to define the macro appropriately for
-* the underlying kernel/OS you're using.
+* @note
+* This is an example implementation based on the native ::QMPool class.
+* In other QF ports, the port might be using a memory pool from the
+* underlying kernel/OS.
 */
-#define QF_EPOOL_GET_(p_, e_, m_) ((e_) = (QEvt *)QMPool_get(&(p_), (m_)))
+#define QF_EPOOL_GET_(p_, e_, m_, qs_id_) \
+    ((e_) = (QEvt *)QMPool_get(&(p_), (m_), (qs_id_)))
 
 /*! Platform-dependent macro defining how QF should return an event
 * @a e_ to the event pool @a p_ */
 /**
-* @note This is a specific implementation for the QK-port of QF.
-* In other QF ports you need to define the macro appropriately for
-* the underlying kernel/OS you're using.
+* @note
+* This is an example implementation based on the native ::QMPool class.
+* In other QF ports, the port might be using a memory pool from the
+* underlying kernel/OS.
 */
-#define QF_EPOOL_PUT_(p_, e_)     (QMPool_put(&(p_), (e_)))
+#define QF_EPOOL_PUT_(p_, e_, qs_id_) \
+    (QMPool_put(&(p_), (e_), (qs_id_)))
 
 /*! Macro defined only for the internal QP implementation. It should
 * be not defined for the application-level code

+ 107 - 106
doxygen/metrics.dox

@@ -6,151 +6,152 @@
   NLOC    CCN   token  PARAM  length  location  
 ------------------------------------------------
        6      1     23      1      15 Q_DEFINE_THIS_MODULE@50-64@..\src\qf\qep_hsm.c
-       9      1     53      2       9 QHsm_ctor@128-136@..\src\qf\qep_hsm.c
-      48      8    379      2      71 QHsm_init_@148-218@..\src\qf\qep_hsm.c
-       5      1     32      2       5 QHsm_top@235-239@..\src\qf\qep_hsm.c
-     102     15    700      2     147 QHsm_dispatch_@254-400@..\src\qf\qep_hsm.c
-      98     15    492      2     133 QHsm_tran_@413-545@..\src\qf\qep_hsm.c
-      16      3    105      2      22 QHsm_isIn@561-582@..\src\qf\qep_hsm.c
-      22      4    131      2      30 QHsm_childState_@607-636@..\src\qf\qep_hsm.c
+       9      1     53      2       9 QHsm_ctor@134-142@..\src\qf\qep_hsm.c
+      49      8    359      2      73 QHsm_init_@159-231@..\src\qf\qep_hsm.c
+       5      1     32      2       5 QHsm_top@248-252@..\src\qf\qep_hsm.c
+     104     16    658      2     153 QHsm_dispatch_@272-424@..\src\qf\qep_hsm.c
+      97     15    492      2     133 QHsm_tran_@445-577@..\src\qf\qep_hsm.c
+      16      3    105      2      22 QHsm_isIn@593-614@..\src\qf\qep_hsm.c
+      22      4    131      2      30 QHsm_childState_@639-668@..\src\qf\qep_hsm.c
        4      1     10      1       8 Q_DEFINE_THIS_MODULE@50-57@..\src\qf\qep_msm.c
-       9      1     56      2      10 QMsm_ctor@119-128@..\src\qf\qep_msm.c
-      23      4    213      2      38 QMsm_init_@142-179@..\src\qf\qep_msm.c
-     112     21    773      2     164 QMsm_dispatch_@195-358@..\src\qf\qep_msm.c
-      50      9    368      2      62 QMsm_execTatbl_@376-437@..\src\qf\qep_msm.c
-      20      4    128      3      27 QMsm_exitToTranSource_@451-477@..\src\qf\qep_msm.c
-      40      6    254      2      48 QMsm_enterHistory_@493-540@..\src\qf\qep_msm.c
-      11      3     71      2      12 QMsm_isInState@557-568@..\src\qf\qep_msm.c
-      22      4    105      2      28 QMsm_childStateObj_@588-615@..\src\qf\qep_msm.c
+       9      1     56      2      10 QMsm_ctor@136-145@..\src\qf\qep_msm.c
+      25      5    213      2      45 QMsm_init_@164-208@..\src\qf\qep_msm.c
+     122     23    845      2     185 QMsm_dispatch_@229-413@..\src\qf\qep_msm.c
+      50      9    332      2      63 QMsm_execTatbl_@437-499@..\src\qf\qep_msm.c
+      20      4    120      3      28 QMsm_exitToTranSource_@519-546@..\src\qf\qep_msm.c
+      41      6    239      2      50 QMsm_enterHistory_@567-616@..\src\qf\qep_msm.c
+      11      3     71      2      12 QMsm_isInState@633-644@..\src\qf\qep_msm.c
+      22      4    105      2      28 QMsm_childStateObj_@664-691@..\src\qf\qep_msm.c
       10      3     64      1      17 QF_add_@70-86@..\src\qf\qf_act.c
       10      3     78      1      16 QF_remove_@103-118@..\src\qf\qf_act.c
        8      2     50      2       8 QF_bzero@144-151@..\src\qf\qf_act.c
       24      6    143      1      29 QF_LOG2@156-184@..\src\qf\qf_act.c
-      86     15    472      3     125 QActive_post_@95-219@..\src\qf\qf_actq.c
-      47      8    295      2      70 QActive_postLIFO_@239-308@..\src\qf\qf_actq.c
-      37      3    247      1      47 QActive_get_@332-378@..\src\qf\qf_actq.c
-      10      2     61      1      13 QF_getQueueMin@399-411@..\src\qf\qf_actq.c
-      12      1     75      2      14 QTicker_ctor@441-454@..\src\qf\qf_actq.c
-       5      1     35      2       5 QTicker_init_@456-460@..\src\qf\qf_actq.c
-      12      2     83      2      15 QTicker_dispatch_@462-476@..\src\qf\qf_actq.c
-      28      2    155      4      37 QTicker_post_@482-518@..\src\qf\qf_actq.c
-       5      1     30      2       5 QTicker_postLIFO_@520-524@..\src\qf\qf_actq.c
-      15      1     89      3      18 QActive_defer@78-95@..\src\qf\qf_defer.c
-      34      3    174      2      54 QActive_recall@119-172@..\src\qf\qf_defer.c
-      12      2     66      2      14 QActive_flushDeferred@190-203@..\src\qf\qf_defer.c
+      84     13    468      3     121 QActive_post_@95-215@..\src\qf\qf_actq.c
+      46      7    293      2      68 QActive_postLIFO_@235-302@..\src\qf\qf_actq.c
+      36      3    237      1      46 QActive_get_@326-371@..\src\qf\qf_actq.c
+      10      2     61      1      13 QF_getQueueMin@392-404@..\src\qf\qf_actq.c
+      12      1     75      2      14 QTicker_ctor@438-451@..\src\qf\qf_actq.c
+       7      2     39      2      10 QTicker_init_@457-466@..\src\qf\qf_actq.c
+      14      3     87      2      20 QTicker_dispatch_@472-491@..\src\qf\qf_actq.c
+      27      2    150      4      36 QTicker_post_@497-532@..\src\qf\qf_actq.c
+       5      1     30      2       5 QTicker_postLIFO_@534-538@..\src\qf\qf_actq.c
+      15      1     88      3      18 QActive_defer@78-95@..\src\qf\qf_defer.c
+      32      3    168      2      52 QActive_recall@119-170@..\src\qf\qf_defer.c
+      12      2     74      2      14 QActive_flushDeferred@188-201@..\src\qf\qf_defer.c
        5      1     37      2       6 QEvt_ctor@69-74@..\src\qf\qf_dyn.c
       15      3    107      3      23 QF_poolInit@113-135@..\src\qf\qf_dyn.c
-      31      5    174      3      41 QF_newX_@164-204@..\src\qf\qf_dyn.c
-      26      3    167      1      40 QF_gc@230-269@..\src\qf\qf_dyn.c
-      15      2     97      2      23 QF_newRef_@286-308@..\src\qf\qf_dyn.c
-      10      1     70      1      12 QF_deleteRef_@320-331@..\src\qf\qf_dyn.c
-       3      1     17      1       3 QF_poolGetMaxBlockSize@338-340@..\src\qf\qf_dyn.c
+      37      7    234      3      51 QF_newX_@164-214@..\src\qf\qf_dyn.c
+      30      4    185      1      47 QF_gc@240-286@..\src\qf\qf_dyn.c
+      16      2     94      2      24 QF_newRef_@303-326@..\src\qf\qf_dyn.c
+      11      1     67      1      13 QF_deleteRef_@338-350@..\src\qf\qf_dyn.c
+       3      1     17      1       3 QF_poolGetMaxBlockSize@357-359@..\src\qf\qf_dyn.c
       32      5    233      4      47 QMPool_init@89-135@..\src\qf\qf_mem.c
-      15      2    111      2      22 QMPool_put@159-180@..\src\qf\qf_mem.c
-      42      4    243      2      65 QMPool_get@211-275@..\src\qf\qf_mem.c
-      10      3     60      1      14 QF_getPoolMin@290-303@..\src\qf\qf_mem.c
+      16      2    113      3      24 QMPool_put@159-182@..\src\qf\qf_mem.c
+      43      4    238      3      67 QMPool_get@213-279@..\src\qf\qf_mem.c
+      10      3     60      1      14 QF_getPoolMin@294-307@..\src\qf\qf_mem.c
        5      1     35      2      10 QF_psInit@87-96@..\src\qf\qf_ps.c
-      37      5    220      2      65 QF_publish_@121-185@..\src\qf\qf_ps.c
-      17      5    117      2      23 QActive_subscribe@206-228@..\src\qf\qf_ps.c
-      16      5    117      2      25 QActive_unsubscribe@255-279@..\src\qf\qf_ps.c
-      21      5    140      1      26 QActive_unsubscribeAll@304-329@..\src\qf\qf_ps.c
+      37      5    210      2      65 QF_publish_@121-185@..\src\qf\qf_ps.c
+      16      5    112      2      22 QActive_subscribe@206-227@..\src\qf\qf_ps.c
+      16      5    112      2      25 QActive_unsubscribe@254-278@..\src\qf\qf_ps.c
+      20      5    135      1      25 QActive_unsubscribeAll@303-327@..\src\qf\qf_ps.c
       12      1     68      2      17 QActive_ctor@66-82@..\src\qf\qf_qact.c
       13      2     85      3      13 QEQueue_init@72-84@..\src\qf\qf_qeq.c
-      57      8    310      3      76 QEQueue_post@115-190@..\src\qf\qf_qeq.c
-      34      5    202      2      45 QEQueue_postLIFO@215-259@..\src\qf\qf_qeq.c
-      38      4    226      1      48 QEQueue_get@280-327@..\src\qf\qf_qeq.c
+      56      8    305      4      76 QEQueue_post@115-190@..\src\qf\qf_qeq.c
+      37      5    204      3      49 QEQueue_postLIFO@215-263@..\src\qf\qf_qeq.c
+      37      4    221      2      48 QEQueue_get@284-331@..\src\qf\qf_qeq.c
       12      1     76      2      28 QMActive_ctor@67-94@..\src\qf\qf_qmact.c
-      68      7    387      1      99 QF_tickX_@80-178@..\src\qf\qf_time.c
-      13      3     66      1      14 QF_noTimeEvtsActiveX@207-220@..\src\qf\qf_time.c
-      13      2     99      4      30 QTimeEvt_ctorX@240-269@..\src\qf\qf_time.c
-      30      7    212      3      54 QTimeEvt_armX@299-352@..\src\qf\qf_time.c
-      32      2    174      1      39 QTimeEvt_disarm@373-411@..\src\qf\qf_time.c
-      32      7    218      2      57 QTimeEvt_rearm@434-490@..\src\qf\qf_time.c
-       5      2     41      1       5 QTimeEvt_wasDisarmed@514-518@..\src\qf\qf_time.c
-       8      1     31      1      10 QTimeEvt_currCtr@536-545@..\src\qf\qf_time.c
+      66      7    367      1      97 QF_tickX_@80-176@..\src\qf\qf_time.c
+      13      3     66      1      14 QF_noTimeEvtsActiveX@205-218@..\src\qf\qf_time.c
+      13      2     99      4      30 QTimeEvt_ctorX@238-267@..\src\qf\qf_time.c
+      31      8    223      3      57 QTimeEvt_armX@297-353@..\src\qf\qf_time.c
+      31      3    178      1      40 QTimeEvt_disarm@374-413@..\src\qf\qf_time.c
+      33      8    229      2      60 QTimeEvt_rearm@436-495@..\src\qf\qf_time.c
+       5      2     41      1       5 QTimeEvt_wasDisarmed@519-523@..\src\qf\qf_time.c
+       8      1     31      1      10 QTimeEvt_currCtr@541-550@..\src\qf\qf_time.c
       11      2     76      1      16 QF_init@72-87@..\src\qk\qk.c
        3      1     10      1       4 QF_stop@107-110@..\src\qk\qk.c
        6      2     26      1       8 initial_events@115-122@..\src\qk\qk.c
-      12      3     55      1      19 QF_run@133-151@..\src\qk\qk.c
-      21      5    140      7      32 QActive_start_@175-206@..\src\qk\qk.c
-      22      2    121      1      33 QK_schedLock@230-262@..\src\qk\qk.c
-      21      4    131      1      33 QK_schedUnlock@280-312@..\src\qk\qk.c
-      15      3     78      1      19 QK_sched_@328-346@..\src\qk\qk.c
-      62     16    375      1     106 QK_activate_@358-463@..\src\qk\qk.c
+      12      3     45      1      19 QF_run@133-151@..\src\qk\qk.c
+      21      5    144      7      32 QActive_start_@175-206@..\src\qk\qk.c
+      22      2    111      1      33 QK_schedLock@230-262@..\src\qk\qk.c
+      21      4    121      1      33 QK_schedUnlock@280-312@..\src\qk\qk.c
+      15      3     78      1      19 QK_sched_@329-347@..\src\qk\qk.c
+      62     16    359      1     106 QK_activate_@359-464@..\src\qk\qk.c
        9      2     64      1      13 QF_init@73-85@..\src\qv\qv.c
        3      1     10      1       4 QF_stop@104-107@..\src\qv\qv.c
-      42      9    221      1      80 QF_run@117-196@..\src\qv\qv.c
-      14      3    110      7      20 QActive_start_@220-239@..\src\qv\qv.c
+      42      9    200      1      80 QF_run@117-196@..\src\qv\qv.c
+      14      3    114      7      20 QActive_start_@220-239@..\src\qv\qv.c
       14      2    108      1      22 QF_init@75-96@..\src\qxk\qxk.c
        3      1     10      1       4 QF_stop@115-118@..\src\qxk\qxk.c
        6      2     26      1       8 initial_events@123-130@..\src\qxk\qxk.c
-      12      3     55      1      20 QF_run@140-159@..\src\qxk\qxk.c
-      23      6    160      7      34 QActive_start_@184-217@..\src\qxk\qxk.c
-      23      3    141      1      34 QXK_schedLock@249-282@..\src\qxk\qxk.c
-      20      4    134      1      33 QXK_schedUnlock@305-337@..\src\qxk\qxk.c
-      51      7    278      1      68 QXK_sched_@352-419@..\src\qxk\qxk.c
-      75     16    500      1     131 QXK_activate_@431-561@..\src\qxk\qxk.c
-      13      2     76      1      20 QXK_current@564-583@..\src\qxk\qxk.c
+      12      3     45      1      20 QF_run@140-159@..\src\qxk\qxk.c
+      23      6    164      7      34 QActive_start_@184-217@..\src\qxk\qxk.c
+      23      3    130      1      34 QXK_schedLock@249-282@..\src\qxk\qxk.c
+      20      4    121      1      33 QXK_schedUnlock@305-337@..\src\qxk\qxk.c
+      49      7    271      1      67 QXK_sched_@353-419@..\src\qxk\qxk.c
+      75     16    477      1     132 QXK_activate_@431-562@..\src\qxk\qxk.c
+      13      2     74      1      20 QXK_current@565-584@..\src\qxk\qxk.c
       16      4    113      2      25 QXMutex_init@87-111@..\src\qxk\qxk_mutex.c
-      69     12    538      2     110 QXMutex_lock@134-243@..\src\qxk\qxk_mutex.c
-      45     10    323      1      69 QXMutex_tryLock@266-334@..\src\qxk\qxk_mutex.c
-      69     16    508      1     115 QXMutex_unlock@356-470@..\src\qxk\qxk_mutex.c
+      71     12    544      2     113 QXMutex_lock@134-246@..\src\qxk\qxk_mutex.c
+      44     10    319      1      68 QXMutex_tryLock@269-336@..\src\qxk\qxk_mutex.c
+      67     16    506      1     115 QXMutex_unlock@358-472@..\src\qxk\qxk_mutex.c
        8      1     49      3      10 QXSemaphore_init@79-88@..\src\qxk\qxk_sema.c
       44      7    321      2      69 QXSemaphore_wait@114-182@..\src\qxk\qxk_sema.c
       15      2     61      1      20 QXSemaphore_tryWait@199-218@..\src\qxk\qxk_sema.c
       30      6    197      1      49 QXSemaphore_signal@240-288@..\src\qxk\qxk_sema.c
-      18      1    109      3      21 QXThread_ctor@109-129@..\src\qxk\qxk_xthr.c
-       5      1     30      2       5 QXThread_init_@133-137@..\src\qxk\qxk_xthr.c
-       5      1     30      2       5 QXThread_dispatch_@140-144@..\src\qxk\qxk_xthr.c
-      25      6    202      7      47 QXThread_start_@171-217@..\src\qxk\qxk_xthr.c
-      98     13    529      3     132 QXThread_post_@262-393@..\src\qxk\qxk_xthr.c
-       5      1     30      2       5 QXThread_postLIFO_@406-410@..\src\qxk\qxk_xthr.c
-      62      7    505      1      88 QXThread_queueGet@432-519@..\src\qxk\qxk_xthr.c
-       5      1     51      1       7 QXThread_block_@529-535@..\src\qxk\qxk_xthr.c
-       8      3     58      1       8 QXThread_unblock_@545-552@..\src\qxk\qxk_xthr.c
-      19      3    155      3      37 QXThread_teArm_@563-599@..\src\qxk\qxk_xthr.c
-      11      2     46      1      13 QXThread_teDisarm_@609-621@..\src\qxk\qxk_xthr.c
-      21      3    195      1      37 QXThread_delay@625-661@..\src\qxk\qxk_xthr.c
-      14      2     68      1      16 QXThread_delayCancel@665-680@..\src\qxk\qxk_xthr.c
-      15      2    108      1      25 QXK_threadRet_@693-717@..\src\qxk\qxk_xthr.c
-35 file analyzed.
+      18      1    109      3      21 QXThread_ctor@113-133@..\src\qxk\qxk_xthr.c
+       8      2     38      3      11 QXThread_init_@140-150@..\src\qxk\qxk_xthr.c
+       8      2     38      3      11 QXThread_dispatch_@156-166@..\src\qxk\qxk_xthr.c
+      25      6    202      7      47 QXThread_start_@193-239@..\src\qxk\qxk_xthr.c
+      97     13    519      3     131 QXThread_post_@284-414@..\src\qxk\qxk_xthr.c
+       5      1     30      2       5 QXThread_postLIFO_@427-431@..\src\qxk\qxk_xthr.c
+      60      7    499      1      86 QXThread_queueGet@453-538@..\src\qxk\qxk_xthr.c
+       5      1     51      1       7 QXThread_block_@548-554@..\src\qxk\qxk_xthr.c
+       8      3     58      1       8 QXThread_unblock_@564-571@..\src\qxk\qxk_xthr.c
+      19      3    155      3      37 QXThread_teArm_@582-618@..\src\qxk\qxk_xthr.c
+      11      2     46      1      13 QXThread_teDisarm_@628-640@..\src\qxk\qxk_xthr.c
+      21      3    195      1      37 QXThread_delay@644-680@..\src\qxk\qxk_xthr.c
+      14      2     68      1      16 QXThread_delayCancel@684-699@..\src\qxk\qxk_xthr.c
+      15      2    108      1      25 QXK_threadRet_@712-736@..\src\qxk\qxk_xthr.c
+36 file analyzed.
 ==============================================================
 NLOC    Avg.NLOC  AvgCCN  Avg.token  function_cnt    file
 --------------------------------------------------------------
       5       0.0     0.0        0.0         0     ..\include\qassert.h
-     89       0.0     0.0        0.0         0     ..\include\qep.h
-     18       0.0     0.0        0.0         0     ..\include\qequeue.h
+    101       0.0     0.0        0.0         0     ..\include\qep.h
+     19       0.0     0.0        0.0         0     ..\include\qequeue.h
      89       0.0     0.0        0.0         0     ..\include\qf.h
      20       0.0     0.0        0.0         0     ..\include\qk.h
-     19       0.0     0.0        0.0         0     ..\include\qmpool.h
-      9       0.0     0.0        0.0         0     ..\include\qpc.h
+     21       0.0     0.0        0.0         0     ..\include\qmpool.h
+      7       0.0     0.0        0.0         0     ..\include\qpc.h
      10       0.0     0.0        0.0         0     ..\include\qpset.h
-    256       0.0     0.0        0.0         0     ..\include\qs.h
-      4       0.0     0.0        0.0         0     ..\include\qstamp.c
+    271       0.0     0.0        0.0         0     ..\include\qs.h
+      3       0.0     0.0        0.0         0     ..\include\qstamp.c
+      2       0.0     0.0        0.0         0     ..\include\qstamp.h
       0       0.0     0.0        0.0         0     ..\include\qs_dummy.h
       5       0.0     0.0        0.0         0     ..\include\qv.h
      23       0.0     0.0        0.0         0     ..\include\qxk.h
      32       0.0     0.0        0.0         0     ..\include\qxthread.h
-    319      38.2     6.0      239.4         8     ..\src\qf\qep_hsm.c
-    308      32.3     5.9      219.8         9     ..\src\qf\qep_msm.c
+    331      38.5     6.1      231.6         8     ..\src\qf\qep_hsm.c
+    341      33.8     6.2      221.2         9     ..\src\qf\qep_msm.c
      60      13.0     3.5       83.8         4     ..\src\qf\qf_act.c
-    260      26.9     3.9      161.4         9     ..\src\qf\qf_actq.c
-     68      20.3     2.0      109.7         3     ..\src\qf\qf_defer.c
-    114      15.0     2.3       95.6         7     ..\src\qf\qf_dyn.c
-    106      24.8     3.5      161.8         4     ..\src\qf\qf_mem.c
-    106      19.2     4.2      125.8         5     ..\src\qf\qf_ps.c
+    267      26.8     3.8      160.0         9     ..\src\qf\qf_actq.c
+     66      19.7     2.0      110.0         3     ..\src\qf\qf_defer.c
+    126      16.7     2.7      105.9         7     ..\src\qf\qf_dyn.c
+    108      25.2     3.5      161.0         4     ..\src\qf\qf_mem.c
+    104      18.8     4.2      120.8         5     ..\src\qf\qf_ps.c
      14      12.0     1.0       68.0         1     ..\src\qf\qf_qact.c
-    149      35.5     4.8      205.8         4     ..\src\qf\qf_qeq.c
+    150      35.8     4.8      203.8         4     ..\src\qf\qf_qeq.c
      14      12.0     1.0       76.0         1     ..\src\qf\qf_qmact.c
-    210      25.1     3.9      153.5         8     ..\src\qf\qf_time.c
-    182      19.2     4.2      112.4         9     ..\src\qk\qk.c
-     76      17.0     3.8      101.2         4     ..\src\qv\qv.c
-    250      24.0     4.6      148.8        10     ..\src\qxk\qxk.c
-    206      49.8    10.5      370.5         4     ..\src\qxk\qxk_mutex.c
+    209      25.0     4.2      154.2         8     ..\src\qf\qf_time.c
+    182      19.2     4.2      107.8         9     ..\src\qk\qk.c
+     76      17.0     3.8       97.0         4     ..\src\qv\qv.c
+    248      23.8     4.6      142.6        10     ..\src\qxk\qxk.c
+    205      49.5    10.5      370.5         4     ..\src\qxk\qxk_mutex.c
     104      24.2     4.0      157.0         4     ..\src\qxk\qxk_sema.c
-    332      22.2     3.3      151.1        14     ..\src\qxk\qxk_xthr.c
+    341      22.4     3.4      151.1        14     ..\src\qxk\qxk_xthr.c
      19       0.0     0.0        0.0         0     ..\src\qf_pkg.h
-     13       0.0     0.0        0.0         0     ..\src\qs_pkg.h
+     11       0.0     0.0        0.0         0     ..\src\qs_pkg.h
      16       0.0     0.0        0.0         0     ..\src\qxk_pkg.h
 
 =========================================================================================================
@@ -158,10 +159,10 @@ NLOC    Avg.NLOC  AvgCCN  Avg.token  function_cnt    file
 ================================================
   NLOC    CCN   token  PARAM  length  location  
 ------------------------------------------------
-     112     21    773      2     164 QMsm_dispatch_@195-358@..\src\qf\qep_msm.c
+     122     23    845      2     185 QMsm_dispatch_@229-413@..\src\qf\qep_msm.c
 ==========================================================================================
 Total nloc   Avg.NLOC  AvgCCN  Avg.token   Fun Cnt  Warning cnt   Fun Rt   nloc Rt
 ------------------------------------------------------------------------------------------
-      3505      25.1     4.3      160.0      108            1      0.01    0.04
+      3600      25.3     4.4      158.7      108            1      0.01    0.04
 @endcode 
 */ 

+ 2 - 2
doxygen/snippets/qep_qmsm_use.c

@@ -8,14 +8,14 @@ static Calc l_calc;   /* an instance of Calc SM */
 int main() {
     Calc_ctor(&l_calc);   /* Calc "constructor" invokes QMsm_ctor() */
 
-    QHSM_INIT(&l_calc.super, (QEvt *)0); /* trigger initial transition */
+    QHSM_INIT(&l_calc.super, (void *)0, 0U); /* trigger initial transition */
 
     for (;;) { /* event loop */
         QEvt e;
         . . .
         /* wait for the next event and assign it to the event object e */
         . . .
-        QHSM_DISPATCH(&l_calc.super, &e); /* dispatch e */
+        QHSM_DISPATCH(&l_calc.super, &e, 0U); /* dispatch e */
     }
     return 0; /* never reached, needed for some compilers */
 }

+ 1 - 1
doxygen/snippets/qk_oncontextsw.c

@@ -7,7 +7,7 @@ void QK_onContextSw(QActive *prev, QActive *next) {
     }
 
     /* If you use QS software tracing, use the _NOCRIT() begin/end */
-    QS_BEGIN_NOCRIT(ON_CONTEXT_SW, (void *)1)
+    QS_BEGIN_NOCRIT(ON_CONTEXT_SW, QS_AP_ID + 1)
         QS_OBJ(prev);
         QS_OBJ(next);
     QS_END_NOCRIT()

+ 15 - 0
doxygen/snippets/qs_ap.c

@@ -0,0 +1,15 @@
+enum UserSpyRecords {
+    . . .
+    PHILO_STAT = QS_USER, /* define a user QS record types */
+    . . .
+};
+
+void displyPhilStat(uint8_t n, char const *stat) {
+    . . .
+
+    /* application-specific record */
+    QS_BEGIN_ID(PHILO_STAT, AO_Philo[n]->prio);
+        QS_U8(1, n);  /* Philosopher number */
+        QS_STR(stat); /* Philosopher status */
+    QS_END();
+}

+ 16 - 11
doxygen/snippets/qs_filter.c

@@ -5,16 +5,21 @@ int main(int arc, char *argv[]) {
         return -1;                /* unable to initialize QSpy */
     }
 
-    /* apply the QS global filters... */
-    QS_FILTER_ON(QS_SM_RECORDS);  /* all state machine records */
-    QS_FILTER_ON(QS_AO_RECORDS);  /* all active object records */
-    QS_FILTER_ON(QS_UA_RECORDS);  /* all user records */
+    /* apply the global QS filters... */
+    /* NOTE: global filters start as being all OFF */
+    QS_GLB_FILTER(QS_QF_RECORDS); /* turn QF-group ON */
+    QS_GLB_FILTER(-QS_QF_TICK);   /* turn #QS_QF_TICK OFF */
+
+    /* apply the local QS filters... */
+    /* NOTE: local filters start as being all ON */
+    QS_LOC_FILTER(-QS_EP_IDS);    /* turn EP (Event-Pool) group  OFF */
+    QS_LOC_FILTER(3);             /* turn AO with prioity 3 ON */
+
+    /* start the active objects... */
+    . . .
+
+    /* NOTE: the following will work only after AO_Table has been started */
+    QS_LOC_FILTER(-AO_Table->prio); /* turn AO_Table OFF */
 
-    /* apply the QS local filters... */
-    QS_FILTER_SM_OBJ(&philo[3]);  /* trace only this state machine object */
-    QS_FILTER_AO_OBJ(&philo[3]);  /* trace only this active object */
-    QS_FILTER_MP_OBJ(regSizePoolSto); /* trace only this event pool */
-    QS_FILTER_EQ_OBJ(&rawQueue);  /* trace only this event queue */
-    QS_FILTER_TE_OBJ(&philo[3].m_timeEvt); /* trace only this time event */
     . . .
-}
+}

+ 0 - 14
doxygen/snippets/qs_user.c

@@ -1,14 +0,0 @@
-enum UserSpyRecords {
-    . . .
-    QS_DPP_DISPLAY = QS_USER, /* define a user QS record types */
-    . . .
-};
-
-void displyPhilStat(uint8_t n, char const *stat) {
-    . . .
-
-    QS_BEGIN(QS_DPP_DISPLAY);  /* output a user QS record */
-        QS_U8(1, n);
-        QS_STR(stat);
-    QS_END();
-}

+ 1 - 1
doxygen/snippets/qxk_oncontextsw.c

@@ -7,7 +7,7 @@ void QXK_onContextSw(QActive *prev, QActive *next) {
     }
 
     /* If you use QS software tracing, use the _NOCRIT() begin/end */
-    QS_BEGIN_NOCRIT(ON_CONTEXT_SW, (void *)1)
+    QS_BEGIN_NOCRIT(ON_CONTEXT_SW, 0U)
         QS_OBJ(prev);
         QS_OBJ(next);
     QS_END_NOCRIT()

+ 10 - 29
examples/arm-cm/blinky_efm32-slstk3401a/qk/bsp.c

@@ -1,13 +1,13 @@
 /*****************************************************************************
 * Product: "Blinky" on EFM32-SLSTK3401A board, preemptive QK kernel
-* Last Updated for Version: 5.6.5
-* Date of the Last Update:  2016-05-02
+* Last updated for version 6.9.1
+* Last updated on  2020-09-22
 *
-*                    Q u a n t u m     L e a P s
-*                    ---------------------------
-*                    innovating embedded systems
+*                    Q u a n t u m  L e a P s
+*                    ------------------------
+*                    Modern Embedded Software
 *
-* Copyright (C) Quantum Leaps, LLC. All rights reserved.
+* Copyright (C) 2005-2020 Quantum Leaps, LLC. All rights reserved.
 *
 * This program is open source software: you can redistribute it and/or
 * modify it under the terms of the GNU General Public License as published
@@ -46,25 +46,6 @@
     #error Simple Blinky Application does not provide Spy build configuration
 #endif
 
-/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! CAUTION !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-* Assign a priority to EVERY ISR explicitly by calling NVIC_SetPriority().
-* DO NOT LEAVE THE ISR PRIORITIES AT THE DEFAULT VALUE!
-*/
-enum KernelUnawareISRs { /* see NOTE00 */
-    /* ... */
-    MAX_KERNEL_UNAWARE_CMSIS_PRI  /* keep always last */
-};
-/* "kernel-unaware" interrupts can't overlap "kernel-aware" interrupts */
-Q_ASSERT_COMPILE(MAX_KERNEL_UNAWARE_CMSIS_PRI <= QF_AWARE_ISR_CMSIS_PRI);
-
-enum KernelAwareISRs {
-    SYSTICK_PRIO = QF_AWARE_ISR_CMSIS_PRI, /* see NOTE00 */
-    /* ... */
-    MAX_KERNEL_AWARE_CMSIS_PRI /* keep always last */
-};
-/* "kernel-aware" interrupts should not overlap the PendSV priority */
-Q_ASSERT_COMPILE(MAX_KERNEL_AWARE_CMSIS_PRI <= (0xFF >>(8-__NVIC_PRIO_BITS)));
-
 /* ISRs defined in this BSP ------------------------------------------------*/
 void SysTick_Handler(void);
 
@@ -159,13 +140,13 @@ void QF_onStartup(void) {
     /* assing all priority bits for preemption-prio. and none to sub-prio. */
     NVIC_SetPriorityGrouping(0U);
 
-    /* set priorities of ALL ISRs used in the system, see NOTE00
+    /* set priorities of ALL ISRs used in the system, see NOTE1
     *
     * !!!!!!!!!!!!!!!!!!!!!!!!!!!! CAUTION !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
     * Assign a priority to EVERY ISR explicitly by calling NVIC_SetPriority().
     * DO NOT LEAVE THE ISR PRIORITIES AT THE DEFAULT VALUE!
     */
-    NVIC_SetPriority(SysTick_IRQn,   SYSTICK_PRIO);
+    NVIC_SetPriority(SysTick_IRQn,   QF_AWARE_ISR_CMSIS_PRI);
     /* ... */
 
     /* enable IRQs... */
@@ -203,7 +184,7 @@ Q_NORETURN Q_onAssert(char_t const * const module, int_t const loc) {
 
 
 /*****************************************************************************
-* NOTE00:
+* NOTE1:
 * The QF_AWARE_ISR_CMSIS_PRI constant from the QF port specifies the highest
 * ISR priority that is disabled by the QF framework. The value is suitable
 * for the NVIC_SetPriority() CMSIS function.
@@ -220,7 +201,7 @@ Q_NORETURN Q_onAssert(char_t const * const module, int_t const loc) {
 * by which a "QF-unaware" ISR can communicate with the QF framework is by
 * triggering a "QF-aware" ISR, which can post/publish events.
 *
-* NOTE01:
+* NOTE2:
 * One of the LEDs is used to visualize the idle loop activity. The brightness
 * of the LED is proportional to the frequency of invcations of the idle loop.
 * Please note that the LED is toggled with interrupts locked, so no interrupt

+ 8 - 26
examples/arm-cm/blinky_efm32-slstk3401a/qv/bsp.c

@@ -1,13 +1,13 @@
 /*****************************************************************************
 * Product: "Blinky" on EFM32-SLSTK3401A board, cooperative QV kernel
-* Last Updated for Version: 5.6.5
-* Date of the Last Update:  2016-05-02
+* Last updated for version 6.9.1
+* Last updated on  2020-09-23
 *
-*                    Q u a n t u m     L e a P s
-*                    ---------------------------
-*                    innovating embedded systems
+*                    Q u a n t u m  L e a P s
+*                    ------------------------
+*                    Modern Embedded Software
 *
-* Copyright (C) Quantum Leaps, LLC. All rights reserved.
+* Copyright (C) 2005-2020 Quantum Leaps, LLC. All rights reserved.
 *
 * This program is open source software: you can redistribute it and/or
 * modify it under the terms of the GNU General Public License as published
@@ -46,25 +46,6 @@
     #error Simple Blinky Application does not provide Spy build configuration
 #endif
 
-/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! CAUTION !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-* Assign a priority to EVERY ISR explicitly by calling NVIC_SetPriority().
-* DO NOT LEAVE THE ISR PRIORITIES AT THE DEFAULT VALUE!
-*/
-enum KernelUnawareISRs { /* see NOTE00 */
-    /* ... */
-    MAX_KERNEL_UNAWARE_CMSIS_PRI  /* keep always last */
-};
-/* "kernel-unaware" interrupts can't overlap "kernel-aware" interrupts */
-Q_ASSERT_COMPILE(MAX_KERNEL_UNAWARE_CMSIS_PRI <= QF_AWARE_ISR_CMSIS_PRI);
-
-enum KernelAwareISRs {
-    SYSTICK_PRIO = QF_AWARE_ISR_CMSIS_PRI, /* see NOTE00 */
-    /* ... */
-    MAX_KERNEL_AWARE_CMSIS_PRI /* keep always last */
-};
-/* "kernel-aware" interrupts should not overlap the PendSV priority */
-Q_ASSERT_COMPILE(MAX_KERNEL_AWARE_CMSIS_PRI <= (0xFF >>(8-__NVIC_PRIO_BITS)));
-
 /* ISRs defined in this BSP ------------------------------------------------*/
 void SysTick_Handler(void);
 
@@ -81,6 +62,7 @@ void SysTick_Handler(void);
 /* ISRs used in this project ===============================================*/
 void SysTick_Handler(void) {
     QF_TICK_X(0U, (void *)0); /* process time events for rate 0 */
+    QV_ARM_ERRATUM_838869();
 }
 
 
@@ -148,7 +130,7 @@ void QF_onStartup(void) {
     * Assign a priority to EVERY ISR explicitly by calling NVIC_SetPriority().
     * DO NOT LEAVE THE ISR PRIORITIES AT THE DEFAULT VALUE!
     */
-    NVIC_SetPriority(SysTick_IRQn,   SYSTICK_PRIO);
+    NVIC_SetPriority(SysTick_IRQn,   QF_AWARE_ISR_CMSIS_PRI);
     /* ... */
 
     /* enable IRQs... */

+ 10 - 29
examples/arm-cm/blinky_ek-tm4c123gxl/qk/bsp.c

@@ -1,13 +1,13 @@
 /*****************************************************************************
 * Product: "Blinky" example, EK-TM4C123GXL board, preemptive QK kernel
-* Last updated for version 5.6.0
-* Last updated on  2015-12-18
+* Last updated for version 6.9.1
+* Last updated on  2020-09-22
 *
-*                    Q u a n t u m     L e a P s
-*                    ---------------------------
-*                    innovating embedded systems
+*                    Q u a n t u m  L e a P s
+*                    ------------------------
+*                    Modern Embedded Software
 *
-* Copyright (C) Quantum Leaps, LLC. All rights reserved.
+* Copyright (C) 2005-2020 Quantum Leaps, LLC. All rights reserved.
 *
 * This program is open source software: you can redistribute it and/or
 * modify it under the terms of the GNU General Public License as published
@@ -47,25 +47,6 @@
     #error Simple Blinky Application does not provide Spy build configuration
 #endif
 
-/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! CAUTION !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-* Assign a priority to EVERY ISR explicitly by calling NVIC_SetPriority().
-* DO NOT LEAVE THE ISR PRIORITIES AT THE DEFAULT VALUE!
-*/
-enum KernelUnawareISRs { /* see NOTE00 */
-    /* ... */
-    MAX_KERNEL_UNAWARE_CMSIS_PRI  /* keep always last */
-};
-/* "kernel-unaware" interrupts can't overlap "kernel-aware" interrupts */
-Q_ASSERT_COMPILE(MAX_KERNEL_UNAWARE_CMSIS_PRI <= QF_AWARE_ISR_CMSIS_PRI);
-
-enum KernelAwareISRs {
-    SYSTICK_PRIO = QF_AWARE_ISR_CMSIS_PRI, /* see NOTE00 */
-    /* ... */
-    MAX_KERNEL_AWARE_CMSIS_PRI /* keep always last */
-};
-/* "kernel-aware" interrupts should not overlap the PendSV priority */
-Q_ASSERT_COMPILE(MAX_KERNEL_AWARE_CMSIS_PRI <= (0xFF >>(8-__NVIC_PRIO_BITS)));
-
 /* ISRs defined in this BSP ------------------------------------------------*/
 void SysTick_Handler(void);
 void GPIOPortA_IRQHandler(void);
@@ -156,13 +137,13 @@ void QF_onStartup(void) {
     /* assing all priority bits for preemption-prio. and none to sub-prio. */
     NVIC_SetPriorityGrouping(0U);
 
-    /* set priorities of ALL ISRs used in the system, see NOTE00
+    /* set priorities of ALL ISRs used in the system, see NOTE1
     *
     * !!!!!!!!!!!!!!!!!!!!!!!!!!!! CAUTION !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
     * Assign a priority to EVERY ISR explicitly by calling NVIC_SetPriority().
     * DO NOT LEAVE THE ISR PRIORITIES AT THE DEFAULT VALUE!
     */
-    NVIC_SetPriority(SysTick_IRQn,   SYSTICK_PRIO);
+    NVIC_SetPriority(SysTick_IRQn,   QF_AWARE_ISR_CMSIS_PRI);
     /* ... */
 
     /* enable IRQs... */
@@ -199,7 +180,7 @@ Q_NORETURN Q_onAssert(char_t const * const module, int_t const loc) {
 }
 
 /*****************************************************************************
-* NOTE00:
+* NOTE1:
 * The QF_AWARE_ISR_CMSIS_PRI constant from the QF port specifies the highest
 * ISR priority that is disabled by the QF framework. The value is suitable
 * for the NVIC_SetPriority() CMSIS function.
@@ -216,7 +197,7 @@ Q_NORETURN Q_onAssert(char_t const * const module, int_t const loc) {
 * by which a "QF-unaware" ISR can communicate with the QF framework is by
 * triggering a "QF-aware" ISR, which can post/publish events.
 *
-* NOTE01:
+* NOTE2:
 * One of the LEDs is used to visualize the idle loop activity. The brightness
 * of the LED is proportional to the frequency of invcations of the idle loop.
 * Please note that the LED is toggled with interrupts locked, so no interrupt

+ 14 - 33
examples/arm-cm/blinky_ek-tm4c123gxl/qv/bsp.c

@@ -1,13 +1,13 @@
 /*****************************************************************************
 * Product: "Blinky" on EK-TM4C123GXL board, cooperative Vanilla kernel
-* Last Updated for Version: 5.5.0
-* Date of the Last Update:  2015-08-17
+* Last updated for version 6.9.1
+* Last updated on  2020-09-23
 *
-*                    Q u a n t u m     L e a P s
-*                    ---------------------------
-*                    innovating embedded systems
+*                    Q u a n t u m  L e a P s
+*                    ------------------------
+*                    Modern Embedded Software
 *
-* Copyright (C) Quantum Leaps, LLC. All rights reserved.
+* Copyright (C) 2005-2020 Quantum Leaps, LLC. All rights reserved.
 *
 * This program is open source software: you can redistribute it and/or
 * modify it under the terms of the GNU General Public License as published
@@ -47,25 +47,6 @@
     #error Simple Blinky Application does not provide Spy build configuration
 #endif
 
-/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! CAUTION !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-* Assign a priority to EVERY ISR explicitly by calling NVIC_SetPriority().
-* DO NOT LEAVE THE ISR PRIORITIES AT THE DEFAULT VALUE!
-*/
-enum KernelUnawareISRs { /* see NOTE00 */
-    /* ... */
-    MAX_KERNEL_UNAWARE_CMSIS_PRI  /* keep always last */
-};
-/* "kernel-unaware" interrupts can't overlap "kernel-aware" interrupts */
-Q_ASSERT_COMPILE(MAX_KERNEL_UNAWARE_CMSIS_PRI <= QF_AWARE_ISR_CMSIS_PRI);
-
-enum KernelAwareISRs {
-    SYSTICK_PRIO = QF_AWARE_ISR_CMSIS_PRI, /* see NOTE00 */
-    /* ... */
-    MAX_KERNEL_AWARE_CMSIS_PRI /* keep always last */
-};
-/* "kernel-aware" interrupts should not overlap the PendSV priority */
-Q_ASSERT_COMPILE(MAX_KERNEL_AWARE_CMSIS_PRI <= (0xFF >>(8-__NVIC_PRIO_BITS)));
-
 /* ISRs defined in this BSP ------------------------------------------------*/
 void SysTick_Handler(void);
 void GPIOPortA_IRQHandler(void);
@@ -81,9 +62,9 @@ void GPIOPortA_IRQHandler(void);
 /* ISRs used in this project ===============================================*/
 void SysTick_Handler(void) {
     QF_TICK_X(0U, (void *)0); /* process time events for rate 0 */
+    QV_ARM_ERRATUM_838869();
 }
 
-
 /* BSP functions ===========================================================*/
 void BSP_init(void) {
     /* NOTE: SystemInit() already called from the startup code
@@ -140,13 +121,13 @@ void QF_onStartup(void) {
     /* assing all priority bits for preemption-prio. and none to sub-prio. */
     NVIC_SetPriorityGrouping(0U);
 
-    /* set priorities of ALL ISRs used in the system, see NOTE00
+    /* set priorities of ALL ISRs used in the system, see NOTE1
     *
     * !!!!!!!!!!!!!!!!!!!!!!!!!!!! CAUTION !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
     * Assign a priority to EVERY ISR explicitly by calling NVIC_SetPriority().
     * DO NOT LEAVE THE ISR PRIORITIES AT THE DEFAULT VALUE!
     */
-    NVIC_SetPriority(SysTick_IRQn,   SYSTICK_PRIO);
+    NVIC_SetPriority(SysTick_IRQn,   QF_AWARE_ISR_CMSIS_PRI);
     /* ... */
 
     /* enable IRQs... */
@@ -155,8 +136,8 @@ void QF_onStartup(void) {
 void QF_onCleanup(void) {
 }
 /*..........................................................................*/
-void QV_onIdle(void) { /* CATION: called with interrupts DISABLED, NOTE01 */
-    /* toggle LED2 on and then off, see NOTE02 */
+void QV_onIdle(void) { /* CATION: called with interrupts DISABLED, NOTE2 */
+    /* toggle LED2 on and then off, see NOTE3 */
     GPIOF->DATA_Bits[LED_BLUE] = 0xFFU;
     GPIOF->DATA_Bits[LED_BLUE] = 0x00U;
 
@@ -183,7 +164,7 @@ Q_NORETURN Q_onAssert(char_t const * const module, int_t const loc) {
 }
 
 /*****************************************************************************
-* NOTE00:
+* NOTE1:
 * The QF_AWARE_ISR_CMSIS_PRI constant from the QF port specifies the highest
 * ISR priority that is disabled by the QF framework. The value is suitable
 * for the NVIC_SetPriority() CMSIS function.
@@ -200,13 +181,13 @@ Q_NORETURN Q_onAssert(char_t const * const module, int_t const loc) {
 * by which a "QF-unaware" ISR can communicate with the QF framework is by
 * triggering a "QF-aware" ISR, which can post/publish events.
 *
-* NOTE01:
+* NOTE2:
 * The QV_onIdle() callback is called with interrupts disabled, because the
 * determination of the idle condition might change by any interrupt posting
 * an event. QV_onIdle() must internally enable interrupts, ideally
 * atomically with putting the CPU to the power-saving mode.
 *
-* NOTE02:
+* NOTE3:
 * One of the LEDs is used to visualize the idle loop activity. The brightness
 * of the LED is proportional to the frequency of invcations of the idle loop.
 * Please note that the LED is toggled with interrupts locked, so no interrupt

+ 22 - 43
examples/arm-cm/dpp_efm32-slstk3401a/qk/bsp.c

@@ -1,13 +1,13 @@
 /*****************************************************************************
 * Product: DPP example, EFM32-SLSTK3401A board, preemptive QK kernel
-* Last Updated for Version: 5.9.7
-* Date of the Last Update:  2017-08-18
+* Last updated for version 6.9.1
+* Last updated on  2020-09-22
 *
-*                    Q u a n t u m     L e a P s
-*                    ---------------------------
-*                    innovating embedded systems
+*                    Q u a n t u m  L e a P s
+*                    ------------------------
+*                    Modern Embedded Software
 *
-* Copyright (C) Quantum Leaps, LLC. All rights reserved.
+* Copyright (C) 2005-2020 Quantum Leaps, LLC. All rights reserved.
 *
 * This program is open source software: you can redistribute it and/or
 * modify it under the terms of the GNU General Public License as published
@@ -43,27 +43,6 @@
 
 Q_DEFINE_THIS_FILE
 
-/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! CAUTION !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-* Assign a priority to EVERY ISR explicitly by calling NVIC_SetPriority().
-* DO NOT LEAVE THE ISR PRIORITIES AT THE DEFAULT VALUE!
-*/
-enum KernelUnawareISRs { /* see NOTE00 */
-    USART0_RX_PRIO,
-    /* ... */
-    MAX_KERNEL_UNAWARE_CMSIS_PRI  /* keep always last */
-};
-/* "kernel-unaware" interrupts can't overlap "kernel-aware" interrupts */
-Q_ASSERT_COMPILE(MAX_KERNEL_UNAWARE_CMSIS_PRI <= QF_AWARE_ISR_CMSIS_PRI);
-
-enum KernelAwareISRs {
-    GPIO_EVEN_PRIO = QF_AWARE_ISR_CMSIS_PRI, /* see NOTE00 */
-    SYSTICK_PRIO,
-    /* ... */
-    MAX_KERNEL_AWARE_CMSIS_PRI /* keep always last */
-};
-/* "kernel-aware" interrupts should not overlap the PendSV priority */
-Q_ASSERT_COMPILE(MAX_KERNEL_AWARE_CMSIS_PRI <= (0xFF >>(8-__NVIC_PRIO_BITS)));
-
 /* ISRs defined in this BSP ------------------------------------------------*/
 void SysTick_Handler(void);
 void GPIO_EVEN_IRQHandler(void);
@@ -143,7 +122,7 @@ void SysTick_Handler(void) {
     QK_ISR_EXIT();  /* inform QK about exiting an ISR */
 }
 /*..........................................................................*/
-void GPIO_EVEN_IRQHandler(void) { /* for testing, NOTE03 */
+void GPIO_EVEN_IRQHandler(void) { /* for testing, NOTE3 */
     QK_ISR_ENTRY(); /* inform QK about entering an ISR */
 
     QACTIVE_POST(AO_Table, Q_NEW(QEvt, MAX_PUB_SIG), /* for testing... */
@@ -229,6 +208,11 @@ void BSP_init(void) {
     QS_OBJ_DICTIONARY(&l_GPIO_EVEN_IRQHandler);
     QS_USR_DICTIONARY(PHILO_STAT);
     QS_USR_DICTIONARY(COMMAND_STAT);
+
+    /* setup the QS filters... */
+    QS_GLB_FILTER(QS_SM_RECORDS); /* state machine records */
+    //QS_GLB_FILTER(QS_AO_RECORDS); /* active object records */
+    QS_GLB_FILTER(QS_UA_RECORDS); /* all user records */
 }
 /*..........................................................................*/
 void BSP_displayPhilStat(uint8_t n, char const *stat) {
@@ -245,7 +229,7 @@ void BSP_displayPhilStat(uint8_t n, char const *stat) {
         GPIO->P[LED_PORT].DOUT &=  ~(1U << LED0_PIN);
     }
 
-    QS_BEGIN(PHILO_STAT, AO_Philo[n]) /* application-specific record begin */
+    QS_BEGIN_ID(PHILO_STAT, AO_Philo[n]->prio) /* app-specific record */
         QS_U8(1, n);  /* Philosopher number */
         QS_STR(stat); /* Philosopher status */
     QS_END()          /* application-specific record end */
@@ -295,15 +279,15 @@ void QF_onStartup(void) {
     /* assing all priority bits for preemption-prio. and none to sub-prio. */
     NVIC_SetPriorityGrouping(0U);
 
-    /* set priorities of ALL ISRs used in the system, see NOTE00
+    /* set priorities of ALL ISRs used in the system, see NOTE1
     *
     * !!!!!!!!!!!!!!!!!!!!!!!!!!!! CAUTION !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
     * Assign a priority to EVERY ISR explicitly by calling NVIC_SetPriority().
     * DO NOT LEAVE THE ISR PRIORITIES AT THE DEFAULT VALUE!
     */
-    NVIC_SetPriority(USART0_RX_IRQn, USART0_RX_PRIO);
-    NVIC_SetPriority(SysTick_IRQn,   SYSTICK_PRIO);
-    NVIC_SetPriority(GPIO_EVEN_IRQn, GPIO_EVEN_PRIO);
+    NVIC_SetPriority(USART0_RX_IRQn, 0U); /* kernel unaware interrupt */
+    NVIC_SetPriority(GPIO_EVEN_IRQn, QF_AWARE_ISR_CMSIS_PRI);
+    NVIC_SetPriority(SysTick_IRQn,   QF_AWARE_ISR_CMSIS_PRI + 1U);
     /* ... */
 
     /* enable IRQs... */
@@ -317,7 +301,7 @@ void QF_onCleanup(void) {
 }
 /*..........................................................................*/
 void QK_onIdle(void) {
-    /* toggle the User LED on and then off, see NOTE01 */
+    /* toggle the User LED on and then off, see NOTE2 */
     QF_INT_DISABLE();
     GPIO->P[LED_PORT].DOUT |=  (1U << LED1_PIN);
     GPIO->P[LED_PORT].DOUT &= ~(1U << LED1_PIN);
@@ -429,11 +413,6 @@ uint8_t QS_onStartup(void const *arg) {
     QS_tickPeriod_ = SystemCoreClock / BSP_TICKS_PER_SEC;
     QS_tickTime_ = QS_tickPeriod_; /* to start the timestamp at zero */
 
-    /* setup the QS filters... */
-    QS_FILTER_ON(QS_SM_RECORDS); /* state machine records */
-    //QS_FILTER_ON(QS_AO_RECORDS); /* active object records */
-    QS_FILTER_ON(QS_UA_RECORDS); /* all user records */
-
     return 1U; /* return success */
 }
 /*..........................................................................*/
@@ -478,7 +457,7 @@ void QS_onCommand(uint8_t cmdId,
     (void)param1;
     (void)param2;
     (void)param3;
-    QS_BEGIN(COMMAND_STAT, (void *)1) /* application-specific record begin */
+    QS_BEGIN_ID(COMMAND_STAT, 0U) /* application-specific record begin */
         QS_U8(2, cmdId);
         QS_U32(8, param1);
         QS_U32(8, param2);
@@ -497,7 +476,7 @@ void QS_onCommand(uint8_t cmdId,
 /*--------------------------------------------------------------------------*/
 
 /*****************************************************************************
-* NOTE00:
+* NOTE1:
 * The QF_AWARE_ISR_CMSIS_PRI constant from the QF port specifies the highest
 * ISR priority that is disabled by the QF framework. The value is suitable
 * for the NVIC_SetPriority() CMSIS function.
@@ -515,13 +494,13 @@ void QS_onCommand(uint8_t cmdId,
 * by which a "QF-unaware" ISR can communicate with the QF framework is by
 * triggering a "QF-aware" ISR, which can post/publish events.
 *
-* NOTE01:
+* NOTE2:
 * The User LED is used to visualize the idle loop activity. The brightness
 * of the LED is proportional to the frequency of invcations of the idle loop.
 * Please note that the LED is toggled with interrupts locked, so no interrupt
 * execution time contributes to the brightness of the User LED.
 *
-* NOTE03:
+* NOTE3:
 * GPIO_EVEN_IRQHandler() is for testing various preemption scenarios in QK.
 * The general testing strategy is to trigger this IRQ manually from the
 * debugger. To do so in IAR, you need to:

+ 25 - 49
examples/arm-cm/dpp_efm32-slstk3401a/qv/bsp.c

@@ -1,13 +1,13 @@
 /*****************************************************************************
 * Product: DPP example, EFM32-SLSTK3401A board, cooperative QV kernel
-* Last Updated for Version: 5.9.3
-* Date of the Last Update:  2017-06-30
+* Last updated for version 6.9.1
+* Last updated on  2020-09-22
 *
-*                    Q u a n t u m     L e a P s
-*                    ---------------------------
-*                    innovating embedded systems
+*                    Q u a n t u m  L e a P s
+*                    ------------------------
+*                    Modern Embedded Software
 *
-* Copyright (C) Quantum Leaps, LLC. All rights reserved.
+* Copyright (C) 2005-2020 Quantum Leaps, LLC. All rights reserved.
 *
 * This program is open source software: you can redistribute it and/or
 * modify it under the terms of the GNU General Public License as published
@@ -43,27 +43,6 @@
 
 Q_DEFINE_THIS_FILE
 
-/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! CAUTION !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-* Assign a priority to EVERY ISR explicitly by calling NVIC_SetPriority().
-* DO NOT LEAVE THE ISR PRIORITIES AT THE DEFAULT VALUE!
-*/
-enum KernelUnawareISRs { /* see NOTE00 */
-    USART0_RX_PRIO,
-    /* ... */
-    MAX_KERNEL_UNAWARE_CMSIS_PRI  /* keep always last */
-};
-/* "kernel-unaware" interrupts can't overlap "kernel-aware" interrupts */
-Q_ASSERT_COMPILE(MAX_KERNEL_UNAWARE_CMSIS_PRI <= QF_AWARE_ISR_CMSIS_PRI);
-
-enum KernelAwareISRs {
-    GPIO_EVEN_PRIO = QF_AWARE_ISR_CMSIS_PRI, /* see NOTE00 */
-    SYSTICK_PRIO,
-    /* ... */
-    MAX_KERNEL_AWARE_CMSIS_PRI /* keep always last */
-};
-/* "kernel-aware" interrupts should not overlap the PendSV priority */
-Q_ASSERT_COMPILE(MAX_KERNEL_AWARE_CMSIS_PRI <= (0xFF >>(8-__NVIC_PRIO_BITS)));
-
 /* ISRs defined in this BSP ------------------------------------------------*/
 void SysTick_Handler(void);
 void GPIO_EVEN_IRQHandler(void);
@@ -137,10 +116,10 @@ void SysTick_Handler(void) {
             QF_PUBLISH(&serveEvt, &l_SysTick_Handler);
         }
     }
-
+    QV_ARM_ERRATUM_838869();
 }
 /*..........................................................................*/
-void GPIO_EVEN_IRQHandler(void) { /* for testing, NOTE03 */
+void GPIO_EVEN_IRQHandler(void) { /* for testing, NOTE4 */
     QACTIVE_POST(AO_Table, Q_NEW(QEvt, MAX_PUB_SIG), /* for testing... */
                  &l_GPIO_EVEN_IRQHandler);
 }
@@ -221,6 +200,11 @@ void BSP_init(void) {
     QS_OBJ_DICTIONARY(&l_GPIO_EVEN_IRQHandler);
     QS_USR_DICTIONARY(PHILO_STAT);
     QS_USR_DICTIONARY(COMMAND_STAT);
+
+    /* setup the QS filters... */
+    QS_GLB_FILTER(QS_SM_RECORDS);
+    //QS_GLB_FILTER(QS_AO_RECORDS);
+    QS_GLB_FILTER(QS_UA_RECORDS);
 }
 /*..........................................................................*/
 void BSP_displayPhilStat(uint8_t n, char const *stat) {
@@ -231,7 +215,7 @@ void BSP_displayPhilStat(uint8_t n, char const *stat) {
         GPIO->P[LED_PORT].DOUT &=  ~(1U << LED0_PIN);
     }
 
-    QS_BEGIN(PHILO_STAT, AO_Philo[n]) /* application-specific record begin */
+    QS_BEGIN_ID(PHILO_STAT, AO_Philo[n]->prio) /* app-specific record */
         QS_U8(1, n);  /* Philosopher number */
         QS_STR(stat); /* Philosopher status */
     QS_END()
@@ -278,15 +262,15 @@ void QF_onStartup(void) {
     /* assing all priority bits for preemption-prio. and none to sub-prio. */
     NVIC_SetPriorityGrouping(0U);
 
-    /* set priorities of ALL ISRs used in the system, see NOTE00
+    /* set priorities of ALL ISRs used in the system, see NOTE1
     *
     * !!!!!!!!!!!!!!!!!!!!!!!!!!!! CAUTION !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
     * Assign a priority to EVERY ISR explicitly by calling NVIC_SetPriority().
     * DO NOT LEAVE THE ISR PRIORITIES AT THE DEFAULT VALUE!
     */
-    NVIC_SetPriority(USART0_RX_IRQn, USART0_RX_PRIO);
-    NVIC_SetPriority(SysTick_IRQn,   SYSTICK_PRIO);
-    NVIC_SetPriority(GPIO_EVEN_IRQn, GPIO_EVEN_PRIO);
+    NVIC_SetPriority(USART0_RX_IRQn, 0U); /* kernel unaware interrupt */
+    NVIC_SetPriority(GPIO_EVEN_IRQn, QF_AWARE_ISR_CMSIS_PRI);
+    NVIC_SetPriority(SysTick_IRQn,   QF_AWARE_ISR_CMSIS_PRI + 1U);
     /* ... */
 
     /* enable IRQs... */
@@ -299,8 +283,8 @@ void QF_onStartup(void) {
 void QF_onCleanup(void) {
 }
 /*..........................................................................*/
-void QV_onIdle(void) { /* CATION: called with interrupts DISABLED, NOTE01 */
-    /* toggle the User LED on and then off, see NOTE02 */
+void QV_onIdle(void) { /* CATION: called with interrupts DISABLED, NOTE2 */
+    /* toggle the User LED on and then off, see NOTE3 */
     GPIO->P[LED_PORT].DOUT |=  (1U << LED1_PIN);
     GPIO->P[LED_PORT].DOUT &= ~(1U << LED1_PIN);
 
@@ -413,14 +397,6 @@ uint8_t QS_onStartup(void const *arg) {
     QS_tickPeriod_ = SystemCoreClock / BSP_TICKS_PER_SEC;
     QS_tickTime_ = QS_tickPeriod_; /* to start the timestamp at zero */
 
-    /* setup the QS filters... */
-    QS_FILTER_ON(QS_SM_RECORDS);
-    //QS_FILTER_ON(QS_AO_RECORDS);
-    QS_FILTER_ON(QS_UA_RECORDS);
-
-    QS_FILTER_ON(PHILO_STAT);
-    QS_FILTER_ON(COMMAND_STAT);
-
     return 1U; /* return success */
 }
 /*..........................................................................*/
@@ -465,7 +441,7 @@ void QS_onCommand(uint8_t cmdId,
     (void)param1;
     (void)param2;
     (void)param3;
-    QS_BEGIN(COMMAND_STAT, (void *)1) /* application-specific record begin */
+    QS_BEGIN_ID(COMMAND_STAT, 0U) /* app-specific record */
         QS_U8(2, cmdId);
         QS_U32(8, param1);
         QS_U32(8, param2);
@@ -484,7 +460,7 @@ void QS_onCommand(uint8_t cmdId,
 /*--------------------------------------------------------------------------*/
 
 /*****************************************************************************
-* NOTE00:
+* NOTE1:
 * The QF_AWARE_ISR_CMSIS_PRI constant from the QF port specifies the highest
 * ISR priority that is disabled by the QF framework. The value is suitable
 * for the NVIC_SetPriority() CMSIS function.
@@ -502,19 +478,19 @@ void QS_onCommand(uint8_t cmdId,
 * by which a "QF-unaware" ISR can communicate with the QF framework is by
 * triggering a "QF-aware" ISR, which can post/publish events.
 *
-* NOTE01:
+* NOTE2:
 * The QV_onIdle() callback is called with interrupts disabled, because the
 * determination of the idle condition might change by any interrupt posting
 * an event. QV_onIdle() must internally enable interrupts, ideally
 * atomically with putting the CPU to the power-saving mode.
 *
-* NOTE02:
+* NOTE3:
 * The User LED is used to visualize the idle loop activity. The brightness
 * of the LED is proportional to the frequency of invcations of the idle loop.
 * Please note that the LED is toggled with interrupts locked, so no interrupt
 * execution time contributes to the brightness of the User LED.
 *
-* NOTE03:
+* NOTE4:
 * GPIO_EVEN_IRQHandler() is for testing various preemption scenarios in QV.
 * The general testing strategy is to trigger this IRQ manually from the
 * debugger. To do so in IAR, you need to:

+ 2 - 3
examples/arm-cm/dpp_efm32-slstk3401a/qview/dpp.py

@@ -59,10 +59,9 @@ class DPP:
     def on_run(self):
         glb_filter("QS_USER_00")
 
-        # NOTE: the names of objects for loc_filter() and current_obj()
-        # must match the QS Object Dictionaries produced by the application.
+        # NOTE: the names of objects for current_obj() must match
+        # the QS Object Dictionaries produced by the application.
         current_obj(OBJ_AO, "Table_inst")
-        loc_filter(OBJ_TE, "l_philo[0].timeEvt")
 
         # turn lists into tuples for better performance
         self._philo_obj = tuple(self._philo_obj)

+ 2 - 3
examples/arm-cm/dpp_efm32-slstk3401a/qview/dpp1.py

@@ -67,10 +67,9 @@ class DPP:
     def on_run(self):
         glb_filter("QS_QEP_TRAN")
 
-        # NOTE: the names of objects for loc_filter() and current_obj()
-        # must match the QS Object Dictionaries produced by the application.
+        # NOTE: the names of objects for current_obj() must match
+        # the QS Object Dictionaries produced by the application.
         current_obj(OBJ_AO, "Table_inst")
-        loc_filter(OBJ_TE, "Philo_inst[0].timeEvt")
 
         # turn lists into tuples for better performance
         self._philo_obj = tuple(self._philo_obj)

+ 23 - 43
examples/arm-cm/dpp_efm32-slstk3401a/qxk/bsp.c

@@ -1,13 +1,13 @@
 /*****************************************************************************
 * Product: DPP example, EFM32-SLSTK3401A board, preemptive QXK kernel
-* Last updated for version 6.7.0
-* Last updated on  2019-12-19
+* Last updated for version 6.9.1
+* Last updated on  2020-09-22
 *
 *                    Q u a n t u m  L e a P s
 *                    ------------------------
 *                    Modern Embedded Software
 *
-* Copyright (C) 2005-2019 Quantum Leaps, LLC. All rights reserved.
+* Copyright (C) 2005-2020 Quantum Leaps, LLC. All rights reserved.
 *
 * This program is open source software: you can redistribute it and/or
 * modify it under the terms of the GNU General Public License as published
@@ -25,7 +25,7 @@
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
-* along with this program. If not, see <www.gnu.org/licenses>.
+* along with this program. If not, see <www.gnu.org/licenses/>.
 *
 * Contact information:
 * <www.state-machine.com/licensing>
@@ -43,27 +43,6 @@
 
 Q_DEFINE_THIS_FILE
 
-/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! CAUTION !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-* Assign a priority to EVERY ISR explicitly by calling NVIC_SetPriority().
-* DO NOT LEAVE THE ISR PRIORITIES AT THE DEFAULT VALUE!
-*/
-enum KernelUnawareISRs { /* see NOTE00 */
-    USART0_RX_PRIO,
-    /* ... */
-    MAX_KERNEL_UNAWARE_CMSIS_PRI  /* keep always last */
-};
-/* "kernel-unaware" interrupts can't overlap "kernel-aware" interrupts */
-Q_ASSERT_COMPILE(MAX_KERNEL_UNAWARE_CMSIS_PRI <= QF_AWARE_ISR_CMSIS_PRI);
-
-enum KernelAwareISRs {
-    GPIO_EVEN_PRIO = QF_AWARE_ISR_CMSIS_PRI, /* see NOTE00 */
-    SYSTICK_PRIO,
-    /* ... */
-    MAX_KERNEL_AWARE_CMSIS_PRI /* keep always last */
-};
-/* "kernel-aware" interrupts should not overlap the PendSV priority */
-Q_ASSERT_COMPILE(MAX_KERNEL_AWARE_CMSIS_PRI <= (0xFF >>(8-__NVIC_PRIO_BITS)));
-
 /* ISRs defined in this BSP ------------------------------------------------*/
 void SysTick_Handler(void);
 void GPIO_EVEN_IRQHandler(void);
@@ -211,6 +190,14 @@ void BSP_init(void) {
     QS_USR_DICTIONARY(PHILO_STAT);
     QS_USR_DICTIONARY(PAUSED_STAT);
     QS_USR_DICTIONARY(COMMAND_STAT);
+
+    /* setup the QS filters... */
+    QS_GLB_FILTER(QS_SM_RECORDS); /* state machine records */
+    QS_GLB_FILTER(QS_UA_RECORDS); /* all usedr records */
+    /*
+    QS_GLB_FILTER(QS_MUTEX_LOCK);
+    QS_GLB_FILTER(QS_MUTEX_UNLOCK);
+    */
 }
 /*..........................................................................*/
 void BSP_displayPhilStat(uint8_t n, char const *stat) {
@@ -222,7 +209,7 @@ void BSP_displayPhilStat(uint8_t n, char const *stat) {
         GPIO->P[LED_PORT].DOUT &=  ~(1U << LED0_PIN);
     }
 
-    QS_BEGIN(PHILO_STAT, AO_Philo[n]) /* application-specific record begin */
+    QS_BEGIN_ID(PHILO_STAT, AO_Philo[n]->prio) /* app-specific record */
         QS_U8(1, n);  /* Philosopher number */
         QS_STR(stat); /* Philosopher status */
     QS_END()
@@ -241,7 +228,7 @@ void BSP_displayPaused(uint8_t paused) {
         GPIO->P[LED_PORT].DOUT &= ~(1U << LED0_PIN);
     }
 
-    QS_BEGIN(PAUSED_STAT, (void *)0) /* application-specific record begin */
+    QS_BEGIN_ID(PAUSED_STAT, 0U) /* app-specific record */
         QS_U8(1, paused);  /* Paused status */
     QS_END()
 }
@@ -289,15 +276,15 @@ void QF_onStartup(void) {
     /* assing all priority bits for preemption-prio. and none to sub-prio. */
     NVIC_SetPriorityGrouping(0U);
 
-    /* set priorities of ALL ISRs used in the system, see NOTE00
+    /* set priorities of ALL ISRs used in the system, see NOTE1
     *
     * !!!!!!!!!!!!!!!!!!!!!!!!!!!! CAUTION !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
     * Assign a priority to EVERY ISR explicitly by calling NVIC_SetPriority().
     * DO NOT LEAVE THE ISR PRIORITIES AT THE DEFAULT VALUE!
     */
-    NVIC_SetPriority(USART0_RX_IRQn, USART0_RX_PRIO);
-    NVIC_SetPriority(SysTick_IRQn,   SYSTICK_PRIO);
-    NVIC_SetPriority(GPIO_EVEN_IRQn, GPIO_EVEN_PRIO);
+    NVIC_SetPriority(USART0_RX_IRQn, 0U); /* kernel unaware interrupt */
+    NVIC_SetPriority(GPIO_EVEN_IRQn, QF_AWARE_ISR_CMSIS_PRI);
+    NVIC_SetPriority(SysTick_IRQn,   QF_AWARE_ISR_CMSIS_PRI + 1U);
     /* ... */
 
     /* enable IRQs... */
@@ -313,7 +300,7 @@ void QF_onCleanup(void) {
 void QXK_onIdle(void) {
     float volatile x;
 
-    /* toggle the User LED on and then off, see NOTE01 */
+    /* toggle the User LED on and then off, see NOTE2 */
 /*
     QF_INT_DISABLE();
     GPIO->P[LED_PORT].DOUT |=  (1U << LED1_PIN);
@@ -431,13 +418,6 @@ uint8_t QS_onStartup(void const *arg) {
     QS_tickPeriod_ = SystemCoreClock / BSP_TICKS_PER_SEC;
     QS_tickTime_ = QS_tickPeriod_; /* to start the timestamp at zero */
 
-    /* setup the QS filters... */
-    QS_FILTER_ON(QS_SM_RECORDS); /* state machine records */
-    QS_FILTER_ON(QS_UA_RECORDS); /* all usedr records */
-    /*
-    QS_FILTER_ON(QS_MUTEX_LOCK);
-    QS_FILTER_ON(QS_MUTEX_UNLOCK);
-    */
     return 1U; /* return success */
 }
 /*..........................................................................*/
@@ -482,7 +462,7 @@ void QS_onCommand(uint8_t cmdId,
     (void)param1;
     (void)param2;
     (void)param3;
-    QS_BEGIN(COMMAND_STAT, (void *)1) /* application-specific record begin */
+    QS_BEGIN_ID(COMMAND_STAT, 0U) /* app-specific record */
         QS_U8(2, cmdId);
         QS_U32(8, param1);
         QS_U32(8, param2);
@@ -501,7 +481,7 @@ void QS_onCommand(uint8_t cmdId,
 /*--------------------------------------------------------------------------*/
 
 /*****************************************************************************
-* NOTE00:
+* NOTE1:
 * The QF_AWARE_ISR_CMSIS_PRI constant from the QF port specifies the highest
 * ISR priority that is disabled by the QF framework. The value is suitable
 * for the NVIC_SetPriority() CMSIS function.
@@ -519,13 +499,13 @@ void QS_onCommand(uint8_t cmdId,
 * by which a "QF-unaware" ISR can communicate with the QF framework is by
 * triggering a "QF-aware" ISR, which can post/publish events.
 *
-* NOTE01:
+* NOTE2:
 * The User LED is used to visualize the idle loop activity. The brightness
 * of the LED is proportional to the frequency of invcations of the idle loop.
 * Please note that the LED is toggled with interrupts locked, so no interrupt
 * execution time contributes to the brightness of the User LED.
 *
-* NOTE03:
+* NOTE3:
 * GPIO_EVEN_IRQHandler() is for testing various preemption scenarios in QXK.
 * The general testing strategy is to trigger this IRQ manually from the
 * debugger. To do so in IAR, you need to:

+ 3 - 3
examples/arm-cm/dpp_efm32-slstk3401a/win32-gui/bsp.c

@@ -248,8 +248,8 @@ void BSP_init(void) {
     QS_USR_DICTIONARY(PHILO_STAT);
 
     /* setup the QS filters... */
-    QS_FILTER_ON(QS_ALL_RECORDS);
-    QS_FILTER_OFF(QS_QF_TICK);
+    QS_GLB_FILTER(QS_ALL_RECORDS);
+    QS_GLB_FILTER(-QS_QF_TICK);
 }
 /*..........................................................................*/
 void BSP_terminate(int16_t result) {
@@ -277,7 +277,7 @@ void BSP_displayPhilStat(uint8_t n, char const *stat) {
     /* set the "segment" # n to the bitmap # 'bitmapNum' */
     SegmentDisplay_setSegment(&l_philos, (UINT)n, bitmapNum);
 
-    QS_BEGIN(PHILO_STAT, AO_Philo[n]) /* application-specific record begin */
+    QS_BEGIN_ID(PHILO_STAT, AO_Philo[n]->prio) /* app-specific record */
         QS_U8(1, n);  /* Philosopher number */
         QS_STR(stat); /* Philosopher status */
     QS_END()

+ 4 - 0
examples/arm-cm/dpp_ek-tm4c123gxl/qk/armclang/dpp-qk.uvoptx

@@ -117,6 +117,10 @@
         <pMon>BIN\lmidk-agdi.dll</pMon>
       </DebugOpt>
       <TargetDriverDllRegistry>
+        <SetRegEntry>
+          <Number>0</Number>
+          <Key>DLGUARM</Key>
+        </SetRegEntry>
         <SetRegEntry>
           <Number>0</Number>
           <Key>ARMRTXEVENTFLAGS</Key>

+ 17 - 38
examples/arm-cm/dpp_ek-tm4c123gxl/qk/bsp.c

@@ -1,13 +1,13 @@
 /*****************************************************************************
 * Product: DPP example, EK-TM4C123GXL board, preemptive QK kernel
-* Last Updated for Version: 5.9.7
-* Date of the Last Update:  2017-08-18
+* Last updated for version 6.9.1
+* Last updated on  2020-09-22
 *
-*                    Q u a n t u m     L e a P s
-*                    ---------------------------
-*                    innovating embedded systems
+*                    Q u a n t u m  L e a P s
+*                    ------------------------
+*                    Modern Embedded Software
 *
-* Copyright (C) Quantum Leaps, LLC. All rights reserved.
+* Copyright (C) 2005-2020 Quantum Leaps, LLC. All rights reserved.
 *
 * This program is open source software: you can redistribute it and/or
 * modify it under the terms of the GNU General Public License as published
@@ -43,27 +43,6 @@
 
 Q_DEFINE_THIS_FILE
 
-/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! CAUTION !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-* Assign a priority to EVERY ISR explicitly by calling NVIC_SetPriority().
-* DO NOT LEAVE THE ISR PRIORITIES AT THE DEFAULT VALUE!
-*/
-enum KernelUnawareISRs { /* see NOTE00 */
-    UART0_PRIO,
-    /* ... */
-    MAX_KERNEL_UNAWARE_CMSIS_PRI  /* keep always last */
-};
-/* "kernel-unaware" interrupts can't overlap "kernel-aware" interrupts */
-Q_ASSERT_COMPILE(MAX_KERNEL_UNAWARE_CMSIS_PRI <= QF_AWARE_ISR_CMSIS_PRI);
-
-enum KernelAwareISRs {
-    GPIOA_PRIO = QF_AWARE_ISR_CMSIS_PRI, /* see NOTE00 */
-    SYSTICK_PRIO,
-    /* ... */
-    MAX_KERNEL_AWARE_CMSIS_PRI /* keep always last */
-};
-/* "kernel-aware" interrupts should not overlap the PendSV priority */
-Q_ASSERT_COMPILE(MAX_KERNEL_AWARE_CMSIS_PRI <= (0xFF >>(8-__NVIC_PRIO_BITS)));
-
 /* ISRs defined in this BSP ------------------------------------------------*/
 void SysTick_Handler(void);
 void GPIOPortA_IRQHandler(void);
@@ -237,7 +216,7 @@ void BSP_displayPhilStat(uint8_t n, char const *stat) {
     GPIOF->DATA_Bits[LED_RED]   = ((stat[0] == 'h') ? LED_RED   : 0U);
     GPIOF->DATA_Bits[LED_GREEN] = ((stat[0] == 'e') ? LED_GREEN : 0U);
 
-    QS_BEGIN(PHILO_STAT, AO_Philo[n]) /* application-specific record begin */
+    QS_BEGIN_ID(PHILO_STAT, AO_Philo[n]->prio) /* app-specific record */
         QS_U8(1, n);  /* Philosopher number */
         QS_STR(stat); /* Philosopher status */
     QS_END()
@@ -282,15 +261,15 @@ void QF_onStartup(void) {
     /* assing all priority bits for preemption-prio. and none to sub-prio. */
     NVIC_SetPriorityGrouping(0U);
 
-    /* set priorities of ALL ISRs used in the system, see NOTE00
+    /* set priorities of ALL ISRs used in the system, see NOTE1
     *
     * !!!!!!!!!!!!!!!!!!!!!!!!!!!! CAUTION !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
     * Assign a priority to EVERY ISR explicitly by calling NVIC_SetPriority().
     * DO NOT LEAVE THE ISR PRIORITIES AT THE DEFAULT VALUE!
     */
-    NVIC_SetPriority(UART0_IRQn,     UART0_PRIO);
-    NVIC_SetPriority(SysTick_IRQn,   SYSTICK_PRIO);
-    NVIC_SetPriority(GPIOA_IRQn,     GPIOA_PRIO);
+    NVIC_SetPriority(UART0_IRQn,     0U); /* kernel unaware interrupt */
+    NVIC_SetPriority(GPIOA_IRQn,     QF_AWARE_ISR_CMSIS_PRI);
+    NVIC_SetPriority(SysTick_IRQn,   QF_AWARE_ISR_CMSIS_PRI + 1U);
     /* ... */
 
     /* enable IRQs... */
@@ -305,7 +284,7 @@ void QF_onCleanup(void) {
 }
 /*..........................................................................*/
 void QK_onIdle(void) {
-    /* toggle the User LED on and then off, see NOTE01 */
+    /* toggle the User LED on and then off, see NOTE2 */
     QF_INT_DISABLE();
     GPIOF->DATA_Bits[LED_BLUE] = LED_BLUE;  /* turn the Blue LED on  */
     GPIOF->DATA_Bits[LED_BLUE] = 0U;        /* turn the Blue LED off */
@@ -402,8 +381,8 @@ uint8_t QS_onStartup(void const *arg) {
     QS_tickTime_ = QS_tickPeriod_; /* to start the timestamp at zero */
 
     /* setup the QS filters... */
-    QS_FILTER_ON(QS_ALL_RECORDS);
-    QS_FILTER_OFF(QS_QF_TICK);
+    QS_GLB_FILTER(QS_ALL_RECORDS);
+    QS_GLB_FILTER(-QS_QF_TICK);
 
     return 1U; /* return success */
 }
@@ -453,7 +432,7 @@ void QS_onCommand(uint8_t cmdId,
     (void)param1;
     (void)param2;
     (void)param3;
-    QS_BEGIN(COMMAND_STAT, (void *)1) /* application-specific record begin */
+    QS_BEGIN_ID(COMMAND_STAT, 0U) /* app-specific record */
         QS_U8(2, cmdId);
         QS_U32(8, param1);
         QS_U32(8, param2);
@@ -472,7 +451,7 @@ void QS_onCommand(uint8_t cmdId,
 /*--------------------------------------------------------------------------*/
 
 /*****************************************************************************
-* NOTE00:
+* NOTE1:
 * The QF_AWARE_ISR_CMSIS_PRI constant from the QF port specifies the highest
 * ISR priority that is disabled by the QF framework. The value is suitable
 * for the NVIC_SetPriority() CMSIS function.
@@ -490,7 +469,7 @@ void QS_onCommand(uint8_t cmdId,
 * by which a "QF-unaware" ISR can communicate with the QF framework is by
 * triggering a "QF-aware" ISR, which can post/publish events.
 *
-* NOTE01:
+* NOTE2:
 * The User LED is used to visualize the idle loop activity. The brightness
 * of the LED is proportional to the frequency of invcations of the idle loop.
 * Please note that the LED is toggled with interrupts locked, so no interrupt

+ 17 - 38
examples/arm-cm/dpp_ek-tm4c123gxl/qk/gnu_with-stack-prot/bsp_stack-prot.c

@@ -1,13 +1,13 @@
 /*****************************************************************************
 * Product: DPP example, EK-TM4C123GXL board, preemptive QK kernel
-* Last Updated for Version: 6.3.2
-* Date of the Last Update:  2018-06-21
+* Last updated for version 6.9.1
+* Last updated on  2020-09-22
 *
-*                    Q u a n t u m     L e a P s
-*                    ---------------------------
-*                    innovating embedded systems
+*                    Q u a n t u m  L e a P s
+*                    ------------------------
+*                    Modern Embedded Software
 *
-* Copyright (C) Quantum Leaps, LLC. All rights reserved.
+* Copyright (C) 2005-2020 Quantum Leaps, LLC. All rights reserved.
 *
 * This program is open source software: you can redistribute it and/or
 * modify it under the terms of the GNU General Public License as published
@@ -43,27 +43,6 @@
 
 Q_DEFINE_THIS_FILE
 
-/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! CAUTION !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-* Assign a priority to EVERY ISR explicitly by calling NVIC_SetPriority().
-* DO NOT LEAVE THE ISR PRIORITIES AT THE DEFAULT VALUE!
-*/
-enum KernelUnawareISRs { /* see NOTE00 */
-    UART0_PRIO,
-    /* ... */
-    MAX_KERNEL_UNAWARE_CMSIS_PRI  /* keep always last */
-};
-/* "kernel-unaware" interrupts can't overlap "kernel-aware" interrupts */
-Q_ASSERT_COMPILE(MAX_KERNEL_UNAWARE_CMSIS_PRI <= QF_AWARE_ISR_CMSIS_PRI);
-
-enum KernelAwareISRs {
-    GPIOA_PRIO = QF_AWARE_ISR_CMSIS_PRI, /* see NOTE00 */
-    SYSTICK_PRIO,
-    /* ... */
-    MAX_KERNEL_AWARE_CMSIS_PRI /* keep always last */
-};
-/* "kernel-aware" interrupts should not overlap the PendSV priority */
-Q_ASSERT_COMPILE(MAX_KERNEL_AWARE_CMSIS_PRI <= (0xFF >>(8-__NVIC_PRIO_BITS)));
-
 /* ISRs defined in this BSP ------------------------------------------------*/
 void SysTick_Handler(void);
 void GPIOPortA_IRQHandler(void);
@@ -237,7 +216,7 @@ void BSP_displayPhilStat(uint8_t n, char const *stat) {
     GPIOF->DATA_Bits[LED_RED]   = ((stat[0] == 'h') ? LED_RED   : 0U);
     GPIOF->DATA_Bits[LED_GREEN] = ((stat[0] == 'e') ? LED_GREEN : 0U);
 
-    QS_BEGIN(PHILO_STAT, AO_Philo[n]) /* application-specific record begin */
+    QS_BEGIN_ID(PHILO_STAT, AO_Philo[n]->prio) /* app-specific record */
         QS_U8(1, n);  /* Philosopher number */
         QS_STR(stat); /* Philosopher status */
     QS_END()
@@ -282,15 +261,15 @@ void QF_onStartup(void) {
     /* assing all priority bits for preemption-prio. and none to sub-prio. */
     NVIC_SetPriorityGrouping(0U);
 
-    /* set priorities of ALL ISRs used in the system, see NOTE00
+    /* set priorities of ALL ISRs used in the system, see NOTE1
     *
     * !!!!!!!!!!!!!!!!!!!!!!!!!!!! CAUTION !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
     * Assign a priority to EVERY ISR explicitly by calling NVIC_SetPriority().
     * DO NOT LEAVE THE ISR PRIORITIES AT THE DEFAULT VALUE!
     */
-    NVIC_SetPriority(UART0_IRQn,     UART0_PRIO);
-    NVIC_SetPriority(SysTick_IRQn,   SYSTICK_PRIO);
-    NVIC_SetPriority(GPIOA_IRQn,     GPIOA_PRIO);
+    NVIC_SetPriority(UART0_IRQn,     0U); /* kernel unaware interrupt */
+    NVIC_SetPriority(GPIOA_IRQn,     QF_AWARE_ISR_CMSIS_PRI);
+    NVIC_SetPriority(SysTick_IRQn,   QF_AWARE_ISR_CMSIS_PRI + 1U);
     /* ... */
 
     /* enable IRQs... */
@@ -305,7 +284,7 @@ void QF_onCleanup(void) {
 }
 /*..........................................................................*/
 void QK_onIdle(void) {
-    /* toggle the User LED on and then off, see NOTE01 */
+    /* toggle the User LED on and then off, see NOTE2 */
     QF_INT_DISABLE();
     GPIOF->DATA_Bits[LED_BLUE] = LED_BLUE;  /* turn the Blue LED on  */
     GPIOF->DATA_Bits[LED_BLUE] = 0U;        /* turn the Blue LED off */
@@ -409,8 +388,8 @@ uint8_t QS_onStartup(void const *arg) {
     QS_tickTime_ = QS_tickPeriod_; /* to start the timestamp at zero */
 
     /* setup the QS filters... */
-    QS_FILTER_ON(QS_ALL_RECORDS);
-    QS_FILTER_OFF(QS_QF_TICK);
+    QS_GLB_FILTER(QS_ALL_RECORDS);
+    QS_GLB_FILTER(-QS_QF_TICK);
 
     return 1U; /* return success */
 }
@@ -460,7 +439,7 @@ void QS_onCommand(uint8_t cmdId,
     (void)param1;
     (void)param2;
     (void)param3;
-    QS_BEGIN(COMMAND_STAT, (void *)1) /* application-specific record begin */
+    QS_BEGIN_ID(COMMAND_STAT, 0U) /* app-specific record */
         QS_U8(2, cmdId);
         QS_U32(8, param1);
         QS_U32(8, param2);
@@ -479,7 +458,7 @@ void QS_onCommand(uint8_t cmdId,
 /*--------------------------------------------------------------------------*/
 
 /*****************************************************************************
-* NOTE00:
+* NOTE1:
 * The QF_AWARE_ISR_CMSIS_PRI constant from the QF port specifies the highest
 * ISR priority that is disabled by the QF framework. The value is suitable
 * for the NVIC_SetPriority() CMSIS function.
@@ -497,7 +476,7 @@ void QS_onCommand(uint8_t cmdId,
 * by which a "QF-unaware" ISR can communicate with the QF framework is by
 * triggering a "QF-aware" ISR, which can post/publish events.
 *
-* NOTE01:
+* NOTE2:
 * The User LED is used to visualize the idle loop activity. The brightness
 * of the LED is proportional to the frequency of invcations of the idle loop.
 * Please note that the LED is toggled with interrupts locked, so no interrupt

+ 16 - 46
examples/arm-cm/dpp_ek-tm4c123gxl/qv/bsp.c

@@ -1,13 +1,13 @@
 /*****************************************************************************
 * Product: DPP example, EK-TM4C123GXL board, cooperative QV kernel
-* Last Updated for Version: 5.9.0
-* Date of the Last Update:  2017-04-14
+* Last updated for version 6.9.1
+* Last updated on  2020-09-22
 *
-*                    Q u a n t u m     L e a P s
-*                    ---------------------------
-*                    innovating embedded systems
+*                    Q u a n t u m  L e a P s
+*                    ------------------------
+*                    Modern Embedded Software
 *
-* Copyright (C) Quantum Leaps, LLC. All rights reserved.
+* Copyright (C) 2005-2020 Quantum Leaps, LLC. All rights reserved.
 *
 * This program is open source software: you can redistribute it and/or
 * modify it under the terms of the GNU General Public License as published
@@ -43,27 +43,6 @@
 
 Q_DEFINE_THIS_FILE
 
-/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! CAUTION !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-* Assign a priority to EVERY ISR explicitly by calling NVIC_SetPriority().
-* DO NOT LEAVE THE ISR PRIORITIES AT THE DEFAULT VALUE!
-*/
-enum KernelUnawareISRs { /* see NOTE00 */
-    UART0_PRIO,
-    /* ... */
-    MAX_KERNEL_UNAWARE_CMSIS_PRI  /* keep always last */
-};
-/* "kernel-unaware" interrupts can't overlap "kernel-aware" interrupts */
-Q_ASSERT_COMPILE(MAX_KERNEL_UNAWARE_CMSIS_PRI <= QF_AWARE_ISR_CMSIS_PRI);
-
-enum KernelAwareISRs {
-    GPIOA_PRIO = QF_AWARE_ISR_CMSIS_PRI, /* see NOTE00 */
-    SYSTICK_PRIO,
-    /* ... */
-    MAX_KERNEL_AWARE_CMSIS_PRI /* keep always last */
-};
-/* "kernel-aware" interrupts should not overlap the PendSV priority */
-Q_ASSERT_COMPILE(MAX_KERNEL_AWARE_CMSIS_PRI <= (0xFF >>(8-__NVIC_PRIO_BITS)));
-
 /* ISRs defined in this BSP ------------------------------------------------*/
 void SysTick_Handler(void);
 void GPIOPortA_IRQHandler(void);
@@ -224,13 +203,18 @@ void BSP_init(void) {
     QS_OBJ_DICTIONARY(&l_GPIOPortA_IRQHandler);
     QS_USR_DICTIONARY(PHILO_STAT);
     QS_USR_DICTIONARY(COMMAND_STAT);
+
+    /* setup the QS filters... */
+    QS_GLB_FILTER(QS_SM_RECORDS); /* state machine records */
+    QS_GLB_FILTER(QS_AO_RECORDS); /* active object records */
+    QS_GLB_FILTER(QS_UA_RECORDS); /* all user records */
 }
 /*..........................................................................*/
 void BSP_displayPhilStat(uint8_t n, char const *stat) {
     GPIOF->DATA_Bits[LED_RED]   = ((stat[0] == 'h') ? LED_RED   : 0U);
     GPIOF->DATA_Bits[LED_GREEN] = ((stat[0] == 'e') ? LED_GREEN : 0U);
 
-    QS_BEGIN(PHILO_STAT, AO_Philo[n]) /* application-specific record begin */
+    QS_BEGIN_ID(PHILO_STAT, AO_Philo[n]->prio) /* app-specific record */
         QS_U8(1, n);                  /* Philosopher number */
         QS_STR(stat);                 /* Philosopher status */
     QS_END()
@@ -276,9 +260,9 @@ void QF_onStartup(void) {
     * Assign a priority to EVERY ISR explicitly by calling NVIC_SetPriority().
     * DO NOT LEAVE THE ISR PRIORITIES AT THE DEFAULT VALUE!
     */
-    NVIC_SetPriority(UART0_IRQn,     UART0_PRIO);
-    NVIC_SetPriority(SysTick_IRQn,   SYSTICK_PRIO);
-    NVIC_SetPriority(GPIOA_IRQn,     GPIOA_PRIO);
+    NVIC_SetPriority(UART0_IRQn,     0U);
+    NVIC_SetPriority(GPIOA_IRQn,     QF_AWARE_ISR_CMSIS_PRI);
+    NVIC_SetPriority(SysTick_IRQn,   QF_AWARE_ISR_CMSIS_PRI + 1U);
     /* ... */
 
     /* enable IRQs... */
@@ -381,20 +365,6 @@ uint8_t QS_onStartup(void const *arg) {
     QS_tickPeriod_ = SystemCoreClock / BSP_TICKS_PER_SEC;
     QS_tickTime_ = QS_tickPeriod_; /* to start the timestamp at zero */
 
-    /* setup the QS filters... */
-    QS_FILTER_ON(QS_QEP_STATE_ENTRY);
-    QS_FILTER_ON(QS_QEP_STATE_EXIT);
-    QS_FILTER_ON(QS_QEP_STATE_INIT);
-    QS_FILTER_ON(QS_QEP_INIT_TRAN);
-    QS_FILTER_ON(QS_QEP_INTERN_TRAN);
-    QS_FILTER_ON(QS_QEP_TRAN);
-    QS_FILTER_ON(QS_QEP_IGNORED);
-    QS_FILTER_ON(QS_QEP_DISPATCH);
-    QS_FILTER_ON(QS_QEP_UNHANDLED);
-
-    QS_FILTER_ON(PHILO_STAT);
-    QS_FILTER_ON(COMMAND_STAT);
-
     return 1U; /* return success */
 }
 /*..........................................................................*/
@@ -443,7 +413,7 @@ void QS_onCommand(uint8_t cmdId,
     (void)param1;
     (void)param2;
     (void)param3;
-    QS_BEGIN(COMMAND_STAT, (void *)1) /* application-specific record begin */
+    QS_BEGIN_ID(COMMAND_STAT, 0U) /* app-specific record */
         QS_U8(2, cmdId);
         QS_U32(8, param1);
         QS_U32(8, param2);

+ 2 - 3
examples/arm-cm/dpp_ek-tm4c123gxl/qview/dpp.py

@@ -59,10 +59,9 @@ class DPP:
     def on_run(self):
         glb_filter("QS_USER_00")
 
-        # NOTE: the names of objects for loc_filter() and current_obj()
-        # must match the QS Object Dictionaries produced by the application.
+        # NOTE: the names of objects for current_obj() must match
+        # the QS Object Dictionaries produced by the application.
         current_obj(OBJ_AO, "Table_inst")
-        loc_filter(OBJ_TE, "l_philo[0].timeEvt")
 
         # turn lists into tuples for better performance
         self._philo_obj = tuple(self._philo_obj)

+ 2 - 3
examples/arm-cm/dpp_ek-tm4c123gxl/qview/dpp1.py

@@ -67,10 +67,9 @@ class DPP:
     def on_run(self):
         glb_filter("QS_QEP_TRAN")
 
-        # NOTE: the names of objects for loc_filter() and current_obj()
-        # must match the QS Object Dictionaries produced by the application.
+        # NOTE: the names of objects for current_obj() must match
+        # the QS Object Dictionaries produced by the application.
         current_obj(OBJ_AO, "Table_inst")
-        loc_filter(OBJ_TE, "Philo_inst[0].timeEvt")
 
         # turn lists into tuples for better performance
         self._philo_obj = tuple(self._philo_obj)

+ 0 - 2
examples/arm-cm/dpp_ek-tm4c123gxl/qxk/arm/dpp-qxk.uvoptx

@@ -120,8 +120,6 @@
         <SetRegEntry>
           <Number>0</Number>
           <Key>DLGUARM</Key>
-          <Name>ÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÈ`l
-¸Ù¶Õ(ø9</Name>
         </SetRegEntry>
         <SetRegEntry>
           <Number>0</Number>

+ 5 - 0
examples/arm-cm/dpp_ek-tm4c123gxl/qxk/armclang/dpp-qxk.uvoptx

@@ -117,6 +117,11 @@
         <pMon>BIN\lmidk-agdi.dll</pMon>
       </DebugOpt>
       <TargetDriverDllRegistry>
+        <SetRegEntry>
+          <Number>0</Number>
+          <Key>DLGUARM</Key>
+          <Name>ÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÈ`²	vÛ\!¼ìV</Name>
+        </SetRegEntry>
         <SetRegEntry>
           <Number>0</Number>
           <Key>ARMRTXEVENTFLAGS</Key>

+ 19 - 41
examples/arm-cm/dpp_ek-tm4c123gxl/qxk/bsp.c

@@ -1,13 +1,13 @@
 /*****************************************************************************
 * Product: DPP example, EK-TM4C123GXL board, preemptive QXK kernel
-* Last Updated for Version: 6.0.4
-* Date of the Last Update:  2018-01-05
+* Last updated for version 6.9.1
+* Last updated on  2020-09-22
 *
-*                    Q u a n t u m     L e a P s
-*                    ---------------------------
-*                    innovating embedded systems
+*                    Q u a n t u m  L e a P s
+*                    ------------------------
+*                    Modern Embedded Software
 *
-* Copyright (C) Quantum Leaps, LLC. All rights reserved.
+* Copyright (C) 2005-2020 Quantum Leaps, LLC. All rights reserved.
 *
 * This program is open source software: you can redistribute it and/or
 * modify it under the terms of the GNU General Public License as published
@@ -43,27 +43,6 @@
 
 Q_DEFINE_THIS_FILE  /* define the name of this file for assertions */
 
-/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! CAUTION !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-* Assign a priority to EVERY ISR explicitly by calling NVIC_SetPriority().
-* DO NOT LEAVE THE ISR PRIORITIES AT THE DEFAULT VALUE!
-*/
-enum KernelUnawareISRs { /* see NOTE1 */
-    UART0_PRIO,
-    /* ... */
-    MAX_KERNEL_UNAWARE_CMSIS_PRI /* keep always last */
-};
-/* "kernel-unaware" interrupts can't overlap "kernel-aware" interrupts */
-Q_ASSERT_COMPILE(MAX_KERNEL_UNAWARE_CMSIS_PRI <= QF_AWARE_ISR_CMSIS_PRI);
-
-enum KernelAwareISRs {
-    SYSTICK_PRIO = QF_AWARE_ISR_CMSIS_PRI, /* see NOTE00 */
-    GPIOA_PRIO,
-    /* ... */
-    MAX_KERNEL_AWARE_CMSIS_PRI /* keep always last */
-};
-/* "kernel-aware" interrupts should not overlap the PendSV priority */
-Q_ASSERT_COMPILE(MAX_KERNEL_AWARE_CMSIS_PRI <= (0xFF >>(8-__NVIC_PRIO_BITS)));
-
 /* prototypes of ISRs defined in this BSP ----------------------------------*/
 void SysTick_Handler(void);
 void GPIOPortA_IRQHandler(void);
@@ -213,6 +192,11 @@ void BSP_init(void) {
     QS_USR_DICTIONARY(PHILO_STAT);
     QS_USR_DICTIONARY(PAUSED_STAT);
     QS_USR_DICTIONARY(COMMAND_STAT);
+
+    /* setup the QS filters... */
+    QS_GLB_FILTER(QS_SM_RECORDS); /* state machine records */
+    QS_GLB_FILTER(QS_AO_RECORDS); /* active object records */
+    QS_GLB_FILTER(QS_UA_RECORDS); /* all user records */
 }
 /*..........................................................................*/
 void BSP_displayPhilStat(uint8_t n, char const *stat) {
@@ -222,7 +206,7 @@ void BSP_displayPhilStat(uint8_t n, char const *stat) {
          ? 0xFFU             /* turn the LED1 on  */
          : 0U);              /* turn the LED1 off */
 
-    QS_BEGIN(PHILO_STAT, AO_Philo[n]) /* application-specific record begin */
+    QS_BEGIN_ID(PHILO_STAT, AO_Philo[n]->prio) /* app-specific record */
         QS_U8(1, n);  /* Philosopher number */
         QS_STR(stat); /* Philosopher status */
     QS_END()
@@ -242,7 +226,7 @@ void BSP_displayPaused(uint8_t paused) {
         GPIOF->DATA_Bits[LED_GREEN] = 0x0U;
     }
 
-    QS_BEGIN(PAUSED_STAT, (void *)0) /* application-specific record begin */
+    QS_BEGIN_ID(PAUSED_STAT, 0U) /* app-specific record */
         QS_U8(1, paused);  /* Paused status */
     QS_END()
 }
@@ -294,15 +278,15 @@ void QF_onStartup(void) {
     /* assing all priority bits for preemption-prio. and none to sub-prio. */
     NVIC_SetPriorityGrouping(0U);
 
-    /* set priorities of ALL ISRs used in the system, see NOTE00
+    /* set priorities of ALL ISRs used in the system, see NOTE1
     *
     * !!!!!!!!!!!!!!!!!!!!!!!!!!!! CAUTION !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
     * Assign a priority to EVERY ISR explicitly by calling NVIC_SetPriority().
     * DO NOT LEAVE THE ISR PRIORITIES AT THE DEFAULT VALUE!
     */
-    NVIC_SetPriority(UART0_IRQn,     UART0_PRIO);
-    NVIC_SetPriority(SysTick_IRQn,   SYSTICK_PRIO);
-    NVIC_SetPriority(GPIOA_IRQn,     GPIOA_PRIO);
+    NVIC_SetPriority(UART0_IRQn,     0U); /* kernel unaware interrupt */
+    NVIC_SetPriority(GPIOA_IRQn,     QF_AWARE_ISR_CMSIS_PRI);
+    NVIC_SetPriority(SysTick_IRQn,   QF_AWARE_ISR_CMSIS_PRI + 1U);
     /* ... */
 
     /* enable IRQs... */
@@ -319,7 +303,7 @@ void QF_onCleanup(void) {
 void QXK_onIdle(void) {
     float volatile x;
 
-    /* toggle the User LED on and then off, see NOTE01 */
+    /* toggle the User LED on and then off, see NOTE2 */
     QF_INT_DISABLE();
     GPIOF->DATA_Bits[LED_BLUE] = 0xFFU;  /* turn the Blue LED on  */
     GPIOF->DATA_Bits[LED_BLUE] = 0U;     /* turn the Blue LED off */
@@ -421,12 +405,6 @@ uint8_t QS_onStartup(void const *arg) {
     QS_tickPeriod_ = SystemCoreClock / BSP_TICKS_PER_SEC;
     QS_tickTime_ = QS_tickPeriod_; /* to start the timestamp at zero */
 
-    /* setup the QS filters... */
-    QS_FILTER_ON(QS_SM_RECORDS); /* state machine records */
-    QS_FILTER_ON(QS_UA_RECORDS); /* all usedr records */
-    //QS_FILTER_ON(QS_MUTEX_LOCK);
-    //QS_FILTER_ON(QS_MUTEX_UNLOCK);
-
     return 1U; /* return success */
 }
 /*..........................................................................*/
@@ -471,7 +449,7 @@ void QS_onCommand(uint8_t cmdId,
     (void)param1;
     (void)param2;
     (void)param3;
-    QS_BEGIN(COMMAND_STAT, (void *)1) /* application-specific record begin */
+    QS_BEGIN_ID(COMMAND_STAT, 0U) /* app-specific record */
         QS_U8(2, cmdId);
         QS_U32(8, param1);
         QS_U32(8, param2);

+ 18 - 46
examples/arm-cm/dpp_mbed-lpc1768/qk/bsp.c

@@ -1,13 +1,13 @@
 /*****************************************************************************
 * Product: DPP example, NXP mbed-LPC1768 board, QK kernel
-* Last Updated for Version: 5.6.5
-* Date of the Last Update:  2016-07-05
+* Last updated for version 6.9.1
+* Last updated on  2020-09-22
 *
-*                    Q u a n t u m     L e a P s
-*                    ---------------------------
-*                    innovating embedded systems
+*                    Q u a n t u m  L e a P s
+*                    ------------------------
+*                    Modern Embedded Software
 *
-* Copyright (C) Quantum Leaps, LLC. All rights reserved.
+* Copyright (C) 2005-2020 Quantum Leaps, LLC. All rights reserved.
 *
 * This program is open source software: you can redistribute it and/or
 * modify it under the terms of the GNU General Public License as published
@@ -40,26 +40,6 @@
 
 Q_DEFINE_THIS_FILE
 
-/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! CAUTION !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-* Assign a priority to EVERY ISR explicitly by calling NVIC_SetPriority().
-* DO NOT LEAVE THE ISR PRIORITIES AT THE DEFAULT VALUE!
-*/
-enum KernelUnawareISRs { /* see NOTE00 */
-    /* ... */
-    MAX_KERNEL_UNAWARE_CMSIS_PRI  /* keep always last */
-};
-/* "kernel-unaware" interrupts can't overlap "kernel-aware" interrupts */
-Q_ASSERT_COMPILE(MAX_KERNEL_UNAWARE_CMSIS_PRI <= QF_AWARE_ISR_CMSIS_PRI);
-
-enum KernelAwareISRs {
-    EINT0_PRIO = QF_AWARE_ISR_CMSIS_PRI, /* see NOTE00 */
-    SYSTICK_PRIO,
-    /* ... */
-    MAX_KERNEL_AWARE_CMSIS_PRI /* keep always last */
-};
-/* "kernel-aware" interrupts should not overlap the PendSV priority */
-Q_ASSERT_COMPILE(MAX_KERNEL_AWARE_CMSIS_PRI <= (0xFF >>(8-__NVIC_PRIO_BITS)));
-
 /* ISRs defined in this BSP ------------------------------------------------*/
 void SysTick_Handler(void);
 void EINT0_IRQHandler(void);
@@ -184,6 +164,11 @@ void BSP_init(void) {
     QS_OBJ_DICTIONARY(&l_SysTick_Handler);
     QS_OBJ_DICTIONARY(&l_EINT0_IRQHandler);
     QS_USR_DICTIONARY(PHILO_STAT);
+
+    /* setup the QS filters... */
+    QS_GLB_FILTER(QS_SM_RECORDS); /* state machine records */
+    QS_GLB_FILTER(QS_AO_RECORDS); /* active object records */
+    QS_GLB_FILTER(QS_UA_RECORDS); /* all user records */
 }
 /*..........................................................................*/
 void BSP_displayPhilStat(uint8_t n, char const *stat) {
@@ -200,7 +185,7 @@ void BSP_displayPhilStat(uint8_t n, char const *stat) {
         LPC_GPIO1->FIOCLR = LED_2;  /* turn LED off */
     }
 
-    QS_BEGIN(PHILO_STAT, AO_Philo[n]) /* application-specific record begin */
+    QS_BEGIN_ID(PHILO_STAT, AO_Philo[n]->prio) /* app-specific record */
         QS_U8(1, n);                  /* Philosopher number */
         QS_STR(stat);                 /* Philosopher status */
     QS_END()
@@ -237,14 +222,14 @@ void QF_onStartup(void) {
     /* set up the SysTick timer to fire at BSP_TICKS_PER_SEC rate */
     SysTick_Config(SystemCoreClock / BSP_TICKS_PER_SEC);
 
-    /* set priorities of ALL ISRs used in the system, see NOTE00
+    /* set priorities of ALL ISRs used in the system, see NOTE1
     *
     * !!!!!!!!!!!!!!!!!!!!!!!!!!!! CAUTION !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
     * Assign a priority to EVERY ISR explicitly by calling NVIC_SetPriority().
     * DO NOT LEAVE THE ISR PRIORITIES AT THE DEFAULT VALUE!
     */
-    NVIC_SetPriority(SysTick_IRQn,   SYSTICK_PRIO);
-    NVIC_SetPriority(EINT0_IRQn,     EINT0_PRIO);
+    NVIC_SetPriority(EINT0_IRQn,     QF_AWARE_ISR_CMSIS_PRI);
+    NVIC_SetPriority(SysTick_IRQn,   QF_AWARE_ISR_CMSIS_PRI + 1U);
     /* ... */
 
     /* enable IRQs in the NVIC... */
@@ -255,7 +240,7 @@ void QF_onCleanup(void) {
 }
 /*..........................................................................*/
 void QK_onIdle(void) {
-    /* toggle the User LED on and then off, see NOTE01 */
+    /* toggle the User LED on and then off, see NOTE2 */
     QF_INT_DISABLE();
     LPC_GPIO1->FIOSET = LED_4;  /* turn LED on  */
     __NOP();   /* a couple of NOPs to actually see the LED glow */
@@ -350,19 +335,6 @@ uint8_t QS_onStartup(void const *arg) {
     QS_tickPeriod_ = SystemCoreClock / BSP_TICKS_PER_SEC;
     QS_tickTime_ = QS_tickPeriod_; /* to start the timestamp at zero */
 
-    /* setup the QS filters... */
-    QS_FILTER_ON(QS_QEP_STATE_ENTRY);
-    QS_FILTER_ON(QS_QEP_STATE_EXIT);
-    QS_FILTER_ON(QS_QEP_STATE_INIT);
-    QS_FILTER_ON(QS_QEP_INIT_TRAN);
-    QS_FILTER_ON(QS_QEP_INTERN_TRAN);
-    QS_FILTER_ON(QS_QEP_TRAN);
-    QS_FILTER_ON(QS_QEP_IGNORED);
-    QS_FILTER_ON(QS_QEP_DISPATCH);
-    QS_FILTER_ON(QS_QEP_UNHANDLED);
-
-    QS_FILTER_ON(PHILO_STAT);
-
     return 1U; /* return success */
 }
 /*..........................................................................*/
@@ -488,7 +460,7 @@ static void UART0_setBaudrate(uint32_t baud) {
 /*--------------------------------------------------------------------------*/
 
 /*****************************************************************************
-* NOTE00:
+* NOTE1:
 * The QF_AWARE_ISR_CMSIS_PRI constant from the QF port specifies the highest
 * ISR priority that is disabled by the QF framework. The value is suitable
 * for the NVIC_SetPriority() CMSIS function.
@@ -506,7 +478,7 @@ static void UART0_setBaudrate(uint32_t baud) {
 * by which a "QF-unaware" ISR can communicate with the QF framework is by
 * triggering a "QF-aware" ISR, which can post/publish events.
 *
-* NOTE01:
+* NOTE2:
 * The User LED is used to visualize the idle loop activity. The brightness
 * of the LED is proportional to the frequency of invcations of the idle loop.
 * Please note that the LED is toggled with interrupts locked, so no interrupt

+ 16 - 43
examples/arm-cm/dpp_mbed-lpc1768/qv/bsp.c

@@ -1,13 +1,13 @@
 /*****************************************************************************
 * Product: DPP example, NXP mbed-LPC1768 board, coopearative QV kernel
-* Last Updated for Version: 5.6.5
-* Date of the Last Update:  2016-07-05
+* Last updated for version 6.9.1
+* Last updated on  2020-09-22
 *
-*                    Q u a n t u m     L e a P s
-*                    ---------------------------
-*                    innovating embedded systems
+*                    Q u a n t u m  L e a P s
+*                    ------------------------
+*                    Modern Embedded Software
 *
-* Copyright (C) Quantum Leaps, LLC. All rights reserved.
+* Copyright (C) 2005-2020 Quantum Leaps, LLC. All rights reserved.
 *
 * This program is open source software: you can redistribute it and/or
 * modify it under the terms of the GNU General Public License as published
@@ -40,26 +40,6 @@
 
 Q_DEFINE_THIS_FILE
 
-/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! CAUTION !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-* Assign a priority to EVERY ISR explicitly by calling NVIC_SetPriority().
-* DO NOT LEAVE THE ISR PRIORITIES AT THE DEFAULT VALUE!
-*/
-enum KernelUnawareISRs { /* see NOTE00 */
-    /* ... */
-    MAX_KERNEL_UNAWARE_CMSIS_PRI  /* keep always last */
-};
-/* "kernel-unaware" interrupts can't overlap "kernel-aware" interrupts */
-Q_ASSERT_COMPILE(MAX_KERNEL_UNAWARE_CMSIS_PRI <= QF_AWARE_ISR_CMSIS_PRI);
-
-enum KernelAwareISRs {
-    EINT0_PRIO = QF_AWARE_ISR_CMSIS_PRI, /* see NOTE00 */
-    SYSTICK_PRIO,
-    /* ... */
-    MAX_KERNEL_AWARE_CMSIS_PRI /* keep always last */
-};
-/* "kernel-aware" interrupts should not overlap the PendSV priority */
-Q_ASSERT_COMPILE(MAX_KERNEL_AWARE_CMSIS_PRI <= (0xFF >>(8-__NVIC_PRIO_BITS)));
-
 /* ISRs defined in this BSP ------------------------------------------------*/
 void SysTick_Handler(void);
 void EINT0_IRQHandler(void);
@@ -134,14 +114,15 @@ void SysTick_Handler(void) {
             QF_PUBLISH(&serveEvt, &l_SysTick_Handler);
         }
     }
+    QV_ARM_ERRATUM_838869();
 }
 /*..........................................................................*/
 void EINT0_IRQHandler(void) {
     QACTIVE_POST(AO_Table, Q_NEW(QEvt, MAX_PUB_SIG), /* for testing... */
                  &l_EINT0_IRQHandler);
+    QV_ARM_ERRATUM_838869();
 }
 
-
 /* BSP functions ===========================================================*/
 void BSP_init(void) {
     /* NOTE: SystemInit() has been already called from the startup code
@@ -176,6 +157,11 @@ void BSP_init(void) {
     QS_OBJ_DICTIONARY(&l_SysTick_Handler);
     QS_OBJ_DICTIONARY(&l_EINT0_IRQHandler);
     QS_USR_DICTIONARY(PHILO_STAT);
+
+    /* setup the QS filters... */
+    QS_GLB_FILTER(QS_SM_RECORDS); /* state machine records */
+    QS_GLB_FILTER(QS_AO_RECORDS); /* active object records */
+    QS_GLB_FILTER(QS_UA_RECORDS); /* all user records */
 }
 /*..........................................................................*/
 void BSP_displayPhilStat(uint8_t n, char const *stat) {
@@ -192,7 +178,7 @@ void BSP_displayPhilStat(uint8_t n, char const *stat) {
         LPC_GPIO1->FIOCLR = LED_2;  /* turn LED off */
     }
 
-    QS_BEGIN(PHILO_STAT, AO_Philo[n]) /* application-specific record begin */
+    QS_BEGIN_ID(PHILO_STAT, AO_Philo[n]->prio) /* app-specific record */
         QS_U8(1, n);                  /* Philosopher number */
         QS_STR(stat);                 /* Philosopher status */
     QS_END()
@@ -235,8 +221,8 @@ void QF_onStartup(void) {
     * Assign a priority to EVERY ISR explicitly by calling NVIC_SetPriority().
     * DO NOT LEAVE THE ISR PRIORITIES AT THE DEFAULT VALUE!
     */
-    NVIC_SetPriority(SysTick_IRQn,   SYSTICK_PRIO);
-    NVIC_SetPriority(EINT0_IRQn,     EINT0_PRIO);
+    NVIC_SetPriority(EINT0_IRQn,     QF_AWARE_ISR_CMSIS_PRI);
+    NVIC_SetPriority(SysTick_IRQn,   QF_AWARE_ISR_CMSIS_PRI + 1U);
     /* ... */
 
     /* enable IRQs in the NVIC... */
@@ -344,19 +330,6 @@ uint8_t QS_onStartup(void const *arg) {
     QS_tickPeriod_ = SystemCoreClock / BSP_TICKS_PER_SEC;
     QS_tickTime_ = QS_tickPeriod_; /* to start the timestamp at zero */
 
-    /* setup the QS filters... */
-    QS_FILTER_ON(QS_QEP_STATE_ENTRY);
-    QS_FILTER_ON(QS_QEP_STATE_EXIT);
-    QS_FILTER_ON(QS_QEP_STATE_INIT);
-    QS_FILTER_ON(QS_QEP_INIT_TRAN);
-    QS_FILTER_ON(QS_QEP_INTERN_TRAN);
-    QS_FILTER_ON(QS_QEP_TRAN);
-    QS_FILTER_ON(QS_QEP_IGNORED);
-    QS_FILTER_ON(QS_QEP_DISPATCH);
-    QS_FILTER_ON(QS_QEP_UNHANDLED);
-
-    QS_FILTER_ON(PHILO_STAT);
-
     return 1U; /* return success */
 }
 /*..........................................................................*/

+ 19 - 40
examples/arm-cm/dpp_nucleo-h743zi/qk/bsp.c

@@ -1,13 +1,13 @@
 /*****************************************************************************
 * Product: DPP example, NUCLEO-H743ZI board, preemptive QK kernel
-* Last Updated for Version: 6.1.1
-* Date of the Last Update:  2018-02-15
+* Last updated for version 6.9.1
+* Last updated on  2020-09-22
 *
-*                    Q u a n t u m     L e a P s
-*                    ---------------------------
-*                    innovating embedded systems
+*                    Q u a n t u m  L e a P s
+*                    ------------------------
+*                    Modern Embedded Software
 *
-* Copyright (C) Quantum Leaps, LLC. All rights reserved.
+* Copyright (C) 2005-2020 Quantum Leaps, LLC. All rights reserved.
 *
 * This program is open source software: you can redistribute it and/or
 * modify it under the terms of the GNU General Public License as published
@@ -42,27 +42,6 @@
 
 Q_DEFINE_THIS_FILE
 
-/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! CAUTION !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-* Assign a priority to EVERY ISR explicitly by calling NVIC_SetPriority().
-* DO NOT LEAVE THE ISR PRIORITIES AT THE DEFAULT VALUE!
-*/
-enum KernelUnawareISRs { /* see NOTE00 */
-    USART3_PRIO,
-    /* ... */
-    MAX_KERNEL_UNAWARE_CMSIS_PRI /* keep always last */
-};
-/* "kernel-unaware" interrupts can't overlap "kernel-aware" interrupts */
-Q_ASSERT_COMPILE(MAX_KERNEL_UNAWARE_CMSIS_PRI <= QF_AWARE_ISR_CMSIS_PRI);
-
-enum KernelAwareISRs {
-    SYSTICK_PRIO = QF_AWARE_ISR_CMSIS_PRI, /* see NOTE00 */
-    EXTI0_PRIO,
-    /* ... */
-    MAX_KERNEL_AWARE_CMSIS_PRI /* keep always last */
-};
-/* "kernel-aware" interrupts should not overlap the PendSV priority */
-Q_ASSERT_COMPILE(MAX_KERNEL_AWARE_CMSIS_PRI <= (0xFF >>(8-__NVIC_PRIO_BITS)));
-
 /* ISRs defined in this BSP ------------------------------------------------*/
 void SysTick_Handler(void);
 void USART3_IRQHandler(void);
@@ -219,6 +198,10 @@ void BSP_init(void) {
     QS_USR_DICTIONARY(PAUSED_STAT);
     QS_USR_DICTIONARY(COMMAND_STAT);
     QS_USR_DICTIONARY(CONTEXT_SW);
+
+    /* setup the QS filters... */
+    QS_GLB_FILTER(QS_SM_RECORDS);
+    QS_GLB_FILTER(QS_UA_RECORDS);
 }
 /*..........................................................................*/
 void BSP_ledOn(void) {
@@ -237,7 +220,7 @@ void BSP_displayPhilStat(uint8_t n, char const *stat) {
         BSP_LED_Off(LED1);
     }
 
-    QS_BEGIN(PHILO_STAT, AO_Philo[n]) /* application-specific record begin */
+    QS_BEGIN_ID(PHILO_STAT, AO_Philo[n]->prio) /* app-specific record */
         QS_U8(1, n);  /* Philosopher number */
         QS_STR(stat); /* Philosopher status */
     QS_END()          /* application-specific record end */
@@ -287,14 +270,14 @@ void QF_onStartup(void) {
     /* set up the SysTick timer to fire at BSP_TICKS_PER_SEC rate */
     SysTick_Config(SystemCoreClock / BSP_TICKS_PER_SEC);
 
-    /* set priorities of ALL ISRs used in the system, see NOTE00
+    /* set priorities of ALL ISRs used in the system, see NOTE1
     *
     * !!!!!!!!!!!!!!!!!!!!!!!!!!!! CAUTION !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
     * Assign a priority to EVERY ISR explicitly by calling NVIC_SetPriority().
     * DO NOT LEAVE THE ISR PRIORITIES AT THE DEFAULT VALUE!
     */
-    NVIC_SetPriority(USART3_IRQn,  USART3_PRIO);
-    NVIC_SetPriority(SysTick_IRQn, SYSTICK_PRIO);
+    NVIC_SetPriority(USART3_IRQn,  0U); /* kernel unaware interrupt */
+    NVIC_SetPriority(SysTick_IRQn, QF_AWARE_ISR_CMSIS_PRI);
     /* ... */
 
     /* enable IRQs... */
@@ -313,7 +296,7 @@ void QK_onContextSw(QActive *prev, QActive *next) {
     if (next != (QActive *)0) {
         //_impure_ptr = next->thread; /* switch to next TLS */
     }
-    QS_BEGIN_NOCRIT(CONTEXT_SW, (void *)1) /* no critical section! */
+    QS_BEGIN_NOCRIT(CONTEXT_SW, 0U) /* no critical section! */
         QS_OBJ(prev);
         QS_OBJ(next);
     QS_END_NOCRIT()
@@ -321,7 +304,7 @@ void QK_onContextSw(QActive *prev, QActive *next) {
 #endif /* QK_ON_CONTEXT_SW */
 /*..........................................................................*/
 void QK_onIdle(void) {
-    /* toggle the User LED on and then off, see NOTE01 */
+    /* toggle the User LED on and then off, see NOTE2 */
     QF_INT_DISABLE();
     BSP_LED_On (LED3);
     BSP_LED_Off(LED3);
@@ -408,10 +391,6 @@ uint8_t QS_onStartup(void const *arg) {
     QS_tickPeriod_ = SystemCoreClock / BSP_TICKS_PER_SEC;
     QS_tickTime_ = QS_tickPeriod_; /* to start the timestamp at zero */
 
-    /* setup the QS filters... */
-    QS_FILTER_ON(QS_SM_RECORDS);
-    QS_FILTER_ON(QS_UA_RECORDS);
-
     return 1U; /* return success */
 }
 /*..........................................................................*/
@@ -456,7 +435,7 @@ void QS_onCommand(uint8_t cmdId,
     (void)param1;
     (void)param2;
     (void)param3;
-    QS_BEGIN(COMMAND_STAT, (void *)1) /* application-specific record begin */
+    QS_BEGIN_ID(COMMAND_STAT, 0U) /* app-specific record */
         QS_U8(2, cmdId);
         QS_U32(8, param1);
     QS_END()
@@ -473,7 +452,7 @@ void QS_onCommand(uint8_t cmdId,
 /*--------------------------------------------------------------------------*/
 
 /*****************************************************************************
-* NOTE00:
+* NOTE1:
 * The QF_AWARE_ISR_CMSIS_PRI constant from the QF port specifies the highest
 * ISR priority that is disabled by the QF framework. The value is suitable
 * for the NVIC_SetPriority() CMSIS function.
@@ -491,7 +470,7 @@ void QS_onCommand(uint8_t cmdId,
 * by which a "QF-unaware" ISR can communicate with the QF framework is by
 * triggering a "QF-aware" ISR, which can post/publish events.
 *
-* NOTE01:
+* NOTE2:
 * The User LED is used to visualize the idle loop activity. The brightness
 * of the LED is proportional to the frequency of invcations of the idle loop.
 * Please note that the LED is toggled with interrupts locked, so no interrupt

+ 16 - 36
examples/arm-cm/dpp_nucleo-h743zi/qv/bsp.c

@@ -1,13 +1,13 @@
 /*****************************************************************************
 * Product: DPP example, NUCLEO-H743ZI board, cooperative QV kernel
-* Last Updated for Version: 6.0.4
-* Date of the Last Update:  2018-01-29
+* Last updated for version 6.9.1
+* Last updated on  2020-09-22
 *
-*                    Q u a n t u m     L e a P s
-*                    ---------------------------
-*                    innovating embedded systems
+*                    Q u a n t u m  L e a P s
+*                    ------------------------
+*                    Modern Embedded Software
 *
-* Copyright (C) Quantum Leaps, LLC. All rights reserved.
+* Copyright (C) 2005-2020 Quantum Leaps, LLC. All rights reserved.
 *
 * This program is open source software: you can redistribute it and/or
 * modify it under the terms of the GNU General Public License as published
@@ -44,27 +44,6 @@
 
 Q_DEFINE_THIS_FILE
 
-/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! CAUTION !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-* Assign a priority to EVERY ISR explicitly by calling NVIC_SetPriority().
-* DO NOT LEAVE THE ISR PRIORITIES AT THE DEFAULT VALUE!
-*/
-enum KernelUnawareISRs { /* see NOTE00 */
-    USART3_PRIO,
-    /* ... */
-    MAX_KERNEL_UNAWARE_CMSIS_PRI  /* keep always last */
-};
-/* "kernel-unaware" interrupts can't overlap "kernel-aware" interrupts */
-Q_ASSERT_COMPILE(MAX_KERNEL_UNAWARE_CMSIS_PRI <= QF_AWARE_ISR_CMSIS_PRI);
-
-enum KernelAwareISRs {
-    GPIO_EVEN_PRIO = QF_AWARE_ISR_CMSIS_PRI, /* see NOTE00 */
-    SYSTICK_PRIO,
-    /* ... */
-    MAX_KERNEL_AWARE_CMSIS_PRI /* keep always last */
-};
-/* "kernel-aware" interrupts should not overlap the PendSV priority */
-Q_ASSERT_COMPILE(MAX_KERNEL_AWARE_CMSIS_PRI <= (0xFF >>(8-__NVIC_PRIO_BITS)));
-
 /* ISRs defined in this BSP ------------------------------------------------*/
 void SysTick_Handler(void);
 void USART3_IRQHandler(void);
@@ -128,6 +107,7 @@ void SysTick_Handler(void) {
             QF_PUBLISH(&serveEvt, &l_SysTick_Handler);
         }
     }
+    QV_ARM_ERRATUM_838869();
 }
 
 /*..........................................................................*/
@@ -196,6 +176,10 @@ void BSP_init(void) {
     QS_OBJ_DICTIONARY(&l_GPIO_EVEN_IRQHandler);
     QS_USR_DICTIONARY(PHILO_STAT);
     QS_USR_DICTIONARY(COMMAND_STAT);
+
+    /* setup the QS filters... */
+    QS_GLB_FILTER(QS_SM_RECORDS);
+    QS_GLB_FILTER(QS_UA_RECORDS);
 }
 /*..........................................................................*/
 void BSP_ledOn(void) {
@@ -214,7 +198,7 @@ void BSP_displayPhilStat(uint8_t n, char const *stat) {
         BSP_LED_Off(LED1);
     }
 
-    QS_BEGIN(PHILO_STAT, AO_Philo[n]) /* application-specific record begin */
+    QS_BEGIN_ID(PHILO_STAT, AO_Philo[n]->prio) /* app-specific record */
         QS_U8(1, n);  /* Philosopher number */
         QS_STR(stat); /* Philosopher status */
     QS_END()          /* application-specific record end */
@@ -267,9 +251,9 @@ void QF_onStartup(void) {
     * Assign a priority to EVERY ISR explicitly by calling NVIC_SetPriority().
     * DO NOT LEAVE THE ISR PRIORITIES AT THE DEFAULT VALUE!
     */
-    NVIC_SetPriority(USART3_IRQn,  USART3_PRIO);
-    NVIC_SetPriority(SysTick_IRQn, SYSTICK_PRIO);
-    //NVIC_SetPriority(GPIO_EVEN_IRQn, GPIO_EVEN_PRIO);
+    NVIC_SetPriority(USART3_IRQn,  0U);
+    //NVIC_SetPriority(GPIO_EVEN_IRQn, QF_AWARE_ISR_CMSIS_PRI);
+    NVIC_SetPriority(SysTick_IRQn, QF_AWARE_ISR_CMSIS_PRI + 1U);
     /* ... */
 
     /* enable IRQs... */
@@ -371,10 +355,6 @@ uint8_t QS_onStartup(void const *arg) {
     QS_tickPeriod_ = SystemCoreClock / BSP_TICKS_PER_SEC;
     QS_tickTime_ = QS_tickPeriod_; /* to start the timestamp at zero */
 
-    /* setup the QS filters... */
-    QS_FILTER_ON(QS_SM_RECORDS);
-    QS_FILTER_ON(QS_UA_RECORDS);
-
     return 1U; /* return success */
 }
 /*..........................................................................*/
@@ -419,7 +399,7 @@ void QS_onCommand(uint8_t cmdId,
     (void)param1;
     (void)param2;
     (void)param3;
-    QS_BEGIN(COMMAND_STAT, (void *)1) /* application-specific record begin */
+    QS_BEGIN_ID(COMMAND_STAT, 0U) /* app-specific record */
         QS_U8(2, cmdId);
         QS_U32(8, param1);
     QS_END()

+ 2 - 3
examples/arm-cm/dpp_nucleo-h743zi/qview/dpp.py

@@ -59,10 +59,9 @@ class DPP:
     def on_run(self):
         glb_filter("QS_USER_00")
 
-        # NOTE: the names of objects for loc_filter() and current_obj()
-        # must match the QS Object Dictionaries produced by the application.
+        # NOTE: the names of objects for current_obj() must match
+        # the QS Object Dictionaries produced by the application.
         current_obj(OBJ_AO, "Table_inst")
-        loc_filter(OBJ_TE, "l_philo[0].timeEvt")
 
         # turn lists into tuples for better performance
         self._philo_obj = tuple(self._philo_obj)

+ 2 - 3
examples/arm-cm/dpp_nucleo-h743zi/qview/dpp1.py

@@ -67,10 +67,9 @@ class DPP:
     def on_run(self):
         glb_filter("QS_QEP_TRAN")
 
-        # NOTE: the names of objects for loc_filter() and current_obj()
-        # must match the QS Object Dictionaries produced by the application.
+        # NOTE: the names of objects for current_obj() must match
+        # the QS Object Dictionaries produced by the application.
         current_obj(OBJ_AO, "Table_inst")
-        loc_filter(OBJ_TE, "Philo_inst[0].timeEvt")
 
         # turn lists into tuples for better performance
         self._philo_obj = tuple(self._philo_obj)

+ 19 - 40
examples/arm-cm/dpp_nucleo-h743zi/qxk/bsp.c

@@ -1,13 +1,13 @@
 /*****************************************************************************
 * Product: DPP example, NUCLEO-H743ZI board, dual-mode QXK kernel
-* Last Updated for Version: 6.1.1
-* Date of the Last Update:  2018-02-16
+* Last updated for version 6.9.1
+* Last updated on  2020-09-22
 *
-*                    Q u a n t u m     L e a P s
-*                    ---------------------------
-*                    innovating embedded systems
+*                    Q u a n t u m  L e a P s
+*                    ------------------------
+*                    Modern Embedded Software
 *
-* Copyright (C) Quantum Leaps, LLC. All rights reserved.
+* Copyright (C) 2005-2020 Quantum Leaps, LLC. All rights reserved.
 *
 * This program is open source software: you can redistribute it and/or
 * modify it under the terms of the GNU General Public License as published
@@ -42,27 +42,6 @@
 
 Q_DEFINE_THIS_FILE
 
-/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! CAUTION !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-* Assign a priority to EVERY ISR explicitly by calling NVIC_SetPriority().
-* DO NOT LEAVE THE ISR PRIORITIES AT THE DEFAULT VALUE!
-*/
-enum KernelUnawareISRs { /* see NOTE00 */
-    USART3_PRIO,
-    /* ... */
-    MAX_KERNEL_UNAWARE_CMSIS_PRI /* keep always last */
-};
-/* "kernel-unaware" interrupts can't overlap "kernel-aware" interrupts */
-Q_ASSERT_COMPILE(MAX_KERNEL_UNAWARE_CMSIS_PRI <= QF_AWARE_ISR_CMSIS_PRI);
-
-enum KernelAwareISRs {
-    SYSTICK_PRIO = QF_AWARE_ISR_CMSIS_PRI, /* see NOTE00 */
-    EXTI0_PRIO,
-    /* ... */
-    MAX_KERNEL_AWARE_CMSIS_PRI /* keep always last */
-};
-/* "kernel-aware" interrupts should not overlap the PendSV priority */
-Q_ASSERT_COMPILE(MAX_KERNEL_AWARE_CMSIS_PRI <= (0xFF >>(8-__NVIC_PRIO_BITS)));
-
 /* ISRs defined in this BSP ------------------------------------------------*/
 void SysTick_Handler(void);
 void USART3_IRQHandler(void);
@@ -219,6 +198,10 @@ void BSP_init(void) {
     QS_USR_DICTIONARY(PAUSED_STAT);
     QS_USR_DICTIONARY(COMMAND_STAT);
     QS_USR_DICTIONARY(ON_CONTEXT_SW);
+
+    /* setup the QS filters... */
+    QS_GLB_FILTER(QS_SM_RECORDS);
+    QS_GLB_FILTER(QS_UA_RECORDS);
 }
 /*..........................................................................*/
 void BSP_ledOn(void) {
@@ -237,7 +220,7 @@ void BSP_displayPhilStat(uint8_t n, char const *stat) {
         BSP_LED_Off(LED1);
     }
 
-    QS_BEGIN(PHILO_STAT, AO_Philo[n]) /* application-specific record begin */
+    QS_BEGIN_ID(PHILO_STAT, AO_Philo[n]->prio) /* app-specific record */
         QS_U8(1, n);  /* Philosopher number */
         QS_STR(stat); /* Philosopher status */
     QS_END()          /* application-specific record end */
@@ -287,14 +270,14 @@ void QF_onStartup(void) {
     /* set up the SysTick timer to fire at BSP_TICKS_PER_SEC rate */
     SysTick_Config(SystemCoreClock / BSP_TICKS_PER_SEC);
 
-    /* set priorities of ALL ISRs used in the system, see NOTE00
+    /* set priorities of ALL ISRs used in the system, see NOTE1
     *
     * !!!!!!!!!!!!!!!!!!!!!!!!!!!! CAUTION !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
     * Assign a priority to EVERY ISR explicitly by calling NVIC_SetPriority().
     * DO NOT LEAVE THE ISR PRIORITIES AT THE DEFAULT VALUE!
     */
-    NVIC_SetPriority(USART3_IRQn,  USART3_PRIO);
-    NVIC_SetPriority(SysTick_IRQn, SYSTICK_PRIO);
+    NVIC_SetPriority(USART3_IRQn,  0U); /* kernel unaware interrupt */
+    NVIC_SetPriority(SysTick_IRQn, QF_AWARE_ISR_CMSIS_PRI);
     /* ... */
 
     /* enable IRQs... */
@@ -314,7 +297,7 @@ void QXK_onContextSw(QActive *prev, QActive *next) {
     if (next != (QActive *)0) {
         //_impure_ptr = next->thread; /* switch to next TLS */
     }
-    QS_BEGIN_NOCRIT(ON_CONTEXT_SW, (void *)1) /* no critical section! */
+    QS_BEGIN_NOCRIT(ON_CONTEXT_SW, 0U) /* no critical section! */
         QS_OBJ(prev);
         QS_OBJ(next);
     QS_END_NOCRIT()
@@ -322,7 +305,7 @@ void QXK_onContextSw(QActive *prev, QActive *next) {
 #endif /* QXK_ON_CONTEXT_SW */
 /*..........................................................................*/
 void QXK_onIdle(void) {
-    /* toggle the User LED on and then off, see NOTE01 */
+    /* toggle the User LED on and then off, see NOTE2 */
     QF_INT_DISABLE();
     BSP_LED_On (LED3);
     BSP_LED_Off(LED3);
@@ -409,10 +392,6 @@ uint8_t QS_onStartup(void const *arg) {
     QS_tickPeriod_ = SystemCoreClock / BSP_TICKS_PER_SEC;
     QS_tickTime_ = QS_tickPeriod_; /* to start the timestamp at zero */
 
-    /* setup the QS filters... */
-    QS_FILTER_ON(QS_SM_RECORDS);
-    QS_FILTER_ON(QS_UA_RECORDS);
-
     return 1U; /* return success */
 }
 /*..........................................................................*/
@@ -457,7 +436,7 @@ void QS_onCommand(uint8_t cmdId,
     (void)param1;
     (void)param2;
     (void)param3;
-    QS_BEGIN(COMMAND_STAT, (void *)1) /* application-specific record begin */
+    QS_BEGIN_ID(COMMAND_STAT, 0U) /* app-specific record */
         QS_U8(2, cmdId);
         QS_U32(8, param1);
     QS_END()
@@ -474,7 +453,7 @@ void QS_onCommand(uint8_t cmdId,
 /*--------------------------------------------------------------------------*/
 
 /*****************************************************************************
-* NOTE00:
+* NOTE1:
 * The QF_AWARE_ISR_CMSIS_PRI constant from the QF port specifies the highest
 * ISR priority that is disabled by the QF framework. The value is suitable
 * for the NVIC_SetPriority() CMSIS function.
@@ -492,7 +471,7 @@ void QS_onCommand(uint8_t cmdId,
 * by which a "QF-unaware" ISR can communicate with the QF framework is by
 * triggering a "QF-aware" ISR, which can post/publish events.
 *
-* NOTE01:
+* NOTE2:
 * The User LED is used to visualize the idle loop activity. The brightness
 * of the LED is proportional to the frequency of invcations of the idle loop.
 * Please note that the LED is toggled with interrupts locked, so no interrupt

+ 1 - 1
examples/arm-cm/dpp_nucleo-l053r8/qk/armclang/dpp-qk.uvoptx

@@ -125,7 +125,7 @@
         <SetRegEntry>
           <Number>0</Number>
           <Key>ST-LINKIII-KEIL_SWO</Key>
-          <Name>-U066CFF484951775087074312 -O8431 -SF480 -C0 -A0 -I0 -HNlocalhost -HP7184 -P2 -N00("ARM CoreSight SW-DP") -D00(0BC11477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8004 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC800 -FN1 -FF0STM32L0xx_64.FLM -FS08000000 -FL010000 -FP0($$Device:STM32L053R8Tx$CMSIS\Flash\STM32L0xx_64.FLM)</Name>
+          <Name>-U066CFF484951775087074312 -O8431 -SF10000 -C0 -A0 -I0 -HNlocalhost -HP7184 -P2 -N00("ARM CoreSight SW-DP (ARM Core") -D00(0BC11477) -L00(0) -TO131090 -TC10000000 -TT10000000 -TP21 -TDS8004 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC800 -FN1 -FF0STM32L0xx_64.FLM -FS08000000 -FL010000 -FP0($$Device:STM32L053R8Tx$CMSIS\Flash\STM32L0xx_64.FLM)</Name>
         </SetRegEntry>
         <SetRegEntry>
           <Number>0</Number>

+ 11 - 11
examples/arm-cm/dpp_nucleo-l053r8/qk/bsp.c

@@ -1,13 +1,13 @@
 /*****************************************************************************
 * Product: DPP example, NUCLEO-L053R8 board, preemptive QK kernel
-* Last Updated for Version: 6.9.0
-* Date of the Last Update:  2020-08-14
+* Last updated for version 6.9.1
+* Last updated on  2020-09-22
 *
-*                    Q u a n t u m     L e a P s
-*                    ---------------------------
-*                    innovating embedded systems
+*                    Q u a n t u m  L e a P s
+*                    ------------------------
+*                    Modern Embedded Software
 *
-* Copyright (C) Quantum Leaps, LLC. All rights reserved.
+* Copyright (C) 2005-2020 Quantum Leaps, LLC. All rights reserved.
 *
 * This program is open source software: you can redistribute it and/or
 * modify it under the terms of the GNU General Public License as published
@@ -167,6 +167,10 @@ void BSP_init(void) {
     }
     QS_OBJ_DICTIONARY(&l_SysTick_Handler);
     QS_USR_DICTIONARY(PHILO_STAT);
+
+    /* setup the QS filters... */
+    QS_GLB_FILTER(QS_SM_RECORDS);
+    QS_GLB_FILTER(QS_UA_RECORDS);
 }
 /*..........................................................................*/
 void BSP_displayPhilStat(uint8_t n, char const *stat) {
@@ -177,7 +181,7 @@ void BSP_displayPhilStat(uint8_t n, char const *stat) {
         GPIOA->BSRR |= (LED_LD2 << 16);  /* turn LED off */
     }
 
-    QS_BEGIN(PHILO_STAT, AO_Philo[n]) /* application-specific record begin */
+    QS_BEGIN_ID(PHILO_STAT, AO_Philo[n]->prio) /* app-specific record */
         QS_U8(1, n);                  /* Philosopher number */
         QS_STR(stat);                 /* Philosopher status */
     QS_END()
@@ -361,10 +365,6 @@ uint8_t QS_onStartup(void const *arg) {
     QS_tickPeriod_ = SystemCoreClock / BSP_TICKS_PER_SEC;
     QS_tickTime_ = QS_tickPeriod_; /* to start the timestamp at zero */
 
-    /* setup the QS filters... */
-    QS_FILTER_ON(QS_SM_RECORDS);
-    QS_FILTER_ON(QS_UA_RECORDS);
-
     return 1U; /* return success */
 }
 /*..........................................................................*/

+ 18 - 33
examples/arm-cm/dpp_nucleo-l053r8/qk/gnu_with-stack-prot/bsp_stack-prot.c

@@ -1,13 +1,13 @@
 /*****************************************************************************
 * Product: DPP example, NUCLEO-L053R8 board, preemptive QK kernel
-* Last Updated for Version: 6.3.3
-* Date of the Last Update:  2018-06-21
+* Last updated for version 6.9.1
+* Last updated on  2020-09-22
 *
-*                    Q u a n t u m     L e a P s
-*                    ---------------------------
-*                    innovating embedded systems
+*                    Q u a n t u m  L e a P s
+*                    ------------------------
+*                    Modern Embedded Software
 *
-* Copyright (C) Quantum Leaps, LLC. All rights reserved.
+* Copyright (C) 2005-2020 Quantum Leaps, LLC. All rights reserved.
 *
 * This program is open source software: you can redistribute it and/or
 * modify it under the terms of the GNU General Public License as published
@@ -40,24 +40,9 @@
 
 Q_DEFINE_THIS_FILE
 
-/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! CAUTION !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-* Assign a priority to EVERY ISR explicitly by calling NVIC_SetPriority().
-* DO NOT LEAVE THE ISR PRIORITIES AT THE DEFAULT VALUE!
-*/
-enum KernelAwareISRs {
-    GPIOPORTA_PRIO = QF_AWARE_ISR_CMSIS_PRI, /* see NOTE00 */
-    SYSTICK_PRIO,
-    EXTI0_1_PRIO,
-    /* ... */
-    MAX_KERNEL_AWARE_CMSIS_PRI /* keep always last */
-};
-/* "kernel-aware" interrupts should not overlap the PendSV priority */
-Q_ASSERT_COMPILE(MAX_KERNEL_AWARE_CMSIS_PRI <= (0xFF >>(8-__NVIC_PRIO_BITS)));
-
 void SysTick_Handler(void);
 void EXTI0_1_IRQHandler(void);
 
-
 /* Local-scope defines -----------------------------------------------------*/
 /* LED pins available on the board (just one user LED LD2--Green on PA.5) */
 #define LED_LD2  (1U << 5)
@@ -174,6 +159,10 @@ void BSP_init(void) {
     QS_OBJ_DICTIONARY(&l_SysTick_Handler);
     QS_USR_DICTIONARY(PHILO_STAT);
     QS_USR_DICTIONARY(ON_CONTEXT_SW);
+
+    /* setup the QS filters... */
+    QS_GLB_FILTER(QS_SM_RECORDS);
+    QS_GLB_FILTER(QS_UA_RECORDS);
 }
 /*..........................................................................*/
 void BSP_displayPhilStat(uint8_t n, char const *stat) {
@@ -184,7 +173,7 @@ void BSP_displayPhilStat(uint8_t n, char const *stat) {
         GPIOA->BSRR |= (LED_LD2 << 16);  /* turn LED off */
     }
 
-    QS_BEGIN(PHILO_STAT, AO_Philo[n]) /* application-specific record begin */
+    QS_BEGIN_ID(PHILO_STAT, AO_Philo[n]->prio) /* app-specific record */
         QS_U8(1, n);                  /* Philosopher number */
         QS_STR(stat);                 /* Philosopher status */
     QS_END()
@@ -236,14 +225,14 @@ void QF_onStartup(void) {
     /* set up the SysTick timer to fire at BSP_TICKS_PER_SEC rate */
     SysTick_Config(SystemCoreClock / BSP_TICKS_PER_SEC);
 
-    /* set priorities of ALL ISRs used in the system, see NOTE00
+    /* set priorities of ALL ISRs used in the system, see NOTE1
     *
     * !!!!!!!!!!!!!!!!!!!!!!!!!!!! CAUTION !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
     * Assign a priority to EVERY ISR explicitly by calling NVIC_SetPriority().
     * DO NOT LEAVE THE ISR PRIORITIES AT THE DEFAULT VALUE!
     */
-    NVIC_SetPriority(SysTick_IRQn,   SYSTICK_PRIO);
-    NVIC_SetPriority(EXTI0_1_IRQn,   EXTI0_1_PRIO);
+    NVIC_SetPriority(EXTI0_1_IRQn,   QF_AWARE_ISR_CMSIS_PRI);
+    NVIC_SetPriority(SysTick_IRQn,   QF_AWARE_ISR_CMSIS_PRI + 1U);
     /* ... */
 
     /* enable IRQs... */
@@ -260,7 +249,7 @@ void QK_onContextSw(QActive *prev, QActive *next) {
     if (next != (QActive *)0) {
         //_impure_ptr = next->thread; /* switch to next TLS */
     }
-    QS_BEGIN_NOCRIT(ON_CONTEXT_SW, (void *)1) /* no critical section! */
+    QS_BEGIN_NOCRIT(ON_CONTEXT_SW, 0U) /* no critical section! */
         QS_OBJ(prev);
         QS_OBJ(next);
     QS_END_NOCRIT()
@@ -269,7 +258,7 @@ void QK_onContextSw(QActive *prev, QActive *next) {
 /*..........................................................................*/
 void QK_onIdle(void) { /* called with interrupts enabled */
 
-    /* toggle an LED on and then off (not enough LEDs, see NOTE01) */
+    /* toggle an LED on and then off (not enough LEDs, see NOTE2) */
     QF_INT_DISABLE();
     //GPIOA->BSRR |= (LED_LD2);        /* turn LED[n] on  */
     //GPIOA->BSRR |= (LED_LD2 << 16);  /* turn LED[n] off */
@@ -368,10 +357,6 @@ uint8_t QS_onStartup(void const *arg) {
     QS_tickPeriod_ = SystemCoreClock / BSP_TICKS_PER_SEC;
     QS_tickTime_ = QS_tickPeriod_; /* to start the timestamp at zero */
 
-    /* setup the QS filters... */
-    QS_FILTER_ON(QS_SM_RECORDS);
-    QS_FILTER_ON(QS_UA_RECORDS);
-
     return (uint8_t)1; /* return success */
 }
 /*..........................................................................*/
@@ -405,7 +390,7 @@ void QS_onFlush(void) {
 /*--------------------------------------------------------------------------*/
 
 /*****************************************************************************
-* NOTE00:
+* NOTE1:
 * The QF_AWARE_ISR_CMSIS_PRI constant from the QF port specifies the highest
 * ISR priority that is disabled by the QF framework. The value is suitable
 * for the NVIC_SetPriority() CMSIS function.
@@ -422,7 +407,7 @@ void QS_onFlush(void) {
 * by which a "QF-unaware" ISR can communicate with the QF framework is by
 * triggering a "QF-aware" ISR, which can post/publish events.
 *
-* NOTE01:
+* NOTE2:
 * Usually, one of the LEDs is used to visualize the idle loop activity.
 * However, the board has not enough LEDs (only one, actually), so this
 * feature is disabled.

+ 8 - 5
examples/arm-cm/dpp_nucleo-l053r8/qk/iar/dpp-qk.ewp

@@ -2188,7 +2188,7 @@
                 </option>
                 <option>
                     <name>OGLastSavedByProductVersion</name>
-                    <state>7.40.3.8937</state>
+                    <state>8.40.2.22864</state>
                 </option>
                 <option>
                     <name>GeneralEnableMisra</name>
@@ -2200,7 +2200,7 @@
                 </option>
                 <option>
                     <name>OGChipSelectEditMenu</name>
-                    <state>STM32L053x8	ST STM32L053x8</state>
+                    <state>STM32L053R8	ST STM32L053R8</state>
                 </option>
                 <option>
                     <name>GenLowLevelInterface</name>
@@ -2234,7 +2234,7 @@
                 </option>
                 <option>
                     <name>RTConfigPath2</name>
-                    <state>$TOOLKIT_DIR$\INC\c\DLib_Config_Normal.h</state>
+                    <state>$TOOLKIT_DIR$\inc\c\DLib_Config_Normal.h</state>
                 </option>
                 <option>
                     <name>GBECoreSlave</name>
@@ -2260,7 +2260,7 @@
                 </option>
                 <option>
                     <name>GFPUDeviceSlave</name>
-                    <state>STM32L053x8	ST STM32L053x8</state>
+                    <state>STM32L053R8	ST STM32L053R8</state>
                 </option>
                 <option>
                     <name>FPU2</name>
@@ -3128,7 +3128,7 @@
                 </option>
                 <option>
                     <name>IlinkTrustzoneImportLibraryOut</name>
-                    <state>###Unitialized###</state>
+                    <state>dpp-qk_import_lib.o</state>
                 </option>
                 <option>
                     <name>OILinkExtraOption</name>
@@ -3310,5 +3310,8 @@
         <file>
             <name>$PROJ_DIR$\..\..\..\..\..\src\qs_pkg.h</name>
         </file>
+        <file>
+            <name>$PROJ_DIR$\..\..\..\..\..\src\qs\qs_rx.c</name>
+        </file>
     </group>
 </project>

+ 16 - 14
examples/arm-cm/dpp_nucleo-l053r8/qv/bsp.c

@@ -1,13 +1,13 @@
 /*****************************************************************************
 * Product: DPP example, NUCLEO-L053R8 board, cooperative QV kernel
-* Last Updated for Version: 6.9.0
-* Date of the Last Update:  2020-08-14
+* Last updated for version 6.9.1
+* Last updated on  2020-09-22
 *
-*                    Q u a n t u m     L e a P s
-*                    ---------------------------
-*                    innovating embedded systems
+*                    Q u a n t u m  L e a P s
+*                    ------------------------
+*                    Modern Embedded Software
 *
-* Copyright (C) Quantum Leaps, LLC. All rights reserved.
+* Copyright (C) 2005-2020 Quantum Leaps, LLC. All rights reserved.
 *
 * This program is open source software: you can redistribute it and/or
 * modify it under the terms of the GNU General Public License as published
@@ -108,12 +108,14 @@ void SysTick_Handler(void) {   /* system clock tick ISR */
             QF_PUBLISH(&serveEvt, &l_SysTick_Handler);
         }
     }
+    QV_ARM_ERRATUM_838869();
 }
 /*..........................................................................*/
 /* interrupt handler for testing preemptions in QV */
 void EXTI0_1_IRQHandler(void) {
     static QEvt const testEvt = { TEST_SIG, 0U, 0U };
     QACTIVE_POST(AO_Table, &testEvt, (void *)0);
+    QV_ARM_ERRATUM_838869();
 }
 /*..........................................................................*/
 #ifdef Q_SPY
@@ -161,6 +163,10 @@ void BSP_init(void) {
     }
     QS_OBJ_DICTIONARY(&l_SysTick_Handler);
     QS_USR_DICTIONARY(PHILO_STAT);
+
+    /* setup the QS filters... */
+    QS_GLB_FILTER(QS_SM_RECORDS);
+    QS_GLB_FILTER(QS_UA_RECORDS);
 }
 /*..........................................................................*/
 void BSP_displayPhilStat(uint8_t n, char const *stat) {
@@ -171,7 +177,7 @@ void BSP_displayPhilStat(uint8_t n, char const *stat) {
         GPIOA->BSRR |= (LED_LD2 << 16);  /* turn LED off */
     }
 
-    QS_BEGIN(PHILO_STAT, AO_Philo[n]) /* application-specific record begin */
+    QS_BEGIN_ID(PHILO_STAT, AO_Philo[n]->prio) /* app-specific record */
         QS_U8(1, n);                  /* Philosopher number */
         QS_STR(stat);                 /* Philosopher status */
     QS_END()
@@ -229,9 +235,9 @@ void QF_onStartup(void) {
     * Assign a priority to EVERY ISR explicitly by calling NVIC_SetPriority().
     * DO NOT LEAVE THE ISR PRIORITIES AT THE DEFAULT VALUE!
     */
-    NVIC_SetPriority(SysTick_IRQn,   QF_AWARE_ISR_CMSIS_PRI + 1);
-    NVIC_SetPriority(EXTI0_1_IRQn,   QF_AWARE_ISR_CMSIS_PRI + 2);
-    NVIC_SetPriority(USART2_IRQn,    0); /* kernel UNAWARE interrupt */
+    NVIC_SetPriority(USART2_IRQn,    0U); /* kernel UNAWARE interrupt */
+    NVIC_SetPriority(SysTick_IRQn,   QF_AWARE_ISR_CMSIS_PRI + 1U);
+    NVIC_SetPriority(EXTI0_1_IRQn,   QF_AWARE_ISR_CMSIS_PRI + 2U);
     /* ... */
 
     /* enable IRQs... */
@@ -348,10 +354,6 @@ uint8_t QS_onStartup(void const *arg) {
     QS_tickPeriod_ = SystemCoreClock / BSP_TICKS_PER_SEC;
     QS_tickTime_ = QS_tickPeriod_; /* to start the timestamp at zero */
 
-    /* setup the QS filters... */
-    QS_FILTER_ON(QS_SM_RECORDS);
-    QS_FILTER_ON(QS_UA_RECORDS);
-
     return 1U; /* return success */
 }
 /*..........................................................................*/

+ 2 - 3
examples/arm-cm/dpp_nucleo-l053r8/qview/dpp.py

@@ -59,10 +59,9 @@ class DPP:
     def on_run(self):
         glb_filter("QS_USER_00")
 
-        # NOTE: the names of objects for loc_filter() and current_obj()
-        # must match the QS Object Dictionaries produced by the application.
+        # NOTE: the names of objects for current_obj() must match
+        # the QS Object Dictionaries produced by the application.
         current_obj(OBJ_AO, "Table_inst")
-        loc_filter(OBJ_TE, "l_philo[0].timeEvt")
 
         # turn lists into tuples for better performance
         self._philo_obj = tuple(self._philo_obj)

+ 2 - 3
examples/arm-cm/dpp_nucleo-l053r8/qview/dpp1.py

@@ -67,10 +67,9 @@ class DPP:
     def on_run(self):
         glb_filter("QS_QEP_TRAN")
 
-        # NOTE: the names of objects for loc_filter() and current_obj()
-        # must match the QS Object Dictionaries produced by the application.
+        # NOTE: the names of objects for current_obj() must match
+        # the QS Object Dictionaries produced by the application.
         current_obj(OBJ_AO, "Table_inst")
-        loc_filter(OBJ_TE, "Philo_inst[0].timeEvt")
 
         # turn lists into tuples for better performance
         self._philo_obj = tuple(self._philo_obj)

+ 11 - 11
examples/arm-cm/dpp_nucleo-l053r8/qxk/bsp.c

@@ -1,13 +1,13 @@
 /*****************************************************************************
 * Product: DPP example, NUCLEO-L053R8 board, preemptive QXK kernel
-* Last Updated for Version: 6.9.0
-* Date of the Last Update:  2020-08-14
+* Last updated for version 6.9.1
+* Last updated on  2020-09-22
 *
-*                    Q u a n t u m     L e a P s
-*                    ---------------------------
-*                    innovating embedded systems
+*                    Q u a n t u m  L e a P s
+*                    ------------------------
+*                    Modern Embedded Software
 *
-* Copyright (C) Quantum Leaps, LLC. All rights reserved.
+* Copyright (C) 2005-2020 Quantum Leaps, LLC. All rights reserved.
 *
 * This program is open source software: you can redistribute it and/or
 * modify it under the terms of the GNU General Public License as published
@@ -167,6 +167,10 @@ void BSP_init(void) {
     }
     QS_OBJ_DICTIONARY(&l_SysTick_Handler);
     QS_USR_DICTIONARY(PHILO_STAT);
+
+    /* setup the QS filters... */
+    QS_GLB_FILTER(QS_SM_RECORDS);
+    QS_GLB_FILTER(QS_UA_RECORDS);
 }
 /*..........................................................................*/
 void BSP_displayPhilStat(uint8_t n, char const *stat) {
@@ -177,7 +181,7 @@ void BSP_displayPhilStat(uint8_t n, char const *stat) {
         GPIOA->BSRR |= (LED_LD2 << 16);  /* turn LED off */
     }
 
-    QS_BEGIN(PHILO_STAT, AO_Philo[n]) /* application-specific record begin */
+    QS_BEGIN_ID(PHILO_STAT, AO_Philo[n]->prio) /* app-specific record */
         QS_U8(1, n);                  /* Philosopher number */
         QS_STR(stat);                 /* Philosopher status */
     QS_END()
@@ -361,10 +365,6 @@ uint8_t QS_onStartup(void const *arg) {
     QS_tickPeriod_ = SystemCoreClock / BSP_TICKS_PER_SEC;
     QS_tickTime_ = QS_tickPeriod_; /* to start the timestamp at zero */
 
-    /* setup the QS filters... */
-    QS_FILTER_ON(QS_SM_RECORDS);
-    QS_FILTER_ON(QS_UA_RECORDS);
-
     return 1U; /* return success */
 }
 /*..........................................................................*/

+ 124 - 22
examples/arm-cm/dpp_nucleo-l053r8/qxk/iar/dpp-qxk.ewp

@@ -11,7 +11,7 @@
             <name>General</name>
             <archiveVersion>3</archiveVersion>
             <data>
-                <version>30</version>
+                <version>31</version>
                 <wantNonLocal>1</wantNonLocal>
                 <debug>1</debug>
                 <option>
@@ -66,7 +66,7 @@
                 </option>
                 <option>
                     <name>OGLastSavedByProductVersion</name>
-                    <state>8.20.2.14834</state>
+                    <state>8.40.2.22864</state>
                 </option>
                 <option>
                     <name>GeneralEnableMisra</name>
@@ -112,11 +112,11 @@
                 </option>
                 <option>
                     <name>RTConfigPath2</name>
-                    <state>$TOOLKIT_DIR$\INC\c\DLib_Config_Normal.h</state>
+                    <state>$TOOLKIT_DIR$\inc\c\DLib_Config_Normal.h</state>
                 </option>
                 <option>
                     <name>GBECoreSlave</name>
-                    <version>26</version>
+                    <version>27</version>
                     <state>35</state>
                 </option>
                 <option>
@@ -133,7 +133,7 @@
                 </option>
                 <option>
                     <name>CoreVariant</name>
-                    <version>26</version>
+                    <version>27</version>
                     <state>35</state>
                 </option>
                 <option>
@@ -156,7 +156,7 @@
                 </option>
                 <option>
                     <name>GFPUCoreSlave2</name>
-                    <version>26</version>
+                    <version>27</version>
                     <state>35</state>
                 </option>
                 <option>
@@ -204,13 +204,18 @@
                     <name>TrustZone</name>
                     <state>0</state>
                 </option>
+                <option>
+                    <name>TrustZoneModes</name>
+                    <version>0</version>
+                    <state>0</state>
+                </option>
             </data>
         </settings>
         <settings>
             <name>ICCARM</name>
             <archiveVersion>2</archiveVersion>
             <data>
-                <version>34</version>
+                <version>35</version>
                 <wantNonLocal>1</wantNonLocal>
                 <debug>1</debug>
                 <option>
@@ -463,6 +468,10 @@
                     <name>IccRTTI2</name>
                     <state>0</state>
                 </option>
+                <option>
+                    <name>OICompilerExtraOption</name>
+                    <state>1</state>
+                </option>
             </data>
         </settings>
         <settings>
@@ -683,7 +692,7 @@
             <name>ILINK</name>
             <archiveVersion>0</archiveVersion>
             <data>
-                <version>20</version>
+                <version>23</version>
                 <wantNonLocal>1</wantNonLocal>
                 <debug>1</debug>
                 <option>
@@ -995,6 +1004,30 @@
                     <name>IlinkLocaleSelect</name>
                     <state>1</state>
                 </option>
+                <option>
+                    <name>IlinkTrustzoneImportLibraryOut</name>
+                    <state>###Unitialized###</state>
+                </option>
+                <option>
+                    <name>OILinkExtraOption</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>IlinkRawBinaryFile2</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>IlinkRawBinarySymbol2</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>IlinkRawBinarySegment2</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>IlinkRawBinaryAlign2</name>
+                    <state></state>
+                </option>
             </data>
         </settings>
         <settings>
@@ -1039,7 +1072,7 @@
             <name>General</name>
             <archiveVersion>3</archiveVersion>
             <data>
-                <version>30</version>
+                <version>31</version>
                 <wantNonLocal>1</wantNonLocal>
                 <debug>0</debug>
                 <option>
@@ -1144,7 +1177,7 @@
                 </option>
                 <option>
                     <name>GBECoreSlave</name>
-                    <version>26</version>
+                    <version>27</version>
                     <state>35</state>
                 </option>
                 <option>
@@ -1161,7 +1194,7 @@
                 </option>
                 <option>
                     <name>CoreVariant</name>
-                    <version>26</version>
+                    <version>27</version>
                     <state>35</state>
                 </option>
                 <option>
@@ -1184,7 +1217,7 @@
                 </option>
                 <option>
                     <name>GFPUCoreSlave2</name>
-                    <version>26</version>
+                    <version>27</version>
                     <state>35</state>
                 </option>
                 <option>
@@ -1232,13 +1265,18 @@
                     <name>TrustZone</name>
                     <state>0</state>
                 </option>
+                <option>
+                    <name>TrustZoneModes</name>
+                    <version>0</version>
+                    <state>0</state>
+                </option>
             </data>
         </settings>
         <settings>
             <name>ICCARM</name>
             <archiveVersion>2</archiveVersion>
             <data>
-                <version>34</version>
+                <version>35</version>
                 <wantNonLocal>1</wantNonLocal>
                 <debug>0</debug>
                 <option>
@@ -1491,6 +1529,10 @@
                     <name>IccRTTI2</name>
                     <state>0</state>
                 </option>
+                <option>
+                    <name>OICompilerExtraOption</name>
+                    <state>1</state>
+                </option>
             </data>
         </settings>
         <settings>
@@ -1711,7 +1753,7 @@
             <name>ILINK</name>
             <archiveVersion>0</archiveVersion>
             <data>
-                <version>20</version>
+                <version>23</version>
                 <wantNonLocal>1</wantNonLocal>
                 <debug>0</debug>
                 <option>
@@ -2023,6 +2065,30 @@
                     <name>IlinkLocaleSelect</name>
                     <state>1</state>
                 </option>
+                <option>
+                    <name>IlinkTrustzoneImportLibraryOut</name>
+                    <state>###Unitialized###</state>
+                </option>
+                <option>
+                    <name>OILinkExtraOption</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>IlinkRawBinaryFile2</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>IlinkRawBinarySymbol2</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>IlinkRawBinarySegment2</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>IlinkRawBinaryAlign2</name>
+                    <state></state>
+                </option>
             </data>
         </settings>
         <settings>
@@ -2067,7 +2133,7 @@
             <name>General</name>
             <archiveVersion>3</archiveVersion>
             <data>
-                <version>30</version>
+                <version>31</version>
                 <wantNonLocal>1</wantNonLocal>
                 <debug>1</debug>
                 <option>
@@ -2122,7 +2188,7 @@
                 </option>
                 <option>
                     <name>OGLastSavedByProductVersion</name>
-                    <state>8.20.2.14834</state>
+                    <state>8.40.2.22864</state>
                 </option>
                 <option>
                     <name>GeneralEnableMisra</name>
@@ -2168,11 +2234,11 @@
                 </option>
                 <option>
                     <name>RTConfigPath2</name>
-                    <state>$TOOLKIT_DIR$\INC\c\DLib_Config_Normal.h</state>
+                    <state>$TOOLKIT_DIR$\inc\c\DLib_Config_Normal.h</state>
                 </option>
                 <option>
                     <name>GBECoreSlave</name>
-                    <version>26</version>
+                    <version>27</version>
                     <state>35</state>
                 </option>
                 <option>
@@ -2189,7 +2255,7 @@
                 </option>
                 <option>
                     <name>CoreVariant</name>
-                    <version>26</version>
+                    <version>27</version>
                     <state>35</state>
                 </option>
                 <option>
@@ -2212,7 +2278,7 @@
                 </option>
                 <option>
                     <name>GFPUCoreSlave2</name>
-                    <version>26</version>
+                    <version>27</version>
                     <state>35</state>
                 </option>
                 <option>
@@ -2260,13 +2326,18 @@
                     <name>TrustZone</name>
                     <state>0</state>
                 </option>
+                <option>
+                    <name>TrustZoneModes</name>
+                    <version>0</version>
+                    <state>0</state>
+                </option>
             </data>
         </settings>
         <settings>
             <name>ICCARM</name>
             <archiveVersion>2</archiveVersion>
             <data>
-                <version>34</version>
+                <version>35</version>
                 <wantNonLocal>1</wantNonLocal>
                 <debug>1</debug>
                 <option>
@@ -2520,6 +2591,10 @@
                     <name>IccRTTI2</name>
                     <state>0</state>
                 </option>
+                <option>
+                    <name>OICompilerExtraOption</name>
+                    <state>1</state>
+                </option>
             </data>
         </settings>
         <settings>
@@ -2740,7 +2815,7 @@
             <name>ILINK</name>
             <archiveVersion>0</archiveVersion>
             <data>
-                <version>20</version>
+                <version>23</version>
                 <wantNonLocal>1</wantNonLocal>
                 <debug>1</debug>
                 <option>
@@ -3052,6 +3127,30 @@
                     <name>IlinkLocaleSelect</name>
                     <state>1</state>
                 </option>
+                <option>
+                    <name>IlinkTrustzoneImportLibraryOut</name>
+                    <state>###Unitialized###</state>
+                </option>
+                <option>
+                    <name>OILinkExtraOption</name>
+                    <state>1</state>
+                </option>
+                <option>
+                    <name>IlinkRawBinaryFile2</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>IlinkRawBinarySymbol2</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>IlinkRawBinarySegment2</name>
+                    <state></state>
+                </option>
+                <option>
+                    <name>IlinkRawBinaryAlign2</name>
+                    <state></state>
+                </option>
             </data>
         </settings>
         <settings>
@@ -3224,5 +3323,8 @@
         <file>
             <name>$PROJ_DIR$\..\..\..\..\..\src\qs_pkg.h</name>
         </file>
+        <file>
+            <name>$PROJ_DIR$\..\..\..\..\..\src\qs\qs_rx.c</name>
+        </file>
     </group>
 </project>

+ 11 - 11
examples/arm-cm/dpp_nucleo-l152re/qk/bsp.c

@@ -1,13 +1,13 @@
 /*****************************************************************************
 * Product: DPP example, STM32 NUCLEO-L152RE board, preemptive QK kernel
-* Last Updated for Version: 6.9.0
-* Date of the Last Update:  2020-08-14
+* Last updated for version 6.9.1
+* Last updated on  2020-09-22
 *
-*                    Q u a n t u m     L e a P s
-*                    ---------------------------
-*                    innovating embedded systems
+*                    Q u a n t u m  L e a P s
+*                    ------------------------
+*                    Modern Embedded Software
 *
-* Copyright (C) Quantum Leaps, LLC. All rights reserved.
+* Copyright (C) 2005-2020 Quantum Leaps, LLC. All rights reserved.
 *
 * This program is open source software: you can redistribute it and/or
 * modify it under the terms of the GNU General Public License as published
@@ -159,8 +159,8 @@ void BSP_init(void) {
     QS_USR_DICTIONARY(PHILO_STAT);
 
     /* setup the QS filters... */
-    QS_FILTER_ON(QS_ALL_RECORDS);
-    QS_FILTER_OFF(QS_QF_TICK);
+    QS_GLB_FILTER(QS_ALL_RECORDS);
+    QS_GLB_FILTER(-QS_QF_TICK);
 }
 /*..........................................................................*/
 void BSP_displayPhilStat(uint8_t n, char const *stat) {
@@ -171,9 +171,9 @@ void BSP_displayPhilStat(uint8_t n, char const *stat) {
         GPIOA->BSRRH |= LED_LD2;  /* turn LED off */
     }
 
-    QS_BEGIN(PHILO_STAT, AO_Philo[n]) /* application-specific record begin */
-        QS_U8(1, n);                  /* Philosopher number */
-        QS_STR(stat);                 /* Philosopher status */
+    QS_BEGIN_ID(PHILO_STAT, AO_Philo[n]->prio) /* app-specific record */
+        QS_U8(0, n);    /* Philosopher number */
+        QS_STR(stat);   /* Philosopher status */
     QS_END()
 }
 /*..........................................................................*/

+ 3 - 2
examples/arm-cm/dpp_nucleo-l152re/qk/gnu/Makefile

@@ -1,7 +1,7 @@
 ##############################################################################
 # Product: Makefile for QP/C on NUCLEO-L152RE, QK kernel, GNU-ARM
-# Last Updated for Version: 6.5.0
-# Date of the Last Update:  2019-04-15
+# Last Updated for Version: 6.9.1
+# Date of the Last Update:  2020-09-30
 #
 #                    Q u a n t u m  L e a P s
 #                    ------------------------
@@ -128,6 +128,7 @@ QP_ASMS :=
 QS_SRCS := \
 	qs.c \
 	qs_rx.c \
+	qs_64bit.c \
 	qs_fp.c
 
 LIB_DIRS  :=

+ 135 - 0
examples/arm-cm/dpp_nucleo-l152re/qk/visualgdb/dpp-qk-Debug.vgdbsettings

@@ -0,0 +1,135 @@
+<?xml version="1.0"?>
+<VisualGDBProjectSettings2 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
+  <ConfigurationName>Debug</ConfigurationName>
+  <Project xsi:type="com.visualgdb.project.embedded">
+    <CustomSourceDirectories>
+      <Directories />
+      <PathStyle>MinGWUnixSlash</PathStyle>
+      <LocalDirForAbsolutePaths>$(ToolchainDir)</LocalDirForAbsolutePaths>
+    </CustomSourceDirectories>
+    <MainSourceDirectory>$(ProjectDir)</MainSourceDirectory>
+    <ExportAdvancedBuildVariables>false</ExportAdvancedBuildVariables>
+    <EmbeddedProfileFile>stm32.xml</EmbeddedProfileFile>
+  </Project>
+  <Build xsi:type="com.visualgdb.build.msbuild">
+    <ToolchainID>
+      <Version>
+        <Revision>0</Revision>
+      </Version>
+    </ToolchainID>
+    <ProjectFile>dpp-qk.vcxproj</ProjectFile>
+    <RemoteBuildEnvironment>
+      <Records />
+      <EnvironmentSetupFiles />
+    </RemoteBuildEnvironment>
+    <ParallelJobCount>1</ParallelJobCount>
+    <SuppressDirectoryChangeMessages>true</SuppressDirectoryChangeMessages>
+  </Build>
+  <CustomBuild>
+    <PreSyncActions />
+    <PreBuildActions />
+    <PostBuildActions />
+    <PreCleanActions />
+    <PostCleanActions />
+  </CustomBuild>
+  <CustomDebug>
+    <PreDebugActions />
+    <PostDebugActions />
+    <DebugStopActions />
+    <BreakMode>Default</BreakMode>
+  </CustomDebug>
+  <CustomShortcuts>
+    <Shortcuts />
+    <ShowMessageAfterExecuting>true</ShowMessageAfterExecuting>
+  </CustomShortcuts>
+  <UserDefinedVariables />
+  <ImportedPropertySheets />
+  <CodeSense>
+    <Enabled>Unknown</Enabled>
+    <ExtraSettings>
+      <HideErrorsInSystemHeaders>true</HideErrorsInSystemHeaders>
+      <SupportLightweightReferenceAnalysis>true</SupportLightweightReferenceAnalysis>
+      <CheckForClangFormatFiles>true</CheckForClangFormatFiles>
+      <FormattingEngine xsi:nil="true" />
+    </ExtraSettings>
+    <CodeAnalyzerSettings>
+      <Enabled>false</Enabled>
+    </CodeAnalyzerSettings>
+  </CodeSense>
+  <BuildContextDirectory>VisualGDB\VisualGDBCache</BuildContextDirectory>
+  <Configurations />
+  <ProgramArgumentsSuggestions />
+  <Debug xsi:type="com.visualgdb.debug.embedded">
+    <AdditionalStartupCommands />
+    <AdditionalGDBSettings>
+      <Features>
+        <DisableAutoDetection>false</DisableAutoDetection>
+        <UseFrameParameter>false</UseFrameParameter>
+        <SimpleValuesFlagSupported>false</SimpleValuesFlagSupported>
+        <ListLocalsSupported>false</ListLocalsSupported>
+        <ByteLevelMemoryCommandsAvailable>false</ByteLevelMemoryCommandsAvailable>
+        <ThreadInfoSupported>false</ThreadInfoSupported>
+        <PendingBreakpointsSupported>false</PendingBreakpointsSupported>
+        <SupportTargetCommand>false</SupportTargetCommand>
+        <ReliableBreakpointNotifications>false</ReliableBreakpointNotifications>
+      </Features>
+      <EnableSmartStepping>false</EnableSmartStepping>
+      <FilterSpuriousStoppedNotifications>false</FilterSpuriousStoppedNotifications>
+      <ForceSingleThreadedMode>false</ForceSingleThreadedMode>
+      <UseAppleExtensions>false</UseAppleExtensions>
+      <CanAcceptCommandsWhileRunning>false</CanAcceptCommandsWhileRunning>
+      <MakeLogFile>false</MakeLogFile>
+      <IgnoreModuleEventsWhileStepping>true</IgnoreModuleEventsWhileStepping>
+      <UseRelativePathsOnly>false</UseRelativePathsOnly>
+      <ExitAction>None</ExitAction>
+      <DisableDisassembly>false</DisableDisassembly>
+      <ExamineMemoryWithXCommand>false</ExamineMemoryWithXCommand>
+      <StepIntoNewInstanceEntry>main</StepIntoNewInstanceEntry>
+      <ExamineRegistersInRawFormat>true</ExamineRegistersInRawFormat>
+      <DisableSignals>false</DisableSignals>
+      <EnableAsyncExecutionMode>false</EnableAsyncExecutionMode>
+      <EnableNonStopMode>false</EnableNonStopMode>
+      <MaxBreakpointLimit>0</MaxBreakpointLimit>
+    </AdditionalGDBSettings>
+    <DebugMethod>
+      <ID>com.sysprogs.arm.openocd</ID>
+      <InterfaceID>stlink-v2-1</InterfaceID>
+      <InterfaceSerialNumber>066EFF495056805087184715</InterfaceSerialNumber>
+      <Configuration xsi:type="com.visualgdb.edp.openocd.settings">
+        <CommandLine>-f interface/stlink-v2-1.cfg -f target/stm32l1.cfg -c init -c "reset init"</CommandLine>
+        <ExtraParameters>
+          <Frequency xsi:nil="true" />
+          <BoostedFrequency xsi:nil="true" />
+          <ConnectUnderReset>false</ConnectUnderReset>
+        </ExtraParameters>
+        <LoadProgressGUIThreshold>131072</LoadProgressGUIThreshold>
+        <ProgramMode>Enabled</ProgramMode>
+        <StartupCommands>
+          <string>set remotetimeout 60</string>
+          <string>target remote :$$SYS:GDB_PORT$$</string>
+          <string>mon halt</string>
+          <string>mon reset init</string>
+          <string>load</string>
+        </StartupCommands>
+        <ProgramFLASHUsingExternalTool>false</ProgramFLASHUsingExternalTool>
+        <PreferredGDBPort>0</PreferredGDBPort>
+        <PreferredTelnetPort>0</PreferredTelnetPort>
+        <AlwaysPassSerialNumber>false</AlwaysPassSerialNumber>
+        <SelectedCoreIndex xsi:nil="true" />
+      </Configuration>
+    </DebugMethod>
+    <AutoDetectRTOS>true</AutoDetectRTOS>
+    <SemihostingSupport>Auto</SemihostingSupport>
+    <SemihostingPollingDelay>0</SemihostingPollingDelay>
+    <StepIntoEntryPoint>false</StepIntoEntryPoint>
+    <ReloadFirmwareOnReset>false</ReloadFirmwareOnReset>
+    <ValidateEndOfStackAddress>true</ValidateEndOfStackAddress>
+    <StopAtEntryPoint>false</StopAtEntryPoint>
+    <EnableVirtualHalts>false</EnableVirtualHalts>
+    <DynamicAnalysisSettings />
+    <EndOfStackSymbol>_estack</EndOfStackSymbol>
+    <TimestampProviderTicksPerSecond>0</TimestampProviderTicksPerSecond>
+    <KeepConsoleAfterExit>false</KeepConsoleAfterExit>
+    <CheckInterfaceDrivers>true</CheckInterfaceDrivers>
+  </Debug>
+</VisualGDBProjectSettings2>

+ 135 - 0
examples/arm-cm/dpp_nucleo-l152re/qk/visualgdb/dpp-qk-Release.vgdbsettings

@@ -0,0 +1,135 @@
+<?xml version="1.0"?>
+<VisualGDBProjectSettings2 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
+  <ConfigurationName>Release</ConfigurationName>
+  <Project xsi:type="com.visualgdb.project.embedded">
+    <CustomSourceDirectories>
+      <Directories />
+      <PathStyle>MinGWUnixSlash</PathStyle>
+      <LocalDirForAbsolutePaths>$(ToolchainDir)</LocalDirForAbsolutePaths>
+    </CustomSourceDirectories>
+    <MainSourceDirectory>$(ProjectDir)</MainSourceDirectory>
+    <ExportAdvancedBuildVariables>false</ExportAdvancedBuildVariables>
+    <EmbeddedProfileFile>stm32.xml</EmbeddedProfileFile>
+  </Project>
+  <Build xsi:type="com.visualgdb.build.msbuild">
+    <ToolchainID>
+      <Version>
+        <Revision>0</Revision>
+      </Version>
+    </ToolchainID>
+    <ProjectFile>dpp-qk.vcxproj</ProjectFile>
+    <RemoteBuildEnvironment>
+      <Records />
+      <EnvironmentSetupFiles />
+    </RemoteBuildEnvironment>
+    <ParallelJobCount>1</ParallelJobCount>
+    <SuppressDirectoryChangeMessages>true</SuppressDirectoryChangeMessages>
+  </Build>
+  <CustomBuild>
+    <PreSyncActions />
+    <PreBuildActions />
+    <PostBuildActions />
+    <PreCleanActions />
+    <PostCleanActions />
+  </CustomBuild>
+  <CustomDebug>
+    <PreDebugActions />
+    <PostDebugActions />
+    <DebugStopActions />
+    <BreakMode>Default</BreakMode>
+  </CustomDebug>
+  <CustomShortcuts>
+    <Shortcuts />
+    <ShowMessageAfterExecuting>true</ShowMessageAfterExecuting>
+  </CustomShortcuts>
+  <UserDefinedVariables />
+  <ImportedPropertySheets />
+  <CodeSense>
+    <Enabled>Unknown</Enabled>
+    <ExtraSettings>
+      <HideErrorsInSystemHeaders>true</HideErrorsInSystemHeaders>
+      <SupportLightweightReferenceAnalysis>true</SupportLightweightReferenceAnalysis>
+      <CheckForClangFormatFiles>true</CheckForClangFormatFiles>
+      <FormattingEngine xsi:nil="true" />
+    </ExtraSettings>
+    <CodeAnalyzerSettings>
+      <Enabled>false</Enabled>
+    </CodeAnalyzerSettings>
+  </CodeSense>
+  <BuildContextDirectory>VisualGDB\VisualGDBCache</BuildContextDirectory>
+  <Configurations />
+  <ProgramArgumentsSuggestions />
+  <Debug xsi:type="com.visualgdb.debug.embedded">
+    <AdditionalStartupCommands />
+    <AdditionalGDBSettings>
+      <Features>
+        <DisableAutoDetection>false</DisableAutoDetection>
+        <UseFrameParameter>false</UseFrameParameter>
+        <SimpleValuesFlagSupported>false</SimpleValuesFlagSupported>
+        <ListLocalsSupported>false</ListLocalsSupported>
+        <ByteLevelMemoryCommandsAvailable>false</ByteLevelMemoryCommandsAvailable>
+        <ThreadInfoSupported>false</ThreadInfoSupported>
+        <PendingBreakpointsSupported>false</PendingBreakpointsSupported>
+        <SupportTargetCommand>false</SupportTargetCommand>
+        <ReliableBreakpointNotifications>false</ReliableBreakpointNotifications>
+      </Features>
+      <EnableSmartStepping>false</EnableSmartStepping>
+      <FilterSpuriousStoppedNotifications>false</FilterSpuriousStoppedNotifications>
+      <ForceSingleThreadedMode>false</ForceSingleThreadedMode>
+      <UseAppleExtensions>false</UseAppleExtensions>
+      <CanAcceptCommandsWhileRunning>false</CanAcceptCommandsWhileRunning>
+      <MakeLogFile>false</MakeLogFile>
+      <IgnoreModuleEventsWhileStepping>true</IgnoreModuleEventsWhileStepping>
+      <UseRelativePathsOnly>false</UseRelativePathsOnly>
+      <ExitAction>None</ExitAction>
+      <DisableDisassembly>false</DisableDisassembly>
+      <ExamineMemoryWithXCommand>false</ExamineMemoryWithXCommand>
+      <StepIntoNewInstanceEntry>main</StepIntoNewInstanceEntry>
+      <ExamineRegistersInRawFormat>true</ExamineRegistersInRawFormat>
+      <DisableSignals>false</DisableSignals>
+      <EnableAsyncExecutionMode>false</EnableAsyncExecutionMode>
+      <EnableNonStopMode>false</EnableNonStopMode>
+      <MaxBreakpointLimit>0</MaxBreakpointLimit>
+    </AdditionalGDBSettings>
+    <DebugMethod>
+      <ID>com.sysprogs.arm.openocd</ID>
+      <InterfaceID>stlink-v2-1</InterfaceID>
+      <InterfaceSerialNumber>066EFF495056805087184715</InterfaceSerialNumber>
+      <Configuration xsi:type="com.visualgdb.edp.openocd.settings">
+        <CommandLine>-f interface/stlink-v2-1.cfg -f target/stm32l1.cfg -c init -c "reset init"</CommandLine>
+        <ExtraParameters>
+          <Frequency xsi:nil="true" />
+          <BoostedFrequency xsi:nil="true" />
+          <ConnectUnderReset>false</ConnectUnderReset>
+        </ExtraParameters>
+        <LoadProgressGUIThreshold>131072</LoadProgressGUIThreshold>
+        <ProgramMode>Enabled</ProgramMode>
+        <StartupCommands>
+          <string>set remotetimeout 60</string>
+          <string>target remote :$$SYS:GDB_PORT$$</string>
+          <string>mon halt</string>
+          <string>mon reset init</string>
+          <string>load</string>
+        </StartupCommands>
+        <ProgramFLASHUsingExternalTool>false</ProgramFLASHUsingExternalTool>
+        <PreferredGDBPort>0</PreferredGDBPort>
+        <PreferredTelnetPort>0</PreferredTelnetPort>
+        <AlwaysPassSerialNumber>false</AlwaysPassSerialNumber>
+        <SelectedCoreIndex xsi:nil="true" />
+      </Configuration>
+    </DebugMethod>
+    <AutoDetectRTOS>true</AutoDetectRTOS>
+    <SemihostingSupport>Auto</SemihostingSupport>
+    <SemihostingPollingDelay>0</SemihostingPollingDelay>
+    <StepIntoEntryPoint>false</StepIntoEntryPoint>
+    <ReloadFirmwareOnReset>false</ReloadFirmwareOnReset>
+    <ValidateEndOfStackAddress>true</ValidateEndOfStackAddress>
+    <StopAtEntryPoint>false</StopAtEntryPoint>
+    <EnableVirtualHalts>false</EnableVirtualHalts>
+    <DynamicAnalysisSettings />
+    <EndOfStackSymbol>_estack</EndOfStackSymbol>
+    <TimestampProviderTicksPerSecond>0</TimestampProviderTicksPerSecond>
+    <KeepConsoleAfterExit>false</KeepConsoleAfterExit>
+    <CheckInterfaceDrivers>true</CheckInterfaceDrivers>
+  </Debug>
+</VisualGDBProjectSettings2>

+ 134 - 0
examples/arm-cm/dpp_nucleo-l152re/qk/visualgdb/dpp-qk-Spy.vgdbsettings

@@ -0,0 +1,134 @@
+<?xml version="1.0"?>
+<VisualGDBProjectSettings2 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
+  <ConfigurationName>Spy</ConfigurationName>
+  <Project xsi:type="com.visualgdb.project.embedded">
+    <CustomSourceDirectories>
+      <Directories />
+      <PathStyle>MinGWUnixSlash</PathStyle>
+      <LocalDirForAbsolutePaths>$(ToolchainDir)</LocalDirForAbsolutePaths>
+    </CustomSourceDirectories>
+    <MainSourceDirectory>$(ProjectDir)</MainSourceDirectory>
+    <ExportAdvancedBuildVariables>false</ExportAdvancedBuildVariables>
+    <EmbeddedProfileFile>stm32.xml</EmbeddedProfileFile>
+  </Project>
+  <Build xsi:type="com.visualgdb.build.msbuild">
+    <ToolchainID>
+      <Version>
+        <Revision>0</Revision>
+      </Version>
+    </ToolchainID>
+    <ProjectFile>dpp-qk.vcxproj</ProjectFile>
+    <RemoteBuildEnvironment>
+      <Records />
+    </RemoteBuildEnvironment>
+    <ParallelJobCount>1</ParallelJobCount>
+    <SuppressDirectoryChangeMessages>true</SuppressDirectoryChangeMessages>
+  </Build>
+  <CustomBuild>
+    <PreSyncActions />
+    <PreBuildActions />
+    <PostBuildActions />
+    <PreCleanActions />
+    <PostCleanActions />
+  </CustomBuild>
+  <CustomDebug>
+    <PreDebugActions />
+    <PostDebugActions />
+    <DebugStopActions />
+    <BreakMode>Default</BreakMode>
+  </CustomDebug>
+  <CustomShortcuts>
+    <Shortcuts />
+    <ShowMessageAfterExecuting>true</ShowMessageAfterExecuting>
+  </CustomShortcuts>
+  <UserDefinedVariables />
+  <ImportedPropertySheets />
+  <CodeSense>
+    <Enabled>Unknown</Enabled>
+    <ExtraSettings>
+      <HideErrorsInSystemHeaders>true</HideErrorsInSystemHeaders>
+      <SupportLightweightReferenceAnalysis>true</SupportLightweightReferenceAnalysis>
+      <CheckForClangFormatFiles>true</CheckForClangFormatFiles>
+      <FormattingEngine xsi:nil="true" />
+    </ExtraSettings>
+    <CodeAnalyzerSettings>
+      <Enabled>false</Enabled>
+    </CodeAnalyzerSettings>
+  </CodeSense>
+  <BuildContextDirectory>VisualGDB\VisualGDBCache</BuildContextDirectory>
+  <Configurations />
+  <ProgramArgumentsSuggestions />
+  <Debug xsi:type="com.visualgdb.debug.embedded">
+    <AdditionalStartupCommands />
+    <AdditionalGDBSettings>
+      <Features>
+        <DisableAutoDetection>false</DisableAutoDetection>
+        <UseFrameParameter>false</UseFrameParameter>
+        <SimpleValuesFlagSupported>false</SimpleValuesFlagSupported>
+        <ListLocalsSupported>false</ListLocalsSupported>
+        <ByteLevelMemoryCommandsAvailable>false</ByteLevelMemoryCommandsAvailable>
+        <ThreadInfoSupported>false</ThreadInfoSupported>
+        <PendingBreakpointsSupported>false</PendingBreakpointsSupported>
+        <SupportTargetCommand>false</SupportTargetCommand>
+        <ReliableBreakpointNotifications>false</ReliableBreakpointNotifications>
+      </Features>
+      <EnableSmartStepping>false</EnableSmartStepping>
+      <FilterSpuriousStoppedNotifications>false</FilterSpuriousStoppedNotifications>
+      <ForceSingleThreadedMode>false</ForceSingleThreadedMode>
+      <UseAppleExtensions>false</UseAppleExtensions>
+      <CanAcceptCommandsWhileRunning>false</CanAcceptCommandsWhileRunning>
+      <MakeLogFile>false</MakeLogFile>
+      <IgnoreModuleEventsWhileStepping>true</IgnoreModuleEventsWhileStepping>
+      <UseRelativePathsOnly>false</UseRelativePathsOnly>
+      <ExitAction>None</ExitAction>
+      <DisableDisassembly>false</DisableDisassembly>
+      <ExamineMemoryWithXCommand>false</ExamineMemoryWithXCommand>
+      <StepIntoNewInstanceEntry>main</StepIntoNewInstanceEntry>
+      <ExamineRegistersInRawFormat>true</ExamineRegistersInRawFormat>
+      <DisableSignals>false</DisableSignals>
+      <EnableAsyncExecutionMode>false</EnableAsyncExecutionMode>
+      <EnableNonStopMode>false</EnableNonStopMode>
+      <MaxBreakpointLimit>0</MaxBreakpointLimit>
+    </AdditionalGDBSettings>
+    <DebugMethod>
+      <ID>com.sysprogs.arm.openocd</ID>
+      <InterfaceID>stlink-v2-1</InterfaceID>
+      <InterfaceSerialNumber>066EFF495056805087184715</InterfaceSerialNumber>
+      <Configuration xsi:type="com.visualgdb.edp.openocd.settings">
+        <CommandLine>-f interface/stlink-v2-1.cfg -f target/stm32l1.cfg -c init -c "reset init"</CommandLine>
+        <ExtraParameters>
+          <Frequency xsi:nil="true" />
+          <BoostedFrequency xsi:nil="true" />
+          <ConnectUnderReset>false</ConnectUnderReset>
+        </ExtraParameters>
+        <LoadProgressGUIThreshold>131072</LoadProgressGUIThreshold>
+        <ProgramMode>Enabled</ProgramMode>
+        <StartupCommands>
+          <string>set remotetimeout 60</string>
+          <string>target remote :$$SYS:GDB_PORT$$</string>
+          <string>mon halt</string>
+          <string>mon reset init</string>
+          <string>load</string>
+        </StartupCommands>
+        <ProgramFLASHUsingExternalTool>false</ProgramFLASHUsingExternalTool>
+        <PreferredGDBPort>0</PreferredGDBPort>
+        <PreferredTelnetPort>0</PreferredTelnetPort>
+        <AlwaysPassSerialNumber>false</AlwaysPassSerialNumber>
+        <SelectedCoreIndex xsi:nil="true" />
+      </Configuration>
+    </DebugMethod>
+    <AutoDetectRTOS>true</AutoDetectRTOS>
+    <SemihostingSupport>Auto</SemihostingSupport>
+    <SemihostingPollingDelay>0</SemihostingPollingDelay>
+    <StepIntoEntryPoint>false</StepIntoEntryPoint>
+    <ReloadFirmwareOnReset>false</ReloadFirmwareOnReset>
+    <ValidateEndOfStackAddress>true</ValidateEndOfStackAddress>
+    <StopAtEntryPoint>false</StopAtEntryPoint>
+    <EnableVirtualHalts>false</EnableVirtualHalts>
+    <DynamicAnalysisSettings />
+    <EndOfStackSymbol>_estack</EndOfStackSymbol>
+    <TimestampProviderTicksPerSecond>0</TimestampProviderTicksPerSecond>
+    <KeepConsoleAfterExit>false</KeepConsoleAfterExit>
+    <CheckInterfaceDrivers>true</CheckInterfaceDrivers>
+  </Debug>
+</VisualGDBProjectSettings2>

+ 139 - 0
examples/arm-cm/dpp_nucleo-l152re/qk/visualgdb/dpp-qk.ld

@@ -0,0 +1,139 @@
+/*****************************************************************************
+* Product: Linker script for for STM32L152RET6, GNU-ARM linker
+* Last Updated for Version: 5.9.8
+* Date of the Last Update:  2017-09-13
+*
+*                    Q u a n t u m     L e a P s
+*                    ---------------------------
+*                    innovating embedded systems
+*
+* Copyright (C) Quantum Leaps, LLC. All rights reserved.
+*
+* This program is open source software: you can redistribute it and/or
+* modify it under the terms of the GNU General Public License as published
+* by the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* Alternatively, this program may be distributed and modified under the
+* terms of Quantum Leaps commercial licenses, which expressly supersede
+* the GNU General Public License and are specifically designed for
+* licensees interested in retaining the proprietary status of their code.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program. If not, see <http://www.gnu.org/licenses/>.
+*
+* Contact information:
+* https://state-machine.com
+* mailto:info@state-machine.com
+*****************************************************************************/
+OUTPUT_FORMAT("elf32-littlearm", "elf32-bigarm", "elf32-littlearm")
+OUTPUT_ARCH(arm)
+ENTRY(Reset_Handler)  /* entry Point */
+
+MEMORY {              /* memory map of STM32L152RET6 */
+    ROM (rx)  : ORIGIN = 0x08000000, LENGTH = 512K
+    RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 80K
+}
+
+/* The size of the stack used by the application. NOTE: you need to adjust  */
+STACK_SIZE = 1024;
+
+/* The size of the heap used by the application. NOTE: you need to adjust   */
+HEAP_SIZE = 0;
+
+SECTIONS {
+
+    .isr_vector : {        /* the vector table goes FIRST into ROM */
+        KEEP(*(.isr_vector)) /* vector table */
+        . = ALIGN(4);
+    } >ROM
+
+    .text : {              /* code and constants */
+        . = ALIGN(4);
+        *(.text)           /* .text sections (code) */
+        *(.text*)          /* .text* sections (code) */
+        *(.rodata)         /* .rodata sections (constants, strings, etc.) */
+        *(.rodata*)        /* .rodata* sections (constants, strings, etc.) */
+
+        KEEP (*(.init))
+        KEEP (*(.fini))
+
+        . = ALIGN(4);
+    } >ROM
+
+    .preinit_array : {
+        PROVIDE_HIDDEN (__preinit_array_start = .);
+        KEEP (*(.preinit_array*))
+        PROVIDE_HIDDEN (__preinit_array_end = .);
+    } >ROM
+
+    .init_array : {
+        PROVIDE_HIDDEN (__init_array_start = .);
+        KEEP (*(SORT(.init_array.*)))
+        KEEP (*(.init_array*))
+        PROVIDE_HIDDEN (__init_array_end = .);
+    } >ROM
+
+    .fini_array : {
+        PROVIDE_HIDDEN (__fini_array_start = .);
+        KEEP (*(.fini_array*))
+        KEEP (*(SORT(.fini_array.*)))
+        PROVIDE_HIDDEN (__fini_array_end = .);
+    } >ROM
+
+    _etext = .;            /* global symbols at end of code */
+
+    .stack : {
+        __stack_start__ = .;
+        . = . + STACK_SIZE;
+        . = ALIGN(4);
+        __stack_end__ = .;
+    } >RAM
+
+    .data :  AT (_etext) {
+        __data_load = LOADADDR (.data);
+        __data_start = .;
+        *(.data)           /* .data sections */
+        *(.data*)          /* .data* sections */
+        . = ALIGN(4);
+        __data_end__ = .;
+        _edata = __data_end__;
+    } >RAM
+
+    .bss : {
+        __bss_start__ = .;
+        *(.bss)
+        *(.bss*)
+        *(COMMON)
+        . = ALIGN(4);
+        _ebss = .;         /* define a global symbol at bss end */
+        __bss_end__ = .;
+    } >RAM
+
+    __exidx_start = .;
+    .ARM.exidx   : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) } >RAM
+    __exidx_end = .;
+
+    PROVIDE ( end = _ebss );
+    PROVIDE ( _end = _ebss );
+    PROVIDE ( __end__ = _ebss );
+
+    .heap : {
+        __heap_start__ = .;
+        . = . + HEAP_SIZE;
+        . = ALIGN(4);
+        __heap_end__ = .;
+    } >RAM
+
+    /* Remove information from the standard libraries */
+    /DISCARD/ : {
+        libc.a ( * )
+        libm.a ( * )
+        libgcc.a ( * )
+    }
+}

+ 28 - 0
examples/arm-cm/dpp_nucleo-l152re/qk/visualgdb/dpp-qk.sln

@@ -0,0 +1,28 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 16
+VisualStudioVersion = 16.0.30517.126
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "dpp-qk", "dpp-qk.vcxproj", "{33464F24-9B0F-4276-89FF-8D462C1392EE}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|VisualGDB = Debug|VisualGDB
+		Release|VisualGDB = Release|VisualGDB
+		Spy|VisualGDB = Spy|VisualGDB
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{33464F24-9B0F-4276-89FF-8D462C1392EE}.Debug|VisualGDB.ActiveCfg = Debug|VisualGDB
+		{33464F24-9B0F-4276-89FF-8D462C1392EE}.Debug|VisualGDB.Build.0 = Debug|VisualGDB
+		{33464F24-9B0F-4276-89FF-8D462C1392EE}.Release|VisualGDB.ActiveCfg = Release|VisualGDB
+		{33464F24-9B0F-4276-89FF-8D462C1392EE}.Release|VisualGDB.Build.0 = Release|VisualGDB
+		{33464F24-9B0F-4276-89FF-8D462C1392EE}.Spy|VisualGDB.ActiveCfg = Spy|VisualGDB
+		{33464F24-9B0F-4276-89FF-8D462C1392EE}.Spy|VisualGDB.Build.0 = Spy|VisualGDB
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+	GlobalSection(ExtensibilityGlobals) = postSolution
+		SolutionGuid = {35222B4D-B267-427E-8293-873EDD0720C0}
+	EndGlobalSection
+EndGlobal

+ 148 - 0
examples/arm-cm/dpp_nucleo-l152re/qk/visualgdb/dpp-qk.vcxproj

@@ -0,0 +1,148 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|VisualGDB">
+      <Configuration>Debug</Configuration>
+      <Platform>VisualGDB</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|VisualGDB">
+      <Configuration>Release</Configuration>
+      <Platform>VisualGDB</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Spy|VisualGDB">
+      <Configuration>Spy</Configuration>
+      <Platform>VisualGDB</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <VCProjectVersion>16.0</VCProjectVersion>
+    <ProjectGuid>{33464F24-9B0F-4276-89FF-8D462C1392EE}</ProjectGuid>
+    <BSP_ID>com.sysprogs.arm.stm32</BSP_ID>
+    <BSP_VERSION>2020.06</BSP_VERSION>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Debug|VisualGDB'">
+    <MCUPropertyListFile>$(ProjectDir)stm32.props</MCUPropertyListFile>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Spy|VisualGDB'" Label="Configuration">
+    <MCUPropertyListFile>$(ProjectDir)stm32.props</MCUPropertyListFile>
+  </PropertyGroup>
+  <PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Release|VisualGDB'">
+    <MCUPropertyListFile>$(ProjectDir)stm32.props</MCUPropertyListFile>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Label="Shared">
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|VisualGDB'">
+    <GNUConfigurationType>Debug</GNUConfigurationType>
+    <ToolchainID>d883dc4a-545e-4d48-bba0-41645b13fd69</ToolchainID>
+    <ToolchainVersion>9.3.1/(GNU/r0</ToolchainVersion>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Spy|VisualGDB'">
+    <GNUConfigurationType>Debug</GNUConfigurationType>
+    <ToolchainID>d883dc4a-545e-4d48-bba0-41645b13fd69</ToolchainID>
+    <ToolchainVersion>9.3.1/(GNU/r0</ToolchainVersion>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|VisualGDB'">
+    <ToolchainID>d883dc4a-545e-4d48-bba0-41645b13fd69</ToolchainID>
+    <ToolchainVersion>9.3.1/(GNU/r0</ToolchainVersion>
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|VisualGDB'">
+    <ClCompile>
+      <AdditionalIncludeDirectories>..;../..;../../../../../include;../../../../../src;../../../../../ports/arm-cm/qk/gnu;../../../../../3rd_party/CMSIS/Include;../../../../../3rd_party/nucleo-l152re;%(ClCompile.AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>DEBUG=1;%(ClCompile.PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <Link>
+      <AdditionalLinkerInputs>;%(Link.AdditionalLinkerInputs)</AdditionalLinkerInputs>
+      <LibrarySearchDirectories>;%(Link.LibrarySearchDirectories)</LibrarySearchDirectories>
+      <AdditionalLibraryNames>;%(Link.AdditionalLibraryNames)</AdditionalLibraryNames>
+      <LinkerScript>dpp-qk.ld</LinkerScript>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Spy|VisualGDB'">
+    <ClCompile>
+      <AdditionalIncludeDirectories>..;../..;../../../../../include;../../../../../src;../../../../../ports/arm-cm/qk/gnu;../../../../../3rd_party/CMSIS/Include;../../../../../3rd_party/nucleo-l152re;%(ClCompile.AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>DEBUG=1;Q_SPY;%(ClCompile.PreprocessorDefinitions)</PreprocessorDefinitions>
+      <Optimization>O3</Optimization>
+    </ClCompile>
+    <Link>
+      <AdditionalLinkerInputs>;%(Link.AdditionalLinkerInputs)</AdditionalLinkerInputs>
+      <LibrarySearchDirectories>;%(Link.LibrarySearchDirectories)</LibrarySearchDirectories>
+      <AdditionalLibraryNames>;%(Link.AdditionalLibraryNames)</AdditionalLibraryNames>
+      <LinkerScript>dpp-qk.ld</LinkerScript>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|VisualGDB'">
+    <ClCompile>
+      <AdditionalIncludeDirectories>..;../..;../../../../../include;../../../../../src;../../../../../ports/arm-cm/qk/gnu;../../../../../3rd_party/CMSIS/Include;../../../../../3rd_party/nucleo-l152re;%(ClCompile.AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>NDEBUG=1;RELEASE=1;%(ClCompile.PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <Link>
+      <AdditionalLinkerInputs>;%(Link.AdditionalLinkerInputs)</AdditionalLinkerInputs>
+      <LibrarySearchDirectories>;%(Link.LibrarySearchDirectories)</LibrarySearchDirectories>
+      <AdditionalLibraryNames>;%(Link.AdditionalLibraryNames)</AdditionalLibraryNames>
+      <LinkerScript>dpp-qk.ld</LinkerScript>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ClCompile Include="..\..\..\..\..\3rd_party\nucleo-l152re\gnu\startup_stm32l1xx.c" />
+    <ClCompile Include="..\..\..\..\..\3rd_party\nucleo-l152re\system_stm32l1xx.c" />
+    <ClCompile Include="..\..\..\..\..\include\qstamp.c" />
+    <ClCompile Include="..\..\..\..\..\ports\arm-cm\qk\gnu\qk_port.c" />
+    <ClCompile Include="..\..\..\..\..\src\qf\qep_hsm.c" />
+    <ClCompile Include="..\..\..\..\..\src\qf\qep_msm.c" />
+    <ClCompile Include="..\..\..\..\..\src\qf\qf_act.c" />
+    <ClCompile Include="..\..\..\..\..\src\qf\qf_actq.c" />
+    <ClCompile Include="..\..\..\..\..\src\qf\qf_defer.c" />
+    <ClCompile Include="..\..\..\..\..\src\qf\qf_dyn.c" />
+    <ClCompile Include="..\..\..\..\..\src\qf\qf_mem.c" />
+    <ClCompile Include="..\..\..\..\..\src\qf\qf_ps.c" />
+    <ClCompile Include="..\..\..\..\..\src\qf\qf_qact.c" />
+    <ClCompile Include="..\..\..\..\..\src\qf\qf_qeq.c" />
+    <ClCompile Include="..\..\..\..\..\src\qf\qf_qmact.c" />
+    <ClCompile Include="..\..\..\..\..\src\qf\qf_time.c" />
+    <ClCompile Include="..\..\..\..\..\src\qk\qk.c" />
+    <ClCompile Include="..\..\..\..\..\src\qs\qs.c">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|VisualGDB'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|VisualGDB'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Spy|VisualGDB'">false</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\..\..\..\src\qs\qs_fp.c">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|VisualGDB'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Spy|VisualGDB'">false</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|VisualGDB'">true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\..\..\..\src\qs\qs_rx.c">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|VisualGDB'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Spy|VisualGDB'">false</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|VisualGDB'">true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\..\philo.c" />
+    <ClCompile Include="..\..\table.c" />
+    <ClCompile Include="..\bsp.c" />
+    <ClCompile Include="..\main.c" />
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+  <ItemGroup>
+    <None Include="stm32.props" />
+    <None Include="dpp-qk-Debug.vgdbsettings" />
+    <None Include="dpp-qk-Release.vgdbsettings" />
+    <None Include="stm32.xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="..\..\..\..\..\ports\arm-cm\qk\gnu\qep_port.h" />
+    <ClInclude Include="..\..\..\..\..\ports\arm-cm\qk\gnu\qf_port.h" />
+    <ClInclude Include="..\..\..\..\..\ports\arm-cm\qk\gnu\qk_port.h" />
+    <ClInclude Include="..\..\..\..\..\ports\arm-cm\qk\gnu\qs_port.h" />
+    <ClInclude Include="..\..\bsp.h" />
+    <ClInclude Include="..\..\dpp.h" />
+  </ItemGroup>
+  <ItemGroup>
+    <Text Include="..\..\README.txt" />
+  </ItemGroup>
+</Project>

+ 137 - 0
examples/arm-cm/dpp_nucleo-l152re/qk/visualgdb/dpp-qk.vcxproj.filters

@@ -0,0 +1,137 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup>
+    <Filter Include="Source files">
+      <UniqueIdentifier>{c6017ab7-6299-4b81-acee-c1763a48750d}</UniqueIdentifier>
+      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+    </Filter>
+    <Filter Include="VisualGDB settings">
+      <UniqueIdentifier>{c919b77d-bd4e-42dd-90aa-1ccb1597d180}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="nucleo-l152re">
+      <UniqueIdentifier>{d32a0836-a71c-48cd-a0dc-003d1237eae2}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="QS">
+      <UniqueIdentifier>{546cf9df-d280-46a0-8461-b51c82a3baa5}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="QP-port">
+      <UniqueIdentifier>{0d86c7f6-a92e-4327-835c-5bbf87534465}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="QP">
+      <UniqueIdentifier>{3c579ef5-dace-45b5-8c74-75413c8bb3b6}</UniqueIdentifier>
+    </Filter>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="stm32.props">
+      <Filter>nucleo-l152re</Filter>
+    </None>
+    <None Include="dpp-qk-Debug.vgdbsettings">
+      <Filter>VisualGDB settings</Filter>
+    </None>
+    <None Include="dpp-qk-Release.vgdbsettings">
+      <Filter>VisualGDB settings</Filter>
+    </None>
+    <None Include="stm32.xml">
+      <Filter>VisualGDB settings</Filter>
+    </None>
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="..\bsp.c">
+      <Filter>Source files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\main.c">
+      <Filter>Source files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\philo.c">
+      <Filter>Source files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\table.c">
+      <Filter>Source files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\..\..\src\qf\qep_hsm.c">
+      <Filter>QP</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\..\..\src\qf\qep_msm.c">
+      <Filter>QP</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\..\..\src\qf\qf_act.c">
+      <Filter>QP</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\..\..\src\qf\qf_actq.c">
+      <Filter>QP</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\..\..\src\qf\qf_defer.c">
+      <Filter>QP</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\..\..\src\qf\qf_dyn.c">
+      <Filter>QP</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\..\..\src\qf\qf_mem.c">
+      <Filter>QP</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\..\..\src\qf\qf_ps.c">
+      <Filter>QP</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\..\..\src\qf\qf_qact.c">
+      <Filter>QP</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\..\..\src\qf\qf_qeq.c">
+      <Filter>QP</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\..\..\src\qf\qf_qmact.c">
+      <Filter>QP</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\..\..\src\qf\qf_time.c">
+      <Filter>QP</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\..\..\src\qk\qk.c">
+      <Filter>QP</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\..\..\src\qs\qs.c">
+      <Filter>QS</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\..\..\src\qs\qs_fp.c">
+      <Filter>QS</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\..\..\src\qs\qs_rx.c">
+      <Filter>QS</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\..\..\ports\arm-cm\qk\gnu\qk_port.c">
+      <Filter>QP-port</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\..\..\3rd_party\nucleo-l152re\system_stm32l1xx.c">
+      <Filter>nucleo-l152re</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\..\..\3rd_party\nucleo-l152re\gnu\startup_stm32l1xx.c">
+      <Filter>nucleo-l152re</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\..\..\..\include\qstamp.c">
+      <Filter>Source files</Filter>
+    </ClCompile>
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="..\..\bsp.h">
+      <Filter>Source files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\dpp.h">
+      <Filter>Source files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\..\..\ports\arm-cm\qk\gnu\qep_port.h">
+      <Filter>QP-port</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\..\..\ports\arm-cm\qk\gnu\qf_port.h">
+      <Filter>QP-port</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\..\..\ports\arm-cm\qk\gnu\qk_port.h">
+      <Filter>QP-port</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\..\..\..\ports\arm-cm\qk\gnu\qs_port.h">
+      <Filter>QP-port</Filter>
+    </ClInclude>
+  </ItemGroup>
+  <ItemGroup>
+    <Text Include="..\..\README.txt">
+      <Filter>Source files</Filter>
+    </Text>
+  </ItemGroup>
+</Project>

+ 31 - 0
examples/arm-cm/dpp_nucleo-l152re/qk/visualgdb/stm32.props

@@ -0,0 +1,31 @@
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+<!-- 
+	This file is generated by VisualGDB.
+	It contains GCC settings automatically derived from the board support package (BSP).
+	DO NOT EDIT MANUALLY. THE FILE WILL BE OVERWRITTEN. 
+	Use VisualGDB Project Properties dialog or modify Makefile or per-configuration .mak files instead.
+-->
+
+<!-- In order to build this project manually (outside VisualGDB), please provide TOOLCHAIN_ROOT, BSP_ROOT, EFP_BASE and TESTFW_BASE variables via Environment or Make command line -->
+	<ItemDefinitionGroup>
+		<ClCompile>
+			<PreprocessorDefinitions>ARM_MATH_CM3;flash_layout;STM32L152RE;STM32L152xE;%(ClCompile.PreprocessorDefinitions)</PreprocessorDefinitions>
+			<AdditionalIncludeDirectories>%(ClCompile.AdditionalIncludeDirectories);$(ProjectDir);$(BSP_ROOT)/STM32L1xxxx/STM32L1xx_HAL_Driver/Inc;$(BSP_ROOT)/STM32L1xxxx/STM32L1xx_HAL_Driver/Inc/Legacy;$(BSP_ROOT)/STM32L1xxxx/CMSIS_HAL/Device/ST/STM32L1xx/Include;$(BSP_ROOT)/STM32L1xxxx/CMSIS_HAL/Core/Include;$(BSP_ROOT)/STM32L1xxxx/CMSIS_HAL/Include</AdditionalIncludeDirectories>
+		</ClCompile>
+	</ItemDefinitionGroup>
+	<ItemDefinitionGroup>
+		<Link>
+			<LinkerScript Condition="'%(Link.LinkerScript)' == ''">$(BSP_ROOT)/STM32L1xxxx/LinkerScripts/STM32L152RE_flash.lds</LinkerScript>
+		</Link>
+	</ItemDefinitionGroup>
+	<PropertyGroup>
+		<DefaultLinkerScript>$(BSP_ROOT)/STM32L1xxxx/LinkerScripts/STM32L152RE_flash.lds</DefaultLinkerScript>
+	</PropertyGroup>
+
+	<ItemDefinitionGroup>
+		<ToolchainSettingsContainer>
+			<ARMCPU  Condition="'%(ToolchainSettingsContainer.ARMCPU)' == ''">cortex-m3</ARMCPU>
+			<InstructionSet  Condition="'%(ToolchainSettingsContainer.InstructionSet)' == ''">THUMB</InstructionSet>
+		</ToolchainSettingsContainer>
+	</ItemDefinitionGroup>
+</Project>

+ 39 - 0
examples/arm-cm/dpp_nucleo-l152re/qk/visualgdb/stm32.xml

@@ -0,0 +1,39 @@
+<?xml version="1.0"?>
+<EmbeddedProfile xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
+  <ToolchainID>d883dc4a-545e-4d48-bba0-41645b13fd69</ToolchainID>
+  <ToolchainVersion>
+    <GCC>9.3.1</GCC>
+    <GDB>(GNU</GDB>
+    <Revision>0</Revision>
+  </ToolchainVersion>
+  <BspID>com.sysprogs.arm.stm32</BspID>
+  <BspVersion>2020.06</BspVersion>
+  <McuID>STM32L152RE</McuID>
+  <MCUDefinitionFile>STM32L1xxxx/DeviceDefinitions/stm32l152xe.xml</MCUDefinitionFile>
+  <MCUProperties>
+    <Entries>
+      <KeyValue>
+        <Key>com.sysprogs.bspoptions.primary_memory</Key>
+        <Value>flash</Value>
+      </KeyValue>
+      <KeyValue>
+        <Key>com.sysprogs.mcuoptions.ignore_startup_file</Key>
+      </KeyValue>
+    </Entries>
+  </MCUProperties>
+  <BSPSourceFolderName>Device-specific files</BSPSourceFolderName>
+  <MCUMakFile>stm32.mak</MCUMakFile>
+  <ReferencedFrameworks>
+    <string>com.sysprogs.arm.stm32.ll</string>
+  </ReferencedFrameworks>
+  <FrameworkProperties>
+    <Entries>
+      <KeyValue>
+        <Key>com.sysprogs.bspoptions.stm32.ll_driver</Key>
+      </KeyValue>
+    </Entries>
+  </FrameworkProperties>
+  <TestFrameworkProperties>
+    <Entries />
+  </TestFrameworkProperties>
+</EmbeddedProfile>

+ 11 - 9
examples/arm-cm/dpp_nucleo-l152re/qv/bsp.c

@@ -1,13 +1,13 @@
 /*****************************************************************************
 * Product: DPP example, STM32 NUCLEO-L152RE board, cooperative QV kernel
-* Last Updated for Version: 6.9.0
-* Date of the Last Update:  2020-08-14
+* Last updated for version 6.9.1
+* Last updated on  2020-09-22
 *
-*                    Q u a n t u m     L e a P s
-*                    ---------------------------
-*                    innovating embedded systems
+*                    Q u a n t u m  L e a P s
+*                    ------------------------
+*                    Modern Embedded Software
 *
-* Copyright (C) Quantum Leaps, LLC. All rights reserved.
+* Copyright (C) 2005-2020 Quantum Leaps, LLC. All rights reserved.
 *
 * This program is open source software: you can redistribute it and/or
 * modify it under the terms of the GNU General Public License as published
@@ -106,6 +106,7 @@ void SysTick_Handler(void) { /* system clock tick ISR -- kernel aware */
             QF_PUBLISH(&serveEvt, &l_SysTick_Handler);
         }
     }
+    QV_ARM_ERRATUM_838869();
 }
 /*..........................................................................*/
 #if Q_SPY
@@ -115,6 +116,7 @@ void USART2_IRQHandler(void) { /* kernel UNAWARE interrupt */
         uint32_t b = USART2->DR;
         QS_RX_PUT(b);
     }
+    QV_ARM_ERRATUM_838869();
 }
 #endif
 
@@ -155,8 +157,8 @@ void BSP_init(void) {
     QS_USR_DICTIONARY(PHILO_STAT);
 
     /* setup the QS filters... */
-    QS_FILTER_ON(QS_ALL_RECORDS);
-    QS_FILTER_OFF(QS_QF_TICK);
+    QS_GLB_FILTER(QS_ALL_RECORDS);
+    QS_GLB_FILTER(-QS_QF_TICK);
 }
 /*..........................................................................*/
 void BSP_displayPhilStat(uint8_t n, char const *stat) {
@@ -167,7 +169,7 @@ void BSP_displayPhilStat(uint8_t n, char const *stat) {
         GPIOA->BSRRH |= LED_LD2;  /* turn LED off */
     }
 
-    QS_BEGIN(PHILO_STAT, AO_Philo[n]) /* application-specific record begin */
+    QS_BEGIN_ID(PHILO_STAT, AO_Philo[n]->prio) /* app-specific record */
         QS_U8(1, n);                  /* Philosopher number */
         QS_STR(stat);                 /* Philosopher status */
     QS_END()

+ 2 - 3
examples/arm-cm/dpp_nucleo-l152re/qview/dpp.py

@@ -59,10 +59,9 @@ class DPP:
     def on_run(self):
         glb_filter("QS_USER_00")
 
-        # NOTE: the names of objects for loc_filter() and current_obj()
-        # must match the QS Object Dictionaries produced by the application.
+        # NOTE: the names of objects for current_obj() must match
+        # the QS Object Dictionaries produced by the application.
         current_obj(OBJ_AO, "Table_inst")
-        loc_filter(OBJ_TE, "l_philo[0].timeEvt")
 
         # turn lists into tuples for better performance
         self._philo_obj = tuple(self._philo_obj)

+ 2 - 3
examples/arm-cm/dpp_nucleo-l152re/qview/dpp1.py

@@ -67,10 +67,9 @@ class DPP:
     def on_run(self):
         glb_filter("QS_QEP_TRAN")
 
-        # NOTE: the names of objects for loc_filter() and current_obj()
-        # must match the QS Object Dictionaries produced by the application.
+        # NOTE: the names of objects for current_obj() must match
+        # the QS Object Dictionaries produced by the application.
         current_obj(OBJ_AO, "Table_inst")
-        loc_filter(OBJ_TE, "Philo_inst[0].timeEvt")
 
         # turn lists into tuples for better performance
         self._philo_obj = tuple(self._philo_obj)

+ 9 - 9
examples/arm-cm/dpp_nucleo-l152re/qxk/bsp.c

@@ -1,13 +1,13 @@
 /*****************************************************************************
 * Product: DPP example, STM32 NUCLEO-L152RE board, preemptive QXK kernel
-* Last Updated for Version: 6.9.0
-* Date of the Last Update:  2020-08-14
+* Last updated for version 6.9.1
+* Last updated on  2020-09-22
 *
-*                    Q u a n t u m     L e a P s
-*                    ---------------------------
-*                    innovating embedded systems
+*                    Q u a n t u m  L e a P s
+*                    ------------------------
+*                    Modern Embedded Software
 *
-* Copyright (C) Quantum Leaps, LLC. All rights reserved.
+* Copyright (C) 2005-2020 Quantum Leaps, LLC. All rights reserved.
 *
 * This program is open source software: you can redistribute it and/or
 * modify it under the terms of the GNU General Public License as published
@@ -159,8 +159,8 @@ void BSP_init(void) {
     QS_USR_DICTIONARY(PHILO_STAT);
 
     /* setup the QS filters... */
-    QS_FILTER_ON(QS_ALL_RECORDS);
-    QS_FILTER_OFF(QS_QF_TICK);
+    QS_GLB_FILTER(QS_ALL_RECORDS);
+    QS_GLB_FILTER(-QS_QF_TICK);
 }
 /*..........................................................................*/
 void BSP_displayPhilStat(uint8_t n, char const *stat) {
@@ -171,7 +171,7 @@ void BSP_displayPhilStat(uint8_t n, char const *stat) {
         GPIOA->BSRRH |= LED_LD2;  /* turn LED off */
     }
 
-    QS_BEGIN(PHILO_STAT, AO_Philo[n]) /* application-specific record begin */
+    QS_BEGIN_ID(PHILO_STAT, AO_Philo[n]->prio) /* app-specific record */
         QS_U8(1, n);                  /* Philosopher number */
         QS_STR(stat);                 /* Philosopher status */
     QS_END()

+ 3 - 3
examples/arm-cm/dpp_nucleo-l152re/qxk/gnu/Makefile

@@ -1,13 +1,13 @@
 ##############################################################################
 # Product: Makefile for QP/C on NUCLEO-L152RE, QXK kernel, GNU-ARM
-# Last Updated for Version: 6.5.0
-# Date of the Last Update:  2019-04-15
+# Last Updated for Version: 6.9.1
+# Date of the Last Update:  2020-09-16
 #
 #                    Q u a n t u m  L e a P s
 #                    ------------------------
 #                    Modern Embedded Software
 #
-# Copyright (C) 2005-2019 Quantum Leaps, LLC. All rights reserved.
+# Copyright (C) 2005-2020 Quantum Leaps, LLC. All rights reserved.
 #
 # This program is open source software: you can redistribute it and/or
 # modify it under the terms of the GNU General Public License as published

+ 10 - 10
examples/arm-cm/dpp_stm32f4-discovery/qk/bsp.c

@@ -1,13 +1,13 @@
 /*****************************************************************************
 * Product: "DPP" example on STM32F4-Discovery board, preemptive QK kernel
-* Last Updated for Version: 6.5.0
-* Date of the Last Update:  2019-05-09
+* Last Updated for Version: 6.9.1
+* Date of the Last Update:  2020-09-22
 *
 *                    Q u a n t u m  L e a P s
 *                    ------------------------
 *                    Modern Embedded Software
 *
-* Copyright (C) 2005-2019 Quantum Leaps, LLC. All rights reserved.
+* Copyright (C) 2005-2020 Quantum Leaps, LLC. All rights reserved.
 *
 * This program is open source software: you can redistribute it and/or
 * modify it under the terms of the GNU General Public License as published
@@ -220,6 +220,11 @@ void BSP_init(void) {
     QS_OBJ_DICTIONARY(&l_SysTick);
     QS_USR_DICTIONARY(PHILO_STAT);
     QS_USR_DICTIONARY(COMMAND_STAT);
+
+    /* setup the QS filters... */
+    QS_GLB_FILTER(QS_SM_RECORDS); /* state machine records */
+    QS_GLB_FILTER(QS_AO_RECORDS); /* active object records */
+    QS_GLB_FILTER(QS_UA_RECORDS); /* all user records */
 }
 /*..........................................................................*/
 void BSP_ledOn(void) {
@@ -246,7 +251,7 @@ void BSP_displayPhilStat(uint8_t n, char const *stat) {
         LED_GPIO_PORT->BSRRH = LED5_PIN; /* turn LED off */
     }
 
-    QS_BEGIN(PHILO_STAT, AO_Philo[n]) /* application-specific record begin */
+    QS_BEGIN_ID(PHILO_STAT, AO_Philo[n]->prio) /* app-specific record */
         QS_U8(1, n);  /* Philosopher number */
         QS_STR(stat); /* Philosopher status */
     QS_END()          /* application-specific record end */
@@ -416,11 +421,6 @@ uint8_t QS_onStartup(void const *arg) {
     QS_tickPeriod_ = SystemCoreClock / BSP_TICKS_PER_SEC;
     QS_tickTime_ = QS_tickPeriod_; /* to start the timestamp at zero */
 
-    /* setup the QS filters... */
-    QS_FILTER_ON(QS_SM_RECORDS); /* state machine records */
-    QS_FILTER_ON(QS_AO_RECORDS); /* active object records */
-    QS_FILTER_ON(QS_UA_RECORDS); /* all user records */
-
     return 1U; /* return success */
 }
 /*..........................................................................*/
@@ -464,7 +464,7 @@ void QS_onCommand(uint8_t cmdId,
     (void)param1;
     (void)param2;
     (void)param3;
-    QS_BEGIN(COMMAND_STAT, (void *)1) /* application-specific record begin */
+    QS_BEGIN_ID(COMMAND_STAT, 0U) /* app-specific record */
         QS_U8(2, cmdId);
         QS_U32(8, param1);
         QS_U32(8, param2);

+ 12 - 10
examples/arm-cm/dpp_stm32f4-discovery/qv/bsp.c

@@ -1,13 +1,13 @@
 /*****************************************************************************
 * Product: "DPP" example on STM32F4-Discovery board, cooperative QV kernel
-* Last Updated for Version: 6.5.0
-* Date of the Last Update:  2019-05-09
+* Last updated for version 6.9.1
+* Last updated on  2020-09-22
 *
 *                    Q u a n t u m  L e a P s
 *                    ------------------------
 *                    Modern Embedded Software
 *
-* Copyright (C) 2005-2019 Quantum Leaps, LLC. All rights reserved.
+* Copyright (C) 2005-2020 Quantum Leaps, LLC. All rights reserved.
 *
 * This program is open source software: you can redistribute it and/or
 * modify it under the terms of the GNU General Public License as published
@@ -116,6 +116,7 @@ void SysTick_Handler(void) {
             QF_PUBLISH(&serveEvt, &l_SysTick);
         }
     }
+    QV_ARM_ERRATUM_838869();
 }
 
 /*..........................................................................*/
@@ -131,6 +132,7 @@ void USART2_IRQHandler(void) {
         uint32_t b = USART2->DR;
         QS_RX_PUT(b);
     }
+    QV_ARM_ERRATUM_838869();
 }
 #else
 void USART2_IRQHandler(void) {}
@@ -216,6 +218,11 @@ void BSP_init(void) {
     QS_OBJ_DICTIONARY(&l_SysTick);
     QS_USR_DICTIONARY(PHILO_STAT);
     QS_USR_DICTIONARY(COMMAND_STAT);
+
+    /* setup the QS filters... */
+    QS_GLB_FILTER(QS_SM_RECORDS); /* state machine records */
+    QS_GLB_FILTER(QS_AO_RECORDS); /* active object records */
+    QS_GLB_FILTER(QS_UA_RECORDS); /* all user records */
 }
 /*..........................................................................*/
 void BSP_ledOn(void) {
@@ -242,7 +249,7 @@ void BSP_displayPhilStat(uint8_t n, char const *stat) {
         LED_GPIO_PORT->BSRRH = LED5_PIN; /* turn LED off */
     }
 
-    QS_BEGIN(PHILO_STAT, AO_Philo[n]) /* application-specific record begin */
+    QS_BEGIN_ID(PHILO_STAT, AO_Philo[n]->prio) /* app-specific record */
         QS_U8(1, n);  /* Philosopher number */
         QS_STR(stat); /* Philosopher status */
     QS_END()          /* application-specific record end */
@@ -411,11 +418,6 @@ uint8_t QS_onStartup(void const *arg) {
     QS_tickPeriod_ = SystemCoreClock / BSP_TICKS_PER_SEC;
     QS_tickTime_ = QS_tickPeriod_; /* to start the timestamp at zero */
 
-    /* setup the QS filters... */
-    QS_FILTER_ON(QS_SM_RECORDS); /* state machine records */
-    QS_FILTER_ON(QS_AO_RECORDS); /* active object records */
-    QS_FILTER_ON(QS_UA_RECORDS); /* all user records */
-
     return 1U; /* return success */
 }
 /*..........................................................................*/
@@ -459,7 +461,7 @@ void QS_onCommand(uint8_t cmdId,
     (void)param1;
     (void)param2;
     (void)param3;
-    QS_BEGIN(COMMAND_STAT, (void *)1) /* application-specific record begin */
+    QS_BEGIN_ID(COMMAND_STAT, 0U) /* app-specific record */
         QS_U8(2, cmdId);
         QS_U32(8, param1);
         QS_U32(8, param2);

+ 10 - 10
examples/arm-cm/dpp_stm32f4-discovery/qxk/bsp.c

@@ -1,13 +1,13 @@
 /*****************************************************************************
 * Product: "DPP" example on STM32F4-Discovery board, dual-mode QXK kernel
-* Last Updated for Version: 6.5.0
-* Date of the Last Update:  2019-05-09
+* Last updated for version 6.9.1
+* Last updated on  2020-09-22
 *
 *                    Q u a n t u m  L e a P s
 *                    ------------------------
 *                    Modern Embedded Software
 *
-* Copyright (C) 2005-2019 Quantum Leaps, LLC. All rights reserved.
+* Copyright (C) 2005-2020 Quantum Leaps, LLC. All rights reserved.
 *
 * This program is open source software: you can redistribute it and/or
 * modify it under the terms of the GNU General Public License as published
@@ -220,6 +220,11 @@ void BSP_init(void) {
     QS_OBJ_DICTIONARY(&l_SysTick);
     QS_USR_DICTIONARY(PHILO_STAT);
     QS_USR_DICTIONARY(COMMAND_STAT);
+
+    /* setup the QS filters... */
+    QS_GLB_FILTER(QS_SM_RECORDS); /* state machine records */
+    QS_GLB_FILTER(QS_AO_RECORDS); /* active object records */
+    QS_GLB_FILTER(QS_UA_RECORDS); /* all user records */
 }
 /*..........................................................................*/
 void BSP_ledOn(void) {
@@ -246,7 +251,7 @@ void BSP_displayPhilStat(uint8_t n, char const *stat) {
         LED_GPIO_PORT->BSRRH = LED5_PIN; /* turn LED off */
     }
 
-    QS_BEGIN(PHILO_STAT, AO_Philo[n]) /* application-specific record begin */
+    QS_BEGIN_ID(PHILO_STAT, AO_Philo[n]->prio) /* app-specific record */
         QS_U8(1, n);  /* Philosopher number */
         QS_STR(stat); /* Philosopher status */
     QS_END()          /* application-specific record end */
@@ -416,11 +421,6 @@ uint8_t QS_onStartup(void const *arg) {
     QS_tickPeriod_ = SystemCoreClock / BSP_TICKS_PER_SEC;
     QS_tickTime_ = QS_tickPeriod_; /* to start the timestamp at zero */
 
-    /* setup the QS filters... */
-    QS_FILTER_ON(QS_SM_RECORDS); /* state machine records */
-    QS_FILTER_ON(QS_AO_RECORDS); /* active object records */
-    QS_FILTER_ON(QS_UA_RECORDS); /* all user records */
-
     return 1U; /* return success */
 }
 /*..........................................................................*/
@@ -464,7 +464,7 @@ void QS_onCommand(uint8_t cmdId,
     (void)param1;
     (void)param2;
     (void)param3;
-    QS_BEGIN(COMMAND_STAT, (void *)1) /* application-specific record begin */
+    QS_BEGIN_ID(COMMAND_STAT, 0U) /* app-specific record */
         QS_U8(2, cmdId);
         QS_U32(8, param1);
         QS_U32(8, param2);

+ 19 - 40
examples/arm-cm/dpp_stm32f746g-discovery/qk/bsp.c

@@ -1,13 +1,13 @@
 /*****************************************************************************
 * Product: DPP example, STM32746G-Discovery board, preemptive QK kernel
-* Last Updated for Version: 6.0.4
-* Date of the Last Update:  2018-01-09
+* Last updated for version 6.9.1
+* Last updated on  2020-09-22
 *
-*                    Q u a n t u m     L e a P s
-*                    ---------------------------
-*                    innovating embedded systems
+*                    Q u a n t u m  L e a P s
+*                    ------------------------
+*                    Modern Embedded Software
 *
-* Copyright (C) Quantum Leaps, LLC. All rights reserved.
+* Copyright (C) 2005-2020 Quantum Leaps, LLC. All rights reserved.
 *
 * This program is open source software: you can redistribute it and/or
 * modify it under the terms of the GNU General Public License as published
@@ -42,27 +42,6 @@
 
 Q_DEFINE_THIS_FILE
 
-/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! CAUTION !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-* Assign a priority to EVERY ISR explicitly by calling NVIC_SetPriority().
-* DO NOT LEAVE THE ISR PRIORITIES AT THE DEFAULT VALUE!
-*/
-enum KernelUnawareISRs { /* see NOTE00 */
-    USART1_PRIO,
-    /* ... */
-    MAX_KERNEL_UNAWARE_CMSIS_PRI  /* keep always last */
-};
-/* "kernel-unaware" interrupts can't overlap "kernel-aware" interrupts */
-Q_ASSERT_COMPILE(MAX_KERNEL_UNAWARE_CMSIS_PRI <= QF_AWARE_ISR_CMSIS_PRI);
-
-enum KernelAwareISRs {
-    GPIO_EVEN_PRIO = QF_AWARE_ISR_CMSIS_PRI, /* see NOTE00 */
-    SYSTICK_PRIO,
-    /* ... */
-    MAX_KERNEL_AWARE_CMSIS_PRI /* keep always last */
-};
-/* "kernel-aware" interrupts should not overlap the PendSV priority */
-Q_ASSERT_COMPILE(MAX_KERNEL_AWARE_CMSIS_PRI <= (0xFF >>(8-__NVIC_PRIO_BITS)));
-
 /* ISRs defined in this BSP ------------------------------------------------*/
 void SysTick_Handler(void);
 //void GPIO_EVEN_IRQHandler(void);
@@ -213,6 +192,10 @@ void BSP_init(void) {
     QS_OBJ_DICTIONARY(&l_GPIO_EVEN_IRQHandler);
     QS_USR_DICTIONARY(PHILO_STAT);
     QS_USR_DICTIONARY(COMMAND_STAT);
+
+    /* setup the QS filters... */
+    QS_GLB_FILTER(QS_SM_RECORDS);
+    QS_GLB_FILTER(QS_UA_RECORDS);
 }
 /*..........................................................................*/
 void BSP_ledOn(void) {
@@ -231,7 +214,7 @@ void BSP_displayPhilStat(uint8_t n, char const *stat) {
         BSP_LED_Off(LED1);
     }
 
-    QS_BEGIN(PHILO_STAT, AO_Philo[n]) /* application-specific record begin */
+    QS_BEGIN_ID(PHILO_STAT, AO_Philo[n]->prio) /* app-specific record */
         QS_U8(1, n);  /* Philosopher number */
         QS_STR(stat); /* Philosopher status */
     QS_END()          /* application-specific record end */
@@ -281,15 +264,15 @@ void QF_onStartup(void) {
     /* set up the SysTick timer to fire at BSP_TICKS_PER_SEC rate */
     SysTick_Config(SystemCoreClock / BSP_TICKS_PER_SEC);
 
-    /* set priorities of ALL ISRs used in the system, see NOTE00
+    /* set priorities of ALL ISRs used in the system, see NOTE1
     *
     * !!!!!!!!!!!!!!!!!!!!!!!!!!!! CAUTION !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
     * Assign a priority to EVERY ISR explicitly by calling NVIC_SetPriority().
     * DO NOT LEAVE THE ISR PRIORITIES AT THE DEFAULT VALUE!
     */
-    NVIC_SetPriority(USART1_IRQn,  USART1_PRIO);
-    NVIC_SetPriority(SysTick_IRQn, SYSTICK_PRIO);
-    //NVIC_SetPriority(GPIO_EVEN_IRQn, GPIO_EVEN_PRIO);
+    NVIC_SetPriority(USART1_IRQn,  0U); /* kernel unaware interrupt */
+    //NVIC_SetPriority(GPIO_EVEN_IRQn, QF_AWARE_ISR_CMSIS_PRI);
+    NVIC_SetPriority(SysTick_IRQn, QF_AWARE_ISR_CMSIS_PRI + 1U);
     /* ... */
 
     /* enable IRQs... */
@@ -303,7 +286,7 @@ void QF_onCleanup(void) {
 }
 /*..........................................................................*/
 void QK_onIdle(void) {
-    /* toggle the User LED on and then off, see NOTE01 */
+    /* toggle the User LED on and then off, see NOTE2 */
     QF_INT_DISABLE();
     //BSP_LED_On(LED3); not enough LEDs
     //BSP_LED_On(LED3); not enough LEDs
@@ -390,10 +373,6 @@ uint8_t QS_onStartup(void const *arg) {
     QS_tickPeriod_ = SystemCoreClock / BSP_TICKS_PER_SEC;
     QS_tickTime_ = QS_tickPeriod_; /* to start the timestamp at zero */
 
-    /* setup the QS filters... */
-    QS_FILTER_ON(QS_SM_RECORDS);
-    QS_FILTER_ON(QS_UA_RECORDS);
-
     return 1U; /* return success */
 }
 /*..........................................................................*/
@@ -438,7 +417,7 @@ void QS_onCommand(uint8_t cmdId,
     (void)param1;
     (void)param2;
     (void)param3;
-    QS_BEGIN(COMMAND_STAT, (void *)1) /* application-specific record begin */
+    QS_BEGIN_ID(COMMAND_STAT, 0U) /* app-specific record */
         QS_U8(2, cmdId);
         QS_U32(8, param1);
     QS_END()
@@ -455,7 +434,7 @@ void QS_onCommand(uint8_t cmdId,
 /*--------------------------------------------------------------------------*/
 
 /*****************************************************************************
-* NOTE00:
+* NOTE1:
 * The QF_AWARE_ISR_CMSIS_PRI constant from the QF port specifies the highest
 * ISR priority that is disabled by the QF framework. The value is suitable
 * for the NVIC_SetPriority() CMSIS function.
@@ -473,7 +452,7 @@ void QS_onCommand(uint8_t cmdId,
 * by which a "QF-unaware" ISR can communicate with the QF framework is by
 * triggering a "QF-aware" ISR, which can post/publish events.
 *
-* NOTE01:
+* NOTE2:
 * The User LED is used to visualize the idle loop activity. The brightness
 * of the LED is proportional to the frequency of invcations of the idle loop.
 * Please note that the LED is toggled with interrupts locked, so no interrupt

+ 17 - 36
examples/arm-cm/dpp_stm32f746g-discovery/qv/bsp.c

@@ -1,13 +1,13 @@
 /*****************************************************************************
 * Product: DPP example, STM32746G-Discovery board, cooperative QV kernel
-* Last Updated for Version: 6.0.4
-* Date of the Last Update:  2018-01-09
+* Last updated for version 6.9.1
+* Last updated on  2020-09-22
 *
-*                    Q u a n t u m     L e a P s
-*                    ---------------------------
-*                    innovating embedded systems
+*                    Q u a n t u m  L e a P s
+*                    ------------------------
+*                    Modern Embedded Software
 *
-* Copyright (C) Quantum Leaps, LLC. All rights reserved.
+* Copyright (C) 2005-2020 Quantum Leaps, LLC. All rights reserved.
 *
 * This program is open source software: you can redistribute it and/or
 * modify it under the terms of the GNU General Public License as published
@@ -42,27 +42,6 @@
 
 Q_DEFINE_THIS_FILE
 
-/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! CAUTION !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-* Assign a priority to EVERY ISR explicitly by calling NVIC_SetPriority().
-* DO NOT LEAVE THE ISR PRIORITIES AT THE DEFAULT VALUE!
-*/
-enum KernelUnawareISRs { /* see NOTE00 */
-    USART1_PRIO,
-    /* ... */
-    MAX_KERNEL_UNAWARE_CMSIS_PRI  /* keep always last */
-};
-/* "kernel-unaware" interrupts can't overlap "kernel-aware" interrupts */
-Q_ASSERT_COMPILE(MAX_KERNEL_UNAWARE_CMSIS_PRI <= QF_AWARE_ISR_CMSIS_PRI);
-
-enum KernelAwareISRs {
-    GPIO_EVEN_PRIO = QF_AWARE_ISR_CMSIS_PRI, /* see NOTE00 */
-    SYSTICK_PRIO,
-    /* ... */
-    MAX_KERNEL_AWARE_CMSIS_PRI /* keep always last */
-};
-/* "kernel-aware" interrupts should not overlap the PendSV priority */
-Q_ASSERT_COMPILE(MAX_KERNEL_AWARE_CMSIS_PRI <= (0xFF >>(8-__NVIC_PRIO_BITS)));
-
 /* ISRs defined in this BSP ------------------------------------------------*/
 void SysTick_Handler(void);
 //void GPIO_EVEN_IRQHandler(void);
@@ -127,6 +106,7 @@ void SysTick_Handler(void) {
             QF_PUBLISH(&serveEvt, &l_SysTick_Handler);
         }
     }
+    QV_ARM_ERRATUM_838869();
 }
 
 /*..........................................................................*/
@@ -143,6 +123,7 @@ void USART1_IRQHandler(void) {
         QS_RX_PUT(b);
         l_uartHandle.Instance->ISR &= ~USART_ISR_RXNE; /* clear interrupt */
     }
+    QV_ARM_ERRATUM_838869();
 }
 /*..........................................................................*/
 void HAL_UART_RxCpltCallback(UART_HandleTypeDef *UartHandle) {
@@ -193,6 +174,10 @@ void BSP_init(void) {
     QS_OBJ_DICTIONARY(&l_GPIO_EVEN_IRQHandler);
     QS_USR_DICTIONARY(PHILO_STAT);
     QS_USR_DICTIONARY(COMMAND_STAT);
+
+    /* setup the QS filters... */
+    QS_GLB_FILTER(QS_SM_RECORDS);
+    QS_GLB_FILTER(QS_UA_RECORDS);
 }
 /*..........................................................................*/
 void BSP_ledOn(void) {
@@ -211,7 +196,7 @@ void BSP_displayPhilStat(uint8_t n, char const *stat) {
         BSP_LED_Off(LED1);
     }
 
-    QS_BEGIN(PHILO_STAT, AO_Philo[n]) /* application-specific record begin */
+    QS_BEGIN_ID(PHILO_STAT, AO_Philo[n]->prio) /* app-specific record */
         QS_U8(1, n);  /* Philosopher number */
         QS_STR(stat); /* Philosopher status */
     QS_END()          /* application-specific record end */
@@ -264,9 +249,9 @@ void QF_onStartup(void) {
     * Assign a priority to EVERY ISR explicitly by calling NVIC_SetPriority().
     * DO NOT LEAVE THE ISR PRIORITIES AT THE DEFAULT VALUE!
     */
-    NVIC_SetPriority(USART1_IRQn,  USART1_PRIO);
-    NVIC_SetPriority(SysTick_IRQn, SYSTICK_PRIO);
-    //NVIC_SetPriority(GPIO_EVEN_IRQn, GPIO_EVEN_PRIO);
+    NVIC_SetPriority(USART1_IRQn,  0U); /* kernel unaware interrupt */
+    //NVIC_SetPriority(GPIO_EVEN_IRQn, QF_AWARE_ISR_CMSIS_PRI);
+    NVIC_SetPriority(SysTick_IRQn, QF_AWARE_ISR_CMSIS_PRI + 1U);
     /* ... */
 
     /* enable IRQs... */
@@ -369,10 +354,6 @@ uint8_t QS_onStartup(void const *arg) {
     QS_tickPeriod_ = SystemCoreClock / BSP_TICKS_PER_SEC;
     QS_tickTime_ = QS_tickPeriod_; /* to start the timestamp at zero */
 
-    /* setup the QS filters... */
-    QS_FILTER_ON(QS_SM_RECORDS);
-    QS_FILTER_ON(QS_UA_RECORDS);
-
     return 1U; /* return success */
 }
 /*..........................................................................*/
@@ -417,7 +398,7 @@ void QS_onCommand(uint8_t cmdId,
     (void)param1;
     (void)param2;
     (void)param3;
-    QS_BEGIN(COMMAND_STAT, (void *)1) /* application-specific record begin */
+    QS_BEGIN_ID(COMMAND_STAT, 0U) /* app-specific record */
         QS_U8(2, cmdId);
         QS_U32(8, param1);
     QS_END()

+ 18 - 39
examples/arm-cm/dpp_stm32f746g-discovery/qxk/bsp.c

@@ -1,13 +1,13 @@
 /*****************************************************************************
 * Product: DPP example, STM32746G-Discovery board, dual-mode QXK kernel
-* Last Updated for Version: 6.1.0
-* Date of the Last Update:  2018-01-29
+* Last updated for version 6.9.1
+* Last updated on  2020-09-22
 *
-*                    Q u a n t u m     L e a P s
-*                    ---------------------------
-*                    innovating embedded systems
+*                    Q u a n t u m  L e a P s
+*                    ------------------------
+*                    Modern Embedded Software
 *
-* Copyright (C) Quantum Leaps, LLC. All rights reserved.
+* Copyright (C) 2005-2020 Quantum Leaps, LLC. All rights reserved.
 *
 * This program is open source software: you can redistribute it and/or
 * modify it under the terms of the GNU General Public License as published
@@ -42,27 +42,6 @@
 
 Q_DEFINE_THIS_FILE
 
-/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! CAUTION !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-* Assign a priority to EVERY ISR explicitly by calling NVIC_SetPriority().
-* DO NOT LEAVE THE ISR PRIORITIES AT THE DEFAULT VALUE!
-*/
-enum KernelUnawareISRs { /* see NOTE00 */
-    USART1_PRIO,
-    /* ... */
-    MAX_KERNEL_UNAWARE_CMSIS_PRI  /* keep always last */
-};
-/* "kernel-unaware" interrupts can't overlap "kernel-aware" interrupts */
-Q_ASSERT_COMPILE(MAX_KERNEL_UNAWARE_CMSIS_PRI <= QF_AWARE_ISR_CMSIS_PRI);
-
-enum KernelAwareISRs {
-    GPIO_EVEN_PRIO = QF_AWARE_ISR_CMSIS_PRI, /* see NOTE00 */
-    SYSTICK_PRIO,
-    /* ... */
-    MAX_KERNEL_AWARE_CMSIS_PRI /* keep always last */
-};
-/* "kernel-aware" interrupts should not overlap the PendSV priority */
-Q_ASSERT_COMPILE(MAX_KERNEL_AWARE_CMSIS_PRI <= (0xFF >>(8-__NVIC_PRIO_BITS)));
-
 /* ISRs defined in this BSP ------------------------------------------------*/
 void SysTick_Handler(void);
 //void GPIO_EVEN_IRQHandler(void);
@@ -216,6 +195,10 @@ void BSP_init(void) {
     QS_USR_DICTIONARY(PHILO_STAT);
     QS_USR_DICTIONARY(PAUSED_STAT);
     QS_USR_DICTIONARY(COMMAND_STAT);
+
+    /* setup the QS filters... */
+    QS_GLB_FILTER(QS_SM_RECORDS);
+    QS_GLB_FILTER(QS_UA_RECORDS);
 }
 /*..........................................................................*/
 void BSP_ledOn(void) {
@@ -234,7 +217,7 @@ void BSP_displayPhilStat(uint8_t n, char const *stat) {
         BSP_LED_Off(LED1);
     }
 
-    QS_BEGIN(PHILO_STAT, AO_Philo[n]) /* application-specific record begin */
+    QS_BEGIN_ID(PHILO_STAT, AO_Philo[n]->prio) /* app-specific record */
         QS_U8(1, n);  /* Philosopher number */
         QS_STR(stat); /* Philosopher status */
     QS_END()          /* application-specific record end */
@@ -284,14 +267,14 @@ void QF_onStartup(void) {
     /* set up the SysTick timer to fire at BSP_TICKS_PER_SEC rate */
     SysTick_Config(SystemCoreClock / BSP_TICKS_PER_SEC);
 
-    /* set priorities of ALL ISRs used in the system, see NOTE00
+    /* set priorities of ALL ISRs used in the system, see NOTE1
     *
     * !!!!!!!!!!!!!!!!!!!!!!!!!!!! CAUTION !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
     * Assign a priority to EVERY ISR explicitly by calling NVIC_SetPriority().
     * DO NOT LEAVE THE ISR PRIORITIES AT THE DEFAULT VALUE!
     */
-    NVIC_SetPriority(USART1_IRQn,  USART1_PRIO);
-    NVIC_SetPriority(SysTick_IRQn, SYSTICK_PRIO);
+    NVIC_SetPriority(USART1_IRQn,  0U); /* kernel unaware interrupt */
+    NVIC_SetPriority(SysTick_IRQn, QF_AWARE_ISR_CMSIS_PRI);
     /* ... */
 
     /* enable IRQs... */
@@ -304,7 +287,7 @@ void QF_onCleanup(void) {
 }
 /*..........................................................................*/
 void QXK_onIdle(void) {
-    /* toggle the User LED on and then off, see NOTE01 */
+    /* toggle the User LED on and then off, see NOTE2 */
     QF_INT_DISABLE();
     //BSP_LED_On(LED3); not enough LEDs
     //BSP_LED_On(LED3); not enough LEDs
@@ -391,10 +374,6 @@ uint8_t QS_onStartup(void const *arg) {
     QS_tickPeriod_ = SystemCoreClock / BSP_TICKS_PER_SEC;
     QS_tickTime_ = QS_tickPeriod_; /* to start the timestamp at zero */
 
-    /* setup the QS filters... */
-    QS_FILTER_ON(QS_SM_RECORDS);
-    QS_FILTER_ON(QS_UA_RECORDS);
-
     return 1U; /* return success */
 }
 /*..........................................................................*/
@@ -439,7 +418,7 @@ void QS_onCommand(uint8_t cmdId,
     (void)param1;
     (void)param2;
     (void)param3;
-    QS_BEGIN(COMMAND_STAT, (void *)1) /* application-specific record begin */
+    QS_BEGIN_ID(COMMAND_STAT, 0U) /* app-specific record */
         QS_U8(2, cmdId);
         QS_U32(8, param1);
     QS_END()
@@ -456,7 +435,7 @@ void QS_onCommand(uint8_t cmdId,
 /*--------------------------------------------------------------------------*/
 
 /*****************************************************************************
-* NOTE00:
+* NOTE1:
 * The QF_AWARE_ISR_CMSIS_PRI constant from the QF port specifies the highest
 * ISR priority that is disabled by the QF framework. The value is suitable
 * for the NVIC_SetPriority() CMSIS function.
@@ -474,7 +453,7 @@ void QS_onCommand(uint8_t cmdId,
 * by which a "QF-unaware" ISR can communicate with the QF framework is by
 * triggering a "QF-aware" ISR, which can post/publish events.
 *
-* NOTE01:
+* NOTE2:
 * The User LED is used to visualize the idle loop activity. The brightness
 * of the LED is proportional to the frequency of invcations of the idle loop.
 * Please note that the LED is toggled with interrupts locked, so no interrupt

+ 1 - 1
examples/arm-cm/game_efm32-slstk3401a/game.h

@@ -3,7 +3,7 @@
 * Model: game.qm
 * File:  ${.::game.h}
 *
-* This code has been generated by QM 5.0.2 <www.state-machine.com/qm/>.
+* This code has been generated by QM 5.0.4 <www.state-machine.com/qm/>.
 * DO NOT EDIT THIS FILE MANUALLY. All your changes will be lost.
 *
 * This program is open source software: you can redistribute it and/or

+ 6 - 6
examples/arm-cm/game_efm32-slstk3401a/game.qm

@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<model version="5.0.2" links="1">
+<model version="5.0.4" links="1">
  <documentation>&quot;Fly 'n' Shoot&quot; game model from Chapters 1 &amp; 9 of PSiCC2
 
 NOTE: Requries QP6.</documentation>
@@ -142,7 +142,8 @@ if ((me-&gt;last_mine_x + GAME_MINES_DIST_MIN &lt; GAME_TUNNEL_WIDTH)
         ope.super.sig = MINE_PLANT_SIG;
         ope.x = me-&gt;last_mine_x;
         ope.y = me-&gt;last_mine_y;
-        QHSM_DISPATCH(me-&gt;mines[n], (QEvt *)&amp;ope); /* direct dispatch */
+        /* direct dispatch */
+        QHSM_DISPATCH(me-&gt;mines[n], (QEvt *)&amp;ope, me-&gt;super.prio);
     }
 }</code>
    </operation>
@@ -151,10 +152,9 @@ if ((me-&gt;last_mine_x + GAME_MINES_DIST_MIN &lt; GAME_TUNNEL_WIDTH)
     <!--${AOs::Tunnel::dispatchToAllMin~::e}-->
     <parameter name="e" type="QEvt const *"/>
     <code>uint8_t n;
-
 for (n = 0U; n &lt; GAME_MINES_MAX; ++n) {
     if (me-&gt;mines[n] != (QHsm *)0) { /* is the mine used? */
-        QHSM_DISPATCH(me-&gt;mines[n], e);
+        QHSM_DISPATCH(me-&gt;mines[n], e, me-&gt;super.prio);
     }
 }</code>
    </operation>
@@ -164,8 +164,8 @@ for (n = 0U; n &lt; GAME_MINES_MAX; ++n) {
     <initial target="../1/2">
      <action>uint8_t n;
 for (n = 0U; n &lt; GAME_MINES_MAX; ++n) {
-    QHSM_INIT(me-&gt;mine1_pool[n], (QEvt *)0);/*initial tran. for Mine1 */
-    QHSM_INIT(me-&gt;mine2_pool[n], (QEvt *)0);/*initial tran. for Mine2 */
+    QHSM_INIT(me-&gt;mine1_pool[n], (void *)0, me-&gt;super.prio);
+    QHSM_INIT(me-&gt;mine2_pool[n], (void *)0, me-&gt;super.prio);
 }
 BSP_randomSeed(1234); /* seed the pseudo-random generator */
 

+ 1 - 1
examples/arm-cm/game_efm32-slstk3401a/mine1.c

@@ -3,7 +3,7 @@
 * Model: game.qm
 * File:  ${.::mine1.c}
 *
-* This code has been generated by QM 5.0.2 <www.state-machine.com/qm/>.
+* This code has been generated by QM 5.0.4 <www.state-machine.com/qm/>.
 * DO NOT EDIT THIS FILE MANUALLY. All your changes will be lost.
 *
 * This program is open source software: you can redistribute it and/or

+ 1 - 1
examples/arm-cm/game_efm32-slstk3401a/mine2.c

@@ -3,7 +3,7 @@
 * Model: game.qm
 * File:  ${.::mine2.c}
 *
-* This code has been generated by QM 5.0.2 <www.state-machine.com/qm/>.
+* This code has been generated by QM 5.0.4 <www.state-machine.com/qm/>.
 * DO NOT EDIT THIS FILE MANUALLY. All your changes will be lost.
 *
 * This program is open source software: you can redistribute it and/or

+ 1 - 1
examples/arm-cm/game_efm32-slstk3401a/missile.c

@@ -3,7 +3,7 @@
 * Model: game.qm
 * File:  ${.::missile.c}
 *
-* This code has been generated by QM 5.0.2 <www.state-machine.com/qm/>.
+* This code has been generated by QM 5.0.4 <www.state-machine.com/qm/>.
 * DO NOT EDIT THIS FILE MANUALLY. All your changes will be lost.
 *
 * This program is open source software: you can redistribute it and/or

+ 20 - 47
examples/arm-cm/game_efm32-slstk3401a/qk/bsp.c

@@ -1,13 +1,13 @@
 /*****************************************************************************
 * Product: "Fly 'n' Shoot" game example, EFM32-SLSTK3401A board, QK kernel
-* Last updated for version 5.9.7
-* Last updated on  2017-08-18
+* Last updated for version 6.9.1
+* Last updated on  2020-09-22
 *
-*                    Q u a n t u m     L e a P s
-*                    ---------------------------
-*                    innovating embedded systems
+*                    Q u a n t u m  L e a P s
+*                    ------------------------
+*                    Modern Embedded Software
 *
-* Copyright (C) Quantum Leaps, LLC. All rights reserved.
+* Copyright (C) 2005-2020 Quantum Leaps, LLC. All rights reserved.
 *
 * This program is open source software: you can redistribute it and/or
 * modify it under the terms of the GNU General Public License as published
@@ -45,27 +45,6 @@
 
 Q_DEFINE_THIS_FILE
 
-/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! CAUTION !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-* Assign a priority to EVERY ISR explicitly by calling NVIC_SetPriority().
-* DO NOT LEAVE THE ISR PRIORITIES AT THE DEFAULT VALUE!
-*/
-enum KernelUnawareISRs { /* see NOTE00 */
-    USART0_RX_PRIO,
-    /* ... */
-    MAX_KERNEL_UNAWARE_CMSIS_PRI  /* keep always last */
-};
-/* "kernel-unaware" interrupts can't overlap "kernel-aware" interrupts */
-Q_ASSERT_COMPILE(MAX_KERNEL_UNAWARE_CMSIS_PRI <= QF_AWARE_ISR_CMSIS_PRI);
-
-enum KernelAwareISRs {
-    GPIO_EVEN_PRIO = QF_AWARE_ISR_CMSIS_PRI, /* see NOTE00 */
-    SYSTICK_PRIO,
-    /* ... */
-    MAX_KERNEL_AWARE_CMSIS_PRI /* keep always last */
-};
-/* "kernel-aware" interrupts should not overlap the PendSV priority */
-Q_ASSERT_COMPILE(MAX_KERNEL_AWARE_CMSIS_PRI <= (0xFF >>(8-__NVIC_PRIO_BITS)));
-
 /* ISRs defined in this BSP ------------------------------------------------*/
 void SysTick_Handler(void);
 void GPIO_EVEN_IRQHandler(void);
@@ -250,6 +229,11 @@ void BSP_init(void) {
     QS_OBJ_DICTIONARY(&l_GPIO_EVEN_IRQHandler);
     QS_USR_DICTIONARY(SCORE_STAT);
     QS_USR_DICTIONARY(COMMAND_STAT);
+
+    /* setup the QS filters... */
+    QS_GLB_FILTER(QS_SM_RECORDS); /* state machine records */
+    QS_GLB_FILTER(QS_AO_RECORDS); /* active object records */
+    QS_GLB_FILTER(QS_UA_RECORDS); /* all user records */
 }
 
 /*..........................................................................*/
@@ -639,7 +623,7 @@ void BSP_updateScore(uint16_t score) {
     str[0] = (s % 10U) + '0';
     BSP_paintString(6U*6U, BSP_SCREEN_HEIGHT - 8U, str);
 
-    QS_BEGIN(SCORE_STAT, (void *)1) /* application-specific record begin */
+    QS_BEGIN_ID(SCORE_STAT, 0U) /* app-specific record */
         QS_U16(4, score);
     QS_END()
 }
@@ -711,15 +695,15 @@ void QF_onStartup(void) {
     /* assing all priority bits for preemption-prio. and none to sub-prio. */
     NVIC_SetPriorityGrouping(0U);
 
-    /* set priorities of ALL ISRs used in the system, see NOTE00
+    /* set priorities of ALL ISRs used in the system, see NOTE1
     *
     * !!!!!!!!!!!!!!!!!!!!!!!!!!!! CAUTION !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
     * Assign a priority to EVERY ISR explicitly by calling NVIC_SetPriority().
     * DO NOT LEAVE THE ISR PRIORITIES AT THE DEFAULT VALUE!
     */
-    NVIC_SetPriority(USART0_RX_IRQn, USART0_RX_PRIO);
-    NVIC_SetPriority(SysTick_IRQn,   SYSTICK_PRIO);
-    NVIC_SetPriority(GPIO_EVEN_IRQn, GPIO_EVEN_PRIO);
+    NVIC_SetPriority(USART0_RX_IRQn, 0U); /* kernel unaware interrupt */
+    NVIC_SetPriority(GPIO_EVEN_IRQn, QF_AWARE_ISR_CMSIS_PRI);
+    NVIC_SetPriority(SysTick_IRQn,   QF_AWARE_ISR_CMSIS_PRI + 1U);
     /* ... */
 
     /* enable IRQs... */
@@ -733,7 +717,7 @@ void QF_onCleanup(void) {
 }
 /*..........................................................................*/
 void QK_onIdle(void) {
-    /* toggle the User LED on and then off, see NOTE02 */
+    /* toggle the User LED on and then off, see NOTE2 */
     QF_INT_DISABLE();
     GPIO->P[LED_PORT].DOUT |=  (1U << LED0_PIN);
     GPIO->P[LED_PORT].DOUT &= ~(1U << LED0_PIN);
@@ -845,17 +829,6 @@ uint8_t QS_onStartup(void const *arg) {
     QS_tickPeriod_ = SystemCoreClock / BSP_TICKS_PER_SEC;
     QS_tickTime_ = QS_tickPeriod_; /* to start the timestamp at zero */
 
-    /* setup the QS filters... */
-    QS_FILTER_ON(QS_QEP_STATE_ENTRY);
-    QS_FILTER_ON(QS_QEP_STATE_EXIT);
-    QS_FILTER_ON(QS_QEP_STATE_INIT);
-    QS_FILTER_ON(QS_QEP_INIT_TRAN);
-    QS_FILTER_ON(QS_QEP_INTERN_TRAN);
-    QS_FILTER_ON(QS_QEP_TRAN);
-    QS_FILTER_ON(QS_QEP_IGNORED);
-    QS_FILTER_ON(QS_QEP_DISPATCH);
-    QS_FILTER_ON(QS_QEP_UNHANDLED);
-
     return 1U; /* return success */
 }
 /*..........................................................................*/
@@ -900,7 +873,7 @@ void QS_onCommand(uint8_t cmdId,
     (void)param1;
     (void)param2;
     (void)param3;
-    QS_BEGIN(COMMAND_STAT, (void *)1) /* application-specific record begin */
+    QS_BEGIN_ID(COMMAND_STAT, 0U) /* app-specific record */
         QS_U8(2, cmdId);
         QS_U32(8, param1);
         QS_U32(8, param2);
@@ -919,7 +892,7 @@ void QS_onCommand(uint8_t cmdId,
 /*--------------------------------------------------------------------------*/
 
 /*****************************************************************************
-* NOTE00:
+* NOTE1:
 * The QF_AWARE_ISR_CMSIS_PRI constant from the QF port specifies the highest
 * ISR priority that is disabled by the QF framework. The value is suitable
 * for the NVIC_SetPriority() CMSIS function.
@@ -937,7 +910,7 @@ void QS_onCommand(uint8_t cmdId,
 * by which a "QF-unaware" ISR can communicate with the QF framework is by
 * triggering a "QF-aware" ISR, which can post/publish events.
 *
-* NOTE02:
+* NOTE2:
 * The User LED is used to visualize the idle loop activity. The brightness
 * of the LED is proportional to the frequency of invcations of the idle loop.
 * Please note that the LED is toggled with interrupts locked, so no interrupt

+ 18 - 43
examples/arm-cm/game_efm32-slstk3401a/qv/bsp.c

@@ -1,13 +1,13 @@
 /*****************************************************************************
 * Product: "Fly 'n' Shoot" game example, EFM32-SLSTK3401A board, QV kernel
-* Last updated for version 5.9.0
-* Last updated on  2017-04-14
+* Last updated for version 6.9.1
+* Last updated on  2020-09-22
 *
-*                    Q u a n t u m     L e a P s
-*                    ---------------------------
-*                    innovating embedded systems
+*                    Q u a n t u m  L e a P s
+*                    ------------------------
+*                    Modern Embedded Software
 *
-* Copyright (C) Quantum Leaps, LLC. All rights reserved.
+* Copyright (C) 2005-2020 Quantum Leaps, LLC. All rights reserved.
 *
 * This program is open source software: you can redistribute it and/or
 * modify it under the terms of the GNU General Public License as published
@@ -45,27 +45,6 @@
 
 Q_DEFINE_THIS_FILE
 
-/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! CAUTION !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-* Assign a priority to EVERY ISR explicitly by calling NVIC_SetPriority().
-* DO NOT LEAVE THE ISR PRIORITIES AT THE DEFAULT VALUE!
-*/
-enum KernelUnawareISRs { /* see NOTE00 */
-    USART0_RX_PRIO,
-    /* ... */
-    MAX_KERNEL_UNAWARE_CMSIS_PRI  /* keep always last */
-};
-/* "kernel-unaware" interrupts can't overlap "kernel-aware" interrupts */
-Q_ASSERT_COMPILE(MAX_KERNEL_UNAWARE_CMSIS_PRI <= QF_AWARE_ISR_CMSIS_PRI);
-
-enum KernelAwareISRs {
-    GPIO_EVEN_PRIO = QF_AWARE_ISR_CMSIS_PRI, /* see NOTE00 */
-    SYSTICK_PRIO,
-    /* ... */
-    MAX_KERNEL_AWARE_CMSIS_PRI /* keep always last */
-};
-/* "kernel-aware" interrupts should not overlap the PendSV priority */
-Q_ASSERT_COMPILE(MAX_KERNEL_AWARE_CMSIS_PRI <= (0xFF >>(8-__NVIC_PRIO_BITS)));
-
 /* ISRs defined in this BSP ------------------------------------------------*/
 void SysTick_Handler(void);
 void GPIO_EVEN_IRQHandler(void);
@@ -149,6 +128,7 @@ void SysTick_Handler(void) {
            }
        }
     }
+    QV_ARM_ERRATUM_838869();
 }
 /*..........................................................................*/
 void GPIO_EVEN_IRQHandler(void) {
@@ -169,6 +149,7 @@ void USART0_RX_IRQHandler(void) {
         uint32_t b = l_USART0->RXDATA;
         QS_RX_PUT(b);
     }
+    QV_ARM_ERRATUM_838869();
 }
 #else
 void USART0_RX_IRQHandler(void) {}
@@ -224,6 +205,11 @@ void BSP_init(void) {
     QS_OBJ_DICTIONARY(&l_GPIO_EVEN_IRQHandler);
     QS_USR_DICTIONARY(SCORE_STAT);
     QS_USR_DICTIONARY(COMMAND_STAT);
+
+    /* setup the QS filters... */
+    QS_GLB_FILTER(QS_SM_RECORDS); /* state machine records */
+    QS_GLB_FILTER(QS_AO_RECORDS); /* active object records */
+    QS_GLB_FILTER(QS_UA_RECORDS); /* all user records */
 }
 
 /*..........................................................................*/
@@ -613,7 +599,7 @@ void BSP_updateScore(uint16_t score) {
     str[0] = (s % 10U) + '0';
     BSP_paintString(6U*6U, BSP_SCREEN_HEIGHT - 8U, str);
 
-    QS_BEGIN(SCORE_STAT, (void *)1) /* application-specific record begin */
+    QS_BEGIN_ID(SCORE_STAT, 0U) /* app-specific record */
         QS_U16(4, score);
     QS_END()
 }
@@ -684,9 +670,9 @@ void QF_onStartup(void) {
     * Assign a priority to EVERY ISR explicitly by calling NVIC_SetPriority().
     * DO NOT LEAVE THE ISR PRIORITIES AT THE DEFAULT VALUE!
     */
-    NVIC_SetPriority(USART0_RX_IRQn, USART0_RX_PRIO);
-    NVIC_SetPriority(SysTick_IRQn,   SYSTICK_PRIO);
-    NVIC_SetPriority(GPIO_EVEN_IRQn, GPIO_EVEN_PRIO);
+    NVIC_SetPriority(USART0_RX_IRQn, 0U); /* kernel unaware interrupt */
+    NVIC_SetPriority(GPIO_EVEN_IRQn, QF_AWARE_ISR_CMSIS_PRI);
+    NVIC_SetPriority(SysTick_IRQn,   QF_AWARE_ISR_CMSIS_PRI + 1U);
     /* ... */
 
     /* enable IRQs... */
@@ -813,17 +799,6 @@ uint8_t QS_onStartup(void const *arg) {
     QS_tickPeriod_ = SystemCoreClock / BSP_TICKS_PER_SEC;
     QS_tickTime_ = QS_tickPeriod_; /* to start the timestamp at zero */
 
-    /* setup the QS filters... */
-    QS_FILTER_ON(QS_QEP_STATE_ENTRY);
-    QS_FILTER_ON(QS_QEP_STATE_EXIT);
-    QS_FILTER_ON(QS_QEP_STATE_INIT);
-    QS_FILTER_ON(QS_QEP_INIT_TRAN);
-    QS_FILTER_ON(QS_QEP_INTERN_TRAN);
-    QS_FILTER_ON(QS_QEP_TRAN);
-    QS_FILTER_ON(QS_QEP_IGNORED);
-    QS_FILTER_ON(QS_QEP_DISPATCH);
-    QS_FILTER_ON(QS_QEP_UNHANDLED);
-
     return 1U; /* return success */
 }
 /*..........................................................................*/
@@ -868,7 +843,7 @@ void QS_onCommand(uint8_t cmdId,
     (void)param1;
     (void)param2;
     (void)param3;
-    QS_BEGIN(COMMAND_STAT, (void *)1) /* application-specific record begin */
+    QS_BEGIN_ID(COMMAND_STAT, 0U) /* app-specific record */
         QS_U8(2, cmdId);
         QS_U32(8, param1);
         QS_U32(8, param2);

+ 1 - 1
examples/arm-cm/game_efm32-slstk3401a/ship.c

@@ -3,7 +3,7 @@
 * Model: game.qm
 * File:  ${.::ship.c}
 *
-* This code has been generated by QM 5.0.2 <www.state-machine.com/qm/>.
+* This code has been generated by QM 5.0.4 <www.state-machine.com/qm/>.
 * DO NOT EDIT THIS FILE MANUALLY. All your changes will be lost.
 *
 * This program is open source software: you can redistribute it and/or

+ 6 - 6
examples/arm-cm/game_efm32-slstk3401a/tunnel.c

@@ -3,7 +3,7 @@
 * Model: game.qm
 * File:  ${.::tunnel.c}
 *
-* This code has been generated by QM 5.0.2 <www.state-machine.com/qm/>.
+* This code has been generated by QM 5.0.4 <www.state-machine.com/qm/>.
 * DO NOT EDIT THIS FILE MANUALLY. All your changes will be lost.
 *
 * This program is open source software: you can redistribute it and/or
@@ -178,7 +178,8 @@ static void Tunnel_plantMine(Tunnel * const me) {
             ope.super.sig = MINE_PLANT_SIG;
             ope.x = me->last_mine_x;
             ope.y = me->last_mine_y;
-            QHSM_DISPATCH(me->mines[n], (QEvt *)&ope); /* direct dispatch */
+            /* direct dispatch */
+            QHSM_DISPATCH(me->mines[n], (QEvt *)&ope, me->super.prio);
         }
     }
 }
@@ -186,10 +187,9 @@ static void Tunnel_plantMine(Tunnel * const me) {
 /*.${AOs::Tunnel::dispatchToAllMines} ......................................*/
 static void Tunnel_dispatchToAllMines(Tunnel * const me, QEvt const * e) {
     uint8_t n;
-
     for (n = 0U; n < GAME_MINES_MAX; ++n) {
         if (me->mines[n] != (QHsm *)0) { /* is the mine used? */
-            QHSM_DISPATCH(me->mines[n], e);
+            QHSM_DISPATCH(me->mines[n], e, me->super.prio);
         }
     }
 }
@@ -199,8 +199,8 @@ static QState Tunnel_initial(Tunnel * const me, QEvt const * const e) {
     /*.${AOs::Tunnel::SM::initial} */
     uint8_t n;
     for (n = 0U; n < GAME_MINES_MAX; ++n) {
-        QHSM_INIT(me->mine1_pool[n], (QEvt *)0);/*initial tran. for Mine1 */
-        QHSM_INIT(me->mine2_pool[n], (QEvt *)0);/*initial tran. for Mine2 */
+        QHSM_INIT(me->mine1_pool[n], (void *)0, me->super.prio);
+        QHSM_INIT(me->mine2_pool[n], (void *)0, me->super.prio);
     }
     BSP_randomSeed(1234); /* seed the pseudo-random generator */
 

+ 4 - 4
examples/arm-cm/game_efm32-slstk3401a/win32-gui/bsp.c

@@ -1,7 +1,7 @@
 /*****************************************************************************
 * Product: "Fly 'n' Shoot" game example, EFM32-SLSTK3401A, Win32-GUI
-* Last updated for version 6.8.0
-* Last updated on  2020-03-31
+* Last updated for version 6.9.1
+* Last updated on  2020-09-22
 *
 *                    Q u a n t u m  L e a P s
 *                    ------------------------
@@ -132,8 +132,8 @@ void BSP_init(void) {
     QS_USR_DICTIONARY(PLAYER_TRIGGER);
 
     /* setup the QS filters... */
-    QS_FILTER_ON(QS_ALL_RECORDS);
-    QS_FILTER_OFF(QS_QF_TICK);
+    QS_GLB_FILTER(QS_ALL_RECORDS);
+    QS_GLB_FILTER(-QS_QF_TICK);
 }
 /*..........................................................................*/
 void BSP_terminate(int16_t result) {

+ 24 - 0
examples/arm-cm/game_efm32-slstk3401a/win32-gui/make.bat

@@ -0,0 +1,24 @@
+:: Batch file for building the specified PROJ (solution) prepared for
+:: Microsoft Visual Studio
+::
+:: usage:
+:: make
+::
+@setlocal
+
+:: specifiy project and build configuration (Debug|Release|Spy)
+@set PROJ=game-gui
+@set CONF=Debug
+
+:: adjust the MSBuild location for your system
+@set MSBuild="C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Current\Bin\MSBuild.exe"
+
+:: execute the build...
+%MSBuild% %PROJ%.sln -t:Build -p:Configuration=%CONF% -p:Platform=Win32
+
+:: cleanup after the build...
+::rmdir /S /Q %CONF%\%PROJ%.tlog
+::del %CONF%\%PROJ%.vcxproj* %CONF%\%PROJ%.log %CONF%\*.obj %CONF%\*.pdb
+
+@endlocal
+

+ 2 - 0
examples/arm-cm/low-power_ek-tm4c123gxl/qv/bsp.c

@@ -80,6 +80,7 @@ void SysTick_Handler(void) {
 void Timer0A_IRQHandler(void) {
     TIMER0->ICR |= (1U << 0); /* clear the Timer0 interrupt source */
     QF_TICK_X(1U, (void *)0); /* process time events for rate 1 */
+    QV_ARM_ERRATUM_838869();
 }
 /*..........................................................................*/
 void GPIOPortF_IRQHandler(void) {
@@ -88,6 +89,7 @@ void GPIOPortF_IRQHandler(void) {
         QF_PUBLISH(&pressedEvt, &l_SysTick_Handler);
     }
     GPIOF->ICR = 0xFFU; /* clear interrupt sources */
+    QV_ARM_ERRATUM_838869();
 }
 
 /* BSP functions ===========================================================*/

+ 12 - 21
examples/arm-cr/dpp_launchxl2-tms57012/qk/bsp.c

@@ -1,13 +1,13 @@
 /*****************************************************************************
 * Product: "DPP" on LAUCHXL2-TMS570LS12 board, preemptive QK kernel
-* Last Updated for Version: 5.9.7
-* Date of the Last Update:  2017-08-18
+* Last updated for version 6.9.1
+* Last updated on  2020-09-22
 *
-*                    Q u a n t u m     L e a P s
-*                    ---------------------------
-*                    innovating embedded systems
+*                    Q u a n t u m  L e a P s
+*                    ------------------------
+*                    Modern Embedded Software
 *
-* Copyright (C) Quantum Leaps, LLC. All rights reserved.
+* Copyright (C) 2005-2020 Quantum Leaps, LLC. All rights reserved.
 *
 * This program is open source software: you can redistribute it and/or
 * modify it under the terms of the GNU General Public License as published
@@ -169,6 +169,11 @@ void BSP_init(void) {
     QS_OBJ_DICTIONARY(&l_ssiTest);
     QS_USR_DICTIONARY(PHILO_STAT);
     QS_USR_DICTIONARY(COMMAND_STAT);
+
+    /* setup the QS filters... */
+    QS_GLB_FILTER(QS_SM_RECORDS); /* state machine records */
+    QS_GLB_FILTER(QS_AO_RECORDS); /* active object records */
+    QS_GLB_FILTER(QS_UA_RECORDS); /* all user records */
 }
 
 /*..........................................................................*/
@@ -180,7 +185,7 @@ void BSP_displayPhilStat(uint8_t n, char const *stat) {
         LED2_PORT->DCLR = (1U << LED2_PIN);
     }
 
-    QS_BEGIN(PHILO_STAT, AO_Philo[n]) /* application-specific record begin */
+    QS_BEGIN_ID(PHILO_STAT, AO_Philo[n]->prio) /* app-specific record */
         QS_U8(1, n);  /* Philosopher number */
         QS_STR(stat); /* Philosopher status */
     QS_END()
@@ -302,20 +307,6 @@ uint8_t QS_onStartup(void const *arg) {
     vimREG->FIRQPR0 |= (1U << 13);   /* designate interrupt as FIQ */
     vimREG->REQMASKSET0 = (1U << 13); /* enable interrupt */
 
-    /* setup the QS filters... */
-    QS_FILTER_ON(QS_QEP_STATE_ENTRY);
-    QS_FILTER_ON(QS_QEP_STATE_EXIT);
-    QS_FILTER_ON(QS_QEP_STATE_INIT);
-    QS_FILTER_ON(QS_QEP_INIT_TRAN);
-    QS_FILTER_ON(QS_QEP_INTERN_TRAN);
-    QS_FILTER_ON(QS_QEP_TRAN);
-    QS_FILTER_ON(QS_QEP_IGNORED);
-    QS_FILTER_ON(QS_QEP_DISPATCH);
-    QS_FILTER_ON(QS_QEP_UNHANDLED);
-
-    QS_FILTER_ON(PHILO_STAT);
-    QS_FILTER_ON(COMMAND_STAT);
-
     return 1U; /* return success */
 }
 /*..........................................................................*/

+ 13 - 22
examples/arm-cr/dpp_launchxl2-tms57012/qv/bsp.c

@@ -1,13 +1,13 @@
 /*****************************************************************************
 * Product: "DPP" on LAUCHXL2-TMS570LS12 board, cooperative QV kernel
-* Last Updated for Version: 5.9.0
-* Date of the Last Update:  2017-04-14
+* Last updated for version 6.9.1
+* Last updated on  2020-09-22
 *
-*                    Q u a n t u m     L e a P s
-*                    ---------------------------
-*                    innovating embedded systems
+*                    Q u a n t u m  L e a P s
+*                    ------------------------
+*                    Modern Embedded Software
 *
-* Copyright (C) Quantum Leaps, LLC. All rights reserved.
+* Copyright (C) 2005-2020 Quantum Leaps, LLC. All rights reserved.
 *
 * This program is open source software: you can redistribute it and/or
 * modify it under the terms of the GNU General Public License as published
@@ -169,6 +169,11 @@ void BSP_init(void) {
     QS_OBJ_DICTIONARY(&l_ssiTest);
     QS_USR_DICTIONARY(PHILO_STAT);
     QS_USR_DICTIONARY(COMMAND_STAT);
+
+    /* setup the QS filters... */
+    QS_GLB_FILTER(QS_SM_RECORDS); /* state machine records */
+    QS_GLB_FILTER(QS_AO_RECORDS); /* active object records */
+    QS_GLB_FILTER(QS_UA_RECORDS); /* all user records */
 }
 
 /*..........................................................................*/
@@ -180,7 +185,7 @@ void BSP_displayPhilStat(uint8_t n, char const *stat) {
         LED2_PORT->DCLR = (1U << LED2_PIN);
     }
 
-    QS_BEGIN(PHILO_STAT, AO_Philo[n]) /* application-specific record begin */
+    QS_BEGIN_ID(PHILO_STAT, AO_Philo[n]->prio) /* app-specific record */
         QS_U8(1, n);  /* Philosopher number */
         QS_STR(stat); /* Philosopher status */
     QS_END()
@@ -291,20 +296,6 @@ uint8_t QS_onStartup(void const *arg) {
     vimREG->FIRQPR0 |= (1U << 13);   /* designate interrupt as FIQ */
     vimREG->REQMASKSET0 = (1U << 13); /* enable interrupt */
 
-    /* setup the QS filters... */
-    QS_FILTER_ON(QS_QEP_STATE_ENTRY);
-    QS_FILTER_ON(QS_QEP_STATE_EXIT);
-    QS_FILTER_ON(QS_QEP_STATE_INIT);
-    QS_FILTER_ON(QS_QEP_INIT_TRAN);
-    QS_FILTER_ON(QS_QEP_INTERN_TRAN);
-    QS_FILTER_ON(QS_QEP_TRAN);
-    QS_FILTER_ON(QS_QEP_IGNORED);
-    QS_FILTER_ON(QS_QEP_DISPATCH);
-    QS_FILTER_ON(QS_QEP_UNHANDLED);
-
-    QS_FILTER_ON(PHILO_STAT);
-    QS_FILTER_ON(COMMAND_STAT);
-
     return 1U; /* return success */
 }
 /*..........................................................................*/
@@ -344,7 +335,7 @@ void QS_onCommand(uint8_t cmdId,
     (void)param1;
     (void)param2;
     (void)param3;
-    QS_BEGIN(COMMAND_STAT, (void *)1) /* application-specific record begin */
+    QS_BEGIN_ID(COMMAND_STAT, 0U) /* app-specific record */
         QS_U8(2, cmdId);
         QS_U32(8, param1);
         QS_U32(8, param2);

+ 2 - 3
examples/arm-cr/dpp_launchxl2-tms57012/qview/dpp.py

@@ -59,10 +59,9 @@ class DPP:
     def on_run(self):
         glb_filter("QS_USER_00")
 
-        # NOTE: the names of objects for loc_filter() and current_obj()
-        # must match the QS Object Dictionaries produced by the application.
+        # NOTE: the names of objects for current_obj() must match
+        # the QS Object Dictionaries produced by the application.
         current_obj(OBJ_AO, "Table_inst")
-        loc_filter(OBJ_TE, "l_philo[0].timeEvt")
 
         # turn lists into tuples for better performance
         self._philo_obj = tuple(self._philo_obj)

+ 2 - 3
examples/arm-cr/dpp_launchxl2-tms57012/qview/dpp1.py

@@ -67,10 +67,9 @@ class DPP:
     def on_run(self):
         glb_filter("QS_QEP_TRAN")
 
-        # NOTE: the names of objects for loc_filter() and current_obj()
-        # must match the QS Object Dictionaries produced by the application.
+        # NOTE: the names of objects for current_obj() must match
+        # the QS Object Dictionaries produced by the application.
         current_obj(OBJ_AO, "Table_inst")
-        loc_filter(OBJ_TE, "Philo_inst[0].timeEvt")
 
         # turn lists into tuples for better performance
         self._philo_obj = tuple(self._philo_obj)

+ 12 - 20
examples/arm7-9/dpp_at91sam7s-ek/qk/iar/bsp.c

@@ -1,13 +1,13 @@
 /*****************************************************************************
 * Product: DPP on AT91SAM7S-EK, QK kernel, IAR-ARM
-* Last updated for version 5.6.0
-* Last updated on  2015-12-18
+* Last updated for version 6.9.1
+* Last updated on  2020-09-22
 *
-*                    Q u a n t u m     L e a P s
-*                    ---------------------------
-*                    innovating embedded systems
+*                    Q u a n t u m  L e a P s
+*                    ------------------------
+*                    Modern Embedded Software
 *
-* Copyright (C) Quantum Leaps, LLC. All rights reserved.
+* Copyright (C) 2005-2020 Quantum Leaps, LLC. All rights reserved.
 *
 * This program is open source software: you can redistribute it and/or
 * modify it under the terms of the GNU General Public License as published
@@ -174,6 +174,11 @@ void BSP_init(void) {
         Q_ERROR();
     }
     QS_OBJ_DICTIONARY(&l_ISR_tick);
+
+    /* setup the QS filters... */
+    QS_GLB_FILTER(QS_SM_RECORDS); /* state machine records */
+    QS_GLB_FILTER(QS_AO_RECORDS); /* active object records */
+    QS_GLB_FILTER(QS_UA_RECORDS); /* all user records */
 }
 /*..........................................................................*/
 void BSP_terminate(int16_t result) {
@@ -194,7 +199,7 @@ void BSP_displayPhilStat(uint8_t n, char const *stat) {
         LED_OFF(1); /* turn LED off */
     }
 
-    QS_BEGIN(PHILO_STAT, AO_Philo[n]) /* application-specific record begin */
+    QS_BEGIN_ID(PHILO_STAT, AO_Philo[n]->prio) /* app-specific record */
         QS_U8(1, n);                  /* Philosopher number */
         QS_STR(stat);                 /* Philosopher status */
     QS_END()
@@ -332,19 +337,6 @@ uint8_t QS_onStartup(void const *arg) {
     pTC0->TC_CCR = AT91C_TC_CLKEN;  /* TC_CCR: enable Clock Counter */
     pTC0->TC_CCR = AT91C_TC_SWTRG;  /* TC_CCR: start counting */
 
-    /* setup the QS filters... */
-    QS_FILTER_ON(QS_QEP_STATE_ENTRY);
-    QS_FILTER_ON(QS_QEP_STATE_EXIT);
-    QS_FILTER_ON(QS_QEP_STATE_INIT);
-    QS_FILTER_ON(QS_QEP_INIT_TRAN);
-    QS_FILTER_ON(QS_QEP_INTERN_TRAN);
-    QS_FILTER_ON(QS_QEP_TRAN);
-    QS_FILTER_ON(QS_QEP_IGNORED);
-    QS_FILTER_ON(QS_QEP_DISPATCH);
-    QS_FILTER_ON(QS_QEP_UNHANDLED);
-
-    QS_FILTER_ON(PHILO_STAT);
-
     return 1U; /* indicate successfull QS initialization */
 }
 /*..........................................................................*/

+ 12 - 20
examples/arm7-9/dpp_at91sam7s-ek/qv/iar/bsp.c

@@ -1,13 +1,13 @@
 /*****************************************************************************
 * Product: DPP on AT91SAM7S-EK, QK kernel, IAR-ARM
-* Last updated for version 5.6.0
-* Last updated on  2015-12-18
+* Last updated for version 6.9.1
+* Last updated on  2020-09-22
 *
-*                    Q u a n t u m     L e a P s
-*                    ---------------------------
-*                    innovating embedded systems
+*                    Q u a n t u m  L e a P s
+*                    ------------------------
+*                    Modern Embedded Software
 *
-* Copyright (C) Quantum Leaps, LLC. All rights reserved.
+* Copyright (C) 2005-2020 Quantum Leaps, LLC. All rights reserved.
 *
 * This program is open source software: you can redistribute it and/or
 * modify it under the terms of the GNU General Public License as published
@@ -174,6 +174,11 @@ void BSP_init(void) {
         Q_ERROR();
     }
     QS_OBJ_DICTIONARY(&l_ISR_tick);
+
+    /* setup the QS filters... */
+    QS_GLB_FILTER(QS_SM_RECORDS); /* state machine records */
+    QS_GLB_FILTER(QS_AO_RECORDS); /* active object records */
+    QS_GLB_FILTER(QS_UA_RECORDS); /* all user records */
 }
 /*..........................................................................*/
 void BSP_terminate(int16_t result) {
@@ -194,7 +199,7 @@ void BSP_displayPhilStat(uint8_t n, char const *stat) {
         LED_OFF(1); /* turn LED off */
     }
 
-    QS_BEGIN(PHILO_STAT, AO_Philo[n]) /* application-specific record begin */
+    QS_BEGIN_ID(PHILO_STAT, AO_Philo[n]->prio) /* app-specific record */
         QS_U8(1, n);                  /* Philosopher number */
         QS_STR(stat);                 /* Philosopher status */
     QS_END()
@@ -334,19 +339,6 @@ uint8_t QS_onStartup(void const *arg) {
     pTC0->TC_CCR = AT91C_TC_CLKEN;  /* TC_CCR: enable Clock Counter */
     pTC0->TC_CCR = AT91C_TC_SWTRG;  /* TC_CCR: start counting */
 
-    /* setup the QS filters... */
-    QS_FILTER_ON(QS_QEP_STATE_ENTRY);
-    QS_FILTER_ON(QS_QEP_STATE_EXIT);
-    QS_FILTER_ON(QS_QEP_STATE_INIT);
-    QS_FILTER_ON(QS_QEP_INIT_TRAN);
-    QS_FILTER_ON(QS_QEP_INTERN_TRAN);
-    QS_FILTER_ON(QS_QEP_TRAN);
-    QS_FILTER_ON(QS_QEP_IGNORED);
-    QS_FILTER_ON(QS_QEP_DISPATCH);
-    QS_FILTER_ON(QS_QEP_UNHANDLED);
-
-    QS_FILTER_ON(PHILO_STAT);
-
     return 1U; /* indicate successfull QS initialization */
 }
 /*..........................................................................*/

+ 13 - 13
examples/embos/arm-cm/dpp_stm32f429-discovery/bsp.c

@@ -1,13 +1,13 @@
 /*****************************************************************************
 * Product: "Dining Philosophers Problem" example, embOS kernel
-* Last updated for version 5.6.0
-* Last updated on  2015-12-18
+* Last updated for version 6.9.1
+* Last updated on  2020-09-22
 *
-*                    Q u a n t u m     L e a P s
-*                    ---------------------------
-*                    innovating embedded systems
+*                    Q u a n t u m  L e a P s
+*                    ------------------------
+*                    Modern Embedded Software
 *
-* Copyright (C) Quantum Leaps, LLC. All rights reserved.
+* Copyright (C) 2005-2020 Quantum Leaps, LLC. All rights reserved.
 *
 * This program is open source software: you can redistribute it and/or
 * modify it under the terms of the GNU General Public License as published
@@ -252,6 +252,11 @@ void BSP_init(void) {
     QS_OBJ_DICTIONARY(&l_embos_ticker);
     QS_USR_DICTIONARY(PHILO_STAT);
     QS_USR_DICTIONARY(COMMAND_STAT);
+
+    /* setup the QS filters... */
+    QS_GLB_FILTER(QS_SM_RECORDS); /* state machine records */
+    QS_GLB_FILTER(QS_AO_RECORDS); /* active object records */
+    QS_GLB_FILTER(QS_UA_RECORDS); /* all user records */
 }
 /*..........................................................................*/
 void BSP_displayPhilStat(uint8_t n, char const *stat) {
@@ -270,7 +275,7 @@ void BSP_displayPhilStat(uint8_t n, char const *stat) {
         LED_GPIO_PORT->BSRRH = LED5_PIN; /* turn LED on  */
     }
 
-    QS_BEGIN(PHILO_STAT, AO_Philo[n]) /* application-specific record begin */
+    QS_BEGIN_ID(PHILO_STAT, AO_Philo[n]->prio) /* app-specific record */
         QS_U8(1, n);  /* Philosopher number */
         QS_STR(stat); /* Philosopher status */
     QS_END()          /* application-specific record end */
@@ -382,11 +387,6 @@ uint8_t QS_onStartup(void const *arg) {
     QS_tickPeriod_ = SystemCoreClock / BSP_TICKS_PER_SEC;
     QS_tickTime_ = QS_tickPeriod_; /* to start the timestamp at zero */
 
-    /* setup the QS filters... */
-    QS_FILTER_ON(QS_SM_RECORDS); /* state machine records */
-    QS_FILTER_ON(QS_AO_RECORDS); /* active object records */
-    QS_FILTER_ON(QS_UA_RECORDS); /* all user records */
-
     return 1U; /* return success */
 }
 /*..........................................................................*/
@@ -428,7 +428,7 @@ void QS_onCommand(uint8_t cmdId,
     (void)param1;
     (void)param2;
     (void)param3;
-    QS_BEGIN(COMMAND_STAT, (void *)1) /* application-specific record begin */
+    QS_BEGIN_ID(COMMAND_STAT, 0U) /* app-specific record */
         QS_U8(2, cmdId);
         QS_U32(8, param1);
         QS_U32(8, param2);

+ 21 - 21
examples/emwin/demo_no_wm/table.c

@@ -58,7 +58,7 @@ static QState Table_paused (Table *me, QEvt const *e);
 enum ForkState { FREE, USED };
 
 /* Local objects -----------------------------------------------------------*/
-static Table l_table;     /* the single instance of the Table active object */
+static Table l_table; /* the single instance of the Table active object */
 
 #ifdef Q_SPY
 enum QSUserRecords {
@@ -68,7 +68,7 @@ enum QSUserRecords {
 #endif
 
 /* Global-scope objects ----------------------------------------------------*/
-QActive * const AO_Table = (QActive *)&l_table;      /* "opaque" AO pointer */
+QActive * const AO_Table = (QActive *)&l_table; /* "opaque" AO pointer */
 
 /* GUI definition ==========================================================*/
 enum YCoord {
@@ -102,9 +102,9 @@ static void displyPhilStat(uint8_t n, char const *stat) {
     l_philoStat[n] = stat;
     GUI_DispStringAt(stat,  l_xOrg + STATE_X, l_yOrg + l_philoY[n]);
 
-    QS_BEGIN(PHILO_STAT, AO_Philo[n])  /* application-specific record begin */
-        QS_U8(1, n);                                  /* Philosopher number */
-        QS_STR(stat);                                 /* Philosopher status */
+    QS_BEGIN_ID(PHILO_STAT, AO_Philo[n]->prio) /* app-specific record */
+        QS_U8(1, n);  /* Philosopher number */
+        QS_STR(stat); /* Philosopher status */
     QS_END()
 }
 /*..........................................................................*/
@@ -116,8 +116,8 @@ static void displyTableStat(char const *stat) {
     l_tableState = stat;
     GUI_DispStringAt(stat,  l_xOrg + STATE_X, l_yOrg + l_tableY);
 
-    QS_BEGIN(TABLE_STAT, AO_Table)     /* application-specific record begin */
-        QS_STR(stat);                                 /* Philosopher status */
+    QS_BEGIN_ID(TABLE_STAT, AO_Table->prio) /* app-specific record */
+        QS_STR(stat); /* Philosopher status */
     QS_END()
 }
 
@@ -172,13 +172,13 @@ QState Table_initial(Table *me, QEvt const *e) {
     QS_FUN_DICTIONARY(&Table_initial);
     QS_FUN_DICTIONARY(&Table_serving);
 
-    QS_SIG_DICTIONARY(DONE_SIG,      0);                  /* global signals */
+    QS_SIG_DICTIONARY(DONE_SIG,      0); /* global signals */
     QS_SIG_DICTIONARY(EAT_SIG,       0);
     QS_SIG_DICTIONARY(PAUSE_SIG, 0);
 
-    QS_SIG_DICTIONARY(HUNGRY_SIG,    me);          /* signal just for Table */
+    QS_SIG_DICTIONARY(HUNGRY_SIG,    me); /* signal just for Table */
 
-    GUI_Init();                              /* initialize the embedded GUI */
+    GUI_Init(); /* initialize the embedded GUI */
 
     QActive_subscribe((QActive *)me, DONE_SIG);
 
@@ -196,19 +196,19 @@ QState Table_ready(Table *me, QEvt const *e) {
         }
 
         /* ... hardkey events ... */
-        case KEY_LEFT_REL_SIG: {                   /* hardkey LEFT released */
+        case KEY_LEFT_REL_SIG: { /* hardkey LEFT released */
             moveDppScreen(-5, 0);
             return Q_HANDLED();
         }
-        case KEY_RIGHT_REL_SIG: {                 /* hardkey RIGHT released */
+        case KEY_RIGHT_REL_SIG: { /* hardkey RIGHT released */
             moveDppScreen(5, 0);
             return Q_HANDLED();
         }
-        case KEY_DOWN_REL_SIG: {                   /* hardkey DOWN released */
+        case KEY_DOWN_REL_SIG: {  /* hardkey DOWN released */
             moveDppScreen(0, 5);
             return Q_HANDLED();
         }
-        case KEY_UP_REL_SIG: {                       /* hardkey UP released */
+        case KEY_UP_REL_SIG: {    /* hardkey UP released */
             moveDppScreen(0, -5);
             return Q_HANDLED();
         }
@@ -223,7 +223,7 @@ QState Table_serving(Table *me, QEvt const *e) {
     switch (e->sig) {
         case Q_ENTRY_SIG: {
             displyTableStat("serving");
-            for (n = 0; n < N_PHILO; ++n) {   /* give permissions to eat... */
+            for (n = 0; n < N_PHILO; ++n) { /* give permissions to eat... */
                 if (me->isHungry[n]
                     && (me->fork[LEFT(n)] == FREE)
                         && (me->fork[n] == FREE))
@@ -260,7 +260,7 @@ QState Table_serving(Table *me, QEvt const *e) {
             Q_ASSERT(n < N_PHILO);
             displyPhilStat(n, "thinking");
             me->fork[LEFT(n)] = me->fork[n] = FREE;
-            m = RIGHT(n);                       /* check the right neighbor */
+            m = RIGHT(n); /* check the right neighbor */
             if (me->isHungry[m] && me->fork[m] == FREE) {
                 me->fork[n] = me->fork[m] = USED;
                 me->isHungry[m] = 0;
@@ -269,7 +269,7 @@ QState Table_serving(Table *me, QEvt const *e) {
                 QF_PUBLISH((QEvt *)pe, me);
                 displyPhilStat(m, "eating  ");
             }
-            m = LEFT(n);                         /* check the left neighbor */
+            m = LEFT(n); /* check the left neighbor */
             n = LEFT(m);
             if (me->isHungry[m] && me->fork[n] == FREE) {
                 me->fork[m] = me->fork[n] = USED;
@@ -281,8 +281,8 @@ QState Table_serving(Table *me, QEvt const *e) {
             }
             return Q_HANDLED();
         }
-        case PAUSE_SIG:                          /* "Toggle" button pressed */
-        case KEY_CENTER_PRESS_SIG: {              /* hardkey CENTER pressed */
+        case PAUSE_SIG:              /* "Toggle" button pressed */
+        case KEY_CENTER_PRESS_SIG: { /* hardkey CENTER pressed */
             return Q_TRAN(&Table_paused);
         }
     }
@@ -311,8 +311,8 @@ QState Table_paused(Table *me, QEvt const *e) {
             me->fork[LEFT(n)] = me->fork[n] = FREE;
             return Q_HANDLED();
         }
-        case PAUSE_SIG:                          /* "Toggle" button pressed */
-        case KEY_CENTER_REL_SIG: {               /* hardkey CENTER released */
+        case PAUSE_SIG:            /* "Toggle" button pressed */
+        case KEY_CENTER_REL_SIG: { /* hardkey CENTER released */
             return Q_TRAN(&Table_serving);
         }
     }

+ 18 - 43
examples/freertos/arm-cm/dpp_ek-tm4c123gxl/bsp.c

@@ -1,13 +1,13 @@
 /*****************************************************************************
 * Product: DPP example, EK-TM4C123GXL board, FreeRTOS kernel
-* Last Updated for Version: 6.0.4
-* Date of the Last Update:  2018-01-10
+* Last updated for version 6.9.1
+* Last updated on  2020-09-22
 *
-*                    Q u a n t u m     L e a P s
-*                    ---------------------------
-*                    innovating embedded systems
+*                    Q u a n t u m  L e a P s
+*                    ------------------------
+*                    Modern Embedded Software
 *
-* Copyright (C) Quantum Leaps, LLC. All rights reserved.
+* Copyright (C) 2005-2020 Quantum Leaps, LLC. All rights reserved.
 *
 * This program is open source software: you can redistribute it and/or
 * modify it under the terms of the GNU General Public License as published
@@ -43,29 +43,6 @@
 
 Q_DEFINE_THIS_FILE  /* define the name of this file for assertions */
 
-/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! CAUTION !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-* Assign a priority to EVERY ISR explicitly by calling NVIC_SetPriority().
-* DO NOT LEAVE THE ISR PRIORITIES AT THE DEFAULT VALUE!
-*/
-enum KernelUnawareISRs { /* see NOTE1 */
-    UART0_PRIO,
-    /* ... */
-    MAX_KERNEL_UNAWARE_CMSIS_PRI /* keep always last */
-};
-/* "kernel-unaware" interrupts can't overlap "kernel-aware" interrupts */
-Q_ASSERT_COMPILE(
-   MAX_KERNEL_UNAWARE_CMSIS_PRI
-   <= (configMAX_SYSCALL_INTERRUPT_PRIORITY >> (8-__NVIC_PRIO_BITS)));
-
-enum KernelAwareISRs {
-    SYSTICK_PRIO = (configMAX_SYSCALL_INTERRUPT_PRIORITY >> (8-__NVIC_PRIO_BITS)),
-    GPIOA_PRIO,
-    /* ... */
-    MAX_KERNEL_AWARE_CMSIS_PRI /* keep always last */
-};
-/* "kernel-aware" interrupts should not overlap the PendSV priority */
-Q_ASSERT_COMPILE(MAX_KERNEL_AWARE_CMSIS_PRI <= (0xFF >>(8-__NVIC_PRIO_BITS)));
-
 /* LEDs and Switches of the EK-TM4C123GXL board ............................*/
 #define LED_RED     (1U << 1)
 #define LED_GREEN   (1U << 3)
@@ -310,6 +287,11 @@ void BSP_init(void) {
     QS_USR_DICTIONARY(PHILO_STAT);
     QS_USR_DICTIONARY(PAUSED_STAT);
     QS_USR_DICTIONARY(COMMAND_STAT);
+
+    /* setup the QS filters... */
+    QS_GLB_FILTER(QS_SM_RECORDS); /* state machine records */
+    QS_GLB_FILTER(QS_AO_RECORDS); /* active object records */
+    QS_GLB_FILTER(QS_UA_RECORDS); /* all user records */
 }
 /*..........................................................................*/
 void BSP_displayPhilStat(uint8_t n, char const *stat) {
@@ -318,7 +300,7 @@ void BSP_displayPhilStat(uint8_t n, char const *stat) {
          ? 0xFFU             /* turn the LED1 on  */
          : 0U);              /* turn the LED1 off */
 
-    QS_BEGIN(PHILO_STAT, AO_Philo[n]) /* application-specific record begin */
+    QS_BEGIN_ID(PHILO_STAT, AO_Philo[n]->prio) /* app-specific record */
         QS_U8(1, n);  /* Philosopher number */
         QS_STR(stat); /* Philosopher status */
     QS_END()
@@ -327,7 +309,7 @@ void BSP_displayPhilStat(uint8_t n, char const *stat) {
 void BSP_displayPaused(uint8_t paused) {
     GPIOF->DATA_Bits[LED_GREEN] = ((paused != 0U) ? 0xFFU : 0U);
 
-    QS_BEGIN(PAUSED_STAT, (void *)0) /* application-specific record begin */
+    QS_BEGIN_ID(PAUSED_STAT, 0U) /* app-specific record */
         QS_U8(1, paused);  /* Paused status */
     QS_END()
 }
@@ -370,15 +352,15 @@ void QF_onStartup(void) {
     /* assing all priority bits for preemption-prio. and none to sub-prio. */
     NVIC_SetPriorityGrouping(0U);
 
-    /* set priorities of ALL ISRs used in the system, see NOTE00
+    /* set priorities of ALL ISRs used in the system, see NOTE1
     *
     * !!!!!!!!!!!!!!!!!!!!!!!!!!!! CAUTION !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
     * Assign a priority to EVERY ISR explicitly by calling NVIC_SetPriority().
     * DO NOT LEAVE THE ISR PRIORITIES AT THE DEFAULT VALUE!
     */
-    NVIC_SetPriority(UART0_IRQn,     UART0_PRIO);
-    NVIC_SetPriority(SysTick_IRQn,   SYSTICK_PRIO);
-    NVIC_SetPriority(GPIOA_IRQn,     GPIOA_PRIO);
+    NVIC_SetPriority(UART0_IRQn,     0U); /* kernel unaware interrupt */
+    NVIC_SetPriority(GPIOA_IRQn,     QF_AWARE_ISR_CMSIS_PRI);
+    NVIC_SetPriority(SysTick_IRQn,   QF_AWARE_ISR_CMSIS_PRI + 1U);
     /* ... */
 
     /* enable IRQs... */
@@ -460,12 +442,6 @@ uint8_t QS_onStartup(void const *arg) {
     QS_tickPeriod_ = SystemCoreClock / BSP_TICKS_PER_SEC;
     QS_tickTime_ = QS_tickPeriod_; /* to start the timestamp at zero */
 
-    /* setup the QS filters... */
-    QS_FILTER_ON(QS_SM_RECORDS); /* state machine records */
-    QS_FILTER_ON(QS_UA_RECORDS); /* all usedr records */
-    //QS_FILTER_ON(QS_MUTEX_LOCK);
-    //QS_FILTER_ON(QS_MUTEX_UNLOCK);
-
     return 1U; /* return success */
 }
 /*..........................................................................*/
@@ -510,8 +486,7 @@ void QS_onCommand(uint8_t cmdId,
     (void)param2;
     (void)param3;
 
-    /* application-specific record */
-    QS_BEGIN(COMMAND_STAT, (void *)1)
+    QS_BEGIN_ID(COMMAND_STAT, 0U)/* app-specific record */
         QS_U8(2, cmdId);
         QS_U32(8, param1);
         QS_U32(8, param2);

+ 19 - 42
examples/freertos/arm-cm/dpp_nucleo-h743zi/bsp.c

@@ -1,13 +1,13 @@
 /*****************************************************************************
 * Product: DPP example, NUCLEO-H743ZI board, FreeRTOS kernel
-* Last Updated for Version: 6.1.0
-* Date of the Last Update:  2018-02-02
+* Last updated for version 6.9.1
+* Last updated on  2020-09-22
 *
-*                    Q u a n t u m     L e a P s
-*                    ---------------------------
-*                    innovating embedded systems
+*                    Q u a n t u m  L e a P s
+*                    ------------------------
+*                    Modern Embedded Software
 *
-* Copyright (C) Quantum Leaps, LLC. All rights reserved.
+* Copyright (C) 2005-2020 Quantum Leaps, LLC. All rights reserved.
 *
 * This program is open source software: you can redistribute it and/or
 * modify it under the terms of the GNU General Public License as published
@@ -44,29 +44,6 @@
 
 Q_DEFINE_THIS_FILE /* define the name of this file for assertions */
 
-/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! CAUTION !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-* Assign a priority to EVERY ISR explicitly by calling NVIC_SetPriority().
-* DO NOT LEAVE THE ISR PRIORITIES AT THE DEFAULT VALUE!
-*/
-enum KernelUnawareISRs { /* see NOTE1 */
-    USART3_PRIO,
-    /* ... */
-    MAX_KERNEL_UNAWARE_CMSIS_PRI /* keep always last */
-};
-/* "kernel-unaware" interrupts can't overlap "kernel-aware" interrupts */
-Q_ASSERT_COMPILE(
-   MAX_KERNEL_UNAWARE_CMSIS_PRI
-   <= (configMAX_SYSCALL_INTERRUPT_PRIORITY >> (8-__NVIC_PRIO_BITS)));
-
-enum KernelAwareISRs {
-    SYSTICK_PRIO = (configMAX_SYSCALL_INTERRUPT_PRIORITY >> (8-__NVIC_PRIO_BITS)),
-    EXTI0_PRIO,
-    /* ... */
-    MAX_KERNEL_AWARE_CMSIS_PRI /* keep always last */
-};
-/* "kernel-aware" interrupts should not overlap the PendSV priority */
-Q_ASSERT_COMPILE(MAX_KERNEL_AWARE_CMSIS_PRI <= (0xFF >>(8-__NVIC_PRIO_BITS)));
-
 /* Local-scope objects -----------------------------------------------------*/
 static uint32_t l_rnd; /* random seed */
 
@@ -292,6 +269,11 @@ void BSP_init(void) {
     QS_USR_DICTIONARY(PHILO_STAT);
     QS_USR_DICTIONARY(PAUSED_STAT);
     QS_USR_DICTIONARY(COMMAND_STAT);
+
+    /* setup the QS filters... */
+    QS_GLB_FILTER(QS_SM_RECORDS); /* state machine records */
+    QS_GLB_FILTER(QS_AO_RECORDS); /* active object records */
+    QS_GLB_FILTER(QS_UA_RECORDS); /* all user records */
 }
 /*..........................................................................*/
 void BSP_displayPhilStat(uint8_t n, char const *stat) {
@@ -302,7 +284,7 @@ void BSP_displayPhilStat(uint8_t n, char const *stat) {
         BSP_LED_Off(LED1);
     }
 
-    QS_BEGIN(PHILO_STAT, AO_Philo[n]) /* application-specific record begin */
+    QS_BEGIN_ID(PHILO_STAT, AO_Philo[n]->prio) /* app-specific record */
         QS_U8(1, n);  /* Philosopher number */
         QS_STR(stat); /* Philosopher status */
     QS_END()          /* application-specific record end */
@@ -351,15 +333,17 @@ void QF_onStartup(void) {
     /* assing all priority bits for preemption-prio. and none to sub-prio. */
     NVIC_SetPriorityGrouping(0U);
 
-    /* set priorities of ALL ISRs used in the system, see NOTE00
+    /* set priorities of ALL ISRs used in the system, see NOTE1
     *
     * !!!!!!!!!!!!!!!!!!!!!!!!!!!! CAUTION !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
     * Assign a priority to EVERY ISR explicitly by calling NVIC_SetPriority().
     * DO NOT LEAVE THE ISR PRIORITIES AT THE DEFAULT VALUE!
     */
-    NVIC_SetPriority(USART3_IRQn,  USART3_PRIO);
-    NVIC_SetPriority(SysTick_IRQn, SYSTICK_PRIO);
-    NVIC_SetPriority(EXTI0_IRQn,   EXTI0_PRIO);
+    NVIC_SetPriority(USART3_IRQn,  0U); /* kernel unaware interrupt */
+    NVIC_SetPriority(EXTI0_IRQn,
+        (configMAX_SYSCALL_INTERRUPT_PRIORITY >> (8-__NVIC_PRIO_BITS)));
+    NVIC_SetPriority(SysTick_IRQn,
+        (configMAX_SYSCALL_INTERRUPT_PRIORITY >> (8-__NVIC_PRIO_BITS)) + 1U);
     /* ... */
 
     /* enable IRQs... */
@@ -421,12 +405,6 @@ uint8_t QS_onStartup(void const *arg) {
     QS_tickPeriod_ = SystemCoreClock / BSP_TICKS_PER_SEC;
     QS_tickTime_ = QS_tickPeriod_; /* to start the timestamp at zero */
 
-    /* setup the QS filters... */
-    QS_FILTER_ON(QS_SM_RECORDS); /* state machine records */
-    QS_FILTER_ON(QS_UA_RECORDS); /* all usedr records */
-    //QS_FILTER_ON(QS_MUTEX_LOCK);
-    //QS_FILTER_ON(QS_MUTEX_UNLOCK);
-
     return 1U; /* return success */
 }
 /*..........................................................................*/
@@ -467,8 +445,7 @@ void QS_onCommand(uint8_t cmdId,
     (void)param2;
     (void)param3;
 
-    /* application-specific record */
-    QS_BEGIN(COMMAND_STAT, (void *)1)
+    QS_BEGIN_ID(COMMAND_STAT, 0U)/* app-specific record */
         QS_U8(2, cmdId);
         QS_U32(8, param1);
         QS_U32(8, param2);

+ 18 - 41
examples/freertos/arm-cm/dpp_stm32f746g-discovery/bsp.c

@@ -1,13 +1,13 @@
 /*****************************************************************************
 * Product: DPP example, STM32746G-Discovery board, FreeRTOS kernel
-* Last Updated for Version: 6.1.0
-* Date of the Last Update:  2018-01-31
+* Last updated for version 6.9.1
+* Last updated on  2020-09-22
 *
-*                    Q u a n t u m     L e a P s
-*                    ---------------------------
-*                    innovating embedded systems
+*                    Q u a n t u m  L e a P s
+*                    ------------------------
+*                    Modern Embedded Software
 *
-* Copyright (C) Quantum Leaps, LLC. All rights reserved.
+* Copyright (C) 2005-2020 Quantum Leaps, LLC. All rights reserved.
 *
 * This program is open source software: you can redistribute it and/or
 * modify it under the terms of the GNU General Public License as published
@@ -42,29 +42,6 @@
 
 Q_DEFINE_THIS_FILE /* define the name of this file for assertions */
 
-/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! CAUTION !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-* Assign a priority to EVERY ISR explicitly by calling NVIC_SetPriority().
-* DO NOT LEAVE THE ISR PRIORITIES AT THE DEFAULT VALUE!
-*/
-enum KernelUnawareISRs { /* see NOTE1 */
-    USART1_PRIO,
-    /* ... */
-    MAX_KERNEL_UNAWARE_CMSIS_PRI /* keep always last */
-};
-/* "kernel-unaware" interrupts can't overlap "kernel-aware" interrupts */
-Q_ASSERT_COMPILE(
-   MAX_KERNEL_UNAWARE_CMSIS_PRI
-   <= (configMAX_SYSCALL_INTERRUPT_PRIORITY >> (8-__NVIC_PRIO_BITS)));
-
-enum KernelAwareISRs {
-    SYSTICK_PRIO = (configMAX_SYSCALL_INTERRUPT_PRIORITY >> (8-__NVIC_PRIO_BITS)),
-    EXTI0_PRIO,
-    /* ... */
-    MAX_KERNEL_AWARE_CMSIS_PRI /* keep always last */
-};
-/* "kernel-aware" interrupts should not overlap the PendSV priority */
-Q_ASSERT_COMPILE(MAX_KERNEL_AWARE_CMSIS_PRI <= (0xFF >>(8-__NVIC_PRIO_BITS)));
-
 /* Local-scope objects -----------------------------------------------------*/
 static uint32_t l_rnd; /* random seed */
 
@@ -288,6 +265,11 @@ void BSP_init(void) {
     QS_USR_DICTIONARY(PHILO_STAT);
     QS_USR_DICTIONARY(PAUSED_STAT);
     QS_USR_DICTIONARY(COMMAND_STAT);
+
+    /* setup the QS filters... */
+    QS_GLB_FILTER(QS_SM_RECORDS); /* state machine records */
+    QS_GLB_FILTER(QS_AO_RECORDS); /* active object records */
+    QS_GLB_FILTER(QS_UA_RECORDS); /* all user records */
 }
 /*..........................................................................*/
 void BSP_displayPhilStat(uint8_t n, char const *stat) {
@@ -298,7 +280,7 @@ void BSP_displayPhilStat(uint8_t n, char const *stat) {
         BSP_LED_Off(LED1);
     }
 
-    QS_BEGIN(PHILO_STAT, AO_Philo[n]) /* application-specific record begin */
+    QS_BEGIN_ID(PHILO_STAT, AO_Philo[n]->prio) /* app-specific record */
         QS_U8(1, n);  /* Philosopher number */
         QS_STR(stat); /* Philosopher status */
     QS_END()          /* application-specific record end */
@@ -353,9 +335,11 @@ void QF_onStartup(void) {
     * Assign a priority to EVERY ISR explicitly by calling NVIC_SetPriority().
     * DO NOT LEAVE THE ISR PRIORITIES AT THE DEFAULT VALUE!
     */
-    NVIC_SetPriority(USART1_IRQn,  USART1_PRIO);
-    NVIC_SetPriority(SysTick_IRQn, SYSTICK_PRIO);
-    NVIC_SetPriority(EXTI0_IRQn,   EXTI0_PRIO);
+    NVIC_SetPriority(USART1_IRQn,  0U); /* kernel unaware interrupt */
+    NVIC_SetPriority(EXTI0_IRQn,
+        (configMAX_SYSCALL_INTERRUPT_PRIORITY >> (8-__NVIC_PRIO_BITS)));
+    NVIC_SetPriority(SysTick_IRQn,
+        (configMAX_SYSCALL_INTERRUPT_PRIORITY >> (8-__NVIC_PRIO_BITS)) + 1U);
     /* ... */
 
     /* enable IRQs... */
@@ -417,12 +401,6 @@ uint8_t QS_onStartup(void const *arg) {
     QS_tickPeriod_ = SystemCoreClock / BSP_TICKS_PER_SEC;
     QS_tickTime_ = QS_tickPeriod_; /* to start the timestamp at zero */
 
-    /* setup the QS filters... */
-    QS_FILTER_ON(QS_SM_RECORDS); /* state machine records */
-    QS_FILTER_ON(QS_UA_RECORDS); /* all usedr records */
-    //QS_FILTER_ON(QS_MUTEX_LOCK);
-    //QS_FILTER_ON(QS_MUTEX_UNLOCK);
-
     return 1U; /* return success */
 }
 /*..........................................................................*/
@@ -463,8 +441,7 @@ void QS_onCommand(uint8_t cmdId,
     (void)param2;
     (void)param3;
 
-    /* application-specific record */
-    QS_BEGIN(COMMAND_STAT, (void *)1)
+    QS_BEGIN_ID(COMMAND_STAT, 0U)/* app-specific record */
         QS_U8(2, cmdId);
         QS_U32(8, param1);
         QS_U32(8, param2);

+ 33 - 32
examples/lwip/arm-cm/lwip_ek-lm3s6965/lwipmgr.c

@@ -1,13 +1,13 @@
 /*****************************************************************************
 * Product: lwIP-Manager Active Object
-* Last Updated for Version: 5.4.0
-* Date of the Last Update:  2015-03-07
+* Last updated for version 6.9.1
+* Last updated on  2020-09-11
 *
-*                    Q u a n t u m     L e a P s
-*                    ---------------------------
-*                    innovating embedded systems
+*                    Q u a n t u m  L e a P s
+*                    ------------------------
+*                    Modern Embedded Software
 *
-* Copyright (C) Quantum Leaps, LLC. state-machine.com.
+* Copyright (C) 2005-2020 Quantum Leaps, LLC. All rights reserved.
 *
 * This program is open source software: you can redistribute it and/or
 * modify it under the terms of the GNU General Public License as published
@@ -25,7 +25,7 @@
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
-* along with this program. If not, see <www.gnu.org/licenses/>.
+* along with this program. If not, see <www.gnu.org/licenses>.
 *
 * Contact information:
 * <www.state-machine.com/licensing>
@@ -40,7 +40,8 @@
 #include "lwip.h"  /* lwIP stack */
 #include "httpd.h" /* lwIP application */
 
-#include "safe_std.h" /* portable "safe" <stdio.h>/<string.h> facilities */
+#include <stdio.h>  /* for snprintf() */
+#include <string.h> /* for strlen() */
 
 Q_DEFINE_THIS_FILE
 
@@ -53,12 +54,12 @@ Q_ASSERT_COMPILE((LWIP_DRIVER_END - LWIP_DRIVER_GROUP) >= LWIP_MAX_OFFSET);
 
 /* Active object class -----------------------------------------------------*/
 typedef struct LwIPMgrTag {
-    QActive super;                                   /* derive from QActive */
+    QActive super;  /* inherit QActive */
 
     QTimeEvt te_LWIP_SLOW_TICK;
     struct netif   *netif;
     struct udp_pcb *upcb;
-    uint32_t        ip_addr;    /* IP address in the native host byte order */
+    uint32_t        ip_addr; /* IP address in the native host byte order */
 
 #if LWIP_TCP
     uint32_t tcp_tmr;
@@ -79,10 +80,10 @@ static QState LwIPMgr_initial(LwIPMgr *me, QEvt const *e);
 static QState LwIPMgr_running(LwIPMgr *me, QEvt const *e);
 
 /* Local objects -----------------------------------------------------------*/
-static LwIPMgr l_lwIPMgr;              /* the single instance of LwIPMgr AO */
+static LwIPMgr l_lwIPMgr; /* the single instance of LwIPMgr AO */
 
 /* Global-scope objects ----------------------------------------------------*/
-QActive * const AO_LwIPMgr = (QActive *)&l_lwIPMgr;     /* "opaque" pointer */
+QActive * const AO_LwIPMgr = (QActive *)&l_lwIPMgr; /* "opaque" pointer */
 
 /* Server-Side Include (SSI) demo ..........................................*/
 static char const * const ssi_tags[] = {
@@ -222,11 +223,11 @@ QState LwIPMgr_running(LwIPMgr *me, QEvt const *e) {
                 ip_net  = ntohl(me->ip_addr);
                     /* publish the text event to display the new IP address */
                 te = Q_NEW(TextEvt, DISPLAY_IPADDR_SIG);
-                SNPRINTF_S(te->text, Q_DIM(te->text), "%d.%d.%d.%d",
-                          ((ip_net) >> 24) & 0xFF,
-                          ((ip_net) >> 16) & 0xFF,
-                          ((ip_net) >> 8)  & 0xFF,
-                          ip_net           & 0xFF);
+                snprintf(te->text, sizeof(te->text), "%d.%d.%d.%d",
+                          (int)(((ip_net) >> 24) & 0xFFU),
+                          (int)(((ip_net) >> 16) & 0xFFU),
+                          (int)(((ip_net) >> 8)  & 0xFFU),
+                          (int)(ip_net           & 0xFFU));
                 QF_PUBLISH((QEvt *)te, me);
             }
 
@@ -281,42 +282,42 @@ static int ssi_handler(int iIndex, char *pcInsert, int iInsertLen) {
     STAT_COUNTER value = 0;
 
     switch (iIndex) {
-        case 0:                                                 /* s_xmit   */
+        case 0: /* s_xmit   */
             value = stats->xmit;
             break;
-        case 1:                                                 /* s_recv   */
+        case 1: /* s_recv   */
             value = stats->recv;
             break;
-        case 2:                                                 /* s_fw     */
+        case 2: /* s_fw     */
             value = stats->fw;
             break;
-        case 3:                                                 /* s_drop   */
+        case 3: /* s_drop   */
             value = stats->drop;
             break;
-        case 4:                                                 /* s_chkerr */
+        case 4: /* s_chkerr */
             value = stats->chkerr;
             break;
-        case 5:                                                 /* s_lenerr */
+        case 5: /* s_lenerr */
             value = stats->lenerr;
             break;
-        case 6:                                                 /* s_memerr */
+        case 6: /* s_memerr */
             value = stats->memerr;
             break;
-        case 7:                                                 /* s_rterr  */
+        case 7: /* s_rterr  */
             value = stats->rterr;
             break;
-        case 8:                                                 /* s_proerr */
+        case 8: /* s_proerr */
             value = stats->proterr;
             break;
-        case 9:                                                 /* s_opterr */
+        case 9: /* s_opterr */
             value = stats->opterr;
             break;
-        case 10:                                                /* s_err    */
+        case 10: /* s_err    */
             value = stats->err;
             break;
     }
 
-    return SPRINTF_S(pcInsert, MAX_TAG_INSERT_LEN, "%d", value);
+    return snprintf(pcInsert, MAX_TAG_INSERT_LEN, "%d", value);
 }
 
 /* Common Gateway Iinterface (CG) handler ..................................*/
@@ -326,7 +327,7 @@ static char const *cgi_display(int index, int numParams,
 {
     int i;
     for (i = 0; i < numParams; ++i) {
-        if (strstr(param[i], "text") != (char *)0) {   /* param text found? */
+        if (strstr(param[i], "text") != (char *)0) { /* param text found? */
             TextEvt *te = Q_NEW(TextEvt, DISPLAY_CGI_SIG);
             strncpy(te->text, value[i], Q_DIM(te->text));
             QF_PUBLISH((QEvt *)te, AO_LwIPMgr);
@@ -344,7 +345,7 @@ static void udp_rx_handler(void *arg, struct udp_pcb *upcb,
     strncpy(te->text, (char *)p->payload, Q_DIM(te->text));
     QF_PUBLISH((QEvt *)te, AO_LwIPMgr);
 
-    udp_connect(upcb, addr, port);            /* connect to the remote host */
-    pbuf_free(p);                                   /* don't leak the pbuf! */
+    udp_connect(upcb, addr, port); /* connect to the remote host */
+    pbuf_free(p); /* don't leak the pbuf! */
 }
 

+ 17 - 43
examples/lwip/arm-cm/lwip_ek-lm3s6965/qk/bsp.c

@@ -1,13 +1,13 @@
 /*****************************************************************************
 * Product: DPP with lwIP application, preemptive QK kernel
-* Last Updated for Version: 5.5.0
-* Date of the Last Update:  2015-08-20
+* Last updated for version 6.9.1
+* Last updated on  2020-09-22
 *
-*                    Q u a n t u m     L e a P s
-*                    ---------------------------
-*                    innovating embedded systems
+*                    Q u a n t u m  L e a P s
+*                    ------------------------
+*                    Modern Embedded Software
 *
-* Copyright (C) Quantum Leaps, LLC. All rights reserved.
+* Copyright (C) 2005-2020 Quantum Leaps, LLC. All rights reserved.
 *
 * This program is open source software: you can redistribute it and/or
 * modify it under the terms of the GNU General Public License as published
@@ -39,26 +39,6 @@
 
 Q_DEFINE_THIS_FILE
 
-/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! CAUTION !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-* Assign a priority to EVERY ISR explicitly by calling NVIC_SetPriority().
-* DO NOT LEAVE THE ISR PRIORITIES AT THE DEFAULT VALUE!
-*/
-enum KernelUnawareISRs { /* see NOTE00 */
-    /* ... */
-    MAX_KERNEL_UNAWARE_CMSIS_PRI   /* keep always last */
-};
-/* "kernel-unaware" interrupts can't overlap "kernel-aware" interrupts */
-Q_ASSERT_COMPILE(MAX_KERNEL_UNAWARE_CMSIS_PRI <= QF_AWARE_ISR_CMSIS_PRI);
-
-enum KernelAwareISRs {
-    ETHERNET_PRIO = QF_AWARE_ISR_CMSIS_PRI, /* see NOTE00 */
-    SYSTICK_PRIO,
-    /* ... */
-    MAX_KERNEL_AWARE_CMSIS_PRI /* keep always last */
-};
-/* "kernel-aware" interrupts should not overlap the PendSV priority */
-Q_ASSERT_COMPILE(MAX_KERNEL_AWARE_CMSIS_PRI <= (0xFF >>(8-__NVIC_PRIO_BITS)));
-
 /* ISRs defined in this BSP ------------------------------------------------*/
 void SysTick_Handler(void);
 
@@ -175,6 +155,11 @@ void BSP_init(void) {
         Q_ERROR();
     }
     QS_OBJ_DICTIONARY(&l_SysTick_Handler);
+
+    /* setup the QS filters... */
+    QS_GLB_FILTER(QS_SM_RECORDS); /* state machine records */
+    QS_GLB_FILTER(QS_AO_RECORDS); /* active object records */
+    QS_GLB_FILTER(QS_UA_RECORDS); /* all user records */
 }
 /*..........................................................................*/
 void QF_onStartup(void) {
@@ -184,14 +169,14 @@ void QF_onStartup(void) {
     /* assing all priority bits for preemption-prio. and none to sub-prio. */
     NVIC_SetPriorityGrouping(0U);
 
-    /* set priorities of ALL ISRs used in the system, see NOTE00
+    /* set priorities of ALL ISRs used in the system, see NOTE1
     *
     * !!!!!!!!!!!!!!!!!!!!!!!!!!!! CAUTION !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
     * Assign a priority to EVERY ISR explicitly by calling NVIC_SetPriority().
     * DO NOT LEAVE THE ISR PRIORITIES AT THE DEFAULT VALUE!
     */
-    NVIC_SetPriority(SysTick_IRQn,   SYSTICK_PRIO);
-    NVIC_SetPriority(Ethernet_IRQn,  ETHERNET_PRIO);
+    NVIC_SetPriority(Ethernet_IRQn,  QF_AWARE_ISR_CMSIS_PRI);
+    NVIC_SetPriority(SysTick_IRQn,   QF_AWARE_ISR_CMSIS_PRI + 1U);
     /* ... */
 
     NVIC_EnableIRQ(Ethernet_IRQn); /* enable the Ethernet Interrupt */
@@ -202,7 +187,7 @@ void QF_onCleanup(void) {
 /*..........................................................................*/
 void QK_onIdle(void) {
 
-    /* toggle the User LED on and then off, see NOTE01 */
+    /* toggle the User LED on and then off, see NOTE2 */
     QF_INT_DISABLE();
     GPIOF->DATA_Bits[USER_LED] = USER_LED; /* turn the User LED on  */
     GPIOF->DATA_Bits[USER_LED] = 0;        /* turn the User LED off */
@@ -286,17 +271,6 @@ uint8_t QS_onStartup(void const *arg) {
     QS_tickPeriod_ = SystemCoreClock / BSP_TICKS_PER_SEC;
     QS_tickTime_ = QS_tickPeriod_;  /* to start the timestamp at zero */
 
-    /* setup the QS filters... */
-    QS_FILTER_ON(QS_QEP_STATE_ENTRY);
-    QS_FILTER_ON(QS_QEP_STATE_EXIT);
-    QS_FILTER_ON(QS_QEP_STATE_INIT);
-    QS_FILTER_ON(QS_QEP_INIT_TRAN);
-    QS_FILTER_ON(QS_QEP_INTERN_TRAN);
-    QS_FILTER_ON(QS_QEP_TRAN);
-    QS_FILTER_ON(QS_QEP_IGNORED);
-    QS_FILTER_ON(QS_QEP_DISPATCH);
-    QS_FILTER_ON(QS_QEP_UNHANDLED);
-
     return 1U; /* return success */
 }
 /*..........................................................................*/
@@ -335,7 +309,7 @@ void QS_onFlush(void) {
 /*--------------------------------------------------------------------------*/
 
 /*****************************************************************************
-* NOTE00:
+* NOTE1:
 * The QF_AWARE_ISR_CMSIS_PRI constant from the QF port specifies the highest
 * ISR priority that is disabled by the QF framework. The value is suitable
 * for the NVIC_SetPriority() CMSIS function.
@@ -353,7 +327,7 @@ void QS_onFlush(void) {
 * by which a "QF-unaware" ISR can communicate with the QF framework is by
 * triggering a "QF-aware" ISR, which can post/publish events.
 *
-* NOTE01:
+* NOTE2:
 * The User LED is used to visualize the idle loop activity. The brightness
 * of the LED is proportional to the frequency of invcations of the idle loop.
 * Please note that the LED is toggled with interrupts locked, so no interrupt

+ 19 - 45
examples/lwip/arm-cm/lwip_ek-lm3s6965/qv/bsp.c

@@ -1,13 +1,13 @@
 /*****************************************************************************
 * Product: DPP with lwIP application, cooperative QV kernel
-* Last Updated for Version: 5.5.0
-* Date of the Last Update:  2015-08-20
+* Last updated for version 6.9.1
+* Last updated on  2020-09-22
 *
-*                    Q u a n t u m     L e a P s
-*                    ---------------------------
-*                    innovating embedded systems
+*                    Q u a n t u m  L e a P s
+*                    ------------------------
+*                    Modern Embedded Software
 *
-* Copyright (C) Quantum Leaps, LLC. All rights reserved.
+* Copyright (C) 2005-2020 Quantum Leaps, LLC. All rights reserved.
 *
 * This program is open source software: you can redistribute it and/or
 * modify it under the terms of the GNU General Public License as published
@@ -39,26 +39,6 @@
 
 Q_DEFINE_THIS_FILE
 
-/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! CAUTION !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-* Assign a priority to EVERY ISR explicitly by calling NVIC_SetPriority().
-* DO NOT LEAVE THE ISR PRIORITIES AT THE DEFAULT VALUE!
-*/
-enum KernelUnawareISRs { /* see NOTE00 */
-    /* ... */
-    MAX_KERNEL_UNAWARE_CMSIS_PRI   /* keep always last */
-};
-/* "kernel-unaware" interrupts can't overlap "kernel-aware" interrupts */
-Q_ASSERT_COMPILE(MAX_KERNEL_UNAWARE_CMSIS_PRI <= QF_AWARE_ISR_CMSIS_PRI);
-
-enum KernelAwareISRs {
-    ETHERNET_PRIO = QF_AWARE_ISR_CMSIS_PRI, /* see NOTE00 */
-    SYSTICK_PRIO,
-    /* ... */
-    MAX_KERNEL_AWARE_CMSIS_PRI /* keep always last */
-};
-/* "kernel-aware" interrupts should not overlap the PendSV priority */
-Q_ASSERT_COMPILE(MAX_KERNEL_AWARE_CMSIS_PRI <= (0xFF >>(8-__NVIC_PRIO_BITS)));
-
 /* ISRs defined in this BSP ------------------------------------------------*/
 void SysTick_Handler(void);
 
@@ -171,6 +151,11 @@ void BSP_init(void) {
         Q_ERROR();
     }
     QS_OBJ_DICTIONARY(&l_SysTick_Handler);
+
+    /* setup the QS filters... */
+    QS_GLB_FILTER(QS_SM_RECORDS); /* state machine records */
+    QS_GLB_FILTER(QS_AO_RECORDS); /* active object records */
+    QS_GLB_FILTER(QS_UA_RECORDS); /* all user records */
 }
 /*..........................................................................*/
 void QF_onStartup(void) {
@@ -180,14 +165,14 @@ void QF_onStartup(void) {
     /* assing all priority bits for preemption-prio. and none to sub-prio. */
     NVIC_SetPriorityGrouping(0U);
 
-    /* set priorities of ALL ISRs used in the system, see NOTE00
+    /* set priorities of ALL ISRs used in the system, see NOTE1
     *
     * !!!!!!!!!!!!!!!!!!!!!!!!!!!! CAUTION !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
     * Assign a priority to EVERY ISR explicitly by calling NVIC_SetPriority().
     * DO NOT LEAVE THE ISR PRIORITIES AT THE DEFAULT VALUE!
     */
-    NVIC_SetPriority(SysTick_IRQn,   SYSTICK_PRIO);
-    NVIC_SetPriority(Ethernet_IRQn,  ETHERNET_PRIO);
+    NVIC_SetPriority(Ethernet_IRQn,  QF_AWARE_ISR_CMSIS_PRI);
+    NVIC_SetPriority(SysTick_IRQn,   QF_AWARE_ISR_CMSIS_PRI + 1U);
     /* ... */
 
     NVIC_EnableIRQ(Ethernet_IRQn); /* enable the Ethernet Interrupt */
@@ -196,9 +181,9 @@ void QF_onStartup(void) {
 void QF_onCleanup(void) {
 }
 /*..........................................................................*/
-void QV_onIdle(void) { /* NOTE: called with interrutps DISABLED, see NOTE01 */
+void QV_onIdle(void) { /* NOTE: called with interrutps DISABLED, see NOTE2 */
 
-    /* toggle the User LED on and then off, see NOTE02 */
+    /* toggle the User LED on and then off, see NOTE3 */
     QF_INT_DISABLE();
     GPIOF->DATA_Bits[USER_LED] = USER_LED; /* turn the User LED on  */
     GPIOF->DATA_Bits[USER_LED] = 0;        /* turn the User LED off */
@@ -284,17 +269,6 @@ uint8_t QS_onStartup(void const *arg) {
     QS_tickPeriod_ = SystemCoreClock / BSP_TICKS_PER_SEC;
     QS_tickTime_ = QS_tickPeriod_;  /* to start the timestamp at zero */
 
-    /* setup the QS filters... */
-    QS_FILTER_ON(QS_QEP_STATE_ENTRY);
-    QS_FILTER_ON(QS_QEP_STATE_EXIT);
-    QS_FILTER_ON(QS_QEP_STATE_INIT);
-    QS_FILTER_ON(QS_QEP_INIT_TRAN);
-    QS_FILTER_ON(QS_QEP_INTERN_TRAN);
-    QS_FILTER_ON(QS_QEP_TRAN);
-    QS_FILTER_ON(QS_QEP_IGNORED);
-    QS_FILTER_ON(QS_QEP_DISPATCH);
-    QS_FILTER_ON(QS_QEP_UNHANDLED);
-
     return 1U; /* return success */
 }
 /*..........................................................................*/
@@ -333,7 +307,7 @@ void QS_onFlush(void) {
 /*--------------------------------------------------------------------------*/
 
 /*****************************************************************************
-* NOTE00:
+* NOTE1:
 * The QF_AWARE_ISR_CMSIS_PRI constant from the QF port specifies the highest
 * ISR priority that is disabled by the QF framework. The value is suitable
 * for the NVIC_SetPriority() CMSIS function.
@@ -351,13 +325,13 @@ void QS_onFlush(void) {
 * by which a "QF-unaware" ISR can communicate with the QF framework is by
 * triggering a "QF-aware" ISR, which can post/publish events.
 *
-* NOTE01:
+* NOTE2:
 * The QV_onIdle() callback is called with interrupts disabled, because the
 * determination of the idle condition might change by any interrupt posting
 * an event. QV_onIdle() must internally enable interrupts, ideally
 * atomically with putting the CPU to the power-saving mode.
 *
-* NOTE02:
+* NOTE3:
 * The User LED is used to visualize the idle loop activity. The brightness
 * of the LED is proportional to the frequency of invcations of the idle loop.
 * Please note that the LED is toggled with interrupts locked, so no interrupt

+ 15 - 15
examples/lwip/arm-cm/lwip_ek-lm3s6965/table.c

@@ -1,13 +1,13 @@
 /*****************************************************************************
 * Product: DPP example with lwIP and direct screen output
-* Last updated for version 5.4.0
-* Last updated on  2015-03-25
+* Last updated for version 6.9.1
+* Last updated on  2020-09-11
 *
-*                    Q u a n t u m     L e a P s
-*                    ---------------------------
-*                    innovating embedded systems
+*                    Q u a n t u m  L e a P s
+*                    ------------------------
+*                    Modern Embedded Software
 *
-* Copyright (C) Quantum Leaps, www.state-machine.com.
+* Copyright (C) 2005-2020 Quantum Leaps, LLC. All rights reserved.
 *
 * This program is open source software: you can redistribute it and/or
 * modify it under the terms of the GNU General Public License as published
@@ -25,10 +25,10 @@
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
-* along with this program. If not, see <www.gnu.org/licenses/>.
+* along with this program. If not, see <www.gnu.org/licenses>.
 *
 * Contact information:
-* Web:   www.state-machine.com
+* <www.state-machine.com/licensing>
 * <info@state-machine.com>
 *****************************************************************************/
 #include "qpc.h"     /* QP/C header file */
@@ -37,7 +37,7 @@
 
 #include "rit128x96x4.h"      /* RITEK 128x96x4 OLED used in Rev C-D boards */
 
-#include "safe_std.h" /* portable "safe" <stdio.h>/<string.h> facilities */
+#include <stdio.h>   /* for snprintf() */
 
 Q_DEFINE_THIS_FILE
 
@@ -178,7 +178,7 @@ QState Table_serving(Table *me, QEvt const *e) {
             Q_ASSERT((me->fork[n] == USED) && (me->fork[m] == USED));
 
             me->fork[m] = me->fork[n] = FREE;
-            m = RIGHT(n);                       /* check the right neighbor */
+            m = RIGHT(n); /* check the right neighbor */
             if (me->isHungry[m] && (me->fork[m] == FREE)) {
                 me->fork[n] = me->fork[m] = USED;
                 me->isHungry[m] = 0;
@@ -222,8 +222,8 @@ QState Table_serving(Table *me, QEvt const *e) {
             ++me->udpCtr;
 
             te = Q_NEW(TextEvt, SEND_UDP_SIG);
-            SNPRINTF_S(te->text, Q_DIM(te->text), "%s-%d",
-                      ((TextEvt const *)e)->text, (int)me->udpCtr);
+            snprintf(te->text, Q_DIM(te->text), "%s-%d",
+                      Q_EVT_CAST(TextEvt)->text, (int)me->udpCtr);
             QACTIVE_POST(AO_LwIPMgr, (QEvt *)te, me); /* post directly */
 
             return Q_HANDLED();
@@ -267,7 +267,7 @@ static void Table_displayPhilStat(Table *me, uint8_t n, char const *stat) {
         str[1] = '\0';
         RIT128x96x4StringDraw(str, (6*6 + 3*6*n), 4*8, 15);
     }
-    QS_BEGIN(PHILO_STAT, AO_Philo[n]) /* application-specific record begin */
+    QS_BEGIN_ID(PHILO_STAT, AO_Philo[n]->prio) /* app-specific record */
         QS_U8(1, n);  /* Philosopher number */
         QS_STR(stat); /* Philosopher status */
     QS_END()
@@ -284,7 +284,7 @@ void Table_displyCgiText(Table *me, char const *text) {
     RIT128x96x4StringDraw("               ", 5*6, 6*8, 15); /* wipe */
     RIT128x96x4StringDraw(text,              5*6, 6*8, 15);
 
-    QS_BEGIN(CGI_TEXT, 0) /* application-specific record begin */
+    QS_BEGIN_ID(CGI_TEXT, 0U) /* app-specific record */
         QS_STR(text); /* User text */
     QS_END()
 }
@@ -294,7 +294,7 @@ void Table_displyUdpText(Table *me, char const *text) {
     RIT128x96x4StringDraw("               ", 5*6, 6*8, 15); /* wipe */
     RIT128x96x4StringDraw(text,              5*6, 6*8, 15);
 
-    QS_BEGIN(UDP_TEXT, 0) /* application-specific record begin */
+    QS_BEGIN_ID(UDP_TEXT, 0U) /* app-specific record */
         QS_STR(text); /* User text */
     QS_END()
 }

+ 2 - 2
examples/msp430/blinky_msp-exp430f5529lp/qk/ccs-gnu/msp430f5529.ld

@@ -207,7 +207,7 @@ SECTIONS
      read only but which older linkers treat as read-write.
      This prevents older linkers from marking the entire .rodata
      section as read-write.  */
-  .rodata2 : 
+  .rodata2 :
   {
     . = ALIGN(2);
     PROVIDE (__preinit_array_start = .);
@@ -327,7 +327,7 @@ SECTIONS
     . = ALIGN(2);
     __heap_start__ = .;
     _end = __heap_start__;
-    PROVIDE (end = .); 
+    PROVIDE (end = .);
     KEEP (*(.heap))
     _end = .;
     PROVIDE (end = .);

+ 3492 - 0
examples/msp430/blinky_msp-exp430f5529lp/qk/iar/Backup (2) of blinky-qk.ewp

@@ -0,0 +1,3492 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+
+<project>
+  <fileVersion>2</fileVersion>
+  <configuration>
+    <name>Debug</name>
+    <toolchain>
+      <name>MSP430</name>
+    </toolchain>
+    <debug>1</debug>
+    <settings>
+      <name>General</name>
+      <archiveVersion>17</archiveVersion>
+      <data>
+        <version>33</version>
+        <wantNonLocal>1</wantNonLocal>
+        <debug>1</debug>
+        <option>
+          <name>OGCore</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>ExePath</name>
+          <state>dbg</state>
+        </option>
+        <option>
+          <name>ObjPath</name>
+          <state>dbg</state>
+        </option>
+        <option>
+          <name>ListPath</name>
+          <state>dbg</state>
+        </option>
+        <option>
+          <name>Hardware Multiplier</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>GOutputBinary</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>AssemblerOnly</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>OGDouble</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>GRuntimeLibSelect</name>
+          <version>0</version>
+          <state>1</state>
+        </option>
+        <option>
+          <name>RTDescription</name>
+          <state>Use the normal configuration of the C/EC++ runtime library. No locale interface, C locale, no file descriptor support, no multibytes in printf and scanf, and no hex floats in strtod.</state>
+        </option>
+        <option>
+          <name>RTConfigPath</name>
+          <state>$TOOLKIT_DIR$\lib\dlib\dl430xlsfn.h</state>
+        </option>
+        <option>
+          <name>RTLibraryPath</name>
+          <state>$TOOLKIT_DIR$\lib\dlib\dl430xlsfn.r43</state>
+        </option>
+        <option>
+          <name>Input variant</name>
+          <version>2</version>
+          <state>7</state>
+        </option>
+        <option>
+          <name>Input description</name>
+          <state>No specifier n, no float nor long long, no scan set, no assignment suppressing, without multibyte support.</state>
+        </option>
+        <option>
+          <name>Output variant</name>
+          <version>2</version>
+          <state>8</state>
+        </option>
+        <option>
+          <name>Output description</name>
+          <state>No specifier a or A, no specifier n, no float or long long, no flags.</state>
+        </option>
+        <option>
+          <name>GRuntimeLibSelectSlave</name>
+          <version>0</version>
+          <state>1</state>
+        </option>
+        <option>
+          <name>GeneralEnableMisra</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>GeneralMisraVerbose</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>OGChipSelectMenu</name>
+          <state>MSP430F5529	MSP430F5529</state>
+        </option>
+        <option>
+          <name>GStackHeapOverride</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>GStackSize2</name>
+          <state>160</state>
+        </option>
+        <option>
+          <name>GHeapSize2</name>
+          <state>160</state>
+        </option>
+        <option>
+          <name>RadioDataModelType</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>GHeap20Size</name>
+          <state>80</state>
+        </option>
+        <option>
+          <name>GeneralMisraRules98</name>
+          <version>0</version>
+          <state>1000111110110101101110011100111111101110011011000101110111101101100111111111111100110011111001110111001111111111111111111111111</state>
+        </option>
+        <option>
+          <name>RadioHeapSizeType</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>RadioHardwareMultiplierType</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>GeneralMisraVer</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>GeneralMisraRules04</name>
+          <version>0</version>
+          <state>111101110010111111111000110111111111111111111111111110010111101111010101111111111111111111111111101111111011111001111011111011111111111111111</state>
+        </option>
+        <option>
+          <name>RadioL092ModelType</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>Ropi</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>NoRwDynamicInit</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>GRuntimeLibThreads</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>MathLib</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>RadioCodeModelType</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>GEnableMpu</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>GESupportMpu</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>GELockMpu</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>GENMIViolationMpu</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>GEAssertMpu</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>GEInfoReadMpu</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>GEInfoWriteMpu</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>GEInfoExecuteMpu</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>GEInfoAssertMpu</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>GEnableIpe</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>GESupportIpe</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>GAssertIpe</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>GLockIpe</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>Math variant</name>
+          <version>0</version>
+          <state>0</state>
+        </option>
+        <option>
+          <name>Math description</name>
+          <state>Default variants of cos, sin, tan, log, log10, pow, and exp.</state>
+        </option>
+      </data>
+    </settings>
+    <settings>
+      <name>ICC430</name>
+      <archiveVersion>4</archiveVersion>
+      <data>
+        <version>37</version>
+        <wantNonLocal>1</wantNonLocal>
+        <debug>1</debug>
+        <option>
+          <name>CCDefines</name>
+          <state></state>
+        </option>
+        <option>
+          <name>CCPreprocFile</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>CCPreprocComments</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>CCPreprocLine</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>CCListCFile</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>CCListCMnemonics</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>CCListCMessages</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>CCListAssFile</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>CCListAssSource</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>CCEnableRemarks</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>CCDiagSuppress</name>
+          <state>Pa50</state>
+        </option>
+        <option>
+          <name>CCDiagRemark</name>
+          <state></state>
+        </option>
+        <option>
+          <name>CCDiagWarning</name>
+          <state></state>
+        </option>
+        <option>
+          <name>CCDiagError</name>
+          <state></state>
+        </option>
+        <option>
+          <name>IObjPrefix2</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>CCRequirePrototypes</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>CCAllowList</name>
+          <version>1</version>
+          <state>00000</state>
+        </option>
+        <option>
+          <name>CCObjUseModuleName</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>CCObjModuleName</name>
+          <state></state>
+        </option>
+        <option>
+          <name>CCDebugInfo</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>IProcessor</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>CCDiagWarnAreErr</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>CCCharIs</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>CCExt</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>CCMultibyteSupport</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>CCMigrationPreprocExtentions</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>CCCompilerRuntimeInfo</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>IDoubleSize</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>OutputFile</name>
+          <state>$FILE_BNAME$.r43</state>
+        </option>
+        <option>
+          <name>CCLibConfigHeader</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>OCCR4Utilize</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>OCCR5Utilize</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>IExtraOptionsCheck</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>IExtraOptions</name>
+          <state></state>
+        </option>
+        <option>
+          <name>PreInclude</name>
+          <state></state>
+        </option>
+        <option>
+          <name>CCOverrideModuleTypeDefault</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>CCRadioModuleType</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>CCRadioModuleTypeSlave</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>newCCIncludePaths</name>
+          <state>$PROJ_DIR$\.</state>
+          <state>$PROJ_DIR$\..\..</state>
+          <state>$PROJ_DIR$\..\..\..\..\..\include</state>
+          <state>$PROJ_DIR$\..\..\..\..\..\src</state>
+          <state>$PROJ_DIR$\..\..\..\..\..\ports\msp430\qk</state>
+        </option>
+        <option>
+          <name>CCStdIncCheck</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>CompilerMisraOverride</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>OI430X</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>ReduceStack</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>Save20bit</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>CompilerDataModel</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>CCOptLevel</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>CCOptStrategy</name>
+          <version>0</version>
+          <state>0</state>
+        </option>
+        <option>
+          <name>CCOptLevelSlave</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>CInput</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>CompilerMisraRules98</name>
+          <version>0</version>
+          <state>1000111110110101101110011100111111101110011011000101110111101101100111111111111100110011111001110111001111111111111111111111111</state>
+        </option>
+        <option>
+          <name>CompilerMisraRules04</name>
+          <version>0</version>
+          <state>111101110010111111111000110111111111111111111111111110010111101111010101111111111111111111111111101111111011111001111011111011111111111111111</state>
+        </option>
+        <option>
+          <name>IccLang</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>IccCDialect</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>IccAllowVLA</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>IccCppDialect</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>CCPUTAG</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>CCCodeFunctions</name>
+          <state>CODE</state>
+        </option>
+        <option>
+          <name>CCData16</name>
+          <state>DATA16</state>
+        </option>
+        <option>
+          <name>CCData20</name>
+          <state>DATA20</state>
+        </option>
+        <option>
+          <name>CCIntvec</name>
+          <state>INTVEC</state>
+        </option>
+        <option>
+          <name>CCCstack</name>
+          <state>CSTACK</state>
+        </option>
+        <option>
+          <name>CCRamFuncCode</name>
+          <state>RAMFUNC_CODE</state>
+        </option>
+        <option>
+          <name>CCIsrCode</name>
+          <state>ISR_CODE</state>
+        </option>
+        <option>
+          <name>CCDifunct</name>
+          <state>DIFUNCT</state>
+        </option>
+        <option>
+          <name>IccCppInlineSemantics</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>IccStaticDestr</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>IccFloatSemantics</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>CROPI</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>CNoRwDynamicInit</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>CCOptimizationNoSizeConstraints</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>ADefines</name>
+          <state></state>
+        </option>
+        <option>
+          <name>CCGuardCalls</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>OCGuardCallsSlave</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>CompilerCodeModel</name>
+          <state>1</state>
+        </option>
+      </data>
+    </settings>
+    <settings>
+      <name>A430</name>
+      <archiveVersion>5</archiveVersion>
+      <data>
+        <version>14</version>
+        <wantNonLocal>1</wantNonLocal>
+        <debug>1</debug>
+        <option>
+          <name>AObjPrefix</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>ACaseSensitivity</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>MacroChars</name>
+          <version>0</version>
+          <state>0</state>
+        </option>
+        <option>
+          <name>AWarnEnable</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>AWarnWhat</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>AWarnOne</name>
+          <state></state>
+        </option>
+        <option>
+          <name>AWarnRange1</name>
+          <state></state>
+        </option>
+        <option>
+          <name>AWarnRange2</name>
+          <state></state>
+        </option>
+        <option>
+          <name>ADefines</name>
+          <state></state>
+        </option>
+        <option>
+          <name>AList</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>AListHeader</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>AListing</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>Includes</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>MacDefs</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>MacExps</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>MacExec</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>OnlyAssed</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>MultiLine</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>PageLengthCheck</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>PageLength</name>
+          <state>80</state>
+        </option>
+        <option>
+          <name>TabSpacing</name>
+          <state>8</state>
+        </option>
+        <option>
+          <name>AXRef</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>AXRefDefines</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>AXRefInternal</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>AXRefDual</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>ADebug</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>ADebugType</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>IProcessor</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>AMaxErrOn</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>AMaxErrNum</name>
+          <state>100</state>
+        </option>
+        <option>
+          <name>OutputFile</name>
+          <state>$FILE_BNAME$.r43</state>
+        </option>
+        <option>
+          <name>AMultibyteSupport</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>AExtraOptionsCheck</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>AExtraOptions</name>
+          <state></state>
+        </option>
+        <option>
+          <name>OA1M</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>AIgnoreStdInclude</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>AStdIncludes</name>
+          <state>$TOOLKIT_DIR$\INC\</state>
+        </option>
+        <option>
+          <name>AUserIncludes</name>
+          <state></state>
+        </option>
+        <option>
+          <name>ACPUTAG</name>
+          <state>1</state>
+        </option>
+      </data>
+    </settings>
+    <settings>
+      <name>CUSTOM</name>
+      <archiveVersion>3</archiveVersion>
+      <data>
+        <extensions></extensions>
+        <cmdline></cmdline>
+        <hasPrio>0</hasPrio>
+      </data>
+    </settings>
+    <settings>
+      <name>BICOMP</name>
+      <archiveVersion>0</archiveVersion>
+      <data/>
+    </settings>
+    <settings>
+      <name>BUILDACTION</name>
+      <archiveVersion>1</archiveVersion>
+      <data>
+        <prebuild>cmd /c "if exist $OBJ_DIR$\qstamp.o del $OBJ_DIR$\qstamp.o"</prebuild>
+        <postbuild></postbuild>
+      </data>
+    </settings>
+    <settings>
+      <name>XLINK</name>
+      <archiveVersion>4</archiveVersion>
+      <data>
+        <version>29</version>
+        <wantNonLocal>1</wantNonLocal>
+        <debug>1</debug>
+        <option>
+          <name>XOutOverride</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>OutputFile</name>
+          <state>blinky-qk.d43</state>
+        </option>
+        <option>
+          <name>OutputFormat</name>
+          <version>11</version>
+          <state>33</state>
+        </option>
+        <option>
+          <name>FormatVariant</name>
+          <version>8</version>
+          <state>2</state>
+        </option>
+        <option>
+          <name>SecondaryOutputFile</name>
+          <state>(None for the selected format)</state>
+        </option>
+        <option>
+          <name>XDefines</name>
+          <state></state>
+        </option>
+        <option>
+          <name>AlwaysOutput</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>OverlapWarnings</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>NoGlobalCheck</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>XList</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>SegmentMap</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>ListSymbols</name>
+          <state>2</state>
+        </option>
+        <option>
+          <name>PageLengthCheck</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>PageLength</name>
+          <state>80</state>
+        </option>
+        <option>
+          <name>XIncludes</name>
+          <state>$TOOLKIT_DIR$\LIB\</state>
+        </option>
+        <option>
+          <name>ModuleStatus</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>XclOverride</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>XclFile</name>
+          <state>$TOOLKIT_DIR$\config\linker\lnk430f5529.xcl</state>
+        </option>
+        <option>
+          <name>XclFileSlave</name>
+          <state></state>
+        </option>
+        <option>
+          <name>DoFill</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>FillerByte</name>
+          <state>0xFF</state>
+        </option>
+        <option>
+          <name>DoCrc</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>CrcSize</name>
+          <version>0</version>
+          <state>1</state>
+        </option>
+        <option>
+          <name>CrcAlgo</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>CrcPoly</name>
+          <state>0x11021</state>
+        </option>
+        <option>
+          <name>CrcCompl</name>
+          <version>0</version>
+          <state>0</state>
+        </option>
+        <option>
+          <name>RangeCheckAlternatives</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>SuppressAllWarn</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>SuppressDiags</name>
+          <state></state>
+        </option>
+        <option>
+          <name>TreatAsWarn</name>
+          <state></state>
+        </option>
+        <option>
+          <name>TreatAsErr</name>
+          <state></state>
+        </option>
+        <option>
+          <name>ModuleLocalSym</name>
+          <version>0</version>
+          <state>0</state>
+        </option>
+        <option>
+          <name>CrcBitOrder</name>
+          <version>0</version>
+          <state>0</state>
+        </option>
+        <option>
+          <name>XHardwareMul</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>IncludeSuppressed</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>ModuleSummary</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>XlinkStackSize</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>XlinkCodeModel</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>xcProgramEntryLabel</name>
+          <state>__program_start</state>
+        </option>
+        <option>
+          <name>DebugInformation</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>RuntimeControl</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>IoEmulation</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>XcRTLibraryFile</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>OXLibIOConfig</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>XLibraryHeap</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>AllowExtraOutput</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>GenerateExtraOutput</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>XExtraOutOverride</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>ExtraOutputFile</name>
+          <state>blinky-qk.a43</state>
+        </option>
+        <option>
+          <name>ExtraOutputFormat</name>
+          <version>11</version>
+          <state>23</state>
+        </option>
+        <option>
+          <name>ExtraFormatVariant</name>
+          <version>8</version>
+          <state>2</state>
+        </option>
+        <option>
+          <name>xcOverrideProgramEntryLabel</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>xcProgramEntryLabelSelect</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>ListOutputFormat</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>BufferedTermOutput</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>XExtraOptionsCheck</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>XExtraOptions</name>
+          <state></state>
+        </option>
+        <option>
+          <name>OverlaySystemMap</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>RawBinaryFile</name>
+          <state></state>
+        </option>
+        <option>
+          <name>RawBinarySymbol</name>
+          <state></state>
+        </option>
+        <option>
+          <name>RawBinarySegment</name>
+          <state></state>
+        </option>
+        <option>
+          <name>RawBinaryAlign</name>
+          <state></state>
+        </option>
+        <option>
+          <name>XLinkMisraHandler</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>CrcAlign</name>
+          <state>2</state>
+        </option>
+        <option>
+          <name>CrcInitialValue</name>
+          <state>0x0</state>
+        </option>
+        <option>
+          <name>XLibraryHeap20</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>CrcUnitSize</name>
+          <version>0</version>
+          <state>0</state>
+        </option>
+        <option>
+          <name>LinkMathLib</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>IlinkThreadsSlave</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>XlinkMPU</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>XlinkIPE</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>XlinkLogEnable</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>XlinkLogInputFiles</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>XlinkLogModuleSelection</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>XlinkLogPrintfScanf</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>XlinkLogSegmentSelection</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>XlinkLogStackDepth</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>XlinkStackUsageEnable</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>XlinkControlFiles</name>
+          <state></state>
+        </option>
+        <option>
+          <name>XlinkCallGraphFileEnable</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>XlinkCallGraphFileName</name>
+          <state>$LIST_DIR$\$PROJ_FNAME$.call_graph.cgx</state>
+        </option>
+      </data>
+    </settings>
+    <settings>
+      <name>XAR</name>
+      <archiveVersion>4</archiveVersion>
+      <data>
+        <version>0</version>
+        <wantNonLocal>1</wantNonLocal>
+        <debug>1</debug>
+        <option>
+          <name>XAROutOverride</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>XARInputs</name>
+          <state></state>
+        </option>
+        <option>
+          <name>OutputFile</name>
+          <state></state>
+        </option>
+      </data>
+    </settings>
+    <settings>
+      <name>ULP430</name>
+      <archiveVersion>1</archiveVersion>
+      <data>
+        <version>1</version>
+        <wantNonLocal>1</wantNonLocal>
+        <debug>1</debug>
+        <option>
+          <name>CUTest</name>
+          <state>-I$TOOLKIT_DIR$\inc</state>
+          <state>-@$TOOLKIT_DIR$\bin\iar.cmd</state>
+          <state>-@$PROJ_DIR$\source.txt</state>
+          <state>-@$PROJ_DIR$\include.txt</state>
+          <state>--preinclude=$PROJ_DIR$\IAR_ULPAdvisor_Defs.h</state>
+        </option>
+        <option>
+          <name>ULPRules</name>
+          <version>0</version>
+          <state>1111111111111111111</state>
+        </option>
+        <option>
+          <name>ULPEnable</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>OutputFile</name>
+          <state>$PROJ_FNAME$.ulp</state>
+        </option>
+        <option>
+          <name>ULPStatus</name>
+          <state>1</state>
+        </option>
+      </data>
+    </settings>
+    <settings>
+      <name>BILINK</name>
+      <archiveVersion>0</archiveVersion>
+      <data/>
+    </settings>
+  </configuration>
+  <configuration>
+    <name>Release</name>
+    <toolchain>
+      <name>MSP430</name>
+    </toolchain>
+    <debug>0</debug>
+    <settings>
+      <name>General</name>
+      <archiveVersion>17</archiveVersion>
+      <data>
+        <version>33</version>
+        <wantNonLocal>1</wantNonLocal>
+        <debug>0</debug>
+        <option>
+          <name>OGCore</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>ExePath</name>
+          <state>rel</state>
+        </option>
+        <option>
+          <name>ObjPath</name>
+          <state>rel</state>
+        </option>
+        <option>
+          <name>ListPath</name>
+          <state>rel</state>
+        </option>
+        <option>
+          <name>Hardware Multiplier</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>GOutputBinary</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>AssemblerOnly</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>OGDouble</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>GRuntimeLibSelect</name>
+          <version>0</version>
+          <state>1</state>
+        </option>
+        <option>
+          <name>RTDescription</name>
+          <state>Use the normal configuration of the C/EC++ runtime library. No locale interface, C locale, no file descriptor support, no multibytes in printf and scanf, and no hex floats in strtod.</state>
+        </option>
+        <option>
+          <name>RTConfigPath</name>
+          <state>$TOOLKIT_DIR$\lib\dlib\dl430xlsfn.h</state>
+        </option>
+        <option>
+          <name>RTLibraryPath</name>
+          <state>$TOOLKIT_DIR$\lib\dlib\dl430xlsfn.r43</state>
+        </option>
+        <option>
+          <name>Input variant</name>
+          <version>2</version>
+          <state>7</state>
+        </option>
+        <option>
+          <name>Input description</name>
+          <state>No specifier n, no float nor long long, no scan set, no assignment suppressing, without multibyte support.</state>
+        </option>
+        <option>
+          <name>Output variant</name>
+          <version>2</version>
+          <state>8</state>
+        </option>
+        <option>
+          <name>Output description</name>
+          <state>No specifier a or A, no specifier n, no float or long long, no flags.</state>
+        </option>
+        <option>
+          <name>GRuntimeLibSelectSlave</name>
+          <version>0</version>
+          <state>1</state>
+        </option>
+        <option>
+          <name>GeneralEnableMisra</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>GeneralMisraVerbose</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>OGChipSelectMenu</name>
+          <state>MSP430F5529	MSP430F5529</state>
+        </option>
+        <option>
+          <name>GStackHeapOverride</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>GStackSize2</name>
+          <state>160</state>
+        </option>
+        <option>
+          <name>GHeapSize2</name>
+          <state>160</state>
+        </option>
+        <option>
+          <name>RadioDataModelType</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>GHeap20Size</name>
+          <state>80</state>
+        </option>
+        <option>
+          <name>GeneralMisraRules98</name>
+          <version>0</version>
+          <state>1000111110110101101110011100111111101110011011000101110111101101100111111111111100110011111001110111001111111111111111111111111</state>
+        </option>
+        <option>
+          <name>RadioHeapSizeType</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>RadioHardwareMultiplierType</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>GeneralMisraVer</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>GeneralMisraRules04</name>
+          <version>0</version>
+          <state>111101110010111111111000110111111111111111111111111110010111101111010101111111111111111111111111101111111011111001111011111011111111111111111</state>
+        </option>
+        <option>
+          <name>RadioL092ModelType</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>Ropi</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>NoRwDynamicInit</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>GRuntimeLibThreads</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>MathLib</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>RadioCodeModelType</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>GEnableMpu</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>GESupportMpu</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>GELockMpu</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>GENMIViolationMpu</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>GEAssertMpu</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>GEInfoReadMpu</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>GEInfoWriteMpu</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>GEInfoExecuteMpu</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>GEInfoAssertMpu</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>GEnableIpe</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>GESupportIpe</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>GAssertIpe</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>GLockIpe</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>Math variant</name>
+          <version>0</version>
+          <state>0</state>
+        </option>
+        <option>
+          <name>Math description</name>
+          <state>Default variants of cos, sin, tan, log, log10, pow, and exp.</state>
+        </option>
+      </data>
+    </settings>
+    <settings>
+      <name>ICC430</name>
+      <archiveVersion>4</archiveVersion>
+      <data>
+        <version>37</version>
+        <wantNonLocal>1</wantNonLocal>
+        <debug>0</debug>
+        <option>
+          <name>CCDefines</name>
+          <state>NDEBUG</state>
+        </option>
+        <option>
+          <name>CCPreprocFile</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>CCPreprocComments</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>CCPreprocLine</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>CCListCFile</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>CCListCMnemonics</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>CCListCMessages</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>CCListAssFile</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>CCListAssSource</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>CCEnableRemarks</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>CCDiagSuppress</name>
+          <state>Pa50</state>
+        </option>
+        <option>
+          <name>CCDiagRemark</name>
+          <state></state>
+        </option>
+        <option>
+          <name>CCDiagWarning</name>
+          <state></state>
+        </option>
+        <option>
+          <name>CCDiagError</name>
+          <state></state>
+        </option>
+        <option>
+          <name>IObjPrefix2</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>CCRequirePrototypes</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>CCAllowList</name>
+          <version>1</version>
+          <state>11111</state>
+        </option>
+        <option>
+          <name>CCObjUseModuleName</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>CCObjModuleName</name>
+          <state></state>
+        </option>
+        <option>
+          <name>CCDebugInfo</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>IProcessor</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>CCDiagWarnAreErr</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>CCCharIs</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>CCExt</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>CCMultibyteSupport</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>CCMigrationPreprocExtentions</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>CCCompilerRuntimeInfo</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>IDoubleSize</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>OutputFile</name>
+          <state>$FILE_BNAME$.r43</state>
+        </option>
+        <option>
+          <name>CCLibConfigHeader</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>OCCR4Utilize</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>OCCR5Utilize</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>IExtraOptionsCheck</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>IExtraOptions</name>
+          <state></state>
+        </option>
+        <option>
+          <name>PreInclude</name>
+          <state></state>
+        </option>
+        <option>
+          <name>CCOverrideModuleTypeDefault</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>CCRadioModuleType</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>CCRadioModuleTypeSlave</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>newCCIncludePaths</name>
+          <state>$PROJ_DIR$\.</state>
+          <state>$PROJ_DIR$\..\..</state>
+          <state>$PROJ_DIR$\..\..\..\..\..\include</state>
+          <state>$PROJ_DIR$\..\..\..\..\..\src</state>
+          <state>$PROJ_DIR$\..\..\..\..\..\ports\msp430\qk</state>
+        </option>
+        <option>
+          <name>CCStdIncCheck</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>CompilerMisraOverride</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>OI430X</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>ReduceStack</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>Save20bit</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>CompilerDataModel</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>CCOptLevel</name>
+          <state>3</state>
+        </option>
+        <option>
+          <name>CCOptStrategy</name>
+          <version>0</version>
+          <state>1</state>
+        </option>
+        <option>
+          <name>CCOptLevelSlave</name>
+          <state>3</state>
+        </option>
+        <option>
+          <name>CInput</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>CompilerMisraRules98</name>
+          <version>0</version>
+          <state>1000111110110101101110011100111111101110011011000101110111101101100111111111111100110011111001110111001111111111111111111111111</state>
+        </option>
+        <option>
+          <name>CompilerMisraRules04</name>
+          <version>0</version>
+          <state>111101110010111111111000110111111111111111111111111110010111101111010101111111111111111111111111101111111011111001111011111011111111111111111</state>
+        </option>
+        <option>
+          <name>IccLang</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>IccCDialect</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>IccAllowVLA</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>IccCppDialect</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>CCPUTAG</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>CCCodeFunctions</name>
+          <state>CODE</state>
+        </option>
+        <option>
+          <name>CCData16</name>
+          <state>DATA16</state>
+        </option>
+        <option>
+          <name>CCData20</name>
+          <state>DATA20</state>
+        </option>
+        <option>
+          <name>CCIntvec</name>
+          <state>INTVEC</state>
+        </option>
+        <option>
+          <name>CCCstack</name>
+          <state>CSTACK</state>
+        </option>
+        <option>
+          <name>CCRamFuncCode</name>
+          <state>RAMFUNC_CODE</state>
+        </option>
+        <option>
+          <name>CCIsrCode</name>
+          <state>ISR_CODE</state>
+        </option>
+        <option>
+          <name>CCDifunct</name>
+          <state>DIFUNCT</state>
+        </option>
+        <option>
+          <name>IccCppInlineSemantics</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>IccStaticDestr</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>IccFloatSemantics</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>CROPI</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>CNoRwDynamicInit</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>CCOptimizationNoSizeConstraints</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>ADefines</name>
+          <state></state>
+        </option>
+        <option>
+          <name>CCGuardCalls</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>OCGuardCallsSlave</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>CompilerCodeModel</name>
+          <state>1</state>
+        </option>
+      </data>
+    </settings>
+    <settings>
+      <name>A430</name>
+      <archiveVersion>5</archiveVersion>
+      <data>
+        <version>14</version>
+        <wantNonLocal>1</wantNonLocal>
+        <debug>0</debug>
+        <option>
+          <name>AObjPrefix</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>ACaseSensitivity</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>MacroChars</name>
+          <version>0</version>
+          <state>0</state>
+        </option>
+        <option>
+          <name>AWarnEnable</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>AWarnWhat</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>AWarnOne</name>
+          <state></state>
+        </option>
+        <option>
+          <name>AWarnRange1</name>
+          <state></state>
+        </option>
+        <option>
+          <name>AWarnRange2</name>
+          <state></state>
+        </option>
+        <option>
+          <name>ADefines</name>
+          <state></state>
+        </option>
+        <option>
+          <name>AList</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>AListHeader</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>AListing</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>Includes</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>MacDefs</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>MacExps</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>MacExec</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>OnlyAssed</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>MultiLine</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>PageLengthCheck</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>PageLength</name>
+          <state>80</state>
+        </option>
+        <option>
+          <name>TabSpacing</name>
+          <state>8</state>
+        </option>
+        <option>
+          <name>AXRef</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>AXRefDefines</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>AXRefInternal</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>AXRefDual</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>ADebug</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>ADebugType</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>IProcessor</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>AMaxErrOn</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>AMaxErrNum</name>
+          <state>100</state>
+        </option>
+        <option>
+          <name>OutputFile</name>
+          <state>$FILE_BNAME$.r43</state>
+        </option>
+        <option>
+          <name>AMultibyteSupport</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>AExtraOptionsCheck</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>AExtraOptions</name>
+          <state></state>
+        </option>
+        <option>
+          <name>OA1M</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>AIgnoreStdInclude</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>AStdIncludes</name>
+          <state>$TOOLKIT_DIR$\INC\</state>
+        </option>
+        <option>
+          <name>AUserIncludes</name>
+          <state></state>
+        </option>
+        <option>
+          <name>ACPUTAG</name>
+          <state>1</state>
+        </option>
+      </data>
+    </settings>
+    <settings>
+      <name>CUSTOM</name>
+      <archiveVersion>3</archiveVersion>
+      <data>
+        <extensions></extensions>
+        <cmdline></cmdline>
+        <hasPrio>0</hasPrio>
+      </data>
+    </settings>
+    <settings>
+      <name>BICOMP</name>
+      <archiveVersion>0</archiveVersion>
+      <data/>
+    </settings>
+    <settings>
+      <name>BUILDACTION</name>
+      <archiveVersion>1</archiveVersion>
+      <data>
+        <prebuild>cmd /c "if exist $OBJ_DIR$\qstamp.o del $OBJ_DIR$\qstamp.o"</prebuild>
+        <postbuild></postbuild>
+      </data>
+    </settings>
+    <settings>
+      <name>XLINK</name>
+      <archiveVersion>4</archiveVersion>
+      <data>
+        <version>29</version>
+        <wantNonLocal>1</wantNonLocal>
+        <debug>0</debug>
+        <option>
+          <name>XOutOverride</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>OutputFile</name>
+          <state>blinky-qk.d43</state>
+        </option>
+        <option>
+          <name>OutputFormat</name>
+          <version>11</version>
+          <state>33</state>
+        </option>
+        <option>
+          <name>FormatVariant</name>
+          <version>8</version>
+          <state>2</state>
+        </option>
+        <option>
+          <name>SecondaryOutputFile</name>
+          <state>(None for the selected format)</state>
+        </option>
+        <option>
+          <name>XDefines</name>
+          <state></state>
+        </option>
+        <option>
+          <name>AlwaysOutput</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>OverlapWarnings</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>NoGlobalCheck</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>XList</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>SegmentMap</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>ListSymbols</name>
+          <state>2</state>
+        </option>
+        <option>
+          <name>PageLengthCheck</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>PageLength</name>
+          <state>80</state>
+        </option>
+        <option>
+          <name>XIncludes</name>
+          <state>$TOOLKIT_DIR$\LIB\</state>
+        </option>
+        <option>
+          <name>ModuleStatus</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>XclOverride</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>XclFile</name>
+          <state>$TOOLKIT_DIR$\config\linker\lnk430f5529.xcl</state>
+        </option>
+        <option>
+          <name>XclFileSlave</name>
+          <state></state>
+        </option>
+        <option>
+          <name>DoFill</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>FillerByte</name>
+          <state>0xFF</state>
+        </option>
+        <option>
+          <name>DoCrc</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>CrcSize</name>
+          <version>0</version>
+          <state>1</state>
+        </option>
+        <option>
+          <name>CrcAlgo</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>CrcPoly</name>
+          <state>0x11021</state>
+        </option>
+        <option>
+          <name>CrcCompl</name>
+          <version>0</version>
+          <state>0</state>
+        </option>
+        <option>
+          <name>RangeCheckAlternatives</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>SuppressAllWarn</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>SuppressDiags</name>
+          <state></state>
+        </option>
+        <option>
+          <name>TreatAsWarn</name>
+          <state></state>
+        </option>
+        <option>
+          <name>TreatAsErr</name>
+          <state></state>
+        </option>
+        <option>
+          <name>ModuleLocalSym</name>
+          <version>0</version>
+          <state>0</state>
+        </option>
+        <option>
+          <name>CrcBitOrder</name>
+          <version>0</version>
+          <state>0</state>
+        </option>
+        <option>
+          <name>XHardwareMul</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>IncludeSuppressed</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>ModuleSummary</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>XlinkStackSize</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>XlinkCodeModel</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>xcProgramEntryLabel</name>
+          <state>__program_start</state>
+        </option>
+        <option>
+          <name>DebugInformation</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>RuntimeControl</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>IoEmulation</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>XcRTLibraryFile</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>OXLibIOConfig</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>XLibraryHeap</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>AllowExtraOutput</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>GenerateExtraOutput</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>XExtraOutOverride</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>ExtraOutputFile</name>
+          <state>blinky-qk.a43</state>
+        </option>
+        <option>
+          <name>ExtraOutputFormat</name>
+          <version>11</version>
+          <state>23</state>
+        </option>
+        <option>
+          <name>ExtraFormatVariant</name>
+          <version>8</version>
+          <state>2</state>
+        </option>
+        <option>
+          <name>xcOverrideProgramEntryLabel</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>xcProgramEntryLabelSelect</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>ListOutputFormat</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>BufferedTermOutput</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>XExtraOptionsCheck</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>XExtraOptions</name>
+          <state></state>
+        </option>
+        <option>
+          <name>OverlaySystemMap</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>RawBinaryFile</name>
+          <state></state>
+        </option>
+        <option>
+          <name>RawBinarySymbol</name>
+          <state></state>
+        </option>
+        <option>
+          <name>RawBinarySegment</name>
+          <state></state>
+        </option>
+        <option>
+          <name>RawBinaryAlign</name>
+          <state></state>
+        </option>
+        <option>
+          <name>XLinkMisraHandler</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>CrcAlign</name>
+          <state>2</state>
+        </option>
+        <option>
+          <name>CrcInitialValue</name>
+          <state>0x0</state>
+        </option>
+        <option>
+          <name>XLibraryHeap20</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>CrcUnitSize</name>
+          <version>0</version>
+          <state>0</state>
+        </option>
+        <option>
+          <name>LinkMathLib</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>IlinkThreadsSlave</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>XlinkMPU</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>XlinkIPE</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>XlinkLogEnable</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>XlinkLogInputFiles</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>XlinkLogModuleSelection</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>XlinkLogPrintfScanf</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>XlinkLogSegmentSelection</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>XlinkLogStackDepth</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>XlinkStackUsageEnable</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>XlinkControlFiles</name>
+          <state></state>
+        </option>
+        <option>
+          <name>XlinkCallGraphFileEnable</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>XlinkCallGraphFileName</name>
+          <state>$LIST_DIR$\$PROJ_FNAME$.call_graph.cgx</state>
+        </option>
+      </data>
+    </settings>
+    <settings>
+      <name>XAR</name>
+      <archiveVersion>4</archiveVersion>
+      <data>
+        <version>0</version>
+        <wantNonLocal>1</wantNonLocal>
+        <debug>0</debug>
+        <option>
+          <name>XAROutOverride</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>XARInputs</name>
+          <state></state>
+        </option>
+        <option>
+          <name>OutputFile</name>
+          <state></state>
+        </option>
+      </data>
+    </settings>
+    <settings>
+      <name>ULP430</name>
+      <archiveVersion>1</archiveVersion>
+      <data>
+        <version>1</version>
+        <wantNonLocal>1</wantNonLocal>
+        <debug>0</debug>
+        <option>
+          <name>CUTest</name>
+          <state>###Uninitialized###</state>
+        </option>
+        <option>
+          <name>ULPRules</name>
+          <version>0</version>
+          <state>1111111111111111111</state>
+        </option>
+        <option>
+          <name>ULPEnable</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>OutputFile</name>
+          <state></state>
+        </option>
+        <option>
+          <name>ULPStatus</name>
+          <state>1</state>
+        </option>
+      </data>
+    </settings>
+    <settings>
+      <name>BILINK</name>
+      <archiveVersion>0</archiveVersion>
+      <data/>
+    </settings>
+  </configuration>
+  <configuration>
+    <name>Spy</name>
+    <toolchain>
+      <name>MSP430</name>
+    </toolchain>
+    <debug>1</debug>
+    <settings>
+      <name>General</name>
+      <archiveVersion>17</archiveVersion>
+      <data>
+        <version>33</version>
+        <wantNonLocal>1</wantNonLocal>
+        <debug>1</debug>
+        <option>
+          <name>OGCore</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>ExePath</name>
+          <state>spy</state>
+        </option>
+        <option>
+          <name>ObjPath</name>
+          <state>spy</state>
+        </option>
+        <option>
+          <name>ListPath</name>
+          <state>spy</state>
+        </option>
+        <option>
+          <name>Hardware Multiplier</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>GOutputBinary</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>AssemblerOnly</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>OGDouble</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>GRuntimeLibSelect</name>
+          <version>0</version>
+          <state>1</state>
+        </option>
+        <option>
+          <name>RTDescription</name>
+          <state>Use the normal configuration of the C/EC++ runtime library. No locale interface, C locale, no file descriptor support, no multibytes in printf and scanf, and no hex floats in strtod.</state>
+        </option>
+        <option>
+          <name>RTConfigPath</name>
+          <state>$TOOLKIT_DIR$\lib\dlib\dl430xlsfn.h</state>
+        </option>
+        <option>
+          <name>RTLibraryPath</name>
+          <state>$TOOLKIT_DIR$\lib\dlib\dl430fn.r43</state>
+        </option>
+        <option>
+          <name>Input variant</name>
+          <version>2</version>
+          <state>7</state>
+        </option>
+        <option>
+          <name>Input description</name>
+          <state>No specifier n, no float nor long long, no scan set, no assignment suppressing, without multibyte support.</state>
+        </option>
+        <option>
+          <name>Output variant</name>
+          <version>2</version>
+          <state>8</state>
+        </option>
+        <option>
+          <name>Output description</name>
+          <state>No specifier a or A, no specifier n, no float or long long, no flags.</state>
+        </option>
+        <option>
+          <name>GRuntimeLibSelectSlave</name>
+          <version>0</version>
+          <state>1</state>
+        </option>
+        <option>
+          <name>GeneralEnableMisra</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>GeneralMisraVerbose</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>OGChipSelectMenu</name>
+          <state>MSP430F5529	MSP430F5529</state>
+        </option>
+        <option>
+          <name>GStackHeapOverride</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>GStackSize2</name>
+          <state>80</state>
+        </option>
+        <option>
+          <name>GHeapSize2</name>
+          <state>80</state>
+        </option>
+        <option>
+          <name>RadioDataModelType</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>GHeap20Size</name>
+          <state>80</state>
+        </option>
+        <option>
+          <name>GeneralMisraRules98</name>
+          <version>0</version>
+          <state>1000111110110101101110011100111111101110011011000101110111101101100111111111111100110011111001110111001111111111111111111111111</state>
+        </option>
+        <option>
+          <name>RadioHeapSizeType</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>RadioHardwareMultiplierType</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>GeneralMisraVer</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>GeneralMisraRules04</name>
+          <version>0</version>
+          <state>111101110010111111111000110111111111111111111111111110010111101111010101111111111111111111111111101111111011111001111011111011111111111111111</state>
+        </option>
+        <option>
+          <name>RadioL092ModelType</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>Ropi</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>NoRwDynamicInit</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>GRuntimeLibThreads</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>MathLib</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>RadioCodeModelType</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>GEnableMpu</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>GESupportMpu</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>GELockMpu</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>GENMIViolationMpu</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>GEAssertMpu</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>GEInfoReadMpu</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>GEInfoWriteMpu</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>GEInfoExecuteMpu</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>GEInfoAssertMpu</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>GEnableIpe</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>GESupportIpe</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>GAssertIpe</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>GLockIpe</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>Math variant</name>
+          <version>0</version>
+          <state>0</state>
+        </option>
+        <option>
+          <name>Math description</name>
+          <state>Default variants of cos, sin, tan, log, log10, pow, and exp.</state>
+        </option>
+      </data>
+    </settings>
+    <settings>
+      <name>ICC430</name>
+      <archiveVersion>4</archiveVersion>
+      <data>
+        <version>37</version>
+        <wantNonLocal>1</wantNonLocal>
+        <debug>1</debug>
+        <option>
+          <name>CCDefines</name>
+          <state>Q_SPY</state>
+        </option>
+        <option>
+          <name>CCPreprocFile</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>CCPreprocComments</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>CCPreprocLine</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>CCListCFile</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>CCListCMnemonics</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>CCListCMessages</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>CCListAssFile</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>CCListAssSource</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>CCEnableRemarks</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>CCDiagSuppress</name>
+          <state>Pa50</state>
+        </option>
+        <option>
+          <name>CCDiagRemark</name>
+          <state></state>
+        </option>
+        <option>
+          <name>CCDiagWarning</name>
+          <state></state>
+        </option>
+        <option>
+          <name>CCDiagError</name>
+          <state></state>
+        </option>
+        <option>
+          <name>IObjPrefix2</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>CCRequirePrototypes</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>CCAllowList</name>
+          <version>1</version>
+          <state>00000</state>
+        </option>
+        <option>
+          <name>CCObjUseModuleName</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>CCObjModuleName</name>
+          <state></state>
+        </option>
+        <option>
+          <name>CCDebugInfo</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>IProcessor</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>CCDiagWarnAreErr</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>CCCharIs</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>CCExt</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>CCMultibyteSupport</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>CCMigrationPreprocExtentions</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>CCCompilerRuntimeInfo</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>IDoubleSize</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>OutputFile</name>
+          <state>$FILE_BNAME$.r43</state>
+        </option>
+        <option>
+          <name>CCLibConfigHeader</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>OCCR4Utilize</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>OCCR5Utilize</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>IExtraOptionsCheck</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>IExtraOptions</name>
+          <state></state>
+        </option>
+        <option>
+          <name>PreInclude</name>
+          <state></state>
+        </option>
+        <option>
+          <name>CCOverrideModuleTypeDefault</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>CCRadioModuleType</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>CCRadioModuleTypeSlave</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>newCCIncludePaths</name>
+          <state>$PROJ_DIR$\.</state>
+          <state>$PROJ_DIR$\..\..</state>
+          <state>$PROJ_DIR$\..\..\..\..\..\include</state>
+          <state>$PROJ_DIR$\..\..\..\..\..\src</state>
+          <state>$PROJ_DIR$\..\..\..\..\..\ports\msp430\qk</state>
+        </option>
+        <option>
+          <name>CCStdIncCheck</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>CompilerMisraOverride</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>OI430X</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>ReduceStack</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>Save20bit</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>CompilerDataModel</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>CCOptLevel</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>CCOptStrategy</name>
+          <version>0</version>
+          <state>0</state>
+        </option>
+        <option>
+          <name>CCOptLevelSlave</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>CInput</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>CompilerMisraRules98</name>
+          <version>0</version>
+          <state>1000111110110101101110011100111111101110011011000101110111101101100111111111111100110011111001110111001111111111111111111111111</state>
+        </option>
+        <option>
+          <name>CompilerMisraRules04</name>
+          <version>0</version>
+          <state>111101110010111111111000110111111111111111111111111110010111101111010101111111111111111111111111101111111011111001111011111011111111111111111</state>
+        </option>
+        <option>
+          <name>IccLang</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>IccCDialect</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>IccAllowVLA</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>IccCppDialect</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>CCPUTAG</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>CCCodeFunctions</name>
+          <state>CODE</state>
+        </option>
+        <option>
+          <name>CCData16</name>
+          <state>DATA16</state>
+        </option>
+        <option>
+          <name>CCData20</name>
+          <state>DATA20</state>
+        </option>
+        <option>
+          <name>CCIntvec</name>
+          <state>INTVEC</state>
+        </option>
+        <option>
+          <name>CCCstack</name>
+          <state>CSTACK</state>
+        </option>
+        <option>
+          <name>CCRamFuncCode</name>
+          <state>RAMFUNC_CODE</state>
+        </option>
+        <option>
+          <name>CCIsrCode</name>
+          <state>ISR_CODE</state>
+        </option>
+        <option>
+          <name>CCDifunct</name>
+          <state>DIFUNCT</state>
+        </option>
+        <option>
+          <name>IccCppInlineSemantics</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>IccStaticDestr</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>IccFloatSemantics</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>CROPI</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>CNoRwDynamicInit</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>CCOptimizationNoSizeConstraints</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>ADefines</name>
+          <state></state>
+        </option>
+        <option>
+          <name>CCGuardCalls</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>OCGuardCallsSlave</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>CompilerCodeModel</name>
+          <state>1</state>
+        </option>
+      </data>
+    </settings>
+    <settings>
+      <name>A430</name>
+      <archiveVersion>5</archiveVersion>
+      <data>
+        <version>14</version>
+        <wantNonLocal>1</wantNonLocal>
+        <debug>1</debug>
+        <option>
+          <name>AObjPrefix</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>ACaseSensitivity</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>MacroChars</name>
+          <version>0</version>
+          <state>0</state>
+        </option>
+        <option>
+          <name>AWarnEnable</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>AWarnWhat</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>AWarnOne</name>
+          <state></state>
+        </option>
+        <option>
+          <name>AWarnRange1</name>
+          <state></state>
+        </option>
+        <option>
+          <name>AWarnRange2</name>
+          <state></state>
+        </option>
+        <option>
+          <name>ADefines</name>
+          <state></state>
+        </option>
+        <option>
+          <name>AList</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>AListHeader</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>AListing</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>Includes</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>MacDefs</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>MacExps</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>MacExec</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>OnlyAssed</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>MultiLine</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>PageLengthCheck</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>PageLength</name>
+          <state>80</state>
+        </option>
+        <option>
+          <name>TabSpacing</name>
+          <state>8</state>
+        </option>
+        <option>
+          <name>AXRef</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>AXRefDefines</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>AXRefInternal</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>AXRefDual</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>ADebug</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>ADebugType</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>IProcessor</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>AMaxErrOn</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>AMaxErrNum</name>
+          <state>100</state>
+        </option>
+        <option>
+          <name>OutputFile</name>
+          <state>$FILE_BNAME$.r43</state>
+        </option>
+        <option>
+          <name>AMultibyteSupport</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>AExtraOptionsCheck</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>AExtraOptions</name>
+          <state></state>
+        </option>
+        <option>
+          <name>OA1M</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>AIgnoreStdInclude</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>AStdIncludes</name>
+          <state>$TOOLKIT_DIR$\INC\</state>
+        </option>
+        <option>
+          <name>AUserIncludes</name>
+          <state></state>
+        </option>
+        <option>
+          <name>ACPUTAG</name>
+          <state>1</state>
+        </option>
+      </data>
+    </settings>
+    <settings>
+      <name>CUSTOM</name>
+      <archiveVersion>3</archiveVersion>
+      <data>
+        <extensions></extensions>
+        <cmdline></cmdline>
+        <hasPrio>0</hasPrio>
+      </data>
+    </settings>
+    <settings>
+      <name>BICOMP</name>
+      <archiveVersion>0</archiveVersion>
+      <data/>
+    </settings>
+    <settings>
+      <name>BUILDACTION</name>
+      <archiveVersion>1</archiveVersion>
+      <data>
+        <prebuild>cmd /c "if exist $OBJ_DIR$\qstamp.o del $OBJ_DIR$\qstamp.o"</prebuild>
+        <postbuild></postbuild>
+      </data>
+    </settings>
+    <settings>
+      <name>XLINK</name>
+      <archiveVersion>4</archiveVersion>
+      <data>
+        <version>29</version>
+        <wantNonLocal>1</wantNonLocal>
+        <debug>1</debug>
+        <option>
+          <name>XOutOverride</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>OutputFile</name>
+          <state>blinky-qk.d43</state>
+        </option>
+        <option>
+          <name>OutputFormat</name>
+          <version>11</version>
+          <state>33</state>
+        </option>
+        <option>
+          <name>FormatVariant</name>
+          <version>8</version>
+          <state>2</state>
+        </option>
+        <option>
+          <name>SecondaryOutputFile</name>
+          <state>(None for the selected format)</state>
+        </option>
+        <option>
+          <name>XDefines</name>
+          <state></state>
+        </option>
+        <option>
+          <name>AlwaysOutput</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>OverlapWarnings</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>NoGlobalCheck</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>XList</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>SegmentMap</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>ListSymbols</name>
+          <state>2</state>
+        </option>
+        <option>
+          <name>PageLengthCheck</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>PageLength</name>
+          <state>80</state>
+        </option>
+        <option>
+          <name>XIncludes</name>
+          <state>$TOOLKIT_DIR$\LIB\</state>
+        </option>
+        <option>
+          <name>ModuleStatus</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>XclOverride</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>XclFile</name>
+          <state>$TOOLKIT_DIR$\config\linker\lnk430f5529.xcl</state>
+        </option>
+        <option>
+          <name>XclFileSlave</name>
+          <state></state>
+        </option>
+        <option>
+          <name>DoFill</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>FillerByte</name>
+          <state>0xFF</state>
+        </option>
+        <option>
+          <name>DoCrc</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>CrcSize</name>
+          <version>0</version>
+          <state>1</state>
+        </option>
+        <option>
+          <name>CrcAlgo</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>CrcPoly</name>
+          <state>0x11021</state>
+        </option>
+        <option>
+          <name>CrcCompl</name>
+          <version>0</version>
+          <state>0</state>
+        </option>
+        <option>
+          <name>RangeCheckAlternatives</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>SuppressAllWarn</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>SuppressDiags</name>
+          <state></state>
+        </option>
+        <option>
+          <name>TreatAsWarn</name>
+          <state></state>
+        </option>
+        <option>
+          <name>TreatAsErr</name>
+          <state></state>
+        </option>
+        <option>
+          <name>ModuleLocalSym</name>
+          <version>0</version>
+          <state>0</state>
+        </option>
+        <option>
+          <name>CrcBitOrder</name>
+          <version>0</version>
+          <state>0</state>
+        </option>
+        <option>
+          <name>XHardwareMul</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>IncludeSuppressed</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>ModuleSummary</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>XlinkStackSize</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>XlinkCodeModel</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>xcProgramEntryLabel</name>
+          <state>__program_start</state>
+        </option>
+        <option>
+          <name>DebugInformation</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>RuntimeControl</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>IoEmulation</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>XcRTLibraryFile</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>OXLibIOConfig</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>XLibraryHeap</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>AllowExtraOutput</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>GenerateExtraOutput</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>XExtraOutOverride</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>ExtraOutputFile</name>
+          <state>blinky-qk.a43</state>
+        </option>
+        <option>
+          <name>ExtraOutputFormat</name>
+          <version>11</version>
+          <state>23</state>
+        </option>
+        <option>
+          <name>ExtraFormatVariant</name>
+          <version>8</version>
+          <state>2</state>
+        </option>
+        <option>
+          <name>xcOverrideProgramEntryLabel</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>xcProgramEntryLabelSelect</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>ListOutputFormat</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>BufferedTermOutput</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>XExtraOptionsCheck</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>XExtraOptions</name>
+          <state></state>
+        </option>
+        <option>
+          <name>OverlaySystemMap</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>RawBinaryFile</name>
+          <state></state>
+        </option>
+        <option>
+          <name>RawBinarySymbol</name>
+          <state></state>
+        </option>
+        <option>
+          <name>RawBinarySegment</name>
+          <state></state>
+        </option>
+        <option>
+          <name>RawBinaryAlign</name>
+          <state></state>
+        </option>
+        <option>
+          <name>XLinkMisraHandler</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>CrcAlign</name>
+          <state>2</state>
+        </option>
+        <option>
+          <name>CrcInitialValue</name>
+          <state>0x0</state>
+        </option>
+        <option>
+          <name>XLibraryHeap20</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>CrcUnitSize</name>
+          <version>0</version>
+          <state>0</state>
+        </option>
+        <option>
+          <name>LinkMathLib</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>IlinkThreadsSlave</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>XlinkMPU</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>XlinkIPE</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>XlinkLogEnable</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>XlinkLogInputFiles</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>XlinkLogModuleSelection</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>XlinkLogPrintfScanf</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>XlinkLogSegmentSelection</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>XlinkLogStackDepth</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>XlinkStackUsageEnable</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>XlinkControlFiles</name>
+          <state></state>
+        </option>
+        <option>
+          <name>XlinkCallGraphFileEnable</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>XlinkCallGraphFileName</name>
+          <state>$LIST_DIR$\$PROJ_FNAME$.call_graph.cgx</state>
+        </option>
+      </data>
+    </settings>
+    <settings>
+      <name>XAR</name>
+      <archiveVersion>4</archiveVersion>
+      <data>
+        <version>0</version>
+        <wantNonLocal>1</wantNonLocal>
+        <debug>1</debug>
+        <option>
+          <name>XAROutOverride</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>XARInputs</name>
+          <state></state>
+        </option>
+        <option>
+          <name>OutputFile</name>
+          <state></state>
+        </option>
+      </data>
+    </settings>
+    <settings>
+      <name>ULP430</name>
+      <archiveVersion>1</archiveVersion>
+      <data>
+        <version>1</version>
+        <wantNonLocal>1</wantNonLocal>
+        <debug>1</debug>
+        <option>
+          <name>CUTest</name>
+          <state>###Uninitialized###</state>
+        </option>
+        <option>
+          <name>ULPRules</name>
+          <version>0</version>
+          <state>1111111111111111111</state>
+        </option>
+        <option>
+          <name>ULPEnable</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>OutputFile</name>
+          <state></state>
+        </option>
+        <option>
+          <name>ULPStatus</name>
+          <state>1</state>
+        </option>
+      </data>
+    </settings>
+    <settings>
+      <name>BILINK</name>
+      <archiveVersion>0</archiveVersion>
+      <data/>
+    </settings>
+  </configuration>
+  <group>
+    <name>Application</name>
+    <file>
+      <name>$PROJ_DIR$\..\..\blinky.c</name>
+    </file>
+    <file>
+      <name>$PROJ_DIR$\..\..\blinky.h</name>
+    </file>
+    <file>
+      <name>$PROJ_DIR$\..\bsp.c</name>
+    </file>
+    <file>
+      <name>$PROJ_DIR$\..\..\bsp.h</name>
+    </file>
+    <file>
+      <name>$PROJ_DIR$\..\..\main.c</name>
+    </file>
+    <file>
+      <name>$PROJ_DIR$\..\..\..\..\..\include\qstamp.c</name>
+    </file>
+  </group>
+  <group>
+    <name>QP</name>
+    <file>
+      <name>$PROJ_DIR$\..\..\..\..\..\src\qf\qep_hsm.c</name>
+    </file>
+    <file>
+      <name>$PROJ_DIR$\..\..\..\..\..\src\qf\qep_msm.c</name>
+    </file>
+    <file>
+      <name>$PROJ_DIR$\..\..\..\..\..\src\qf\qf_act.c</name>
+    </file>
+    <file>
+      <name>$PROJ_DIR$\..\..\..\..\..\src\qf\qf_actq.c</name>
+    </file>
+    <file>
+      <name>$PROJ_DIR$\..\..\..\..\..\src\qf\qf_defer.c</name>
+    </file>
+    <file>
+      <name>$PROJ_DIR$\..\..\..\..\..\src\qf\qf_dyn.c</name>
+    </file>
+    <file>
+      <name>$PROJ_DIR$\..\..\..\..\..\src\qf\qf_mem.c</name>
+    </file>
+    <file>
+      <name>$PROJ_DIR$\..\..\..\..\..\src\qf_pkg.h</name>
+    </file>
+    <file>
+      <name>$PROJ_DIR$\..\..\..\..\..\src\qf\qf_ps.c</name>
+    </file>
+    <file>
+      <name>$PROJ_DIR$\..\..\..\..\..\src\qf\qf_qact.c</name>
+    </file>
+    <file>
+      <name>$PROJ_DIR$\..\..\..\..\..\src\qf\qf_qeq.c</name>
+    </file>
+    <file>
+      <name>$PROJ_DIR$\..\..\..\..\..\src\qf\qf_qmact.c</name>
+    </file>
+    <file>
+      <name>$PROJ_DIR$\..\..\..\..\..\src\qf\qf_time.c</name>
+    </file>
+    <file>
+      <name>$PROJ_DIR$\..\..\..\..\..\src\qk\qk.c</name>
+    </file>
+    <file>
+      <name>$PROJ_DIR$\..\..\..\..\..\src\qk_pkg.h</name>
+    </file>
+  </group>
+  <group>
+    <name>QP_port</name>
+    <file>
+      <name>$PROJ_DIR$\..\..\..\..\..\ports\msp430\qk\qep_port.h</name>
+    </file>
+    <file>
+      <name>$PROJ_DIR$\..\..\..\..\..\ports\msp430\qk\qf_port.h</name>
+    </file>
+    <file>
+      <name>$PROJ_DIR$\..\..\..\..\..\ports\msp430\qk\qk_port.h</name>
+    </file>
+    <file>
+      <name>$PROJ_DIR$\..\..\..\..\..\ports\msp430\qk\qs_port.h</name>
+    </file>
+  </group>
+  <group>
+    <name>QS</name>
+    <excluded>
+      <configuration>Debug</configuration>
+      <configuration>Release</configuration>
+    </excluded>
+    <file>
+      <name>$PROJ_DIR$\..\..\..\..\..\src\qs\qs.c</name>
+    </file>
+    <file>
+      <name>$PROJ_DIR$\..\..\..\..\..\src\qs\qs_fp.c</name>
+    </file>
+    <file>
+      <name>$PROJ_DIR$\..\..\..\..\..\src\qs_pkg.h</name>
+    </file>
+    <file>
+      <name>$PROJ_DIR$\..\..\..\..\..\src\qs\qs_rx.c</name>
+    </file>
+  </group>
+</project>
+
+

Alguns ficheiros não foram mostrados porque muitos ficheiros mudaram neste diff