Quantum Leaps 10 лет назад
Родитель
Сommit
c8b64576ec
100 измененных файлов с 667 добавлено и 441 удалено
  1. 3 2
      doxygen/Doxyfile
  2. 3 2
      doxygen/Doxyfile-CHM
  3. 1 40
      doxygen/about.dox
  4. 80 0
      doxygen/design.dox
  5. 1 1
      doxygen/exa.dox
  6. 24 5
      doxygen/history.dox
  7. BIN
      doxygen/images/qp_classes.png
  8. 13 13
      doxygen/metrics.dox
  9. 1 1
      examples/arm-cm/blinky_ek-tm4c123gxl/qk/arm/blinky-qk.uvprojx
  10. 3 2
      examples/arm-cm/blinky_ek-tm4c123gxl/qk/gnu/Makefile
  11. 12 0
      examples/arm-cm/blinky_ek-tm4c123gxl/qk/gnu/README.txt
  12. 5 3
      examples/arm-cm/blinky_ek-tm4c123gxl/qv/gnu/Makefile
  13. 12 0
      examples/arm-cm/blinky_ek-tm4c123gxl/qv/gnu/README.txt
  14. 2 2
      examples/arm-cm/dpp_ek-tm4c123gxl/dpp.h
  15. 4 4
      examples/arm-cm/dpp_ek-tm4c123gxl/dpp.qm
  16. 18 17
      examples/arm-cm/dpp_ek-tm4c123gxl/lint/lint_out.txt
  17. 1 1
      examples/arm-cm/dpp_ek-tm4c123gxl/philo.c
  18. 2 2
      examples/arm-cm/dpp_ek-tm4c123gxl/qk/gnu/Makefile
  19. 12 0
      examples/arm-cm/dpp_ek-tm4c123gxl/qk/gnu/README.txt
  20. 2 2
      examples/arm-cm/dpp_ek-tm4c123gxl/qv/gnu/Makefile
  21. 12 0
      examples/arm-cm/dpp_ek-tm4c123gxl/qv/gnu/README.txt
  22. 1 1
      examples/arm-cm/dpp_ek-tm4c123gxl/qv/gnu/flash.bat
  23. 1 1
      examples/arm-cm/dpp_ek-tm4c123gxl/table.c
  24. 2 2
      examples/arm-cm/dpp_mbed-lpc1768/dpp.h
  25. 4 4
      examples/arm-cm/dpp_mbed-lpc1768/dpp.qm
  26. 1 1
      examples/arm-cm/dpp_mbed-lpc1768/philo.c
  27. 1 1
      examples/arm-cm/dpp_mbed-lpc1768/qk/gnu/Makefile
  28. 1 1
      examples/arm-cm/dpp_mbed-lpc1768/qv/gnu/Makefile
  29. 1 1
      examples/arm-cm/dpp_mbed-lpc1768/table.c
  30. 2 2
      examples/arm-cm/dpp_nucleo-l053r8/dpp.h
  31. 4 4
      examples/arm-cm/dpp_nucleo-l053r8/dpp.qm
  32. 1 1
      examples/arm-cm/dpp_nucleo-l053r8/philo.c
  33. 1 1
      examples/arm-cm/dpp_nucleo-l053r8/qk/gnu/Makefile
  34. 1 1
      examples/arm-cm/dpp_nucleo-l053r8/qv/gnu/Makefile
  35. 1 1
      examples/arm-cm/dpp_nucleo-l053r8/table.c
  36. 2 2
      examples/arm-cm/dpp_nucleo-l152re/dpp.h
  37. 4 4
      examples/arm-cm/dpp_nucleo-l152re/dpp.qm
  38. 1 1
      examples/arm-cm/dpp_nucleo-l152re/philo.c
  39. 1 1
      examples/arm-cm/dpp_nucleo-l152re/qk/gnu/Makefile
  40. 1 1
      examples/arm-cm/dpp_nucleo-l152re/qv/gnu/Makefile
  41. 1 1
      examples/arm-cm/dpp_nucleo-l152re/table.c
  42. 3 3
      examples/arm-cm/game_ek-lm3s811/game.h
  43. 6 6
      examples/arm-cm/game_ek-lm3s811/game.qm
  44. 1 1
      examples/arm-cm/game_ek-lm3s811/missile.c
  45. 49 58
      examples/arm-cm/game_ek-lm3s811/qk/bsp.c
  46. 2 2
      examples/arm-cm/game_ek-lm3s811/qk/gnu/Makefile
  47. 47 58
      examples/arm-cm/game_ek-lm3s811/qv/bsp.c
  48. 2 2
      examples/arm-cm/game_ek-lm3s811/qv/gnu/Makefile
  49. 1 1
      examples/arm-cm/game_ek-lm3s811/ship.c
  50. 1 1
      examples/arm-cm/game_ek-lm3s811/tunnel.c
  51. 2 2
      examples/arm7-9/dpp_at91sam7s-ek/dpp.h
  52. 4 4
      examples/arm7-9/dpp_at91sam7s-ek/dpp.qm
  53. 1 1
      examples/arm7-9/dpp_at91sam7s-ek/philo.c
  54. 1 1
      examples/arm7-9/dpp_at91sam7s-ek/table.c
  55. 2 2
      examples/avr/blinky_arduino-uno/qv/gnu/Makefile
  56. 2 2
      examples/avr/dpp_arduino-uno/dpp.h
  57. 4 4
      examples/avr/dpp_arduino-uno/dpp.qm
  58. 1 1
      examples/avr/dpp_arduino-uno/philo.c
  59. 1 1
      examples/avr/dpp_arduino-uno/table.c
  60. 1 4
      examples/cmsis-rtx/blinky_ek-tm4c123gxl/bsp.c
  61. 2 2
      examples/cmsis-rtx/blinky_ek-tm4c123gxl/gnu/Makefile
  62. 14 2
      examples/cmsis-rtx/blinky_ek-tm4c123gxl/gnu/README.txt
  63. 1 4
      examples/cmsis-rtx/dpp_ek-tm4c123gxl/bsp.c
  64. 2 2
      examples/cmsis-rtx/dpp_ek-tm4c123gxl/dpp.h
  65. 4 4
      examples/cmsis-rtx/dpp_ek-tm4c123gxl/dpp.qm
  66. 2 2
      examples/cmsis-rtx/dpp_ek-tm4c123gxl/gnu/Makefile
  67. 12 0
      examples/cmsis-rtx/dpp_ek-tm4c123gxl/gnu/README.txt
  68. 1 1
      examples/cmsis-rtx/dpp_ek-tm4c123gxl/philo.c
  69. 1 1
      examples/cmsis-rtx/dpp_ek-tm4c123gxl/table.c
  70. 2 2
      examples/cmsis-rtx/dpp_nucleo-l053r8/dpp.h
  71. 4 4
      examples/cmsis-rtx/dpp_nucleo-l053r8/dpp.qm
  72. 2 2
      examples/cmsis-rtx/dpp_nucleo-l053r8/gnu/Makefile
  73. 1 1
      examples/cmsis-rtx/dpp_nucleo-l053r8/philo.c
  74. 1 1
      examples/cmsis-rtx/dpp_nucleo-l053r8/table.c
  75. 2 2
      examples/cmsis-rtx/dpp_nucleo-l152re/dpp.h
  76. 4 4
      examples/cmsis-rtx/dpp_nucleo-l152re/dpp.qm
  77. 2 2
      examples/cmsis-rtx/dpp_nucleo-l152re/gnu/Makefile
  78. 1 1
      examples/cmsis-rtx/dpp_nucleo-l152re/philo.c
  79. 1 1
      examples/cmsis-rtx/dpp_nucleo-l152re/table.c
  80. 2 2
      examples/embos/arm-cm/dpp_stm32f429-discovery/dpp.h
  81. 4 4
      examples/embos/arm-cm/dpp_stm32f429-discovery/dpp.qm
  82. 1 1
      examples/embos/arm-cm/dpp_stm32f429-discovery/philo.c
  83. 1 1
      examples/embos/arm-cm/dpp_stm32f429-discovery/table.c
  84. 1 1
      examples/freertos/arm-cm/blinky_ek-tm4c123gxl/gnu/Makefile
  85. 71 0
      examples/freertos/arm-cm/blinky_ek-tm4c123gxl/gnu/README.txt
  86. 2 2
      examples/freertos/arm-cm/dpp_ek-tm4c123gxl/dpp.h
  87. 4 4
      examples/freertos/arm-cm/dpp_ek-tm4c123gxl/dpp.qm
  88. 1 1
      examples/freertos/arm-cm/dpp_ek-tm4c123gxl/gnu/Makefile
  89. 71 0
      examples/freertos/arm-cm/dpp_ek-tm4c123gxl/gnu/README.txt
  90. 1 1
      examples/freertos/arm-cm/dpp_ek-tm4c123gxl/philo.c
  91. 1 1
      examples/freertos/arm-cm/dpp_ek-tm4c123gxl/table.c
  92. 28 42
      examples/lwip/arm-cm/lwip_ek-lm3s6965/qk/bsp.c
  93. 4 4
      examples/lwip/arm-cm/lwip_ek-lm3s6965/qk/gnu/Makefile
  94. 28 42
      examples/lwip/arm-cm/lwip_ek-lm3s6965/qv/bsp.c
  95. 4 4
      examples/lwip/arm-cm/lwip_ek-lm3s6965/qv/gnu/Makefile
  96. 2 2
      examples/msp430/dpp_msp-exp430g2/dpp.h
  97. 4 4
      examples/msp430/dpp_msp-exp430g2/dpp.qm
  98. 1 1
      examples/msp430/dpp_msp-exp430g2/philo.c
  99. 1 1
      examples/msp430/dpp_msp-exp430g2/table.c
  100. 2 2
      examples/posix/dpp/dpp.h

+ 3 - 2
doxygen/Doxyfile

@@ -38,7 +38,7 @@ PROJECT_NAME           = "QP/C"
 # could be handy for archiving the generated documentation or if some version
 # control system is used.
 
-PROJECT_NUMBER         = "5.4.0"
+PROJECT_NUMBER         = "5.4.1"
 
 # Using the PROJECT_BRIEF tag one can provide an optional one line description
 # for a project that appears at the top of each page and should give viewer a
@@ -764,7 +764,8 @@ WARN_LOGFILE           =
 
 INPUT = \
     modules.dox \
-    ab.dox \
+    about.dox \
+    design.dox \
     exa.dox \
     exa_apps.dox \
     exa_native.dox \

+ 3 - 2
doxygen/Doxyfile-CHM

@@ -38,7 +38,7 @@ PROJECT_NAME           = "QP/C"
 # could be handy for archiving the generated documentation or if some version
 # control system is used.
 
-PROJECT_NUMBER         = "5.4.0"
+PROJECT_NUMBER         = "5.4.1"
 
 # Using the PROJECT_BRIEF tag one can provide an optional one line description
 # for a project that appears at the top of each page and should give viewer a
@@ -764,7 +764,8 @@ WARN_LOGFILE           =
 
 INPUT = \
     modules.dox \
-    ab.dox \
+    about.dox \
+    design.dox \
     exa.dox \
     exa_apps.dox \
     exa_native.dox \

+ 1 - 40
doxygen/ab.dox → doxygen/about.dox

@@ -19,34 +19,6 @@ The QP frameworks are used in millions of products worldwide in aerospace, medic
 For more information about QP, please visit: <a class="extern" target="_blank" href="http://www.state-machine.com/qp"><strong>state-machine.com/qp</strong></a>
 
 
-------------------------------------------------------------------------------
-@section comp Components of QP/C
-The QP/C active object framework is comprised of the following components:
-
-<div class="clear"></div>
-@image html qp_components.jpg "Components of the QP Framework"
-
-<div class="separate"></div>
-@subsection comp_qep QEP Hierarchical Event Processor
-QEP is a universal, UML-compliant event processor that enables developers to code UML state machines in highly readable ANSI-C, in which every state machine element is mapped to code precisely, unambiguously, and exactly once (traceability). QEP fully supports hierarchical state nesting, which is the fundamental mechanism for reusing behavior across many states instead of repeating the same actions and transitions over and over again. (See also @ref qep).
-
-<div class="separate"></div>
-@subsection comp_qf QF Active-Object Framework
-QF is a portable, event-driven, active-object (actor) framework for execution of **active objects** (concurrent state machines) specifically designed for real-time embedded (RTE) systems. (See also @ref qf).
-
-<div class="separate"></div>
-@subsection comp_qk QK Preemptive Kernel
-QK is a tiny **preemptive**, priority-based, non-blocking, real-time kernel designed specifically for executing active objects. QK meets all the requirement of the <a class="extern" target="_blank" href="http://en.wikipedia.org/wiki/Rate-monotonic_scheduling"><strong>Rate Monotonic Scheduling</strong></a> (a.k.a. Rate Monotonic Analysis &mdash; RMA) and can be used in hard real-time systems. (See also @ref qk). 
-
-<div class="separate"></div>
-@subsection comp_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. (See also @ref qv). 
-
-<div class="separate"></div>
-@subsection comp_qs QS Software Tracing System
-QS is software tracing system that enables developers to monitor live event-driven QP applications with minimal target system resources and without stopping or significantly slowing down the code. QS is an ideal tool for testing, troubleshooting, and optimizing QP applications. QS can even be used to support acceptance testing in product manufacturing. (See also @ref qs).
-
-
 ------------------------------------------------------------------------------
 @section download Downloading QP/C
 QP/C is available for download from <a class="extern" target="_blank" href="http://sourceforge.net/projects/qpc/files/QP-C">SourceForge.net</a>--the world's biggest open source repository. The summary of available downloads is also available from <a class="extern" target="_blank" href="http://www.state-machine.com/downloads">Quantum Leaps download page</a>. 
@@ -109,16 +81,6 @@ The following annotated directory tree lists the top-level directories provided
 </ul>  
 
 
-------------------------------------------------------------------------------
-@section oop Object-Orientation
-
-Even though QP/C is implemented in standard ANSI-C, it extensively uses object-oriented design principles such as **encapsulation** (classes), single **inheritance**, and, starting with QP5, **polymorphism** (late binding). At the C language level, these proven ways of software design become **design-patterns** and coding idioms.
-
-@image html AN_Simple_OOP_in_C.jpg
-
-The Quantum Leaps Application Note <a class="extern" target="_blank" href="http://www.state-machine.com/resources/AN_Simple_OOP_in_C.pdf"><strong>Simple Object-Oriented Programming in C</strong></a> describes how the OOP design patterns are implemented in QP/C and how you should code them in your own applications.
-
-
 ------------------------------------------------------------------------------
 @section misra MISRA Compliance
 
@@ -157,7 +119,6 @@ The QP/C framework comes with extensive support for automatic rule checking by m
 @image html logo_ql_TM.jpg
 Copyright &copy; 2002-2015 Quantum Leaps, LLC. All Rights Reserved.
 
-
-@next{exa}
+@next{design}
 */
 

+ 80 - 0
doxygen/design.dox

@@ -0,0 +1,80 @@
+/*! @page design Design
+
+@tableofcontents
+
+@section oop Object-Orientation
+
+Even though QP/C is implemented in standard ANSI-C, it extensively uses object-oriented design principles such as **encapsulation** (classes), single **inheritance**, and, starting with QP5, **polymorphism** (late binding). At the C language level, these proven ways of software design become **design-patterns** and coding idioms.
+
+@image html AN_Simple_OOP_in_C.jpg
+
+The Quantum Leaps Application Note <a class="extern" target="_blank" href="http://www.state-machine.com/resources/AN_Simple_OOP_in_C.pdf"><strong>Simple Object-Oriented Programming in C</strong></a> describes how the OOP design patterns are implemented in QP/C and how you should code them in your own applications.
+<div class="clear"></div>
+
+
+------------------------------------------------------------------------------
+@section comp Components of QP/C
+The QP/C active object framework is comprised of the following components:
+
+@image html qp_components.jpg "Components of the QP Framework"
+
+<div class="separate"></div>
+@subsection comp_qep QEP Hierarchical Event Processor
+QEP is a universal, UML-compliant event processor that enables developers to code UML state machines in highly readable ANSI-C, in which every state machine element is mapped to code precisely, unambiguously, and exactly once (traceability). QEP fully supports hierarchical state nesting, which is the fundamental mechanism for reusing behavior across many states instead of repeating the same actions and transitions over and over again. (See also @ref qep).
+
+<div class="separate"></div>
+@subsection comp_qf QF Active-Object Framework
+QF is a portable, event-driven, active-object (actor) framework for execution of **active objects** (concurrent state machines) specifically designed for real-time embedded (RTE) systems. (See also @ref qf).
+
+<div class="separate"></div>
+@subsection comp_qk QK Preemptive Kernel
+QK is a tiny **preemptive**, priority-based, non-blocking, real-time kernel designed specifically for executing active objects. QK meets all the requirement of the <a class="extern" target="_blank" href="http://en.wikipedia.org/wiki/Rate-monotonic_scheduling"><strong>Rate Monotonic Scheduling</strong></a> (a.k.a. Rate Monotonic Analysis &mdash; RMA) and can be used in hard real-time systems. (See also @ref qk). 
+
+<div class="separate"></div>
+@subsection comp_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. (See also @ref qv). 
+
+<div class="separate"></div>
+@subsection comp_qs QS Software Tracing System
+QS is software tracing system that enables developers to monitor live event-driven QP applications with minimal target system resources and without stopping or significantly slowing down the code. QS is an ideal tool for testing, troubleshooting, and optimizing QP applications. QS can even be used to support acceptance testing in product manufacturing. (See also @ref qs).
+
+
+------------------------------------------------------------------------------
+@section classes Classes in QP/C
+The figure below shows the main classes comprising the QP/C framework and their relation to the application-level code, such as the @ref game example application.
+
+@image html qp_classes.png "Main Classes in the QP Framework"
+
+<ul class="tag">
+  <li><span class="tag">0</span> The ::QEvt class represents events without parameters and serves as the base class for derivation of time events and any events with parameters. For example, application-level events `ObjectPosEvt` and `ObjectImageEvt` inherit ::QEvt and add to it some parameters (see <span class="tag">8</span>). 
+  </li>
+  
+  <li><span class="tag">1</span> The abstract ::QMsm class represents the most fundamental State Machine in QP/C. This class implements the fastest and the most efficient strategy for coding hierarchical state machines, but this strategy is not human-maintainable and requires the use of the <a class="extern" target="_blank" href="http://www.state-machine.com/qm">QM modeling tool</a>. The class is abstract, meaning that it is not designed to be instantiated directly, but rather only for inheritance. The @ref game application provides an example of application-level classes deriving directly from ::QMsm (see <span class="tag">7</span>).
+  </li>
+
+  <li><span class="tag">2</span> The abstract ::QHsm class derives from ::QMsm and implements the state machine coding strategy suitable for manual coding and maintaining the code. The ::QHsm strategy is also supported by the <a class="extern" target="_blank" href="http://www.state-machine.com/qm">QM modeling tool</a>, but is not as fast or efficient as the ::QMsm strategy.
+  </li>
+  
+  <li><span class="tag">3</span> The abstract ::QMActive class represents an active object that uses the ::QMsm style state machine implementation strategy. This strategy requires the use of the QM modeling tool to generate state machine code automatically, but the code is faster than in the ::QHsm style implementation strategy and needs less run-time support (smaller event-processor).
+  </li>
+
+  <li><span class="tag">4</span> The abstract ::QActive class represents an active object that uses the ::QHsm style implementation strategy for state machines. This strategy is tailored to manual coding, but it is also supported by the QM modeling tool. The resulting code is slower than in the ::QMsm-style implementation strategy.
+  </li>
+
+  <li><span class="tag">5</span> The ::QTimeEvt class represents time events in QP. **Time events** are special QP events equipped with the notion of time passage. The basic usage model of the time events is as follows. An active object allocates one or more ::QTimeEvt objects (provides the storage for them). When the active object needs to arrange for a timeout, it arms one of its time events to fire either just once (one-shot) or periodically. Each time event times out independently from the others, so a QP application can make multiple parallel timeout requests (from the same or different active objects). When QP detects that the appropriate moment has arrived, it inserts the time event directly into the recipient's event queue. The recipient then processes the time event just like any other event.
+  </li>
+
+  <li><span class="tag">6</span> Active Objects in the application derive either from the ::QMActive or ::QActive base class. 
+  </li>
+
+  <li><span class="tag">7</span> Applications can also use classes derived directly from the ::QMsm or ::QHsm base classes to represent "raw" state machines that are not active objects, because they don't have event queue and execution thread. Such "raw" state machines are typically used as "Orthogonal Components".
+  </li>
+
+  <li><span class="tag">8</span> Application-level events with parameters derive from the ::QEvt class.
+  </li>
+  
+</ul>
+
+@next{exa}
+*/
+

+ 1 - 1
doxygen/exa.dox

@@ -188,7 +188,7 @@ QP examples @ref ports "QP ports" are provided in the following three **build co
 - **Spy** &mdash; like the debug variant, this variant is built with full debugging information and minimal optimization. Additionally, it is build with the @ref comp_qs "QS trace instrumentation" enabled. The on-board serial port and the Q-Spy host application are used for sending and viewing trace data. Like the Debug configuration, the QP framework busy-idles until there are new events to process.
 
 
--@remark
+@remark
 <strong>Why do you need multiple build configurations?</strong>@n
 The different phases of embedded software lifecycle pose different challenges. During the development and maintenance phase, for example, the emphasis is on the ease of debugging and verifying the correctness of the code, which require lower levels of optimization and special scaffolding code. In contrast, for releasing the code in the final product, the emphasis is on small memory footprint and CPU time efficiency, which require high-level of optimization and removal of any scaffolding code. To address these conflicting needs, the same source code is compiled into multiple **build configurations** that differ in the use of compiler options and activation of the scaffolding code.
 

+ 24 - 5
doxygen/history.dox

@@ -2,16 +2,35 @@
 @page history Revision History
 
 
+@section qpc_5_4_1 Version 5.4.1, 2015-05-14
+
+This release changes the active object class hierarchy so that ::QMActive is now more fundamental and is the base class for ::QActive. (Previously ::QMActive was a subclass of ::QActive). The newly added documentation section about @ref classes "QP/C Design" shows the current class hierarchy.
+
+@note
+Because the types ::QMActive and ::QActive are equivalent in QP/C, this change has minimal impact on the applications, but it is now more correct to use ::QMActive as the base class for all "opaque" active object pointers.
+
+Also, this release brings several cosmetic improvements:
+
+1. All QM models included in examples have been modified to use the ::QMActive "opaque" pointers.
+
+2. The ROM-able QP version string QP_versionStr[] has been added and used consistently in the macros QEP_getVersion(), QF_getVersion(), QK_getVersion(), QV_getVersion(), and QS_getVersion() macros.   
+
+3. All Makefiles for the GNU toolset have been cleaned up, whereas any `\` (back-slash) characters in the paths have been repalced with `/` (forward-slash) characters.
+
+4. Several README files have been updated.
+
+
+------------------------------------------------------------------------------
 @section qpc_5_4_0 Version 5.4.0, 2015-04-26
 
-This release changes the basic philosophy of distributing the QP frameworks by **combining** the "QP/C Baseline Code" with all currently available "QP/C Development Kits" (QDK/C). This is done to eliminate any potential mistakes in downloading and intallating separate pieces of code.
+This release changes the basic philosophy of distributing the QP frameworks by **combining** the "QP/C Baseline Code" with all currently available "QP/C Development Kits" (QDK/C). This is done to eliminate any potential mistakes in downloading and installing separate pieces of code.
 
 Additionally, this release changes the basic philosophy of building your embedded applications with the QP/C framework. Starting with this release, all @ref exa "examples" for embedded boards include the QP/C framework as **source code** within the projects, instead of statically linking with a QP/C library. (**NOTE:** It is still possible to use QP/C as a library, but you need to build such libraries yourself, as they are no longer provided in the QP/C distribution.)
 
-The move to building QP/C from sources ensures the consistent toolset version and compiler options applied to the application code as well as the QP/C framework code. (**NOTE:** The QP/C examples for "big operating systems", like @ref exa_win32 "Windows" or @ref exa_posix "Linux", still use QP/C as a pre-compiled library that is staically linked with the application code.)
+The move to building QP/C from sources ensures the consistent toolset version and compiler options applied to the application code as well as the QP/C framework code. (**NOTE:** The QP/C examples for "big operating systems", like @ref exa_win32 "Windows" or @ref exa_posix "Linux", still use QP/C as a pre-compiled library that is statically linked with the application code.)
 
 @note
-Even though the QP/C source has been re-packaged in this release, there are no API changes to the code, so it remains **backwards compatible** with the existing applications. (Except the build process, which builds QP/C from sources rahter than linking to the QP/C library.) 
+Even though the QP/C source has been re-packaged in this release, there are no API changes to the code, so it remains **backwards compatible** with the existing applications. (Except the build process, which builds QP/C from sources rather than linking to the QP/C library.) 
 
 The two changes in basic approach to distributing and building the framework have also the following ripple effects:
 
@@ -34,9 +53,9 @@ Changes in detail:
 
 2. Removed class QFsm (which is now deprecated). Legacy state machines coded in the "QFsm-style" will continue to work, but will use the ::QHsm implementation internally. There is no longer any efficiency advantage in using the "QFsm-style" state machines.
 
-3. Applied a slight performance improvement to the ARM Cortex-M port to the QK preemptive kernel. The QK port now checks for ISR context by looking at the IPSR register, instead of incrementing and decremening the `QK_intNest_` up-down counter.
+3. Applied a slight performance improvement to the ARM Cortex-M port to the QK preemptive kernel. The QK port now checks for ISR context by looking at the IPSR register, instead of incrementing and decrementing the `QK_intNest_` up-down counter.
 
-4. Updated @ref exa_arm-cm "ARM Cortex-M examples" and provided new examples for NXP mbed-LPC1768, and STM32 NUCLEO-L053R8, and NUCLEO-L152RE boards. All examples are provided for the ARM-KEIL, GNU-ARM, and IAR-ARM toolsets.
+4. Updated @ref exa_arm-cm "ARM Cortex-M examples" and provided new examples for NXP mbed-LPC1768, and STM32 NUCLEO-L053R8, and NUCLEO-L152RE boards. All examples now use the latest CMSIS (V4.3.0). All ARM Cortex-M exampels are provided for the ARM-KEIL, GNU-ARM, and IAR-ARM toolsets.
 
 5. Added the native @ref arm7-9 "port" and @ref exa_arm7-9 "examples" to the @ref arm7-9 "classic ARM7/9" with AT91SAM7S-EK board and the IAR-ARM toolset.
 

BIN
doxygen/images/qp_classes.png


+ 13 - 13
doxygen/metrics.dox

@@ -9,7 +9,7 @@
   License Type: Windows Single User License
   Licensed To : Quantum Leaps, LLC
   License No. : WS2975                          License Date: Dec 15, 2013
-  Build Date  : Sep  2 2009                         Run Date: May 01, 2015
+  Build Date  : Sep  2 2009                         Run Date: May 14, 2015
   (C)1996-2009 M Squared Technologies LLC
   ________________________________________________________________________
 
@@ -31,7 +31,7 @@
 
                           ~~ Total File Summary ~~
 
-  LOC 149      eLOC 145      lLOC 51       Comment 419      Lines      614
+  LOC 150      eLOC 146      lLOC 52       Comment 414      Lines      611
   ________________________________________________________________________
   End of File: ..\include\qep.h
 
@@ -51,7 +51,7 @@
 
                           ~~ Total File Summary ~~
 
-  LOC 188      eLOC 188      lLOC 73       Comment 529      Lines      821
+  LOC 188      eLOC 188      lLOC 73       Comment 523      Lines      815
   ________________________________________________________________________
   End of File: ..\include\qf.h
 
@@ -61,7 +61,7 @@
 
                           ~~ Total File Summary ~~
 
-  LOC 68       eLOC 68       lLOC 17       Comment 110      Lines      193
+  LOC 68       eLOC 68       lLOC 17       Comment 105      Lines      188
   ________________________________________________________________________
   End of File: ..\include\qk.h
 
@@ -118,7 +118,7 @@
             all code present in this file must be compilable.
                           ~~ Total File Summary ~~
 
-  LOC 413      eLOC 409      lLOC 90       Comment 626      Lines     1078
+  LOC 413      eLOC 409      lLOC 90       Comment 620      Lines     1072
   ________________________________________________________________________
   End of File: ..\include\qs.h
 
@@ -138,7 +138,7 @@
 
                           ~~ Total File Summary ~~
 
-  LOC 34       eLOC 34       lLOC 3        Comment 78       Lines      115
+  LOC 35       eLOC 35       lLOC 3        Comment 80       Lines      119
   ________________________________________________________________________
   End of File: ..\include\qv.h
 
@@ -321,7 +321,7 @@
 
                           ~~ Total File Summary ~~
 
-  LOC 288      eLOC 240      lLOC 132      Comment 263      Lines      525
+  LOC 289      eLOC 241      lLOC 133      Comment 264      Lines      528
   ------------------------------------------------------------------------
 
                         ~~ File Functional Summary ~~
@@ -350,7 +350,7 @@
   ________________________________________________________________________
 
   Function: QF_add_
-  Parameters: (QActive * const a)
+  Parameters: (QMActive * const a)
     Cyclomatic Complexity Vg Detail
       Function Base           : 1
       Logical and ( && )      : 2     
@@ -358,7 +358,7 @@
   LOC 15       eLOC 14       lLOC 8        Comment 23       Lines       25
 
   Function: QF_remove_
-  Parameters: (QActive const * const a)
+  Parameters: (QMActive const * const a)
     Cyclomatic Complexity Vg Detail
       Function Base           : 1
       Logical and ( && )      : 2     
@@ -1426,9 +1426,9 @@
 
                          ~~ Total Project Summary ~~
 
-  LOC 3684     eLOC 3359     lLOC 1515     Comment 6016     Lines     9824
+  LOC 3687     eLOC 3362     lLOC 1517     Comment 5997     Lines     9811
   Average per File, metric/33 files
-  LOC 111      eLOC 101      lLOC 45       Comment 182      Lines      297
+  LOC 111      eLOC 101      lLOC 45       Comment 181      Lines      297
 
   ------------------------------------------------------------------------
 
@@ -1501,12 +1501,12 @@
   LOC 11       eLOC 8        lLOC 6        Comment 16       Lines       12
 
   Function: QF_add_
-  Parameters: (QActive * const a)
+  Parameters: (QMActive * const a)
   Complexity   Param 1       Return 1      Cyclo Vg 3       Total        5
   LOC 15       eLOC 14       lLOC 8        Comment 23       Lines       25
 
   Function: QF_remove_
-  Parameters: (QActive const * const a)
+  Parameters: (QMActive const * const a)
   Complexity   Param 1       Return 1      Cyclo Vg 3       Total        5
   LOC 15       eLOC 14       lLOC 8        Comment 22       Lines       24
 

+ 1 - 1
examples/arm-cm/blinky_ek-tm4c123gxl/qk/arm/blinky-qk.uvprojx

@@ -1308,7 +1308,7 @@
             <NotGenerated>0</NotGenerated>
             <InvalidFlash>1</InvalidFlash>
           </TargetStatus>
-          <OutputDirectory>.\dbg\</OutputDirectory>
+          <OutputDirectory>.\spy\</OutputDirectory>
           <OutputName>blinky-qk</OutputName>
           <CreateExecutable>1</CreateExecutable>
           <CreateLib>0</CreateLib>

+ 3 - 2
examples/arm-cm/blinky_ek-tm4c123gxl/qk/gnu/Makefile

@@ -72,11 +72,12 @@ VPATH = \
 	$(QPC)/source \
 	$(QP_PORT_DIR) \
 	$(QPC)/3rd_party/ek-tm4c123gxl \
-	$(QPC)/3rd_party/ek-tm4c123gxl\gnu
+	$(QPC)/3rd_party/ek-tm4c123gxl/gnu \
+	$(QPC)/3rd_party/mini_cpp
 
 # list of all include directories needed by this project
 INCLUDES  = \
-	-I..\.. \
+	-I../.. \
 	-I$(QPC)/include \
 	-I$(QPC)/source \
 	-I$(QP_PORT_DIR) \

+ 12 - 0
examples/arm-cm/blinky_ek-tm4c123gxl/qk/gnu/README.txt

@@ -24,6 +24,18 @@ make clean
 make CONF=rel clean
 make CONF=spy clean
 
+***
+NOTE:
+The installation folder of the GNU-ARM toolset on YOUR machine needs
+to be adjusted in the provided Makefile, by editing the symbol: GNU_ARM.
+As described in the comment for this symbol, the GNU-ARM toolset is taken
+from: http://gnutoolchains.com/arm-eabi
+
+It is highly recommened to use the same GNU-ARM distribution, especially
+for ARM Cortex-M4F projects, due to the support for the hardware FPU
+(float-abi=hard).
+***
+
 
 Adjusting Stack and Heap Sizes
 ==============================

+ 5 - 3
examples/arm-cm/blinky_ek-tm4c123gxl/qv/gnu/Makefile

@@ -7,7 +7,7 @@
 #                    ---------------------------
 #                    innovating embedded systems
 #
-# Copyright (C) 2002-2013 Quantum Leaps, LLC. All rights reserved.
+# 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
@@ -72,11 +72,12 @@ VPATH = \
 	$(QPC)/source \
 	$(QP_PORT_DIR) \
 	$(QPC)/3rd_party/ek-tm4c123gxl \
-	$(QPC)/3rd_party/ek-tm4c123gxl\gnu
+	$(QPC)/3rd_party/ek-tm4c123gxl/gnu \
+	$(QPC)/3rd_party/mini_cpp
 
 # list of all include directories needed by this project
 INCLUDES  = \
-	-I..\.. \
+	-I../.. \
 	-I$(QPC)/include \
 	-I$(QPC)/source \
 	-I$(QP_PORT_DIR) \
@@ -291,6 +292,7 @@ clean:
 	$(BIN_DIR)/*.map
 	
 show:
+	@echo PROJECT = $(PROJECT)
 	@echo CONF = $(CONF)
 	@echo ASM_SRCS = $(ASM_SRCS)
 	@echo C_SRCS = $(C_SRCS)

+ 12 - 0
examples/arm-cm/blinky_ek-tm4c123gxl/qv/gnu/README.txt

@@ -24,6 +24,18 @@ make clean
 make CONF=rel clean
 make CONF=spy clean
 
+***
+NOTE:
+The installation folder of the GNU-ARM toolset on YOUR machine needs
+to be adjusted in the provided Makefile, by editing the symbol: GNU_ARM.
+As described in the comment for this symbol, the GNU-ARM toolset is taken
+from: http://gnutoolchains.com/arm-eabi
+
+It is highly recommened to use the same GNU-ARM distribution, especially
+for ARM Cortex-M4F projects, due to the support for the hardware FPU
+(float-abi=hard).
+***
+
 
 Adjusting Stack and Heap Sizes
 ==============================

+ 2 - 2
examples/arm-cm/dpp_ek-tm4c123gxl/dpp.h

@@ -51,9 +51,9 @@ void Philo_ctor(void);
 void Table_ctor(void);
 
 
-extern QActive * const AO_Philo[N_PHILO];
+extern QMActive * const AO_Philo[N_PHILO];
 
-extern QActive * const AO_Table;
+extern QMActive * const AO_Table;
 
 
 #endif /* dpp_h */

+ 4 - 4
examples/arm-cm/dpp_ek-tm4c123gxl/dpp.qm

@@ -315,8 +315,8 @@ me-&gt;fork[n] = FREE;</action>
     <state_diagram size="49,69"/>
    </statechart>
   </class>
-  <attribute name="AO_Philo[N_PHILO]" type="QActive * const" visibility="0x00" properties="0x00"/>
-  <attribute name="AO_Table" type="QActive * const" visibility="0x00" properties="0x00"/>
+  <attribute name="AO_Philo[N_PHILO]" type="QMActive * const" visibility="0x00" properties="0x00"/>
+  <attribute name="AO_Table" type="QMActive * const" visibility="0x00" properties="0x00"/>
   <operation name="Philo_ctor" type="void" visibility="0x00" properties="0x00">
    <code>uint8_t n;
 Philo *me;
@@ -391,7 +391,7 @@ static Philo l_philo[N_PHILO];   /* storage for all Philos */
 #define PHILO_ID(me_)    ((uint8_t)((me_) - l_philo))
 
 /* Global objects ----------------------------------------------------------*/
-QActive * const AO_Philo[N_PHILO] = { /* &quot;opaque&quot; pointers to Philo AO */
+QMActive * const AO_Philo[N_PHILO] = { /* &quot;opaque&quot; pointers to Philo AO */
     &amp;l_philo[0].super,
     &amp;l_philo[1].super,
     &amp;l_philo[2].super,
@@ -422,7 +422,7 @@ $declare(AOs::Table)
 static Table l_table; /* the single instance of the Table active object */
 
 /* Global-scope objects ----------------------------------------------------*/
-QActive * const AO_Table = &amp;l_table.super; /* &quot;opaque&quot; AO pointer */
+QMActive * const AO_Table = &amp;l_table.super; /* &quot;opaque&quot; AO pointer */
 
 /*..........................................................................*/
 $define(AOs::Table_ctor)

+ 18 - 17
examples/arm-cm/dpp_ek-tm4c123gxl/lint/lint_out.txt

@@ -33,7 +33,7 @@
 --- Global Wrap-up
 
  Note 960: Violates MISRA 2004 Required Rule 8.9, undefined symbol: 'QS_mem' 
-"D:\qp\qpc\include\qf.h" 164 1 Warning 526: Symbol 'QMActive_ctor(QMActive *, QStateHandler)' (line 164, file D:\qp\qpc\include\qf.h, module D:\qp\qpc\examples\arm-cm\dpp_ek-tm4c123gxl\philo.c) not defined
+"D:\qp\qpc\include\qf.h" 162 1 Warning 526: Symbol 'QMActive_ctor(QMActive *, QStateHandler)' (line 162, file D:\qp\qpc\include\qf.h, module D:\qp\qpc\examples\arm-cm\dpp_ek-tm4c123gxl\philo.c) not defined
  Note 960: Violates MISRA 2004 Required Rule 8.9, undefined symbol: 'QMActive_ctor' 
 "D:\qp\qpc\include\qs.h" 262 1 Warning 526: Symbol 'QS_obj_dict(const void *, const char_t *)' (line 262, file D:\qp\qpc\include\qs.h, module D:\qp\qpc\examples\arm-cm\dpp_ek-tm4c123gxl\philo.c) not defined
  Note 960: Violates MISRA 2004 Required Rule 8.9, undefined symbol: 'QS_obj_dict' 
@@ -41,13 +41,13 @@
  Note 960: Violates MISRA 2004 Required Rule 8.9, undefined symbol: 'QS_onCleanup' 
  Note 960: Violates MISRA 2004 Required Rule 8.9, undefined symbol: 'QS_onFlush' 
  Note 960: Violates MISRA 2004 Required Rule 8.9, undefined symbol: 'QS_onGetTime' 
-"D:\qp\qpc\include\qs.h" 1074 1 Warning 526: Symbol 'QS_priv_' (line 1074, file D:\qp\qpc\include\qs.h, module D:\qp\qpc\examples\arm-cm\dpp_ek-tm4c123gxl\philo.c) not defined
+"D:\qp\qpc\include\qs.h" 1068 1 Warning 526: Symbol 'QS_priv_' (line 1068, file D:\qp\qpc\include\qs.h, module D:\qp\qpc\examples\arm-cm\dpp_ek-tm4c123gxl\philo.c) not defined
  Note 960: Violates MISRA 2004 Required Rule 8.9, undefined symbol: 'QS_priv_' 
 "D:\qp\qpc\examples\arm-cm\dpp_ek-tm4c123gxl\table.c" 79 1 Info 759: header declaration for symbol 'Table_ctor(void)' defined at (line 79, file D:\qp\qpc\examples\arm-cm\dpp_ek-tm4c123gxl\table.c) could be moved from header to module
 "D:\qp\qpc\examples\arm-cm\dpp_ek-tm4c123gxl\table.c" 79 1 Info 765: external 'Table_ctor(void)' (line 79, file D:\qp\qpc\examples\arm-cm\dpp_ek-tm4c123gxl\table.c) could be made static [MISRA 2004 Rule 8.10, required]
  Note 960: Violates MISRA 2004 Required Rule 8.9, undefined symbol: 'QK_init' 
  Note 960: Violates MISRA 2004 Required Rule 8.9, undefined symbol: 'QF_noTimeEvtsActiveX' 
-"D:\qp\qpc\include\qf.h" 649 1 Warning 526: Symbol 'QF_newX_(uint_fast16_t, uint_fast16_t, enum_t)' (line 649, file D:\qp\qpc\include\qf.h, module D:\qp\qpc\examples\arm-cm\dpp_ek-tm4c123gxl\philo.c) not defined
+"D:\qp\qpc\include\qf.h" 654 1 Warning 526: Symbol 'QF_newX_(uint_fast16_t, uint_fast16_t, enum_t)' (line 654, file D:\qp\qpc\include\qf.h, module D:\qp\qpc\examples\arm-cm\dpp_ek-tm4c123gxl\philo.c) not defined
  Note 960: Violates MISRA 2004 Required Rule 8.9, undefined symbol: 'QF_newX_' 
 "D:\qp\qpc\examples\arm-cm\dpp_ek-tm4c123gxl\bsp.h" 40 1 Warning 526: Symbol 'BSP_displayPaused(uint8_t)' (line 40, file D:\qp\qpc\examples\arm-cm\dpp_ek-tm4c123gxl\bsp.h, module D:\qp\qpc\examples\arm-cm\dpp_ek-tm4c123gxl\philo.c) not defined
  Note 960: Violates MISRA 2004 Required Rule 8.9, undefined symbol: 'BSP_displayPaused' 
@@ -64,9 +64,10 @@
  Note 960: Violates MISRA 2004 Required Rule 8.9, undefined symbol: 'QS_beginRec' 
  Note 960: Violates MISRA 2004 Required Rule 8.9, undefined symbol: 'QF_poolInit' 
  Note 960: Violates MISRA 2004 Required Rule 8.9, undefined symbol: 'QF_psInit' 
-"D:\qp\qpc\include\qf.h" 558 1 Warning 526: Symbol 'QF_publish_(const QEvt *, const void *)' (line 558, file D:\qp\qpc\include\qf.h, module D:\qp\qpc\examples\arm-cm\dpp_ek-tm4c123gxl\philo.c) not defined
+"D:\qp\qpc\include\qf.h" 563 1 Warning 526: Symbol 'QF_publish_(const QEvt *, const void *)' (line 563, file D:\qp\qpc\include\qf.h, module D:\qp\qpc\examples\arm-cm\dpp_ek-tm4c123gxl\philo.c) not defined
  Note 960: Violates MISRA 2004 Required Rule 8.9, undefined symbol: 'QF_publish_' 
  Note 960: Violates MISRA 2004 Required Rule 8.9, undefined symbol: 'QF_pwr2Lkup' 
+ Note 960: Violates MISRA 2004 Required Rule 8.9, undefined symbol: 'QP_versionStr' 
  Note 960: Violates MISRA 2004 Required Rule 8.9, undefined symbol: 'QS_str' 
 "D:\qp\qpc\include\qs.h" 258 1 Warning 526: Symbol 'QS_sig_dict(enum_t, const void *, const char_t *)' (line 258, file D:\qp\qpc\include\qs.h, module D:\qp\qpc\examples\arm-cm\dpp_ek-tm4c123gxl\philo.c) not defined
  Note 960: Violates MISRA 2004 Required Rule 8.9, undefined symbol: 'QS_sig_dict' 
@@ -97,7 +98,7 @@
  Note 960: Violates MISRA 2004 Required Rule 8.9, undefined symbol: 'QActive_recall' 
  Note 960: Violates MISRA 2004 Required Rule 8.9, undefined symbol: 'QActive_start_' 
  Note 960: Violates MISRA 2004 Required Rule 8.9, undefined symbol: 'QActive_stop' 
-"D:\qp\qpc\include\qf.h" 359 1 Warning 526: Symbol 'QActive_subscribe(const QActive *, enum_t)' (line 359, file D:\qp\qpc\include\qf.h, module D:\qp\qpc\examples\arm-cm\dpp_ek-tm4c123gxl\philo.c) not defined
+"D:\qp\qpc\include\qf.h" 364 1 Warning 526: Symbol 'QActive_subscribe(const QActive *, enum_t)' (line 364, file D:\qp\qpc\include\qf.h, module D:\qp\qpc\examples\arm-cm\dpp_ek-tm4c123gxl\philo.c) not defined
  Note 960: Violates MISRA 2004 Required Rule 8.9, undefined symbol: 'QActive_subscribe' 
  Note 960: Violates MISRA 2004 Required Rule 8.9, undefined symbol: 'QActive_unsubscribe' 
  Note 960: Violates MISRA 2004 Required Rule 8.9, undefined symbol: 'QActive_unsubscribeAll' 
@@ -119,9 +120,9 @@
  Note 960: Violates MISRA 2004 Required Rule 8.9, undefined symbol: 'QK_onIdle' 
  Note 960: Violates MISRA 2004 Required Rule 8.9, undefined symbol: 'QS_getByte' 
  Note 960: Violates MISRA 2004 Required Rule 8.9, undefined symbol: 'QS_getBlock' 
-"D:\qp\qpc\include\qf.h" 471 1 Warning 526: Symbol 'QTimeEvt_armX(struct QTimeEvt *, QTimeEvtCtr, QTimeEvtCtr)' (line 471, file D:\qp\qpc\include\qf.h, module D:\qp\qpc\examples\arm-cm\dpp_ek-tm4c123gxl\philo.c) not defined
+"D:\qp\qpc\include\qf.h" 476 1 Warning 526: Symbol 'QTimeEvt_armX(struct QTimeEvt *, QTimeEvtCtr, QTimeEvtCtr)' (line 476, file D:\qp\qpc\include\qf.h, module D:\qp\qpc\examples\arm-cm\dpp_ek-tm4c123gxl\philo.c) not defined
  Note 960: Violates MISRA 2004 Required Rule 8.9, undefined symbol: 'QTimeEvt_armX' 
-"D:\qp\qpc\include\qf.h" 467 1 Warning 526: Symbol 'QTimeEvt_ctorX(struct QTimeEvt *, QActive *, enum_t, uint_fast8_t)' (line 467, file D:\qp\qpc\include\qf.h, module D:\qp\qpc\examples\arm-cm\dpp_ek-tm4c123gxl\philo.c) not defined
+"D:\qp\qpc\include\qf.h" 472 1 Warning 526: Symbol 'QTimeEvt_ctorX(struct QTimeEvt *, QActive *, enum_t, uint_fast8_t)' (line 472, file D:\qp\qpc\include\qf.h, module D:\qp\qpc\examples\arm-cm\dpp_ek-tm4c123gxl\philo.c) not defined
  Note 960: Violates MISRA 2004 Required Rule 8.9, undefined symbol: 'QTimeEvt_ctorX' 
  Note 960: Violates MISRA 2004 Required Rule 8.9, undefined symbol: 'QTimeEvt_rearm' 
  Note 960: Violates MISRA 2004 Required Rule 8.9, undefined symbol: 'QTimeEvt_disarm' 
@@ -155,15 +156,15 @@
  Note 960: Violates MISRA 2004 Required Rule 8.9, undefined symbol: 'QF_init' 
  Note 960: Violates MISRA 2004 Required Rule 8.9, undefined symbol: 'QF_invPwr2Lkup' 
 "D:\qp\qpc\include\qs.h" 750 1 Info 758: global enum '(untagged)' (line 750, file D:\qp\qpc\include\qs.h) not referenced
-"D:\qp\qpc\include\qep.h" 466 1 Info 769: global enumeration constant 'Q_RET_SUPER_SUB' (line 466, file D:\qp\qpc\include\qep.h) not referenced
-"D:\qp\qpc\include\qep.h" 471 1 Info 769: global enumeration constant 'Q_RET_IGNORED' (line 471, file D:\qp\qpc\include\qep.h) not referenced
-"D:\qp\qpc\include\qep.h" 478 1 Info 769: global enumeration constant 'Q_RET_NULL' (line 478, file D:\qp\qpc\include\qep.h) not referenced
-"D:\qp\qpc\include\qep.h" 483 1 Info 769: global enumeration constant 'Q_RET_TRAN_HIST' (line 483, file D:\qp\qpc\include\qep.h) not referenced
-"D:\qp\qpc\include\qep.h" 484 1 Info 769: global enumeration constant 'Q_RET_TRAN_EP' (line 484, file D:\qp\qpc\include\qep.h) not referenced
-"D:\qp\qpc\include\qep.h" 485 1 Info 769: global enumeration constant 'Q_RET_TRAN_XP' (line 485, file D:\qp\qpc\include\qep.h) not referenced
-"D:\qp\qpc\include\qep.h" 607 1 Info 769: global enumeration constant 'Q_ENTRY_SIG' (line 607, file D:\qp\qpc\include\qep.h) not referenced
-"D:\qp\qpc\include\qep.h" 608 1 Info 769: global enumeration constant 'Q_EXIT_SIG' (line 608, file D:\qp\qpc\include\qep.h) not referenced
-"D:\qp\qpc\include\qep.h" 609 1 Info 769: global enumeration constant 'Q_INIT_SIG' (line 609, file D:\qp\qpc\include\qep.h) not referenced
+"D:\qp\qpc\include\qep.h" 463 1 Info 769: global enumeration constant 'Q_RET_SUPER_SUB' (line 463, file D:\qp\qpc\include\qep.h) not referenced
+"D:\qp\qpc\include\qep.h" 468 1 Info 769: global enumeration constant 'Q_RET_IGNORED' (line 468, file D:\qp\qpc\include\qep.h) not referenced
+"D:\qp\qpc\include\qep.h" 475 1 Info 769: global enumeration constant 'Q_RET_NULL' (line 475, file D:\qp\qpc\include\qep.h) not referenced
+"D:\qp\qpc\include\qep.h" 480 1 Info 769: global enumeration constant 'Q_RET_TRAN_HIST' (line 480, file D:\qp\qpc\include\qep.h) not referenced
+"D:\qp\qpc\include\qep.h" 481 1 Info 769: global enumeration constant 'Q_RET_TRAN_EP' (line 481, file D:\qp\qpc\include\qep.h) not referenced
+"D:\qp\qpc\include\qep.h" 482 1 Info 769: global enumeration constant 'Q_RET_TRAN_XP' (line 482, file D:\qp\qpc\include\qep.h) not referenced
+"D:\qp\qpc\include\qep.h" 604 1 Info 769: global enumeration constant 'Q_ENTRY_SIG' (line 604, file D:\qp\qpc\include\qep.h) not referenced
+"D:\qp\qpc\include\qep.h" 605 1 Info 769: global enumeration constant 'Q_EXIT_SIG' (line 605, file D:\qp\qpc\include\qep.h) not referenced
+"D:\qp\qpc\include\qep.h" 606 1 Info 769: global enumeration constant 'Q_INIT_SIG' (line 606, file D:\qp\qpc\include\qep.h) not referenced
 "D:\qp\qpc\include\qs.h" 57 1 Info 769: global enumeration constant 'QSpyRecords::QS_QP_RESET' (line 57, file D:\qp\qpc\include\qs.h) not referenced
 "D:\qp\qpc\include\qs.h" 60 1 Info 769: global enumeration constant 'QSpyRecords::QS_QEP_STATE_ENTRY' (line 60, file D:\qp\qpc\include\qs.h) not referenced
 "D:\qp\qpc\include\qs.h" 61 1 Info 769: global enumeration constant 'QSpyRecords::QS_QEP_STATE_EXIT' (line 61, file D:\qp\qpc\include\qs.h) not referenced
@@ -263,5 +264,5 @@ Count   Type    Number  Text
 3       Info    765     external '___' (___) could be made static
 95      Info    769     global enumeration constant '___' (___) not referenced
 2       Note    950     Non-ANSI reserved word or construct: '___'
-107     Note    960     Violates MISRA 2004 Required Rule ___, ___
+108     Note    960     Violates MISRA 2004 Required Rule ___, ___
 2       Note    963     Qualifier const or volatile ___ a type; use ___ to reverse the test

+ 1 - 1
examples/arm-cm/dpp_ek-tm4c123gxl/philo.c

@@ -75,7 +75,7 @@ static Philo l_philo[N_PHILO];   /* storage for all Philos */
 #define PHILO_ID(me_)    ((uint8_t)((me_) - l_philo))
 
 /* Global objects ----------------------------------------------------------*/
-QActive * const AO_Philo[N_PHILO] = { /* "opaque" pointers to Philo AO */
+QMActive * const AO_Philo[N_PHILO] = { /* "opaque" pointers to Philo AO */
     &l_philo[0].super,
     &l_philo[1].super,
     &l_philo[2].super,

+ 2 - 2
examples/arm-cm/dpp_ek-tm4c123gxl/qk/gnu/Makefile

@@ -72,11 +72,11 @@ VPATH = \
 	$(QPC)/source \
 	$(QP_PORT_DIR) \
 	$(QPC)/3rd_party/ek-tm4c123gxl \
-	$(QPC)/3rd_party/ek-tm4c123gxl\gnu
+	$(QPC)/3rd_party/ek-tm4c123gxl/gnu
 
 # list of all include directories needed by this project
 INCLUDES  = \
-	-I..\.. \
+	-I../.. \
 	-I$(QPC)/include \
 	-I$(QPC)/source \
 	-I$(QP_PORT_DIR) \

+ 12 - 0
examples/arm-cm/dpp_ek-tm4c123gxl/qk/gnu/README.txt

@@ -24,6 +24,18 @@ make clean
 make CONF=rel clean
 make CONF=spy clean
 
+***
+NOTE:
+The installation folder of the GNU-ARM toolset on YOUR machine needs
+to be adjusted in the provided Makefile, by editing the symbol: GNU_ARM.
+As described in the comment for this symbol, the GNU-ARM toolset is taken
+from: http://gnutoolchains.com/arm-eabi
+
+It is highly recommened to use the same GNU-ARM distribution, especially
+for ARM Cortex-M4F projects, due to the support for the hardware FPU
+(float-abi=hard).
+***
+
 
 Adjusting Stack and Heap Sizes
 ==============================

+ 2 - 2
examples/arm-cm/dpp_ek-tm4c123gxl/qv/gnu/Makefile

@@ -72,11 +72,11 @@ VPATH = \
 	$(QPC)/source \
 	$(QP_PORT_DIR) \
 	$(QPC)/3rd_party/ek-tm4c123gxl \
-	$(QPC)/3rd_party/ek-tm4c123gxl\gnu
+	$(QPC)/3rd_party/ek-tm4c123gxl/gnu
 
 # list of all include directories needed by this project
 INCLUDES  = \
-	-I..\.. \
+	-I../.. \
 	-I$(QPC)/include \
 	-I$(QPC)/source \
 	-I$(QP_PORT_DIR) \

+ 12 - 0
examples/arm-cm/dpp_ek-tm4c123gxl/qv/gnu/README.txt

@@ -24,6 +24,18 @@ make clean
 make CONF=rel clean
 make CONF=spy clean
 
+***
+NOTE:
+The installation folder of the GNU-ARM toolset on YOUR machine needs
+to be adjusted in the provided Makefile, by editing the symbol: GNU_ARM.
+As described in the comment for this symbol, the GNU-ARM toolset is taken
+from: http://gnutoolchains.com/arm-eabi
+
+It is highly recommened to use the same GNU-ARM distribution, especially
+for ARM Cortex-M4F projects, due to the support for the hardware FPU
+(float-abi=hard).
+***
+
 
 Adjusting Stack and Heap Sizes
 ==============================

+ 1 - 1
examples/arm-cm/dpp_ek-tm4c123gxl/qv/gnu/flash.bat

@@ -24,7 +24,7 @@ set BUILD_DIR=dbg
 if [%1] NEQ [] set BUILD_DIR=%1
 @echo on
 
-%LMFLASH% -q ek-tm4c123gxl %BUILD_DIR%\dpp-qk.bin
+%LMFLASH% -q ek-tm4c123gxl %BUILD_DIR%\dpp-qv.bin
 
 @echo.
 @echo.

+ 1 - 1
examples/arm-cm/dpp_ek-tm4c123gxl/table.c

@@ -72,7 +72,7 @@ static QMState const Table_paused_s = {
 static Table l_table; /* the single instance of the Table active object */
 
 /* Global-scope objects ----------------------------------------------------*/
-QActive * const AO_Table = &l_table.super; /* "opaque" AO pointer */
+QMActive * const AO_Table = &l_table.super; /* "opaque" AO pointer */
 
 /*..........................................................................*/
 /*${AOs::Table_ctor} .......................................................*/

+ 2 - 2
examples/arm-cm/dpp_mbed-lpc1768/dpp.h

@@ -51,9 +51,9 @@ void Philo_ctor(void);
 void Table_ctor(void);
 
 
-extern QActive * const AO_Philo[N_PHILO];
+extern QMActive * const AO_Philo[N_PHILO];
 
-extern QActive * const AO_Table;
+extern QMActive * const AO_Table;
 
 
 #endif /* dpp_h */

+ 4 - 4
examples/arm-cm/dpp_mbed-lpc1768/dpp.qm

@@ -315,8 +315,8 @@ me-&gt;fork[n] = FREE;</action>
     <state_diagram size="49,69"/>
    </statechart>
   </class>
-  <attribute name="AO_Philo[N_PHILO]" type="QActive * const" visibility="0x00" properties="0x00"/>
-  <attribute name="AO_Table" type="QActive * const" visibility="0x00" properties="0x00"/>
+  <attribute name="AO_Philo[N_PHILO]" type="QMActive * const" visibility="0x00" properties="0x00"/>
+  <attribute name="AO_Table" type="QMActive * const" visibility="0x00" properties="0x00"/>
   <operation name="Philo_ctor" type="void" visibility="0x00" properties="0x00">
    <code>uint8_t n;
 Philo *me;
@@ -391,7 +391,7 @@ static Philo l_philo[N_PHILO];   /* storage for all Philos */
 #define PHILO_ID(me_)    ((uint8_t)((me_) - l_philo))
 
 /* Global objects ----------------------------------------------------------*/
-QActive * const AO_Philo[N_PHILO] = { /* &quot;opaque&quot; pointers to Philo AO */
+QMActive * const AO_Philo[N_PHILO] = { /* &quot;opaque&quot; pointers to Philo AO */
     &amp;l_philo[0].super,
     &amp;l_philo[1].super,
     &amp;l_philo[2].super,
@@ -422,7 +422,7 @@ $declare(AOs::Table)
 static Table l_table; /* the single instance of the Table active object */
 
 /* Global-scope objects ----------------------------------------------------*/
-QActive * const AO_Table = &amp;l_table.super; /* &quot;opaque&quot; AO pointer */
+QMActive * const AO_Table = &amp;l_table.super; /* &quot;opaque&quot; AO pointer */
 
 /*..........................................................................*/
 $define(AOs::Table_ctor)

+ 1 - 1
examples/arm-cm/dpp_mbed-lpc1768/philo.c

@@ -75,7 +75,7 @@ static Philo l_philo[N_PHILO];   /* storage for all Philos */
 #define PHILO_ID(me_)    ((uint8_t)((me_) - l_philo))
 
 /* Global objects ----------------------------------------------------------*/
-QActive * const AO_Philo[N_PHILO] = { /* "opaque" pointers to Philo AO */
+QMActive * const AO_Philo[N_PHILO] = { /* "opaque" pointers to Philo AO */
     &l_philo[0].super,
     &l_philo[1].super,
     &l_philo[2].super,

+ 1 - 1
examples/arm-cm/dpp_mbed-lpc1768/qk/gnu/Makefile

@@ -76,7 +76,7 @@ VPATH = \
 
 # list of all include directories needed by this project
 INCLUDES  = \
-	-I..\.. \
+	-I../.. \
 	-I$(QPC)/include \
 	-I$(QPC)/source \
 	-I$(QP_PORT_DIR) \

+ 1 - 1
examples/arm-cm/dpp_mbed-lpc1768/qv/gnu/Makefile

@@ -76,7 +76,7 @@ VPATH = \
 
 # list of all include directories needed by this project
 INCLUDES  = \
-	-I..\.. \
+	-I../.. \
 	-I$(QPC)/include \
 	-I$(QPC)/source \
 	-I$(QP_PORT_DIR) \

+ 1 - 1
examples/arm-cm/dpp_mbed-lpc1768/table.c

@@ -72,7 +72,7 @@ static QMState const Table_paused_s = {
 static Table l_table; /* the single instance of the Table active object */
 
 /* Global-scope objects ----------------------------------------------------*/
-QActive * const AO_Table = &l_table.super; /* "opaque" AO pointer */
+QMActive * const AO_Table = &l_table.super; /* "opaque" AO pointer */
 
 /*..........................................................................*/
 /*${AOs::Table_ctor} .......................................................*/

+ 2 - 2
examples/arm-cm/dpp_nucleo-l053r8/dpp.h

@@ -51,9 +51,9 @@ void Philo_ctor(void);
 void Table_ctor(void);
 
 
-extern QActive * const AO_Philo[N_PHILO];
+extern QMActive * const AO_Philo[N_PHILO];
 
-extern QActive * const AO_Table;
+extern QMActive * const AO_Table;
 
 
 #endif /* dpp_h */

+ 4 - 4
examples/arm-cm/dpp_nucleo-l053r8/dpp.qm

@@ -315,8 +315,8 @@ me-&gt;fork[n] = FREE;</action>
     <state_diagram size="49,69"/>
    </statechart>
   </class>
-  <attribute name="AO_Philo[N_PHILO]" type="QActive * const" visibility="0x00" properties="0x00"/>
-  <attribute name="AO_Table" type="QActive * const" visibility="0x00" properties="0x00"/>
+  <attribute name="AO_Philo[N_PHILO]" type="QMActive * const" visibility="0x00" properties="0x00"/>
+  <attribute name="AO_Table" type="QMActive * const" visibility="0x00" properties="0x00"/>
   <operation name="Philo_ctor" type="void" visibility="0x00" properties="0x00">
    <code>uint8_t n;
 Philo *me;
@@ -391,7 +391,7 @@ static Philo l_philo[N_PHILO];   /* storage for all Philos */
 #define PHILO_ID(me_)    ((uint8_t)((me_) - l_philo))
 
 /* Global objects ----------------------------------------------------------*/
-QActive * const AO_Philo[N_PHILO] = { /* &quot;opaque&quot; pointers to Philo AO */
+QMActive * const AO_Philo[N_PHILO] = { /* &quot;opaque&quot; pointers to Philo AO */
     &amp;l_philo[0].super,
     &amp;l_philo[1].super,
     &amp;l_philo[2].super,
@@ -422,7 +422,7 @@ $declare(AOs::Table)
 static Table l_table; /* the single instance of the Table active object */
 
 /* Global-scope objects ----------------------------------------------------*/
-QActive * const AO_Table = &amp;l_table.super; /* &quot;opaque&quot; AO pointer */
+QMActive * const AO_Table = &amp;l_table.super; /* &quot;opaque&quot; AO pointer */
 
 /*..........................................................................*/
 $define(AOs::Table_ctor)

+ 1 - 1
examples/arm-cm/dpp_nucleo-l053r8/philo.c

@@ -75,7 +75,7 @@ static Philo l_philo[N_PHILO];   /* storage for all Philos */
 #define PHILO_ID(me_)    ((uint8_t)((me_) - l_philo))
 
 /* Global objects ----------------------------------------------------------*/
-QActive * const AO_Philo[N_PHILO] = { /* "opaque" pointers to Philo AO */
+QMActive * const AO_Philo[N_PHILO] = { /* "opaque" pointers to Philo AO */
     &l_philo[0].super,
     &l_philo[1].super,
     &l_philo[2].super,

+ 1 - 1
examples/arm-cm/dpp_nucleo-l053r8/qk/gnu/Makefile

@@ -76,7 +76,7 @@ VPATH = \
 
 # list of all include directories needed by this project
 INCLUDES  = \
-	-I..\.. \
+	-I../.. \
 	-I$(QPC)/include \
 	-I$(QPC)/source \
 	-I$(QP_PORT_DIR) \

+ 1 - 1
examples/arm-cm/dpp_nucleo-l053r8/qv/gnu/Makefile

@@ -76,7 +76,7 @@ VPATH = \
 
 # list of all include directories needed by this project
 INCLUDES  = \
-	-I..\.. \
+	-I../.. \
 	-I$(QPC)/include \
 	-I$(QPC)/source \
 	-I$(QP_PORT_DIR) \

+ 1 - 1
examples/arm-cm/dpp_nucleo-l053r8/table.c

@@ -72,7 +72,7 @@ static QMState const Table_paused_s = {
 static Table l_table; /* the single instance of the Table active object */
 
 /* Global-scope objects ----------------------------------------------------*/
-QActive * const AO_Table = &l_table.super; /* "opaque" AO pointer */
+QMActive * const AO_Table = &l_table.super; /* "opaque" AO pointer */
 
 /*..........................................................................*/
 /*${AOs::Table_ctor} .......................................................*/

+ 2 - 2
examples/arm-cm/dpp_nucleo-l152re/dpp.h

@@ -51,9 +51,9 @@ void Philo_ctor(void);
 void Table_ctor(void);
 
 
-extern QActive * const AO_Philo[N_PHILO];
+extern QMActive * const AO_Philo[N_PHILO];
 
-extern QActive * const AO_Table;
+extern QMActive * const AO_Table;
 
 
 #endif /* dpp_h */

+ 4 - 4
examples/arm-cm/dpp_nucleo-l152re/dpp.qm

@@ -315,8 +315,8 @@ me-&gt;fork[n] = FREE;</action>
     <state_diagram size="49,69"/>
    </statechart>
   </class>
-  <attribute name="AO_Philo[N_PHILO]" type="QActive * const" visibility="0x00" properties="0x00"/>
-  <attribute name="AO_Table" type="QActive * const" visibility="0x00" properties="0x00"/>
+  <attribute name="AO_Philo[N_PHILO]" type="QMActive * const" visibility="0x00" properties="0x00"/>
+  <attribute name="AO_Table" type="QMActive * const" visibility="0x00" properties="0x00"/>
   <operation name="Philo_ctor" type="void" visibility="0x00" properties="0x00">
    <code>uint8_t n;
 Philo *me;
@@ -391,7 +391,7 @@ static Philo l_philo[N_PHILO];   /* storage for all Philos */
 #define PHILO_ID(me_)    ((uint8_t)((me_) - l_philo))
 
 /* Global objects ----------------------------------------------------------*/
-QActive * const AO_Philo[N_PHILO] = { /* &quot;opaque&quot; pointers to Philo AO */
+QMActive * const AO_Philo[N_PHILO] = { /* &quot;opaque&quot; pointers to Philo AO */
     &amp;l_philo[0].super,
     &amp;l_philo[1].super,
     &amp;l_philo[2].super,
@@ -422,7 +422,7 @@ $declare(AOs::Table)
 static Table l_table; /* the single instance of the Table active object */
 
 /* Global-scope objects ----------------------------------------------------*/
-QActive * const AO_Table = &amp;l_table.super; /* &quot;opaque&quot; AO pointer */
+QMActive * const AO_Table = &amp;l_table.super; /* &quot;opaque&quot; AO pointer */
 
 /*..........................................................................*/
 $define(AOs::Table_ctor)

+ 1 - 1
examples/arm-cm/dpp_nucleo-l152re/philo.c

@@ -75,7 +75,7 @@ static Philo l_philo[N_PHILO];   /* storage for all Philos */
 #define PHILO_ID(me_)    ((uint8_t)((me_) - l_philo))
 
 /* Global objects ----------------------------------------------------------*/
-QActive * const AO_Philo[N_PHILO] = { /* "opaque" pointers to Philo AO */
+QMActive * const AO_Philo[N_PHILO] = { /* "opaque" pointers to Philo AO */
     &l_philo[0].super,
     &l_philo[1].super,
     &l_philo[2].super,

+ 1 - 1
examples/arm-cm/dpp_nucleo-l152re/qk/gnu/Makefile

@@ -76,7 +76,7 @@ VPATH = \
 
 # list of all include directories needed by this project
 INCLUDES  = \
-	-I..\.. \
+	-I../.. \
 	-I$(QPC)/include \
 	-I$(QPC)/source \
 	-I$(QP_PORT_DIR) \

+ 1 - 1
examples/arm-cm/dpp_nucleo-l152re/qv/gnu/Makefile

@@ -76,7 +76,7 @@ VPATH = \
 
 # list of all include directories needed by this project
 INCLUDES  = \
-	-I..\.. \
+	-I../.. \
 	-I$(QPC)/include \
 	-I$(QPC)/source \
 	-I$(QP_PORT_DIR) \

+ 1 - 1
examples/arm-cm/dpp_nucleo-l152re/table.c

@@ -72,7 +72,7 @@ static QMState const Table_paused_s = {
 static Table l_table; /* the single instance of the Table active object */
 
 /* Global-scope objects ----------------------------------------------------*/
-QActive * const AO_Table = &l_table.super; /* "opaque" AO pointer */
+QMActive * const AO_Table = &l_table.super; /* "opaque" AO pointer */
 
 /*..........................................................................*/
 /*${AOs::Table_ctor} .......................................................*/

+ 3 - 3
examples/arm-cm/game_ek-lm3s811/game.h

@@ -133,11 +133,11 @@ QMsm * Mine2_ctor(uint8_t id);
 
 
 /* opaque pointers to active objects in the application */
-extern QActive * const AO_Tunnel;
+extern QMActive * const AO_Tunnel;
 
-extern QActive * const AO_Ship;
+extern QMActive * const AO_Ship;
 
-extern QActive * const AO_Missile;
+extern QMActive * const AO_Missile;
 
 
 /* helper function for all AOs */

+ 6 - 6
examples/arm-cm/game_ek-lm3s811/game.qm

@@ -1144,9 +1144,9 @@ QACTIVE_POST(AO_Tunnel, (QEvt *)oie, me);</action>
     <state_diagram size="53,68"/>
    </statechart>
   </class>
-  <attribute name="AO_Tunnel" type="QActive * const" visibility="0x00" properties="0x00"/>
-  <attribute name="AO_Ship" type="QActive * const" visibility="0x00" properties="0x00"/>
-  <attribute name="AO_Missile" type="QActive * const" visibility="0x00" properties="0x00"/>
+  <attribute name="AO_Tunnel" type="QMActive * const" visibility="0x00" properties="0x00"/>
+  <attribute name="AO_Ship" type="QMActive * const" visibility="0x00" properties="0x00"/>
+  <attribute name="AO_Missile" type="QMActive * const" visibility="0x00" properties="0x00"/>
   <operation name="Tunnel_ctor" type="void" visibility="0x00" properties="0x01">
    <code>uint8_t n;
 Tunnel *me = &amp;l_tunnel;
@@ -1294,7 +1294,7 @@ $declare(AOs::Missile)
 static Missile l_missile; /* the sole instance of the Missile active object */
 
 /* Public-scope objects ----------------------------------------------------*/
-QActive * const AO_Missile = (QActive *)&amp;l_missile;       /* opaque pointer */
+QMActive * const AO_Missile = &amp;l_missile.super; /* opaque AO pointer */
 
 /* Active object definition ------------------------------------------------*/
 $define(AOs::Missile_ctor)
@@ -1317,7 +1317,7 @@ $declare(AOs::Ship)
 static Ship l_ship; /* the sole instance of the Ship active object */
 
 /* Public-scope objects ----------------------------------------------------*/
-QActive * const AO_Ship = (QActive *)&amp;l_ship; /* opaque pointer */
+QMActive * const AO_Ship = &amp;l_ship.super; /* opaque AO pointer */
 
 /* Active object definition ------------------------------------------------*/
 $define(AOs::Ship_ctor)
@@ -1344,7 +1344,7 @@ static void randomSeed(uint32_t seed);
 static uint32_t random(void);
 
 /* Public-scope objects ----------------------------------------------------*/
-QActive * const AO_Tunnel = (QActive *)&amp;l_tunnel;         /* opaque pointer */
+QMActive * const AO_Tunnel = &amp;l_tunnel.super; /* opaque AO pointer */
 
 /* helper functions --------------------------------------------------------*/
 

+ 1 - 1
examples/arm-cm/game_ek-lm3s811/missile.c

@@ -64,7 +64,7 @@ static QMState const Missile_exploding_s = {
 static Missile l_missile; /* the sole instance of the Missile active object */
 
 /* Public-scope objects ----------------------------------------------------*/
-QActive * const AO_Missile = (QActive *)&l_missile;       /* opaque pointer */
+QMActive * const AO_Missile = &l_missile.super; /* opaque AO pointer */
 
 /* Active object definition ------------------------------------------------*/
 /*${AOs::Missile_ctor} .....................................................*/

+ 49 - 58
examples/arm-cm/game_ek-lm3s811/qk/bsp.c

@@ -1,7 +1,7 @@
 /*****************************************************************************
 * Product: "Fly 'n' Shoot" game example, preemptive QK kernel
 * Last Updated for Version: 5.4.0
-* Date of the Last Update:  2015-04-07
+* Date of the Last Update:  2015-05-07
 *
 *                    Q u a n t u m     L e a P s
 *                    ---------------------------
@@ -66,8 +66,11 @@ void SysTick_Handler(void);
 void GPIOPortA_IRQHandler(void);
 
 /* Local-scope objects -----------------------------------------------------*/
-#define PUSH_BUTTON             (1U << 4)
-#define USER_LED                (1U << 5)
+/* LEDs available on the board */
+#define USER_LED  (1U << 5)
+
+/* Push-Button wired externally to DIP8 (P0.6) */
+#define USER_BTN  (1U << 4)
 
 #define ADC_TRIGGER_TIMER       0x00000005U
 #define ADC_CTL_IE              0x00000040U
@@ -117,75 +120,62 @@ void SysTick_Handler(void) {
 }
 /*..........................................................................*/
 void ADCSeq3_IRQHandler(void) {
-    static uint32_t adcLPS = 0U;           /* Low-Pass-Filtered ADC reading */
-    static uint32_t wheel  = 0U;                 /* the last wheel position */
+    static uint32_t adcLPS = 0U; /* Low-Pass-Filtered ADC reading */
+    static uint32_t wheel  = 0U; /* the last wheel position */
 
-    static uint32_t btn_debounced  = 0U;
-    static uint8_t  debounce_state = 0U;
+    /* state variables for button debouncing, see below */
+    static struct ButtonsDebouncing {
+        uint32_t depressed;
+        uint32_t previous;
+    } buttons = { ~0U, ~0U };
+    uint32_t current;
 
     uint32_t tmp;
 
-    QK_ISR_ENTRY();                      /* infrom QK about entering an ISR */
+    QK_ISR_ENTRY(); /* infrom QK about entering an ISR */
+
+    ADC->ISC = (1U << 3); /* clear the ADCSeq3 interrupt */
 
-    ADC->ISC = (1U << 3);                    /* clear the ADCSeq3 interrupt */
-                              /* the ADC Sequence 3 FIFO must have a sample */
+    /* the ADC Sequence 3 FIFO must have a sample */
     Q_ASSERT((ADC->SSFSTAT3 & ADC_SSFSTAT0_EMPTY) == 0);
-    tmp = ADC->SSFIFO3;                       /* read the data from the ADC */
 
     /* 1st order low-pass filter: time constant ~= 2^n samples
      * TF = (1/2^n)/(z-((2^n - 1)/2^n)),
      * eg, n=3, y(k+1) = y(k) - y(k)/8 + x(k)/8 => y += (x - y)/8
      */
+    tmp = ADC->SSFIFO3; /* read the data from the ADC */
     adcLPS += (((int)tmp - (int)adcLPS + 4) >> 3);
 
     /* compute the next position of the wheel */
     tmp = (((1 << 10) - adcLPS)*(BSP_SCREEN_HEIGHT - 2)) >> 10;
-
-    if (tmp != wheel) {                   /* did the wheel position change? */
+    if (tmp != wheel) { /* did the wheel position change? */
         ObjectPosEvt *ope = Q_NEW(ObjectPosEvt, PLAYER_SHIP_MOVE_SIG);
-        ope->x = (uint8_t)GAME_SHIP_X;               /* x-position is fixed */
+        ope->x = (uint8_t)GAME_SHIP_X; /* x-position is fixed */
         ope->y = (uint8_t)tmp;
         QACTIVE_POST(AO_Ship, (QEvt *)ope, &l_ADCSeq3_IRQHandler);
-        wheel = tmp;                 /* save the last position of the wheel */
+        wheel = tmp; /* save the last position of the wheel */
     }
 
-    tmp = GPIOC->DATA_Bits[PUSH_BUTTON];               /* read the push btn */
-    switch (debounce_state) {
-        case 0:
-            if (tmp != btn_debounced) {
-                debounce_state = 1U;        /* transition to the next state */
-            }
-            break;
-        case 1:
-            if (tmp != btn_debounced) {
-                debounce_state = 2U;        /* transition to the next state */
-            }
-            else {
-                debounce_state = 0U;          /* transition back to state 0 */
-            }
-            break;
-        case 2:
-            if (tmp != btn_debounced) {
-                debounce_state = 3U;        /* transition to the next state */
-            }
-            else {
-                debounce_state = 0U;          /* transition back to state 0 */
-            }
-            break;
-        case 3:
-            if (tmp != btn_debounced) {
-                btn_debounced = tmp;     /* save the debounced button value */
-
-                if (tmp == 0U) {                /* is the button depressed? */
-                    static QEvt const fireEvt = { PLAYER_TRIGGER_SIG, 0 };
-                    QF_PUBLISH(&fireEvt, &l_ADCSeq3_IRQHandler);
-                }
-            }
-            debounce_state = 0U;              /* transition back to state 0 */
-            break;
+    /* Perform the debouncing of buttons. The algorithm for debouncing
+    * adapted from the book "Embedded Systems Dictionary" by Jack Ganssle
+    * and Michael Barr, page 71.
+    */
+    current = ~GPIOC->DATA; /* read the port with the User Button */
+    tmp = buttons.depressed; /* save the debounced depressed buttons */
+    buttons.depressed |= (buttons.previous & current); /* set depressed */
+    buttons.depressed &= (buttons.previous | current); /* clear released */
+    buttons.previous   = current; /* update the history */
+    tmp ^= buttons.depressed;     /* changed debounced depressed */
+    if ((tmp & USER_BTN) != 0U) { /* debounced USER_BTN state changed? */
+        if ((buttons.depressed & USER_BTN) != 0U) { /* is BTN depressed? */
+            static QEvt const fireEvt = { PLAYER_TRIGGER_SIG, 0U, 0U};
+            QF_PUBLISH(&fireEvt, &l_ADCSeq3_IRQHandler);
+        }
+        else { /* the button is released */
+        }
     }
 
-    QK_ISR_EXIT();                        /* infrom QK about exiting an ISR */
+    QK_ISR_EXIT(); /* infrom QK about exiting an ISR */
 }
 /*..........................................................................*/
 void GPIOPortA_IRQHandler(void) {
@@ -234,17 +224,18 @@ void BSP_init(void) {
     TIMER1->CTL  |= 0x02;
     TIMER1->CTL  |= 0x20;
 
-    /* configure the LED and push button */
-    GPIOC->DIR |= USER_LED;                        /* set direction: output */
-    GPIOC->DEN |= USER_LED;                               /* digital enable */
-    GPIOC->DATA_Bits[USER_LED] = 0;                /* turn the User LED off */
+    /* configure the User LED... */
+    GPIOC->DIR |= USER_LED; /* set direction: output */
+    GPIOC->DEN |= USER_LED; /* digital enable */
+    GPIOC->DATA_Bits[USER_LED] = 0U; /* turn the User LED off */
 
-    GPIOC->DIR &= ~PUSH_BUTTON;                    /*  set direction: input */
-    GPIOC->DEN |= PUSH_BUTTON;                            /* digital enable */
+    /* configure the User Button... */
+    GPIOC->DIR &= ~USER_BTN; /*  set direction: input */
+    GPIOC->DEN |= USER_BTN;  /* digital enable */
 
-    Display96x16x1Init(1);                   /* initialize the OLED display */
+    Display96x16x1Init(1); /* initialize the OLED display */
 
-    if (QS_INIT((void *)0) == 0) {    /* initialize the QS software tracing */
+    if (QS_INIT((void *)0) == 0U) { /* initialize the QS software tracing */
         Q_ERROR();
     }
 

+ 2 - 2
examples/arm-cm/game_ek-lm3s811/qk/gnu/Makefile

@@ -72,11 +72,11 @@ VPATH = \
 	$(QPC)/source \
 	$(QP_PORT_DIR) \
 	$(QPC)/3rd_party/ek-lm3s811 \
-	$(QPC)/3rd_party/ek-lm3s811\gnu
+	$(QPC)/3rd_party/ek-lm3s811/gnu
 
 # list of all include directories needed by this project
 INCLUDES  = \
-	-I..\.. \
+	-I../.. \
 	-I$(QPC)/include \
 	-I$(QPC)/source \
 	-I$(QP_PORT_DIR) \

+ 47 - 58
examples/arm-cm/game_ek-lm3s811/qv/bsp.c

@@ -1,7 +1,7 @@
 /*****************************************************************************
 * Product: "Fly 'n' Shoot" game example, cooperative QV kernel
 * Last Updated for Version: 5.4.0
-* Date of the Last Update:  2015-04-05
+* Date of the Last Update:  2015-05-07
 *
 *                    Q u a n t u m     L e a P s
 *                    ---------------------------
@@ -66,8 +66,11 @@ void SysTick_Handler(void);
 void GPIOPortA_IRQHandler(void);
 
 /* Local-scope objects -----------------------------------------------------*/
-#define PUSH_BUTTON             (1U << 4)
-#define USER_LED                (1U << 5)
+/* LEDs available on the board */
+#define USER_LED  (1U << 5)
+
+/* Push-Button wired externally to DIP8 (P0.6) */
+#define USER_BTN  (1U << 4)
 
 #define ADC_TRIGGER_TIMER       0x00000005U
 #define ADC_CTL_IE              0x00000040U
@@ -110,76 +113,61 @@ void SysTick_Handler(void) {
 
     QF_TICK_X(0U, &l_SysTick_Handler);    /* process time events for rate 0 */
     QF_PUBLISH(&tickEvt, &l_SysTick_Handler); /* publish to all subscribers */
-
 }
 /*..........................................................................*/
 void ADCSeq3_IRQHandler(void) {
-    static uint32_t adcLPS = 0U;           /* Low-Pass-Filtered ADC reading */
-    static uint32_t wheel  = 0U;                 /* the last wheel position */
+    static uint32_t adcLPS = 0U; /* Low-Pass-Filtered ADC reading */
+    static uint32_t wheel  = 0U; /* the last wheel position */
 
-    static uint32_t btn_debounced  = 0U;
-    static uint8_t  debounce_state = 0U;
+    /* state variables for button debouncing, see below */
+    static struct ButtonsDebouncing {
+        uint32_t depressed;
+        uint32_t previous;
+    } buttons = { ~0U, ~0U };
+    uint32_t current;
 
     uint32_t tmp;
 
-    ADC->ISC = (1U << 3);                    /* clear the ADCSeq3 interrupt */
-                              /* the ADC Sequence 3 FIFO must have a sample */
+    ADC->ISC = (1U << 3); /* clear the ADCSeq3 interrupt */
+
+    /* the ADC Sequence 3 FIFO must have a sample */
     Q_ASSERT((ADC->SSFSTAT3 & ADC_SSFSTAT0_EMPTY) == 0);
-    tmp = ADC->SSFIFO3;                       /* read the data from the ADC */
 
     /* 1st order low-pass filter: time constant ~= 2^n samples
      * TF = (1/2^n)/(z-((2^n - 1)/2^n)),
      * eg, n=3, y(k+1) = y(k) - y(k)/8 + x(k)/8 => y += (x - y)/8
      */
+    tmp = ADC->SSFIFO3; /* read the data from the ADC */
     adcLPS += (((int)tmp - (int)adcLPS + 4) >> 3);
 
     /* compute the next position of the wheel */
     tmp = (((1 << 10) - adcLPS)*(BSP_SCREEN_HEIGHT - 2)) >> 10;
-
-    if (tmp != wheel) {                   /* did the wheel position change? */
+    if (tmp != wheel) { /* did the wheel position change? */
         ObjectPosEvt *ope = Q_NEW(ObjectPosEvt, PLAYER_SHIP_MOVE_SIG);
-        ope->x = (uint8_t)GAME_SHIP_X;               /* x-position is fixed */
+        ope->x = (uint8_t)GAME_SHIP_X; /* x-position is fixed */
         ope->y = (uint8_t)tmp;
         QACTIVE_POST(AO_Ship, (QEvt *)ope, &l_ADCSeq3_IRQHandler);
-        wheel = tmp;                 /* save the last position of the wheel */
+        wheel = tmp; /* save the last position of the wheel */
     }
 
-    tmp = GPIOC->DATA_Bits[PUSH_BUTTON];               /* read the push btn */
-    switch (debounce_state) {
-        case 0:
-            if (tmp != btn_debounced) {
-                debounce_state = 1U;        /* transition to the next state */
-            }
-            break;
-        case 1:
-            if (tmp != btn_debounced) {
-                debounce_state = 2U;        /* transition to the next state */
-            }
-            else {
-                debounce_state = 0U;          /* transition back to state 0 */
-            }
-            break;
-        case 2:
-            if (tmp != btn_debounced) {
-                debounce_state = 3U;        /* transition to the next state */
-            }
-            else {
-                debounce_state = 0U;          /* transition back to state 0 */
-            }
-            break;
-        case 3:
-            if (tmp != btn_debounced) {
-                btn_debounced = tmp;     /* save the debounced button value */
-
-                if (tmp == 0U) {                /* is the button depressed? */
-                    static QEvt const fireEvt = { PLAYER_TRIGGER_SIG, 0 };
-                    QF_PUBLISH(&fireEvt, &l_ADCSeq3_IRQHandler);
-                }
-            }
-            debounce_state = 0U;              /* transition back to state 0 */
-            break;
+    /* Perform the debouncing of buttons. The algorithm for debouncing
+    * adapted from the book "Embedded Systems Dictionary" by Jack Ganssle
+    * and Michael Barr, page 71.
+    */
+    current = ~GPIOC->DATA; /* read the port with the User Button */
+    tmp = buttons.depressed; /* save the debounced depressed buttons */
+    buttons.depressed |= (buttons.previous & current); /* set depressed */
+    buttons.depressed &= (buttons.previous | current); /* clear released */
+    buttons.previous   = current; /* update the history */
+    tmp ^= buttons.depressed;     /* changed debounced depressed */
+    if ((tmp & USER_BTN) != 0U) { /* debounced USER_BTN state changed? */
+        if ((buttons.depressed & USER_BTN) != 0U) { /* is BTN depressed? */
+            static QEvt const fireEvt = { PLAYER_TRIGGER_SIG, 0U, 0U};
+            QF_PUBLISH(&fireEvt, &l_ADCSeq3_IRQHandler);
+        }
+        else { /* the button is released */
+        }
     }
-
 }
 /*..........................................................................*/
 void GPIOPortA_IRQHandler(void) {
@@ -224,17 +212,18 @@ void BSP_init(void) {
     TIMER1->CTL  |= 0x02;
     TIMER1->CTL  |= 0x20;
 
-    /* configure the LED and push button */
-    GPIOC->DIR |= USER_LED;                        /* set direction: output */
-    GPIOC->DEN |= USER_LED;                               /* digital enable */
-    GPIOC->DATA_Bits[USER_LED] = 0;                /* turn the User LED off */
+    /* configure the User LED... */
+    GPIOC->DIR |= USER_LED; /* set direction: output */
+    GPIOC->DEN |= USER_LED; /* digital enable */
+    GPIOC->DATA_Bits[USER_LED] = 0U; /* turn the User LED off */
 
-    GPIOC->DIR &= ~PUSH_BUTTON;                    /*  set direction: input */
-    GPIOC->DEN |= PUSH_BUTTON;                            /* digital enable */
+    /* configure the User Button... */
+    GPIOC->DIR &= ~USER_BTN; /*  set direction: input */
+    GPIOC->DEN |= USER_BTN;  /* digital enable */
 
-    Display96x16x1Init(1);                   /* initialize the OLED display */
+    Display96x16x1Init(1); /* initialize the OLED display */
 
-    if (QS_INIT((void *)0) == 0) {    /* initialize the QS software tracing */
+    if (QS_INIT((void *)0) == 0U) { /* initialize the QS software tracing */
         Q_ERROR();
     }
 

+ 2 - 2
examples/arm-cm/game_ek-lm3s811/qv/gnu/Makefile

@@ -72,11 +72,11 @@ VPATH = \
 	$(QPC)/source \
 	$(QP_PORT_DIR) \
 	$(QPC)/3rd_party/ek-lm3s811 \
-	$(QPC)/3rd_party/ek-lm3s811\gnu
+	$(QPC)/3rd_party/ek-lm3s811/gnu
 
 # list of all include directories needed by this project
 INCLUDES  = \
-	-I..\.. \
+	-I../.. \
 	-I$(QPC)/include \
 	-I$(QPC)/source \
 	-I$(QP_PORT_DIR) \

+ 1 - 1
examples/arm-cm/game_ek-lm3s811/ship.c

@@ -80,7 +80,7 @@ static QMState const Ship_exploding_s = {
 static Ship l_ship; /* the sole instance of the Ship active object */
 
 /* Public-scope objects ----------------------------------------------------*/
-QActive * const AO_Ship = (QActive *)&l_ship; /* opaque pointer */
+QMActive * const AO_Ship = &l_ship.super; /* opaque AO pointer */
 
 /* Active object definition ------------------------------------------------*/
 /*${AOs::Ship_ctor} ........................................................*/

+ 1 - 1
examples/arm-cm/game_ek-lm3s811/tunnel.c

@@ -157,7 +157,7 @@ static void randomSeed(uint32_t seed);
 static uint32_t random(void);
 
 /* Public-scope objects ----------------------------------------------------*/
-QActive * const AO_Tunnel = (QActive *)&l_tunnel;         /* opaque pointer */
+QMActive * const AO_Tunnel = &l_tunnel.super; /* opaque AO pointer */
 
 /* helper functions --------------------------------------------------------*/
 

+ 2 - 2
examples/arm7-9/dpp_at91sam7s-ek/dpp.h

@@ -51,9 +51,9 @@ void Philo_ctor(void);
 void Table_ctor(void);
 
 
-extern QActive * const AO_Philo[N_PHILO];
+extern QMActive * const AO_Philo[N_PHILO];
 
-extern QActive * const AO_Table;
+extern QMActive * const AO_Table;
 
 
 #endif /* dpp_h */

+ 4 - 4
examples/arm7-9/dpp_at91sam7s-ek/dpp.qm

@@ -315,8 +315,8 @@ me-&gt;fork[n] = FREE;</action>
     <state_diagram size="49,69"/>
    </statechart>
   </class>
-  <attribute name="AO_Philo[N_PHILO]" type="QActive * const" visibility="0x00" properties="0x00"/>
-  <attribute name="AO_Table" type="QActive * const" visibility="0x00" properties="0x00"/>
+  <attribute name="AO_Philo[N_PHILO]" type="QMActive * const" visibility="0x00" properties="0x00"/>
+  <attribute name="AO_Table" type="QMActive * const" visibility="0x00" properties="0x00"/>
   <operation name="Philo_ctor" type="void" visibility="0x00" properties="0x00">
    <code>uint8_t n;
 Philo *me;
@@ -391,7 +391,7 @@ static Philo l_philo[N_PHILO];   /* storage for all Philos */
 #define PHILO_ID(me_)    ((uint8_t)((me_) - l_philo))
 
 /* Global objects ----------------------------------------------------------*/
-QActive * const AO_Philo[N_PHILO] = { /* &quot;opaque&quot; pointers to Philo AO */
+QMActive * const AO_Philo[N_PHILO] = { /* &quot;opaque&quot; pointers to Philo AO */
     &amp;l_philo[0].super,
     &amp;l_philo[1].super,
     &amp;l_philo[2].super,
@@ -422,7 +422,7 @@ $declare(AOs::Table)
 static Table l_table; /* the single instance of the Table active object */
 
 /* Global-scope objects ----------------------------------------------------*/
-QActive * const AO_Table = &amp;l_table.super; /* &quot;opaque&quot; AO pointer */
+QMActive * const AO_Table = &amp;l_table.super; /* &quot;opaque&quot; AO pointer */
 
 /*..........................................................................*/
 $define(AOs::Table_ctor)

+ 1 - 1
examples/arm7-9/dpp_at91sam7s-ek/philo.c

@@ -75,7 +75,7 @@ static Philo l_philo[N_PHILO];   /* storage for all Philos */
 #define PHILO_ID(me_)    ((uint8_t)((me_) - l_philo))
 
 /* Global objects ----------------------------------------------------------*/
-QActive * const AO_Philo[N_PHILO] = { /* "opaque" pointers to Philo AO */
+QMActive * const AO_Philo[N_PHILO] = { /* "opaque" pointers to Philo AO */
     &l_philo[0].super,
     &l_philo[1].super,
     &l_philo[2].super,

+ 1 - 1
examples/arm7-9/dpp_at91sam7s-ek/table.c

@@ -72,7 +72,7 @@ static QMState const Table_paused_s = {
 static Table l_table; /* the single instance of the Table active object */
 
 /* Global-scope objects ----------------------------------------------------*/
-QActive * const AO_Table = &l_table.super; /* "opaque" AO pointer */
+QMActive * const AO_Table = &l_table.super; /* "opaque" AO pointer */
 
 /*..........................................................................*/
 /*${AOs::Table_ctor} .......................................................*/

+ 2 - 2
examples/avr/blinky_arduino-uno/qv/gnu/Makefile

@@ -1,7 +1,7 @@
 ##############################################################################
-# Product: Makefile for Blinky on Arduino-UNO, preemptive QV kernel, GNU-AVR
+# Product: Makefile for Blinky on Arduino-UNO, cooperative QV kernel, GNU-AVR
 # Last Updated for Version: 5.4.0
-# Date of the Last Update:  2015-04-03
+# Date of the Last Update:  2015-05-08
 #
 #                    Q u a n t u m     L e a P s
 #                    ---------------------------

+ 2 - 2
examples/avr/dpp_arduino-uno/dpp.h

@@ -51,9 +51,9 @@ void Philo_ctor(void);
 void Table_ctor(void);
 
 
-extern QActive * const AO_Philo[N_PHILO];
+extern QMActive * const AO_Philo[N_PHILO];
 
-extern QActive * const AO_Table;
+extern QMActive * const AO_Table;
 
 
 #endif /* dpp_h */

+ 4 - 4
examples/avr/dpp_arduino-uno/dpp.qm

@@ -315,8 +315,8 @@ me-&gt;fork[n] = FREE;</action>
     <state_diagram size="49,69"/>
    </statechart>
   </class>
-  <attribute name="AO_Philo[N_PHILO]" type="QActive * const" visibility="0x00" properties="0x00"/>
-  <attribute name="AO_Table" type="QActive * const" visibility="0x00" properties="0x00"/>
+  <attribute name="AO_Philo[N_PHILO]" type="QMActive * const" visibility="0x00" properties="0x00"/>
+  <attribute name="AO_Table" type="QMActive * const" visibility="0x00" properties="0x00"/>
   <operation name="Philo_ctor" type="void" visibility="0x00" properties="0x00">
    <code>uint8_t n;
 Philo *me;
@@ -391,7 +391,7 @@ static Philo l_philo[N_PHILO];   /* storage for all Philos */
 #define PHILO_ID(me_)    ((uint8_t)((me_) - l_philo))
 
 /* Global objects ----------------------------------------------------------*/
-QActive * const AO_Philo[N_PHILO] = { /* &quot;opaque&quot; pointers to Philo AO */
+QMActive * const AO_Philo[N_PHILO] = { /* &quot;opaque&quot; pointers to Philo AO */
     &amp;l_philo[0].super,
     &amp;l_philo[1].super,
     &amp;l_philo[2].super,
@@ -422,7 +422,7 @@ $declare(AOs::Table)
 static Table l_table; /* the single instance of the Table active object */
 
 /* Global-scope objects ----------------------------------------------------*/
-QActive * const AO_Table = &amp;l_table.super; /* &quot;opaque&quot; AO pointer */
+QMActive * const AO_Table = &amp;l_table.super; /* &quot;opaque&quot; AO pointer */
 
 /*..........................................................................*/
 $define(AOs::Table_ctor)

+ 1 - 1
examples/avr/dpp_arduino-uno/philo.c

@@ -75,7 +75,7 @@ static Philo l_philo[N_PHILO];   /* storage for all Philos */
 #define PHILO_ID(me_)    ((uint8_t)((me_) - l_philo))
 
 /* Global objects ----------------------------------------------------------*/
-QActive * const AO_Philo[N_PHILO] = { /* "opaque" pointers to Philo AO */
+QMActive * const AO_Philo[N_PHILO] = { /* "opaque" pointers to Philo AO */
     &l_philo[0].super,
     &l_philo[1].super,
     &l_philo[2].super,

+ 1 - 1
examples/avr/dpp_arduino-uno/table.c

@@ -72,7 +72,7 @@ static QMState const Table_paused_s = {
 static Table l_table; /* the single instance of the Table active object */
 
 /* Global-scope objects ----------------------------------------------------*/
-QActive * const AO_Table = &l_table.super; /* "opaque" AO pointer */
+QMActive * const AO_Table = &l_table.super; /* "opaque" AO pointer */
 
 /*..........................................................................*/
 /*${AOs::Table_ctor} .......................................................*/

+ 1 - 4
examples/cmsis-rtx/blinky_ek-tm4c123gxl/bsp.c

@@ -136,10 +136,7 @@ void BSP_ledOff(uint_fast8_t n) {
 }
 /*..........................................................................*/
 void BSP_ledOn(uint_fast8_t n) {
-    /* exercise the FPU with some floating point computations */
-    /* NOTE: this code can be only called from a task that created with
-    * the option OS_TASK_OPT_SAVE_FP.
-    */
+    /* exercise the FPU with some floating point computations... */
     float volatile x;
     x = 3.1415926F;
     x = x + 2.7182818F;

+ 2 - 2
examples/cmsis-rtx/blinky_ek-tm4c123gxl/gnu/Makefile

@@ -76,11 +76,11 @@ VPATH = \
 	$(QPC)/source \
 	$(QP_PORT_DIR) \
 	$(QPC)/3rd_party/ek-tm4c123gxl \
-	$(QPC)/3rd_party/ek-tm4c123gxl\gnu
+	$(QPC)/3rd_party/ek-tm4c123gxl/gnu
 
 # list of all include directories needed by this project
 INCLUDES  = \
-	-I..\.. \
+	-I../.. \
 	-I$(QPC)/include \
 	-I$(QPC)/source \
 	-I$(CMSIS_RTX)/INC \

+ 14 - 2
examples/cmsis-rtx/blinky_ek-tm4c123gxl/gnu/README.txt

@@ -24,11 +24,23 @@ make clean
 make CONF=rel clean
 make CONF=spy clean
 
+***
+NOTE:
+The installation folder of the GNU-ARM toolset on YOUR machine needs
+to be adjusted in the provided Makefile, by editing the symbol: GNU_ARM.
+As described in the comment for this symbol, the GNU-ARM toolset is taken
+from: http://gnutoolchains.com/arm-eabi
+
+It is highly recommened to use the same GNU-ARM distribution, especially
+for ARM Cortex-M4F projects, due to the support for the hardware FPU
+(float-abi=hard).
+***
+
 
 Adjusting Stack and Heap Sizes
 ==============================
-The stack and heap sizes are determined in this project by the GNU linker
-script (.ld file), which provides a template of the recommended GNU linker
+The stack and heap sizes are determined in this project by the GCC linker
+script (.ld file), which provides a template of the recommended GCC linker
 script for QP applications.
    
 

+ 1 - 4
examples/cmsis-rtx/dpp_ek-tm4c123gxl/bsp.c

@@ -168,10 +168,7 @@ void BSP_init(void) {
 }
 /*..........................................................................*/
 void BSP_displayPhilStat(uint8_t n, char const *stat) {
-    /* exercise the FPU with some floating point computations */
-    /* NOTE: this code can be only called from a task that created with
-    * the option OS_TASK_OPT_SAVE_FP.
-    */
+    /* exercise the FPU with some floating point computations... */
     float volatile x;
     x = 3.1415926F;
     x = x + 2.7182818F;

+ 2 - 2
examples/cmsis-rtx/dpp_ek-tm4c123gxl/dpp.h

@@ -51,9 +51,9 @@ void Philo_ctor(void);
 void Table_ctor(void);
 
 
-extern QActive * const AO_Philo[N_PHILO];
+extern QMActive * const AO_Philo[N_PHILO];
 
-extern QActive * const AO_Table;
+extern QMActive * const AO_Table;
 
 
 #endif /* dpp_h */

+ 4 - 4
examples/cmsis-rtx/dpp_ek-tm4c123gxl/dpp.qm

@@ -315,8 +315,8 @@ me-&gt;fork[n] = FREE;</action>
     <state_diagram size="49,69"/>
    </statechart>
   </class>
-  <attribute name="AO_Philo[N_PHILO]" type="QActive * const" visibility="0x00" properties="0x00"/>
-  <attribute name="AO_Table" type="QActive * const" visibility="0x00" properties="0x00"/>
+  <attribute name="AO_Philo[N_PHILO]" type="QMActive * const" visibility="0x00" properties="0x00"/>
+  <attribute name="AO_Table" type="QMActive * const" visibility="0x00" properties="0x00"/>
   <operation name="Philo_ctor" type="void" visibility="0x00" properties="0x00">
    <code>uint8_t n;
 Philo *me;
@@ -391,7 +391,7 @@ static Philo l_philo[N_PHILO];   /* storage for all Philos */
 #define PHILO_ID(me_)    ((uint8_t)((me_) - l_philo))
 
 /* Global objects ----------------------------------------------------------*/
-QActive * const AO_Philo[N_PHILO] = { /* &quot;opaque&quot; pointers to Philo AO */
+QMActive * const AO_Philo[N_PHILO] = { /* &quot;opaque&quot; pointers to Philo AO */
     &amp;l_philo[0].super,
     &amp;l_philo[1].super,
     &amp;l_philo[2].super,
@@ -422,7 +422,7 @@ $declare(AOs::Table)
 static Table l_table; /* the single instance of the Table active object */
 
 /* Global-scope objects ----------------------------------------------------*/
-QActive * const AO_Table = &amp;l_table.super; /* &quot;opaque&quot; AO pointer */
+QMActive * const AO_Table = &amp;l_table.super; /* &quot;opaque&quot; AO pointer */
 
 /*..........................................................................*/
 $define(AOs::Table_ctor)

+ 2 - 2
examples/cmsis-rtx/dpp_ek-tm4c123gxl/gnu/Makefile

@@ -76,11 +76,11 @@ VPATH = \
 	$(QPC)/source \
 	$(QP_PORT_DIR) \
 	$(QPC)/3rd_party/ek-tm4c123gxl \
-	$(QPC)/3rd_party/ek-tm4c123gxl\gnu
+	$(QPC)/3rd_party/ek-tm4c123gxl/gnu
 
 # list of all include directories needed by this project
 INCLUDES  = \
-	-I..\.. \
+	-I../.. \
 	-I$(QPC)/include \
 	-I$(QPC)/source \
 	-I$(CMSIS_RTX)/INC \

+ 12 - 0
examples/cmsis-rtx/dpp_ek-tm4c123gxl/gnu/README.txt

@@ -24,6 +24,18 @@ make clean
 make CONF=rel clean
 make CONF=spy clean
 
+***
+NOTE:
+The installation folder of the GNU-ARM toolset on YOUR machine needs
+to be adjusted in the provided Makefile, by editing the symbol: GNU_ARM.
+As described in the comment for this symbol, the GNU-ARM toolset is taken
+from: http://gnutoolchains.com/arm-eabi
+
+It is highly recommened to use the same GNU-ARM distribution, especially
+for ARM Cortex-M4F projects, due to the support for the hardware FPU
+(float-abi=hard).
+***
+
 
 Adjusting Stack and Heap Sizes
 ==============================

+ 1 - 1
examples/cmsis-rtx/dpp_ek-tm4c123gxl/philo.c

@@ -75,7 +75,7 @@ static Philo l_philo[N_PHILO];   /* storage for all Philos */
 #define PHILO_ID(me_)    ((uint8_t)((me_) - l_philo))
 
 /* Global objects ----------------------------------------------------------*/
-QActive * const AO_Philo[N_PHILO] = { /* "opaque" pointers to Philo AO */
+QMActive * const AO_Philo[N_PHILO] = { /* "opaque" pointers to Philo AO */
     &l_philo[0].super,
     &l_philo[1].super,
     &l_philo[2].super,

+ 1 - 1
examples/cmsis-rtx/dpp_ek-tm4c123gxl/table.c

@@ -72,7 +72,7 @@ static QMState const Table_paused_s = {
 static Table l_table; /* the single instance of the Table active object */
 
 /* Global-scope objects ----------------------------------------------------*/
-QActive * const AO_Table = &l_table.super; /* "opaque" AO pointer */
+QMActive * const AO_Table = &l_table.super; /* "opaque" AO pointer */
 
 /*..........................................................................*/
 /*${AOs::Table_ctor} .......................................................*/

+ 2 - 2
examples/cmsis-rtx/dpp_nucleo-l053r8/dpp.h

@@ -51,9 +51,9 @@ void Philo_ctor(void);
 void Table_ctor(void);
 
 
-extern QActive * const AO_Philo[N_PHILO];
+extern QMActive * const AO_Philo[N_PHILO];
 
-extern QActive * const AO_Table;
+extern QMActive * const AO_Table;
 
 
 #endif /* dpp_h */

+ 4 - 4
examples/cmsis-rtx/dpp_nucleo-l053r8/dpp.qm

@@ -315,8 +315,8 @@ me-&gt;fork[n] = FREE;</action>
     <state_diagram size="49,69"/>
    </statechart>
   </class>
-  <attribute name="AO_Philo[N_PHILO]" type="QActive * const" visibility="0x00" properties="0x00"/>
-  <attribute name="AO_Table" type="QActive * const" visibility="0x00" properties="0x00"/>
+  <attribute name="AO_Philo[N_PHILO]" type="QMActive * const" visibility="0x00" properties="0x00"/>
+  <attribute name="AO_Table" type="QMActive * const" visibility="0x00" properties="0x00"/>
   <operation name="Philo_ctor" type="void" visibility="0x00" properties="0x00">
    <code>uint8_t n;
 Philo *me;
@@ -391,7 +391,7 @@ static Philo l_philo[N_PHILO];   /* storage for all Philos */
 #define PHILO_ID(me_)    ((uint8_t)((me_) - l_philo))
 
 /* Global objects ----------------------------------------------------------*/
-QActive * const AO_Philo[N_PHILO] = { /* &quot;opaque&quot; pointers to Philo AO */
+QMActive * const AO_Philo[N_PHILO] = { /* &quot;opaque&quot; pointers to Philo AO */
     &amp;l_philo[0].super,
     &amp;l_philo[1].super,
     &amp;l_philo[2].super,
@@ -422,7 +422,7 @@ $declare(AOs::Table)
 static Table l_table; /* the single instance of the Table active object */
 
 /* Global-scope objects ----------------------------------------------------*/
-QActive * const AO_Table = &amp;l_table.super; /* &quot;opaque&quot; AO pointer */
+QMActive * const AO_Table = &amp;l_table.super; /* &quot;opaque&quot; AO pointer */
 
 /*..........................................................................*/
 $define(AOs::Table_ctor)

+ 2 - 2
examples/cmsis-rtx/dpp_nucleo-l053r8/gnu/Makefile

@@ -76,11 +76,11 @@ VPATH = \
 	$(QPC)/source \
 	$(QP_PORT_DIR) \
 	$(QPC)/3rd_party/nucleo-l053r8 \
-	$(QPC)/3rd_party/nucleo-l053r8\gnu
+	$(QPC)/3rd_party/nucleo-l053r8/gnu
 
 # list of all include directories needed by this project
 INCLUDES  = \
-	-I..\.. \
+	-I../.. \
 	-I$(QPC)/include \
 	-I$(QPC)/source \
 	-I$(CMSIS_RTX)/INC \

+ 1 - 1
examples/cmsis-rtx/dpp_nucleo-l053r8/philo.c

@@ -75,7 +75,7 @@ static Philo l_philo[N_PHILO];   /* storage for all Philos */
 #define PHILO_ID(me_)    ((uint8_t)((me_) - l_philo))
 
 /* Global objects ----------------------------------------------------------*/
-QActive * const AO_Philo[N_PHILO] = { /* "opaque" pointers to Philo AO */
+QMActive * const AO_Philo[N_PHILO] = { /* "opaque" pointers to Philo AO */
     &l_philo[0].super,
     &l_philo[1].super,
     &l_philo[2].super,

+ 1 - 1
examples/cmsis-rtx/dpp_nucleo-l053r8/table.c

@@ -72,7 +72,7 @@ static QMState const Table_paused_s = {
 static Table l_table; /* the single instance of the Table active object */
 
 /* Global-scope objects ----------------------------------------------------*/
-QActive * const AO_Table = &l_table.super; /* "opaque" AO pointer */
+QMActive * const AO_Table = &l_table.super; /* "opaque" AO pointer */
 
 /*..........................................................................*/
 /*${AOs::Table_ctor} .......................................................*/

+ 2 - 2
examples/cmsis-rtx/dpp_nucleo-l152re/dpp.h

@@ -51,9 +51,9 @@ void Philo_ctor(void);
 void Table_ctor(void);
 
 
-extern QActive * const AO_Philo[N_PHILO];
+extern QMActive * const AO_Philo[N_PHILO];
 
-extern QActive * const AO_Table;
+extern QMActive * const AO_Table;
 
 
 #endif /* dpp_h */

+ 4 - 4
examples/cmsis-rtx/dpp_nucleo-l152re/dpp.qm

@@ -315,8 +315,8 @@ me-&gt;fork[n] = FREE;</action>
     <state_diagram size="49,69"/>
    </statechart>
   </class>
-  <attribute name="AO_Philo[N_PHILO]" type="QActive * const" visibility="0x00" properties="0x00"/>
-  <attribute name="AO_Table" type="QActive * const" visibility="0x00" properties="0x00"/>
+  <attribute name="AO_Philo[N_PHILO]" type="QMActive * const" visibility="0x00" properties="0x00"/>
+  <attribute name="AO_Table" type="QMActive * const" visibility="0x00" properties="0x00"/>
   <operation name="Philo_ctor" type="void" visibility="0x00" properties="0x00">
    <code>uint8_t n;
 Philo *me;
@@ -391,7 +391,7 @@ static Philo l_philo[N_PHILO];   /* storage for all Philos */
 #define PHILO_ID(me_)    ((uint8_t)((me_) - l_philo))
 
 /* Global objects ----------------------------------------------------------*/
-QActive * const AO_Philo[N_PHILO] = { /* &quot;opaque&quot; pointers to Philo AO */
+QMActive * const AO_Philo[N_PHILO] = { /* &quot;opaque&quot; pointers to Philo AO */
     &amp;l_philo[0].super,
     &amp;l_philo[1].super,
     &amp;l_philo[2].super,
@@ -422,7 +422,7 @@ $declare(AOs::Table)
 static Table l_table; /* the single instance of the Table active object */
 
 /* Global-scope objects ----------------------------------------------------*/
-QActive * const AO_Table = &amp;l_table.super; /* &quot;opaque&quot; AO pointer */
+QMActive * const AO_Table = &amp;l_table.super; /* &quot;opaque&quot; AO pointer */
 
 /*..........................................................................*/
 $define(AOs::Table_ctor)

+ 2 - 2
examples/cmsis-rtx/dpp_nucleo-l152re/gnu/Makefile

@@ -76,11 +76,11 @@ VPATH = \
 	$(QPC)/source \
 	$(QP_PORT_DIR) \
 	$(QPC)/3rd_party/nucleo-l152re \
-	$(QPC)/3rd_party/nucleo-l152re\gnu
+	$(QPC)/3rd_party/nucleo-l152re/gnu
 
 # list of all include directories needed by this project
 INCLUDES  = \
-	-I..\.. \
+	-I../.. \
 	-I$(QPC)/include \
 	-I$(QPC)/source \
 	-I$(CMSIS_RTX)/INC \

+ 1 - 1
examples/cmsis-rtx/dpp_nucleo-l152re/philo.c

@@ -75,7 +75,7 @@ static Philo l_philo[N_PHILO];   /* storage for all Philos */
 #define PHILO_ID(me_)    ((uint8_t)((me_) - l_philo))
 
 /* Global objects ----------------------------------------------------------*/
-QActive * const AO_Philo[N_PHILO] = { /* "opaque" pointers to Philo AO */
+QMActive * const AO_Philo[N_PHILO] = { /* "opaque" pointers to Philo AO */
     &l_philo[0].super,
     &l_philo[1].super,
     &l_philo[2].super,

+ 1 - 1
examples/cmsis-rtx/dpp_nucleo-l152re/table.c

@@ -72,7 +72,7 @@ static QMState const Table_paused_s = {
 static Table l_table; /* the single instance of the Table active object */
 
 /* Global-scope objects ----------------------------------------------------*/
-QActive * const AO_Table = &l_table.super; /* "opaque" AO pointer */
+QMActive * const AO_Table = &l_table.super; /* "opaque" AO pointer */
 
 /*..........................................................................*/
 /*${AOs::Table_ctor} .......................................................*/

+ 2 - 2
examples/embos/arm-cm/dpp_stm32f429-discovery/dpp.h

@@ -51,9 +51,9 @@ void Philo_ctor(void);
 void Table_ctor(void);
 
 
-extern QActive * const AO_Philo[N_PHILO];
+extern QMActive * const AO_Philo[N_PHILO];
 
-extern QActive * const AO_Table;
+extern QMActive * const AO_Table;
 
 
 #endif /* dpp_h */

+ 4 - 4
examples/embos/arm-cm/dpp_stm32f429-discovery/dpp.qm

@@ -315,8 +315,8 @@ me-&gt;fork[n] = FREE;</action>
     <state_diagram size="49,69"/>
    </statechart>
   </class>
-  <attribute name="AO_Philo[N_PHILO]" type="QActive * const" visibility="0x00" properties="0x00"/>
-  <attribute name="AO_Table" type="QActive * const" visibility="0x00" properties="0x00"/>
+  <attribute name="AO_Philo[N_PHILO]" type="QMActive * const" visibility="0x00" properties="0x00"/>
+  <attribute name="AO_Table" type="QMActive * const" visibility="0x00" properties="0x00"/>
   <operation name="Philo_ctor" type="void" visibility="0x00" properties="0x00">
    <code>uint8_t n;
 Philo *me;
@@ -391,7 +391,7 @@ static Philo l_philo[N_PHILO];   /* storage for all Philos */
 #define PHILO_ID(me_)    ((uint8_t)((me_) - l_philo))
 
 /* Global objects ----------------------------------------------------------*/
-QActive * const AO_Philo[N_PHILO] = { /* &quot;opaque&quot; pointers to Philo AO */
+QMActive * const AO_Philo[N_PHILO] = { /* &quot;opaque&quot; pointers to Philo AO */
     &amp;l_philo[0].super,
     &amp;l_philo[1].super,
     &amp;l_philo[2].super,
@@ -422,7 +422,7 @@ $declare(AOs::Table)
 static Table l_table; /* the single instance of the Table active object */
 
 /* Global-scope objects ----------------------------------------------------*/
-QActive * const AO_Table = &amp;l_table.super; /* &quot;opaque&quot; AO pointer */
+QMActive * const AO_Table = &amp;l_table.super; /* &quot;opaque&quot; AO pointer */
 
 /*..........................................................................*/
 $define(AOs::Table_ctor)

+ 1 - 1
examples/embos/arm-cm/dpp_stm32f429-discovery/philo.c

@@ -75,7 +75,7 @@ static Philo l_philo[N_PHILO];   /* storage for all Philos */
 #define PHILO_ID(me_)    ((uint8_t)((me_) - l_philo))
 
 /* Global objects ----------------------------------------------------------*/
-QActive * const AO_Philo[N_PHILO] = { /* "opaque" pointers to Philo AO */
+QMActive * const AO_Philo[N_PHILO] = { /* "opaque" pointers to Philo AO */
     &l_philo[0].super,
     &l_philo[1].super,
     &l_philo[2].super,

+ 1 - 1
examples/embos/arm-cm/dpp_stm32f429-discovery/table.c

@@ -72,7 +72,7 @@ static QMState const Table_paused_s = {
 static Table l_table; /* the single instance of the Table active object */
 
 /* Global-scope objects ----------------------------------------------------*/
-QActive * const AO_Table = &l_table.super; /* "opaque" AO pointer */
+QMActive * const AO_Table = &l_table.super; /* "opaque" AO pointer */
 
 /*..........................................................................*/
 /*${AOs::Table_ctor} .......................................................*/

+ 1 - 1
examples/freertos/arm-cm/blinky_ek-tm4c123gxl/gnu/Makefile

@@ -79,7 +79,7 @@ VPATH = \
 	$(FREERTOS)/Source/portable/MemMang \
 	$(FREERTOS)/Source/portable/GCC/ARM_CM4F \
 	$(QPC)/3rd_party/ek-tm4c123gxl \
-	$(QPC)/3rd_party/ek-tm4c123gxl\gnu
+	$(QPC)/3rd_party/ek-tm4c123gxl/gnu
 
 # list of all include directories needed by this project
 INCLUDES  = \

+ 71 - 0
examples/freertos/arm-cm/blinky_ek-tm4c123gxl/gnu/README.txt

@@ -0,0 +1,71 @@
+About this Example
+==================
+This example can be built from the command prompt with the provided
+Makefile. The example can also be imported as a Makefile-based
+project into Eclipse-based IDEs.
+
+
+The Makefile
+============
+The provided Makefile should be easy to adapt for your own projects.
+It contains three build configurations: Debug (default), Release, and
+Spy.
+
+Also, the Makefile has been specifically designed to work as an external
+Makefile with the Eclipse CDT. 
+
+The various build configurations are built as follows:
+
+make
+make CONF=rel
+make CONF=spy
+
+make clean
+make CONF=rel clean
+make CONF=spy clean
+
+***
+NOTE:
+The installation folder of the GNU-ARM toolset on YOUR machine needs
+to be adjusted in the provided Makefile, by editing the symbol: GNU_ARM.
+As described in the comment for this symbol, the GNU-ARM toolset is taken
+from: http://gnutoolchains.com/arm-eabi
+
+It is highly recommened to use the same GNU-ARM distribution, especially
+for ARM Cortex-M4F projects, due to the support for the hardware FPU
+(float-abi=hard).
+***
+
+
+Adjusting Stack and Heap Sizes
+==============================
+The stack and heap sizes are determined in this project by the GCC linker
+script (.ld file), which provides a template of the recommended GCC linker
+script for QP applications.
+   
+
+Startup Code
+============
+The startup code for the TM4C123GH6PM MCU used in this project is
+located in the "3rd_party" folder in the following location:
+
+3rd_party\ek-tm4c123gxl\gcc\startup_TM4C123GH6PM.c
+
+The file startup_TM4C123GH6PM.c provides a template of the recommended
+startup for QP applications and should be easily customizable for other
+ARM Cortex-M microcontrollers.
+
+The startup file typically does not need to be modified or adapted for
+applications. It provides only weak definitions of all exception and
+interrupt handlers, as well as the assert_failed() function.  
+
+The weak function assert_failed() defined in this file might be re-defined
+in the application to customize it for the application-specific error-
+handling policy.
+
+***
+NOTE: The function assert_failed() typically should NOT use the stack,
+because stack might be corrupted by the time this function is called.
+Also, assert_failed() is intended to handle catastrophic errors and
+should NOT return.
+***

+ 2 - 2
examples/freertos/arm-cm/dpp_ek-tm4c123gxl/dpp.h

@@ -51,9 +51,9 @@ void Philo_ctor(void);
 void Table_ctor(void);
 
 
-extern QActive * const AO_Philo[N_PHILO];
+extern QMActive * const AO_Philo[N_PHILO];
 
-extern QActive * const AO_Table;
+extern QMActive * const AO_Table;
 
 
 #endif /* dpp_h */

+ 4 - 4
examples/freertos/arm-cm/dpp_ek-tm4c123gxl/dpp.qm

@@ -315,8 +315,8 @@ me-&gt;fork[n] = FREE;</action>
     <state_diagram size="49,69"/>
    </statechart>
   </class>
-  <attribute name="AO_Philo[N_PHILO]" type="QActive * const" visibility="0x00" properties="0x00"/>
-  <attribute name="AO_Table" type="QActive * const" visibility="0x00" properties="0x00"/>
+  <attribute name="AO_Philo[N_PHILO]" type="QMActive * const" visibility="0x00" properties="0x00"/>
+  <attribute name="AO_Table" type="QMActive * const" visibility="0x00" properties="0x00"/>
   <operation name="Philo_ctor" type="void" visibility="0x00" properties="0x00">
    <code>uint8_t n;
 Philo *me;
@@ -391,7 +391,7 @@ static Philo l_philo[N_PHILO];   /* storage for all Philos */
 #define PHILO_ID(me_)    ((uint8_t)((me_) - l_philo))
 
 /* Global objects ----------------------------------------------------------*/
-QActive * const AO_Philo[N_PHILO] = { /* &quot;opaque&quot; pointers to Philo AO */
+QMActive * const AO_Philo[N_PHILO] = { /* &quot;opaque&quot; pointers to Philo AO */
     &amp;l_philo[0].super,
     &amp;l_philo[1].super,
     &amp;l_philo[2].super,
@@ -422,7 +422,7 @@ $declare(AOs::Table)
 static Table l_table; /* the single instance of the Table active object */
 
 /* Global-scope objects ----------------------------------------------------*/
-QActive * const AO_Table = &amp;l_table.super; /* &quot;opaque&quot; AO pointer */
+QMActive * const AO_Table = &amp;l_table.super; /* &quot;opaque&quot; AO pointer */
 
 /*..........................................................................*/
 $define(AOs::Table_ctor)

+ 1 - 1
examples/freertos/arm-cm/dpp_ek-tm4c123gxl/gnu/Makefile

@@ -79,7 +79,7 @@ VPATH = \
 	$(FREERTOS)/Source/portable/MemMang \
 	$(FREERTOS)/Source/portable/GCC/ARM_CM4F \
 	$(QPC)/3rd_party/ek-tm4c123gxl \
-	$(QPC)/3rd_party/ek-tm4c123gxl\gnu
+	$(QPC)/3rd_party/ek-tm4c123gxl/gnu
 
 # list of all include directories needed by this project
 INCLUDES  = \

+ 71 - 0
examples/freertos/arm-cm/dpp_ek-tm4c123gxl/gnu/README.txt

@@ -0,0 +1,71 @@
+About this Example
+==================
+This example can be built from the command prompt with the provided
+Makefile. The example can also be imported as a Makefile-based
+project into Eclipse-based IDEs.
+
+
+The Makefile
+============
+The provided Makefile should be easy to adapt for your own projects.
+It contains three build configurations: Debug (default), Release, and
+Spy.
+
+Also, the Makefile has been specifically designed to work as an external
+Makefile with the Eclipse CDT. 
+
+The various build configurations are built as follows:
+
+make
+make CONF=rel
+make CONF=spy
+
+make clean
+make CONF=rel clean
+make CONF=spy clean
+
+***
+NOTE:
+The installation folder of the GNU-ARM toolset on YOUR machine needs
+to be adjusted in the provided Makefile, by editing the symbol: GNU_ARM.
+As described in the comment for this symbol, the GNU-ARM toolset is taken
+from: http://gnutoolchains.com/arm-eabi
+
+It is highly recommened to use the same GNU-ARM distribution, especially
+for ARM Cortex-M4F projects, due to the support for the hardware FPU
+(float-abi=hard).
+***
+
+
+Adjusting Stack and Heap Sizes
+==============================
+The stack and heap sizes are determined in this project by the GCC linker
+script (.ld file), which provides a template of the recommended GCC linker
+script for QP applications.
+   
+
+Startup Code
+============
+The startup code for the TM4C123GH6PM MCU used in this project is
+located in the "3rd_party" folder in the following location:
+
+3rd_party\ek-tm4c123gxl\gcc\startup_TM4C123GH6PM.c
+
+The file startup_TM4C123GH6PM.c provides a template of the recommended
+startup for QP applications and should be easily customizable for other
+ARM Cortex-M microcontrollers.
+
+The startup file typically does not need to be modified or adapted for
+applications. It provides only weak definitions of all exception and
+interrupt handlers, as well as the assert_failed() function.  
+
+The weak function assert_failed() defined in this file might be re-defined
+in the application to customize it for the application-specific error-
+handling policy.
+
+***
+NOTE: The function assert_failed() typically should NOT use the stack,
+because stack might be corrupted by the time this function is called.
+Also, assert_failed() is intended to handle catastrophic errors and
+should NOT return.
+***

+ 1 - 1
examples/freertos/arm-cm/dpp_ek-tm4c123gxl/philo.c

@@ -75,7 +75,7 @@ static Philo l_philo[N_PHILO];   /* storage for all Philos */
 #define PHILO_ID(me_)    ((uint8_t)((me_) - l_philo))
 
 /* Global objects ----------------------------------------------------------*/
-QActive * const AO_Philo[N_PHILO] = { /* "opaque" pointers to Philo AO */
+QMActive * const AO_Philo[N_PHILO] = { /* "opaque" pointers to Philo AO */
     &l_philo[0].super,
     &l_philo[1].super,
     &l_philo[2].super,

+ 1 - 1
examples/freertos/arm-cm/dpp_ek-tm4c123gxl/table.c

@@ -72,7 +72,7 @@ static QMState const Table_paused_s = {
 static Table l_table; /* the single instance of the Table active object */
 
 /* Global-scope objects ----------------------------------------------------*/
-QActive * const AO_Table = &l_table.super; /* "opaque" AO pointer */
+QMActive * const AO_Table = &l_table.super; /* "opaque" AO pointer */
 
 /*..........................................................................*/
 /*${AOs::Table_ctor} .......................................................*/

+ 28 - 42
examples/lwip/arm-cm/lwip_ek-lm3s6965/qk/bsp.c

@@ -1,7 +1,7 @@
 /*****************************************************************************
 * Product: DPP with lwIP application, preemptive QK kernel
-* Last Updated for Version: 5.4.0
-* Date of the Last Update:  2015-03-07
+* Last Updated for Version: 5.4.1
+* Date of the Last Update:  2015-05-12
 *
 *                    Q u a n t u m     L e a P s
 *                    ---------------------------
@@ -85,8 +85,12 @@ static uint32_t l_nTicks;
 
 /*..........................................................................*/
 void SysTick_Handler(void) {
-    static uint32_t btn_debounced  = 0;
-    static uint8_t  debounce_state = 0;
+    /* state of the button debouncing, see below */
+    static struct ButtonsDebouncing {
+        uint32_t depressed;
+        uint32_t previous;
+    } buttons = { ~0U, ~0U };
+    uint32_t current;
     uint32_t volatile tmp;
 
     QK_ISR_ENTRY();    /* inform QK about ISR entry */
@@ -94,49 +98,31 @@ void SysTick_Handler(void) {
     ++l_nTicks;        /* count the number of clock ticks */
 
 #ifdef Q_SPY
-    tmp = SysTick->CTRL;   /* clear SysTick_CTRL_COUNTFLAG */
+    tmp = SysTick->CTRL; /* clear SysTick_CTRL_COUNTFLAG */
     QS_tickTime_ += QS_tickPeriod_; /* account for the clock rollover */
 #endif
 
     QF_TICK_X(0U, &l_SysTick_Handler); /* process time events for rate 0 */
 
-    tmp = GPIOF->DATA_Bits[USER_BTN];  /* read the User Button */
-    switch (debounce_state) {
-        case 0:
-            if (tmp != btn_debounced) {
-                debounce_state = 1;  /* transition to the next state */
-            }
-            break;
-        case 1:
-            if (tmp != btn_debounced) {
-                debounce_state = 2;  /* transition to the next state */
-            }
-            else {
-                debounce_state = 0;  /* transition back to state 0 */
-            }
-            break;
-        case 2:
-            if (tmp != btn_debounced) {
-                debounce_state = 3;  /* transition to the next state */
-            }
-            else {
-                debounce_state = 0;  /* transition back to state 0 */
-            }
-            break;
-        case 3:
-            if (tmp != btn_debounced) {
-                btn_debounced = tmp;  /* save the debounced button value */
-                if (tmp == 0) {       /* is the button depressed? */
-                    static QEvt const bd = { BTN_DOWN_SIG, 0 };
-                    QF_PUBLISH(&bd, &l_SysTick_Handler);
-                }
-                else {
-                    static QEvt const bu = { BTN_UP_SIG, 0 };
-                    QF_PUBLISH(&bu, &l_SysTick_Handler);
-                }
-            }
-            debounce_state = 0;      /* transition back to state 0 */
-            break;
+    /* Perform the debouncing of buttons. The algorithm for debouncing
+    * adapted from the book "Embedded Systems Dictionary" by Jack Ganssle
+    * and Michael Barr, page 71.
+    */
+    current = ~GPIOF->DATA_Bits[USER_BTN]; /* read USER_BTN */
+    tmp = buttons.depressed; /* save the debounced depressed buttons */
+    buttons.depressed |= (buttons.previous & current); /* set depressed */
+    buttons.depressed &= (buttons.previous | current); /* clear released */
+    buttons.previous   = current; /* update the history */
+    tmp ^= buttons.depressed;     /* changed debounced depressed */
+    if ((tmp & USER_BTN) != 0U) { /* debounced USER_BTN state changed? */
+        if ((buttons.depressed & USER_BTN) != 0U) { /* is BTN depressed? */
+            static QEvt const bd = { BTN_DOWN_SIG, 0U, 0U };
+            QF_PUBLISH(&bd, &l_SysTick_Handler);
+        }
+        else { /* the button is released */
+            static QEvt const bu = { BTN_UP_SIG, 0U, 0U };
+            QF_PUBLISH(&bu, &l_SysTick_Handler);
+        }
     }
 
     QK_ISR_EXIT();  /* inform QK about ISR exit */

+ 4 - 4
examples/lwip/arm-cm/lwip_ek-lm3s6965/qk/gnu/Makefile

@@ -72,21 +72,21 @@ VPATH = \
 	$(QPC)/source \
 	$(QP_PORT_DIR) \
 	$(QPC)/3rd_party/ek-lm3s6965 \
-	$(QPC)/3rd_party/ek-lm3s6965\gnu \
+	$(QPC)/3rd_party/ek-lm3s6965/gnu \
 	$(QPC)/3rd_party/ek-lm3s6965/lwip_driver/netif \
 	$(QPC)/3rd_party/lwip/apps/webserver_raw
 
 # list of all include directories needed by this project
 INCLUDES  = \
-	-I..\.. \
+	-I../.. \
 	-I$(QPC)/include \
 	-I$(QPC)/source \
 	-I$(QP_PORT_DIR) \
 	-I$(QPC)/3rd_party/CMSIS/Include \
 	-I$(QPC)/3rd_party/ek-lm3s6965 \
 	-I$(QPC)/3rd_party/ek-lm3s6965/lwip_driver \
-	-I$(QPC)/3rd_party/lwip\src/include \
-	-I$(QPC)/3rd_party/lwip\src/include/ipv4 \
+	-I$(QPC)/3rd_party/lwip/src/include \
+	-I$(QPC)/3rd_party/lwip/src/include/ipv4 \
 	-I$(QPC)/3rd_party/lwip/src \
 	-I$(QPC)/3rd_party/lwip/apps/webserver_raw
 

+ 28 - 42
examples/lwip/arm-cm/lwip_ek-lm3s6965/qv/bsp.c

@@ -1,7 +1,7 @@
 /*****************************************************************************
 * Product: DPP with lwIP application, cooperative QV kernel
-* Last Updated for Version: 5.4.0
-* Date of the Last Update:  2015-04-07
+* Last Updated for Version: 5.4.1
+* Date of the Last Update:  2015-05-12
 *
 *                    Q u a n t u m     L e a P s
 *                    ---------------------------
@@ -85,56 +85,42 @@ static uint32_t l_nTicks;
 
 /*..........................................................................*/
 void SysTick_Handler(void) {
-    static uint32_t btn_debounced  = 0U;
-    static uint8_t  debounce_state = 0U;
+    /* state of the button debouncing, see below */
+    static struct ButtonsDebouncing {
+        uint32_t depressed;
+        uint32_t previous;
+    } buttons = { ~0U, ~0U };
+    uint32_t current;
     uint32_t volatile tmp;
 
     ++l_nTicks;        /* count the number of clock ticks */
 
 #ifdef Q_SPY
-    tmp = SysTick->CTRL;   /* clear SysTick_CTRL_COUNTFLAG */
+    tmp = SysTick->CTRL; /* clear SysTick_CTRL_COUNTFLAG */
     QS_tickTime_ += QS_tickPeriod_; /* account for the clock rollover */
 #endif
 
     QF_TICK_X(0U, &l_SysTick_Handler); /* process time events for rate 0 */
 
-    tmp = GPIOF->DATA_Bits[USER_BTN];  /* read the User Button */
-    switch (debounce_state) {
-        case 0:
-            if (tmp != btn_debounced) {
-                debounce_state = 1;  /* transition to the next state */
-            }
-            break;
-        case 1:
-            if (tmp != btn_debounced) {
-                debounce_state = 2;  /* transition to the next state */
-            }
-            else {
-                debounce_state = 0;  /* transition back to state 0 */
-            }
-            break;
-        case 2:
-            if (tmp != btn_debounced) {
-                debounce_state = 3;  /* transition to the next state */
-            }
-            else {
-                debounce_state = 0;  /* transition back to state 0 */
-            }
-            break;
-        case 3:
-            if (tmp != btn_debounced) {
-                btn_debounced = tmp;  /* save the debounced button value */
-                if (tmp == 0) {       /* is the button depressed? */
-                    static QEvt const bd = { BTN_DOWN_SIG, 0 };
-                    QF_PUBLISH(&bd, &l_SysTick_Handler);
-                }
-                else {
-                    static QEvt const bu = { BTN_UP_SIG, 0 };
-                    QF_PUBLISH(&bu, &l_SysTick_Handler);
-                }
-            }
-            debounce_state = 0;      /* transition back to state 0 */
-            break;
+    /* Perform the debouncing of buttons. The algorithm for debouncing
+    * adapted from the book "Embedded Systems Dictionary" by Jack Ganssle
+    * and Michael Barr, page 71.
+    */
+    current = ~GPIOF->DATA_Bits[USER_BTN]; /* read USER_BTN */
+    tmp = buttons.depressed; /* save the debounced depressed buttons */
+    buttons.depressed |= (buttons.previous & current); /* set depressed */
+    buttons.depressed &= (buttons.previous | current); /* clear released */
+    buttons.previous   = current; /* update the history */
+    tmp ^= buttons.depressed;     /* changed debounced depressed */
+    if ((tmp & USER_BTN) != 0U) { /* debounced USER_BTN state changed? */
+        if ((buttons.depressed & USER_BTN) != 0U) { /* is BTN depressed? */
+            static QEvt const bd = { BTN_DOWN_SIG, 0U, 0U };
+            QF_PUBLISH(&bd, &l_SysTick_Handler);
+        }
+        else { /* the button is released */
+            static QEvt const bu = { BTN_UP_SIG, 0U, 0U };
+            QF_PUBLISH(&bu, &l_SysTick_Handler);
+        }
     }
 }
 

+ 4 - 4
examples/lwip/arm-cm/lwip_ek-lm3s6965/qv/gnu/Makefile

@@ -72,21 +72,21 @@ VPATH = \
 	$(QPC)/source \
 	$(QP_PORT_DIR) \
 	$(QPC)/3rd_party/ek-lm3s6965 \
-	$(QPC)/3rd_party/ek-lm3s6965\gnu \
+	$(QPC)/3rd_party/ek-lm3s6965/gnu \
 	$(QPC)/3rd_party/ek-lm3s6965/lwip_driver/netif \
 	$(QPC)/3rd_party/lwip/apps/webserver_raw
 
 # list of all include directories needed by this project
 INCLUDES  = \
-	-I..\.. \
+	-I../.. \
 	-I$(QPC)/include \
 	-I$(QPC)/source \
 	-I$(QP_PORT_DIR) \
 	-I$(QPC)/3rd_party/CMSIS/Include \
 	-I$(QPC)/3rd_party/ek-lm3s6965 \
 	-I$(QPC)/3rd_party/ek-lm3s6965/lwip_driver \
-	-I$(QPC)/3rd_party/lwip\src/include \
-	-I$(QPC)/3rd_party/lwip\src/include/ipv4 \
+	-I$(QPC)/3rd_party/lwip/src/include \
+	-I$(QPC)/3rd_party/lwip/src/include/ipv4 \
 	-I$(QPC)/3rd_party/lwip/src \
 	-I$(QPC)/3rd_party/lwip/apps/webserver_raw
 

+ 2 - 2
examples/msp430/dpp_msp-exp430g2/dpp.h

@@ -51,9 +51,9 @@ void Philo_ctor(void);
 void Table_ctor(void);
 
 
-extern QActive * const AO_Philo[N_PHILO];
+extern QMActive * const AO_Philo[N_PHILO];
 
-extern QActive * const AO_Table;
+extern QMActive * const AO_Table;
 
 
 #endif /* dpp_h */

+ 4 - 4
examples/msp430/dpp_msp-exp430g2/dpp.qm

@@ -315,8 +315,8 @@ me-&gt;fork[n] = FREE;</action>
     <state_diagram size="49,69"/>
    </statechart>
   </class>
-  <attribute name="AO_Philo[N_PHILO]" type="QActive * const" visibility="0x00" properties="0x00"/>
-  <attribute name="AO_Table" type="QActive * const" visibility="0x00" properties="0x00"/>
+  <attribute name="AO_Philo[N_PHILO]" type="QMActive * const" visibility="0x00" properties="0x00"/>
+  <attribute name="AO_Table" type="QMActive * const" visibility="0x00" properties="0x00"/>
   <operation name="Philo_ctor" type="void" visibility="0x00" properties="0x00">
    <code>uint8_t n;
 Philo *me;
@@ -391,7 +391,7 @@ static Philo l_philo[N_PHILO];   /* storage for all Philos */
 #define PHILO_ID(me_)    ((uint8_t)((me_) - l_philo))
 
 /* Global objects ----------------------------------------------------------*/
-QActive * const AO_Philo[N_PHILO] = { /* &quot;opaque&quot; pointers to Philo AO */
+QMActive * const AO_Philo[N_PHILO] = { /* &quot;opaque&quot; pointers to Philo AO */
     &amp;l_philo[0].super,
     &amp;l_philo[1].super,
     //&amp;l_philo[2].super,
@@ -422,7 +422,7 @@ $declare(AOs::Table)
 static Table l_table; /* the single instance of the Table active object */
 
 /* Global-scope objects ----------------------------------------------------*/
-QActive * const AO_Table = &amp;l_table.super; /* &quot;opaque&quot; AO pointer */
+QMActive * const AO_Table = &amp;l_table.super; /* &quot;opaque&quot; AO pointer */
 
 /*..........................................................................*/
 $define(AOs::Table_ctor)

+ 1 - 1
examples/msp430/dpp_msp-exp430g2/philo.c

@@ -75,7 +75,7 @@ static Philo l_philo[N_PHILO];   /* storage for all Philos */
 #define PHILO_ID(me_)    ((uint8_t)((me_) - l_philo))
 
 /* Global objects ----------------------------------------------------------*/
-QActive * const AO_Philo[N_PHILO] = { /* "opaque" pointers to Philo AO */
+QMActive * const AO_Philo[N_PHILO] = { /* "opaque" pointers to Philo AO */
     &l_philo[0].super,
     &l_philo[1].super,
     //&l_philo[2].super,

+ 1 - 1
examples/msp430/dpp_msp-exp430g2/table.c

@@ -72,7 +72,7 @@ static QMState const Table_paused_s = {
 static Table l_table; /* the single instance of the Table active object */
 
 /* Global-scope objects ----------------------------------------------------*/
-QActive * const AO_Table = &l_table.super; /* "opaque" AO pointer */
+QMActive * const AO_Table = &l_table.super; /* "opaque" AO pointer */
 
 /*..........................................................................*/
 /*${AOs::Table_ctor} .......................................................*/

+ 2 - 2
examples/posix/dpp/dpp.h

@@ -51,9 +51,9 @@ void Philo_ctor(void);
 void Table_ctor(void);
 
 
-extern QActive * const AO_Philo[N_PHILO];
+extern QMActive * const AO_Philo[N_PHILO];
 
-extern QActive * const AO_Table;
+extern QMActive * const AO_Table;
 
 
 #endif /* dpp_h */

Некоторые файлы не были показаны из-за большого количества измененных файлов