1
- 2
+ 7
0
0
1
diff --git a/examples/arm-cm/real-time_nucleo-l053r8/README.md b/examples/arm-cm/real-time_nucleo-l053r8/README.md
new file mode 100644
index 00000000..0f10c560
--- /dev/null
+++ b/examples/arm-cm/real-time_nucleo-l053r8/README.md
@@ -0,0 +1,64 @@
+> **NOTE**
+This file is best viewed in a **markdown viewer**, such as the one built into GitHub. Markdown viewers are also available as plug-ins to popular Internet browsers.
+
+# Real-Time Example on NUCLEO-L053R8
+This example implements the "Periodic-Sporadic" application on the STM32 NUCLEO-L053R8 board (ARM Cortex-M0+). The example demonstrates various real-time preemption scenarios among active objects in the **QK** and **QV** kernels. The example requires a **logic analyzer**.
+
+
+
+STM32 NUCLEO-L053R8
+
+
+
+
+Logic analyzer trace after pressing the button (QK kernel)
+
+
+# Code Organization
+```
+examples\arm-cm\real-time_nucleo-l053r8
+|
++---qk // preemptive QK kernel
+| +---armclang // ARM/KEIL MDK with Compiler 6 (ARM/CLANG)
+| | rt-qk.uvprojx // uVision project
+|
++---qv-ms // cooperative QV kernel (multi-stage tasks)
+| +---armclang // ARM/KEIL MDK with Compiler 6 (ARM/CLANG)
+| | rt-qv-ms.uvprojx // uVision project
+|
++---qv-tt // cooperative QV kernel (time-triggered)
+| +---armclang // ARM/KEIL MDK with Compiler 6 (ARM/CLANG)
+| | rt-qv-tt.uvprojx // uVision project
+
+```
+
+## Features Demonstrated
+The example QP application consists of 2 periodic threads (Active Objects) and two sporadic, lon-running threads (Active Objects). Additionally, the Time-Triggered (TT) version has a tt-schedulier thread.
+
+- directory `qk`: preemptive run-to-completion QK kernel
+
+- directory `qv-ms`: cooperative run-to-completion QV kernel with multi-stage tasks
+
+- directory `qv-tt`: cooperative run-to-completion QV kernel with time-triggered tasks
+
+# Builing the Examples
+
+## ARM/KEIL MDK
+- Open one of the provided KEIL uVision projects (e.g., `rt-qk.uvprojx`) in Keil uVision IDE. Build/Debug/Download to the board from the IDE.
+
+
+# Running the Examples
+
+## Setting up a Logic Analyzer
+The NUCLEO-L053R8 needs to be conntected to a logic analyzer as shown in the picture below.
+
+
+
+Connecting STM32 NUCLEO-L053R8 to a logic analyzer
+
+
+
+The logic analyzer needs to be configured as follwos:
+- sampling rate: several MHz (e.g., 24MHz)
+- trigger: Sporadic (PC.13 on the NUCLEO-L053R8), falling edge
+- pre-trigger capture ratio: 20%
diff --git a/examples/arm-cm/real-time_nucleo-l053r8/qk/app.hpp b/examples/arm-cm/real-time_nucleo-l053r8/qk/app.hpp
new file mode 100644
index 00000000..ea1bbaa7
--- /dev/null
+++ b/examples/arm-cm/real-time_nucleo-l053r8/qk/app.hpp
@@ -0,0 +1,96 @@
+//$file${.::app.hpp} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
+//
+// Model: real-time.qm
+// File: ${.::app.hpp}
+//
+// This code has been generated by QM 5.3.0 .
+// DO NOT EDIT THIS FILE MANUALLY. All your changes will be lost.
+//
+// SPDX-License-Identifier: GPL-3.0-or-later
+//
+// This generated code is open source software: you can redistribute it under
+// the terms of the GNU General Public License as published by the Free
+// Software Foundation.
+//
+// This code is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+// more details.
+//
+// NOTE:
+// Alternatively, this generated code may be distributed under the terms
+// of Quantum Leaps commercial licenses, which expressly supersede the GNU
+// General Public License and are specifically designed for licensees
+// interested in retaining the proprietary status of their code.
+//
+// Contact information:
+//
+//
+//
+//$endhead${.::app.hpp} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+#ifndef APP_HPP_
+#define APP_HPP_
+
+//$declare${Shared} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
+namespace APP {
+
+//${Shared::AppSignals} ......................................................
+enum AppSignals : QP::QSignal {
+ PERIODIC_SPEC_SIG = QP::Q_USER_SIG,
+ TIMEOUT_SIG,
+ SPORADIC_A_SIG,
+ SPORADIC_B_SIG,
+ REMINDER_SIG,
+ // ...
+ MAX_SIG // the last signal
+};
+
+//${Shared::PeriodicSpecEvt} .................................................
+class PeriodicSpecEvt : public QP::QEvt {
+public:
+ std::uint16_t toggles;
+ std::uint8_t ticks;
+
+public:
+ constexpr PeriodicSpecEvt(
+ QP::QSignal s,
+ std::uint16_t tg,
+ std::uint8_t ti)
+ : QP::QEvt(s),
+ toggles(tg),
+ ticks(ti)
+ {}
+}; // class PeriodicSpecEvt
+
+//${Shared::SporadicSpecEvt} .................................................
+class SporadicSpecEvt : public QP::QEvt {
+public:
+ std::uint16_t toggles;
+ std::uint16_t rtc_toggles;
+
+public:
+ constexpr SporadicSpecEvt(
+ QP::QSignal s,
+ std::uint16_t tg)
+ : QP::QEvt(s),
+ toggles(tg),
+ rtc_toggles(0U)
+ {}
+}; // class SporadicSpecEvt
+
+//${Shared::AO_Periodic1} ....................................................
+extern QP::QActive * const AO_Periodic1;
+
+//${Shared::AO_Periodic4} ....................................................
+extern QP::QActive * const AO_Periodic4;
+
+//${Shared::AO_Sporadic2} ....................................................
+extern QP::QActive * const AO_Sporadic2;
+
+//${Shared::AO_Sporadic3} ....................................................
+extern QP::QActive * const AO_Sporadic3;
+
+} // namespace APP
+//$enddecl${Shared} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+#endif // APP_HPP_
diff --git a/examples/arm-cm/real-time_nucleo-l053r8/qk/armclang/rt-qk.sct b/examples/arm-cm/real-time_nucleo-l053r8/qk/armclang/rt-qk.sct
new file mode 100644
index 00000000..04d0dc68
--- /dev/null
+++ b/examples/arm-cm/real-time_nucleo-l053r8/qk/armclang/rt-qk.sct
@@ -0,0 +1,20 @@
+; *************************************************************
+; *** Scatter-Loading Description File generated by uVision ***
+;
+; Adapted by Quantum Leaps:
+; moved STACK as the first section in RW_IRAM1
+; *************************************************************
+
+LR_IROM1 0x08000000 0x00010000 { ; load region size_region
+ ER_IROM1 0x08000000 0x00010000 { ; load address = execution address
+ *.o (RESET, +First)
+ *(InRoot$$Sections)
+ .ANY (+RO)
+ .ANY (+XO)
+ }
+ RW_IRAM1 0x20000000 0x00002000 { ; RW data
+ *.o (STACK, +First)
+ .ANY (+RW +ZI)
+ }
+}
+
diff --git a/examples/arm-cm/real-time_nucleo-l053r8/qk/armclang/rt-qk.uvoptx b/examples/arm-cm/real-time_nucleo-l053r8/qk/armclang/rt-qk.uvoptx
new file mode 100644
index 00000000..61c57acf
--- /dev/null
+++ b/examples/arm-cm/real-time_nucleo-l053r8/qk/armclang/rt-qk.uvoptx
@@ -0,0 +1,1048 @@
+
+
+
+ 1.0
+
+ ### uVision Project, (C) Keil Software
+
+
+ *.c
+ *.s*; *.src; *.a*
+ *.obj; *.o
+ *.lib
+ *.txt; *.h; *.inc; *.md
+ *.plm
+ *.cpp
+ 0
+
+
+
+ 0
+ 0
+
+
+
+ rt-dbg
+ 0x4
+ ARM-ADS
+
+ 12000000
+
+ 1
+ 1
+ 0
+ 1
+ 0
+
+
+ 1
+ 65535
+ 0
+ 0
+ 0
+
+
+ 79
+ 66
+ 8
+ .\dbg\
+
+
+ 1
+ 1
+ 1
+ 0
+ 1
+ 1
+ 0
+ 1
+ 0
+ 0
+ 0
+ 0
+
+
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 0
+ 0
+
+
+ 1
+ 0
+ 1
+
+ 18
+
+ 0
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 0
+ 1
+ 0
+ 1
+ 1
+ 0
+ 0
+ 1
+ 0
+ 0
+ 6
+
+
+
+
+
+
+
+
+
+
+ STLink\ST-LINKIII-KEIL_SWO.dll
+
+
+
+ 0
+ UL2CM3
+ UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32L0xx_64 -FS08000000 -FL010000 -FP0($$Device:STM32L053R8Tx$CMSIS\Flash\STM32L0xx_64.FLM))
+
+
+ 0
+ ST-LINKIII-KEIL_SWO
+ -U066CFF484951775087074312 -O8431 -SF10000 -C0 -A0 -I0 -HNlocalhost -HP7184 -P2 -N00("ARM CoreSight SW-DP (ARM Core") -D00(0BC11477) -L00(0) -TO131090 -TC10000000 -TT10000000 -TP21 -TDS8004 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC800 -FN1 -FF0STM32L0xx_64.FLM -FS08000000 -FL010000 -FP0($$Device:STM32L053R8Tx$CMSIS\Flash\STM32L0xx_64.FLM)
+
+
+ 0
+ DLGUARM
+ (105=-1,-1,-1,-1,0)
+
+
+ 0
+ ARMRTXEVENTFLAGS
+ -L70 -Z18 -C0 -M0 -T1
+
+
+ 0
+ DLGTARM
+ (1010=979,559,1390,1061,0)(1007=2082,245,2289,466,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)
+
+
+ 0
+ ARMDBGFLAGS
+
+
+
+
+
+
+ 0
+ 1
+ QK_attr_
+
+
+ 1
+ 1
+ QF_readySet_
+
+
+
+
+ 1
+ 2
+ 0x2000020C
+ 0
+
+
+
+
+ 2
+ 0
+ 0x400
+ 0
+
+
+
+ 0
+
+
+ 0
+ 0
+ 1
+ 0
+ 0
+ 0
+ 0
+ 1
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+
+
+
+ 0
+ 0
+ 0
+
+
+
+
+
+
+
+
+
+ 1
+ 0
+ 0
+ 2
+ 10000000
+
+
+
+
+
+ rt-rel
+ 0x4
+ ARM-ADS
+
+ 12000000
+
+ 1
+ 1
+ 0
+ 1
+ 0
+
+
+ 1
+ 65535
+ 0
+ 0
+ 0
+
+
+ 79
+ 66
+ 8
+ .\rel\
+
+
+ 1
+ 1
+ 1
+ 0
+ 1
+ 1
+ 0
+ 1
+ 0
+ 0
+ 0
+ 0
+
+
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 0
+ 0
+
+
+ 1
+ 0
+ 0
+
+ 18
+
+ 0
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 0
+ 1
+ 0
+ 1
+ 1
+ 0
+ 0
+ 1
+ 0
+ 0
+ 6
+
+
+
+
+
+
+
+
+
+
+ STLink\ST-LINKIII-KEIL_SWO.dll
+
+
+
+ 0
+ UL2CM3
+ UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32L0xx_64 -FS08000000 -FL010000 -FP0($$Device:STM32L053R8Tx$CMSIS\Flash\STM32L0xx_64.FLM))
+
+
+ 0
+ ST-LINKIII-KEIL_SWO
+ -U066CFF484951775087074312 -I0 -O8431 -S0 -C0 -A0 -N00("ARM CoreSight SW-DP") -D00(0BC11477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO7 -FD20000000 -FC1000 -FN1 -FF0STM32L0xx_64.FLM -FS08000000 -FL010000 -FP0($$Device:STM32L053R8Tx$CMSIS\Flash\STM32L0xx_64.FLM)
+
+
+ 0
+ DLGUARM
+ (105=-1,-1,-1,-1,0)
+
+
+ 0
+ ARMRTXEVENTFLAGS
+ -L70 -Z18 -C0 -M0 -T1
+
+
+ 0
+ DLGTARM
+ (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)
+
+
+ 0
+ ARMDBGFLAGS
+
+
+
+
+
+
+ 1
+ 2
+ 0x20000200
+ 0
+
+
+
+
+ 2
+ 0
+ 0x400
+ 0
+
+
+
+ 0
+
+
+ 0
+ 0
+ 1
+ 0
+ 0
+ 0
+ 0
+ 1
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+
+
+
+ 0
+ 0
+ 0
+
+
+
+
+
+
+
+
+
+ 1
+ 1
+ 0
+ 2
+ 10000000
+
+
+
+
+
+ rt-spy
+ 0x4
+ ARM-ADS
+
+ 12000000
+
+ 1
+ 1
+ 1
+ 0
+ 0
+
+
+ 1
+ 65535
+ 0
+ 0
+ 0
+
+
+ 79
+ 66
+ 8
+ .\spy\
+
+
+ 1
+ 1
+ 1
+ 0
+ 1
+ 1
+ 0
+ 1
+ 0
+ 0
+ 0
+ 0
+
+
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 0
+ 0
+
+
+ 1
+ 0
+ 0
+
+ 18
+
+ 0
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 0
+ 1
+ 0
+ 1
+ 1
+ 0
+ 0
+ 1
+ 0
+ 0
+ 6
+
+
+
+
+
+
+
+
+
+
+ STLink\ST-LINKIII-KEIL_SWO.dll
+
+
+
+ 0
+ UL2CM3
+ -O207 -S0 -C0 -FO7 -FN1 -FC1000 -FD20000000 -FF0STM32L0xx_64 -FL010000 -FS08000000 -FP0($$Device:STM32L053R8Tx$CMSIS\Flash\STM32L0xx_64.FLM)
+
+
+ 0
+ ST-LINKIII-KEIL_SWO
+ -U066CFF484951775087074312 -O8431 -SF4000 -C0 -A0 -I0 -HNlocalhost -HP7184 -P2 -N00("ARM CoreSight SW-DP") -D00(0BC11477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8004 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO7 -FD20000000 -FC1000 -FN1 -FF0STM32L0xx_64.FLM -FS08000000 -FL010000 -FP0($$Device:STM32L053R8Tx$CMSIS\Flash\STM32L0xx_64.FLM)
+
+
+ 0
+ DLGUARM
+ (105=-1,-1,-1,-1,0)
+
+
+ 0
+ ARMRTXEVENTFLAGS
+ -L70 -Z18 -C0 -M0 -T1
+
+
+ 0
+ DLGTARM
+ (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)
+
+
+ 0
+ ARMDBGFLAGS
+
+
+
+
+
+
+ 1
+ 2
+ 0x20000200
+ 0
+
+
+
+
+ 2
+ 0
+ 0x400
+ 0
+
+
+
+ 0
+
+
+ 0
+ 0
+ 1
+ 0
+ 0
+ 0
+ 0
+ 1
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+
+
+
+ 0
+ 0
+ 0
+
+
+
+
+
+
+
+
+
+ 1
+ 0
+ 0
+ 2
+ 10000000
+
+
+
+
+
+ Application
+ 1
+ 0
+ 0
+ 0
+
+ 1
+ 1
+ 5
+ 0
+ 0
+ 0
+ ..\app.hpp
+ app.hpp
+ 0
+ 0
+
+
+ 1
+ 2
+ 8
+ 0
+ 0
+ 0
+ ..\bsp.cpp
+ bsp.cpp
+ 0
+ 0
+
+
+ 1
+ 3
+ 5
+ 0
+ 0
+ 0
+ ..\bsp.hpp
+ bsp.hpp
+ 0
+ 0
+
+
+ 1
+ 4
+ 8
+ 0
+ 0
+ 0
+ ..\main.cpp
+ main.cpp
+ 0
+ 0
+
+
+ 1
+ 5
+ 8
+ 0
+ 0
+ 0
+ ..\periodic1.cpp
+ periodic1.cpp
+ 0
+ 0
+
+
+ 1
+ 6
+ 8
+ 0
+ 0
+ 0
+ ..\periodic4.cpp
+ periodic4.cpp
+ 0
+ 0
+
+
+ 1
+ 7
+ 8
+ 0
+ 0
+ 0
+ ..\sporadic2.cpp
+ sporadic2.cpp
+ 0
+ 0
+
+
+ 1
+ 8
+ 8
+ 0
+ 0
+ 0
+ ..\sporadic3.cpp
+ sporadic3.cpp
+ 0
+ 0
+
+
+
+
+ nucleo-l053r8
+ 1
+ 0
+ 0
+ 0
+
+ 2
+ 9
+ 5
+ 0
+ 0
+ 0
+ ..\..\..\..\..\3rd_party\nucleo-l053r8\stm32l0xx.h
+ stm32l0xx.h
+ 0
+ 0
+
+
+ 2
+ 10
+ 5
+ 0
+ 0
+ 0
+ ..\..\..\..\..\3rd_party\nucleo-l053r8\stm32l053xx.h
+ stm32l053xx.h
+ 0
+ 0
+
+
+ 2
+ 11
+ 1
+ 0
+ 0
+ 0
+ ..\..\..\..\..\3rd_party\nucleo-l053r8\system_stm32l0xx.c
+ system_stm32l0xx.c
+ 0
+ 0
+
+
+ 2
+ 12
+ 5
+ 0
+ 0
+ 0
+ ..\..\..\..\..\3rd_party\nucleo-l053r8\system_stm32l0xx.h
+ system_stm32l0xx.h
+ 0
+ 0
+
+
+ 2
+ 13
+ 2
+ 0
+ 0
+ 0
+ ..\..\..\..\..\3rd_party\nucleo-l053r8\arm\startup_stm32l053xx.s
+ startup_stm32l053xx.s
+ 0
+ 0
+
+
+
+
+ QP
+ 1
+ 0
+ 0
+ 0
+
+ 3
+ 14
+ 8
+ 0
+ 0
+ 0
+ ..\..\..\..\..\src\qf\qep_hsm.cpp
+ qep_hsm.cpp
+ 0
+ 0
+
+
+ 3
+ 15
+ 8
+ 0
+ 0
+ 0
+ ..\..\..\..\..\src\qf\qep_msm.cpp
+ qep_msm.cpp
+ 0
+ 0
+
+
+ 3
+ 16
+ 8
+ 0
+ 0
+ 0
+ ..\..\..\..\..\src\qf\qf_act.cpp
+ qf_act.cpp
+ 0
+ 0
+
+
+ 3
+ 17
+ 8
+ 0
+ 0
+ 0
+ ..\..\..\..\..\src\qf\qf_actq.cpp
+ qf_actq.cpp
+ 0
+ 0
+
+
+ 3
+ 18
+ 8
+ 0
+ 0
+ 0
+ ..\..\..\..\..\src\qf\qf_defer.cpp
+ qf_defer.cpp
+ 0
+ 0
+
+
+ 3
+ 19
+ 8
+ 0
+ 0
+ 0
+ ..\..\..\..\..\src\qf\qf_dyn.cpp
+ qf_dyn.cpp
+ 0
+ 0
+
+
+ 3
+ 20
+ 8
+ 0
+ 0
+ 0
+ ..\..\..\..\..\src\qf\qf_mem.cpp
+ qf_mem.cpp
+ 0
+ 0
+
+
+ 3
+ 21
+ 8
+ 0
+ 0
+ 0
+ ..\..\..\..\..\src\qf\qf_ps.cpp
+ qf_ps.cpp
+ 0
+ 0
+
+
+ 3
+ 22
+ 8
+ 0
+ 0
+ 0
+ ..\..\..\..\..\src\qf\qf_qact.cpp
+ qf_qact.cpp
+ 0
+ 0
+
+
+ 3
+ 23
+ 8
+ 0
+ 0
+ 0
+ ..\..\..\..\..\src\qf\qf_qeq.cpp
+ qf_qeq.cpp
+ 0
+ 0
+
+
+ 3
+ 24
+ 8
+ 0
+ 0
+ 0
+ ..\..\..\..\..\src\qf\qf_qmact.cpp
+ qf_qmact.cpp
+ 0
+ 0
+
+
+ 3
+ 25
+ 8
+ 0
+ 0
+ 0
+ ..\..\..\..\..\src\qf\qf_time.cpp
+ qf_time.cpp
+ 0
+ 0
+
+
+ 3
+ 26
+ 8
+ 0
+ 0
+ 0
+ ..\..\..\..\..\src\qk\qk.cpp
+ qk.cpp
+ 0
+ 0
+
+
+
+
+ QP_port
+ 1
+ 0
+ 0
+ 0
+
+ 4
+ 27
+ 8
+ 0
+ 0
+ 0
+ ..\..\..\..\..\ports\arm-cm\qk\armclang\qk_port.cpp
+ qk_port.cpp
+ 0
+ 0
+
+
+ 4
+ 28
+ 5
+ 0
+ 0
+ 0
+ ..\..\..\..\..\ports\arm-cm\qk\armclang\qp_port.hpp
+ qp_port.hpp
+ 0
+ 0
+
+
+ 4
+ 29
+ 5
+ 0
+ 0
+ 0
+ ..\..\..\..\..\ports\arm-cm\qk\armclang\qs_port.hpp
+ qs_port.hpp
+ 0
+ 0
+
+
+
+
+ QS
+ 1
+ 0
+ 0
+ 0
+
+ 5
+ 30
+ 8
+ 0
+ 0
+ 0
+ ..\..\..\..\..\src\qs\qs.cpp
+ qs.cpp
+ 0
+ 0
+
+
+ 5
+ 31
+ 8
+ 0
+ 0
+ 0
+ ..\..\..\..\..\src\qs\qs_rx.cpp
+ qs_rx.cpp
+ 0
+ 0
+
+
+ 5
+ 32
+ 8
+ 0
+ 0
+ 0
+ ..\..\..\..\..\src\qs\qstamp.cpp
+ qstamp.cpp
+ 0
+ 0
+
+
+
+
diff --git a/examples/arm-cm/real-time_nucleo-l053r8/qk/armclang/rt-qk.uvprojx b/examples/arm-cm/real-time_nucleo-l053r8/qk/armclang/rt-qk.uvprojx
new file mode 100644
index 00000000..1e26b19d
--- /dev/null
+++ b/examples/arm-cm/real-time_nucleo-l053r8/qk/armclang/rt-qk.uvprojx
@@ -0,0 +1,1841 @@
+
+
+
+ 2.1
+
+ ### uVision Project, (C) Keil Software
+
+
+
+ rt-dbg
+ 0x4
+ ARM-ADS
+ 6190000::V6.19::ARMCLANG
+ 1
+
+
+ STM32L053R8Tx
+ STMicroelectronics
+ Keil.STM32L0xx_DFP.2.2.0
+ http://www.keil.com/pack/
+ IRAM(0x20000000,0x00002000) IROM(0x08000000,0x00010000) CPUTYPE("Cortex-M0+") CLOCK(12000000) ELITTLE
+
+
+ UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32L0xx_64 -FS08000000 -FL010000 -FP0($$Device:STM32L053R8Tx$Flash\STM32L0xx_64.FLM))
+ 0
+ $$Device:STM32L053R8Tx$Device\Include\stm32l0xx.h
+
+
+
+
+
+
+
+
+
+ $$Device:STM32L053R8Tx$SVD\STM32L053x.svd
+ 0
+ 0
+
+
+
+
+
+
+ 0
+ 0
+ 0
+ 0
+ 1
+
+ .\dbg\
+ rt-qk
+ 1
+ 0
+ 0
+ 1
+ 1
+ .\dbg\
+ 1
+ 0
+ 0
+
+ 0
+ 0
+
+
+ 0
+ 0
+ 0
+ 0
+
+
+ 1
+ 0
+ cmd /c "del .\dbg\qstamp.o"
+
+ 0
+ 0
+ 0
+ 0
+
+
+ 1
+ 0
+ fromelf --bin --output .\dbg\rt-qk.bin .\dbg\rt-qk.axf
+
+ 0
+ 0
+ 0
+ 0
+
+ 0
+
+
+
+ 0
+ 0
+ 0
+ 0
+ 0
+ 1
+ 0
+ 0
+ 0
+ 0
+ 3
+
+
+ 1
+
+
+ SARMCM3.DLL
+ -REMAP
+ DARMCM1.DLL
+ -pCM0+
+ SARMCM3.DLL
+
+ TARMCM1.DLL
+ -pCM0+
+
+
+
+ 1
+ 0
+ 0
+ 0
+ 16
+
+
+
+
+ 1
+ 0
+ 0
+ 1
+ 1
+ 4096
+
+ 1
+ BIN\UL2CM3.DLL
+
+
+
+
+
+ 0
+
+
+
+ 0
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 0
+ 1
+ 1
+ 0
+ 0
+ 0
+ 0
+ 0
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 0
+ 0
+ "Cortex-M0+"
+
+ 0
+ 0
+ 0
+ 1
+ 1
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 8
+ 0
+ 0
+ 0
+ 0
+ 3
+ 3
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 1
+ 0
+ 0
+ 0
+ 0
+ 1
+ 0
+
+
+ 0
+ 0x0
+ 0x0
+
+
+ 0
+ 0x0
+ 0x0
+
+
+ 0
+ 0x0
+ 0x0
+
+
+ 0
+ 0x0
+ 0x0
+
+
+ 0
+ 0x0
+ 0x0
+
+
+ 0
+ 0x0
+ 0x0
+
+
+ 0
+ 0x20000000
+ 0x2000
+
+
+ 1
+ 0x8000000
+ 0x10000
+
+
+ 0
+ 0x0
+ 0x0
+
+
+ 1
+ 0x0
+ 0x0
+
+
+ 1
+ 0x0
+ 0x0
+
+
+ 1
+ 0x0
+ 0x0
+
+
+ 1
+ 0x8000000
+ 0x10000
+
+
+ 1
+ 0x0
+ 0x0
+
+
+ 0
+ 0x0
+ 0x0
+
+
+ 0
+ 0x0
+ 0x0
+
+
+ 0
+ 0x0
+ 0x0
+
+
+ 0
+ 0x20000000
+ 0x2000
+
+
+ 0
+ 0x0
+ 0x0
+
+
+
+
+
+ 0
+ 5
+ 0
+ 0
+ 1
+ 0
+ 0
+ 0
+ 0
+ 0
+ 3
+ 0
+ 0
+ 0
+ 0
+ 0
+ 3
+ 3
+ 0
+ 0
+ 0
+ 0
+ 0
+
+
+ QK_USE_IRQ_HANDLER=WWDG_IRQHandler,QK_USE_IRQ_NUM=0
+
+ ..;..\..\..\..\..\include;..\..\..\..\..\ports\arm-cm\qk\armclang;..\..\..\..\..\3rd_party\CMSIS\Include;..\..\..\..\..\3rd_party\nucleo-l053r8
+
+
+
+ 1
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 1
+ 0
+ 4
+
+
+ Stack_Size=2048 Heap_Size=16
+
+
+
+
+
+ 0
+ 0
+ 0
+ 0
+ 1
+ 0
+ 0x00000000
+ 0x20000000
+
+ rt-qk.sct
+
+
+ --entry Reset_Handler
+
+
+
+
+
+
+
+ Application
+
+
+ app.hpp
+ 5
+ ..\app.hpp
+
+
+ bsp.cpp
+ 8
+ ..\bsp.cpp
+
+
+ bsp.hpp
+ 5
+ ..\bsp.hpp
+
+
+ main.cpp
+ 8
+ ..\main.cpp
+
+
+ periodic1.cpp
+ 8
+ ..\periodic1.cpp
+
+
+ periodic4.cpp
+ 8
+ ..\periodic4.cpp
+
+
+ sporadic2.cpp
+ 8
+ ..\sporadic2.cpp
+
+
+ sporadic3.cpp
+ 8
+ ..\sporadic3.cpp
+
+
+
+
+ nucleo-l053r8
+
+
+ stm32l0xx.h
+ 5
+ ..\..\..\..\..\3rd_party\nucleo-l053r8\stm32l0xx.h
+
+
+ stm32l053xx.h
+ 5
+ ..\..\..\..\..\3rd_party\nucleo-l053r8\stm32l053xx.h
+
+
+ system_stm32l0xx.c
+ 1
+ ..\..\..\..\..\3rd_party\nucleo-l053r8\system_stm32l0xx.c
+
+
+ system_stm32l0xx.h
+ 5
+ ..\..\..\..\..\3rd_party\nucleo-l053r8\system_stm32l0xx.h
+
+
+ startup_stm32l053xx.s
+ 2
+ ..\..\..\..\..\3rd_party\nucleo-l053r8\arm\startup_stm32l053xx.s
+
+
+
+
+ QP
+
+
+ qep_hsm.cpp
+ 8
+ ..\..\..\..\..\src\qf\qep_hsm.cpp
+
+
+ qep_msm.cpp
+ 8
+ ..\..\..\..\..\src\qf\qep_msm.cpp
+
+
+ qf_act.cpp
+ 8
+ ..\..\..\..\..\src\qf\qf_act.cpp
+
+
+ qf_actq.cpp
+ 8
+ ..\..\..\..\..\src\qf\qf_actq.cpp
+
+
+ qf_defer.cpp
+ 8
+ ..\..\..\..\..\src\qf\qf_defer.cpp
+
+
+ qf_dyn.cpp
+ 8
+ ..\..\..\..\..\src\qf\qf_dyn.cpp
+
+
+ qf_mem.cpp
+ 8
+ ..\..\..\..\..\src\qf\qf_mem.cpp
+
+
+ qf_ps.cpp
+ 8
+ ..\..\..\..\..\src\qf\qf_ps.cpp
+
+
+ qf_qact.cpp
+ 8
+ ..\..\..\..\..\src\qf\qf_qact.cpp
+
+
+ qf_qeq.cpp
+ 8
+ ..\..\..\..\..\src\qf\qf_qeq.cpp
+
+
+ qf_qmact.cpp
+ 8
+ ..\..\..\..\..\src\qf\qf_qmact.cpp
+
+
+ qf_time.cpp
+ 8
+ ..\..\..\..\..\src\qf\qf_time.cpp
+
+
+ qk.cpp
+ 8
+ ..\..\..\..\..\src\qk\qk.cpp
+
+
+
+
+ QP_port
+
+
+ qk_port.cpp
+ 8
+ ..\..\..\..\..\ports\arm-cm\qk\armclang\qk_port.cpp
+
+
+ qp_port.hpp
+ 5
+ ..\..\..\..\..\ports\arm-cm\qk\armclang\qp_port.hpp
+
+
+ qs_port.hpp
+ 5
+ ..\..\..\..\..\ports\arm-cm\qk\armclang\qs_port.hpp
+
+
+
+
+ QS
+
+
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 2
+ 2
+ 2
+ 2
+ 11
+
+
+ 1
+
+
+
+ 2
+ 0
+ 2
+ 2
+ 2
+ 2
+ 2
+ 2
+ 2
+ 2
+ 2
+ 2
+ 2
+ 2
+ 2
+ 2
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 2
+
+
+
+
+
+
+
+
+ 2
+ 2
+ 2
+ 2
+ 2
+ 2
+ 2
+ 2
+ 2
+ 0
+
+
+
+
+
+
+
+
+
+
+
+ qs.cpp
+ 8
+ ..\..\..\..\..\src\qs\qs.cpp
+
+
+ qs_rx.cpp
+ 8
+ ..\..\..\..\..\src\qs\qs_rx.cpp
+
+
+ qstamp.cpp
+ 8
+ ..\..\..\..\..\src\qs\qstamp.cpp
+
+
+
+
+
+
+ rt-rel
+ 0x4
+ ARM-ADS
+ 6160000::V6.16::ARMCLANG
+ 1
+
+
+ STM32L053R8Tx
+ STMicroelectronics
+ Keil.STM32L0xx_DFP.2.2.0
+ http://www.keil.com/pack/
+ IRAM(0x20000000,0x00002000) IROM(0x08000000,0x00010000) CPUTYPE("Cortex-M0+") CLOCK(12000000) ELITTLE
+
+
+ UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32L0xx_64 -FS08000000 -FL010000 -FP0($$Device:STM32L053R8Tx$Flash\STM32L0xx_64.FLM))
+ 0
+ $$Device:STM32L053R8Tx$Device\Include\stm32l0xx.h
+
+
+
+
+
+
+
+
+
+ $$Device:STM32L053R8Tx$SVD\STM32L053x.svd
+ 0
+ 0
+
+
+
+
+
+
+ 0
+ 0
+ 0
+ 0
+ 1
+
+ .\rel\
+ rt-qk
+ 1
+ 0
+ 0
+ 0
+ 0
+ .\rel\
+ 1
+ 0
+ 0
+
+ 0
+ 0
+
+
+ 0
+ 0
+ 0
+ 0
+
+
+ 1
+ 0
+ cmd /c "del .\rel\qstamp.o"
+
+ 0
+ 0
+ 0
+ 0
+
+
+ 1
+ 0
+ fromelf --bin --output .\rel\rt-qk.bin .\rel\rt-qk.axf
+
+ 0
+ 0
+ 0
+ 0
+
+ 0
+
+
+
+ 0
+ 0
+ 0
+ 0
+ 0
+ 1
+ 0
+ 0
+ 0
+ 0
+ 3
+
+
+ 1
+
+
+ SARMCM3.DLL
+ -REMAP
+ DARMCM1.DLL
+ -pCM0+
+ SARMCM3.DLL
+
+ TARMCM1.DLL
+ -pCM0+
+
+
+
+ 1
+ 0
+ 0
+ 0
+ 16
+
+
+
+
+ 1
+ 0
+ 0
+ 1
+ 1
+ 4097
+
+ 1
+ BIN\UL2CM3.DLL
+
+
+
+
+
+ 0
+
+
+
+ 0
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 0
+ 1
+ 1
+ 0
+ 0
+ 0
+ 0
+ 0
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 0
+ 0
+ "Cortex-M0+"
+
+ 0
+ 0
+ 0
+ 1
+ 1
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 8
+ 0
+ 0
+ 0
+ 0
+ 3
+ 3
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 1
+ 0
+ 0
+ 0
+ 0
+ 1
+ 0
+
+
+ 0
+ 0x0
+ 0x0
+
+
+ 0
+ 0x0
+ 0x0
+
+
+ 0
+ 0x0
+ 0x0
+
+
+ 0
+ 0x0
+ 0x0
+
+
+ 0
+ 0x0
+ 0x0
+
+
+ 0
+ 0x0
+ 0x0
+
+
+ 0
+ 0x20000000
+ 0x2000
+
+
+ 1
+ 0x8000000
+ 0x10000
+
+
+ 0
+ 0x0
+ 0x0
+
+
+ 1
+ 0x0
+ 0x0
+
+
+ 1
+ 0x0
+ 0x0
+
+
+ 1
+ 0x0
+ 0x0
+
+
+ 1
+ 0x8000000
+ 0x10000
+
+
+ 1
+ 0x0
+ 0x0
+
+
+ 0
+ 0x0
+ 0x0
+
+
+ 0
+ 0x0
+ 0x0
+
+
+ 0
+ 0x0
+ 0x0
+
+
+ 0
+ 0x20000000
+ 0x2000
+
+
+ 0
+ 0x0
+ 0x0
+
+
+
+
+
+ 0
+ 7
+ 0
+ 0
+ 1
+ 0
+ 0
+ 0
+ 0
+ 0
+ 3
+ 0
+ 1
+ 0
+ 0
+ 0
+ 3
+ 3
+ 0
+ 0
+ 0
+ 0
+ 0
+
+
+ NDEBUG
+
+ ..;..\..\..\..\..\include;..\..\..\..\..\ports\arm-cm\qk\armclang;..\..\..\..\..\3rd_party\CMSIS\Include;..\..\..\..\..\3rd_party\nucleo-l053r8
+
+
+
+ 1
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 1
+ 0
+ 4
+
+
+ Stack_Size=2048 Heap_Size=16
+
+
+
+
+
+ 0
+ 0
+ 0
+ 0
+ 1
+ 0
+ 0x00000000
+ 0x20000000
+
+ rt-qk.sct
+
+
+ --entry Reset_Handler
+
+
+
+
+
+
+
+ Application
+
+
+ app.hpp
+ 5
+ ..\app.hpp
+
+
+ bsp.cpp
+ 8
+ ..\bsp.cpp
+
+
+ bsp.hpp
+ 5
+ ..\bsp.hpp
+
+
+ main.cpp
+ 8
+ ..\main.cpp
+
+
+ periodic1.cpp
+ 8
+ ..\periodic1.cpp
+
+
+ periodic4.cpp
+ 8
+ ..\periodic4.cpp
+
+
+ sporadic2.cpp
+ 8
+ ..\sporadic2.cpp
+
+
+ sporadic3.cpp
+ 8
+ ..\sporadic3.cpp
+
+
+
+
+ nucleo-l053r8
+
+
+ stm32l0xx.h
+ 5
+ ..\..\..\..\..\3rd_party\nucleo-l053r8\stm32l0xx.h
+
+
+ stm32l053xx.h
+ 5
+ ..\..\..\..\..\3rd_party\nucleo-l053r8\stm32l053xx.h
+
+
+ system_stm32l0xx.c
+ 1
+ ..\..\..\..\..\3rd_party\nucleo-l053r8\system_stm32l0xx.c
+
+
+ system_stm32l0xx.h
+ 5
+ ..\..\..\..\..\3rd_party\nucleo-l053r8\system_stm32l0xx.h
+
+
+ startup_stm32l053xx.s
+ 2
+ ..\..\..\..\..\3rd_party\nucleo-l053r8\arm\startup_stm32l053xx.s
+
+
+
+
+ QP
+
+
+ qep_hsm.cpp
+ 8
+ ..\..\..\..\..\src\qf\qep_hsm.cpp
+
+
+ qep_msm.cpp
+ 8
+ ..\..\..\..\..\src\qf\qep_msm.cpp
+
+
+ qf_act.cpp
+ 8
+ ..\..\..\..\..\src\qf\qf_act.cpp
+
+
+ qf_actq.cpp
+ 8
+ ..\..\..\..\..\src\qf\qf_actq.cpp
+
+
+ qf_defer.cpp
+ 8
+ ..\..\..\..\..\src\qf\qf_defer.cpp
+
+
+ qf_dyn.cpp
+ 8
+ ..\..\..\..\..\src\qf\qf_dyn.cpp
+
+
+ qf_mem.cpp
+ 8
+ ..\..\..\..\..\src\qf\qf_mem.cpp
+
+
+ qf_ps.cpp
+ 8
+ ..\..\..\..\..\src\qf\qf_ps.cpp
+
+
+ qf_qact.cpp
+ 8
+ ..\..\..\..\..\src\qf\qf_qact.cpp
+
+
+ qf_qeq.cpp
+ 8
+ ..\..\..\..\..\src\qf\qf_qeq.cpp
+
+
+ qf_qmact.cpp
+ 8
+ ..\..\..\..\..\src\qf\qf_qmact.cpp
+
+
+ qf_time.cpp
+ 8
+ ..\..\..\..\..\src\qf\qf_time.cpp
+
+
+ qk.cpp
+ 8
+ ..\..\..\..\..\src\qk\qk.cpp
+
+
+
+
+ QP_port
+
+
+ qk_port.cpp
+ 8
+ ..\..\..\..\..\ports\arm-cm\qk\armclang\qk_port.cpp
+
+
+ qp_port.hpp
+ 5
+ ..\..\..\..\..\ports\arm-cm\qk\armclang\qp_port.hpp
+
+
+ qs_port.hpp
+ 5
+ ..\..\..\..\..\ports\arm-cm\qk\armclang\qs_port.hpp
+
+
+
+
+ QS
+
+
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 2
+ 2
+ 2
+ 2
+ 11
+
+
+ 1
+
+
+
+ 2
+ 0
+ 2
+ 2
+ 2
+ 2
+ 2
+ 2
+ 2
+ 2
+ 2
+ 2
+ 2
+ 2
+ 2
+ 2
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 2
+
+
+
+
+
+
+
+
+ 2
+ 2
+ 2
+ 2
+ 2
+ 2
+ 2
+ 2
+ 2
+ 0
+
+
+
+
+
+
+
+
+
+
+
+ qs.cpp
+ 8
+ ..\..\..\..\..\src\qs\qs.cpp
+
+
+ qs_rx.cpp
+ 8
+ ..\..\..\..\..\src\qs\qs_rx.cpp
+
+
+ qstamp.cpp
+ 8
+ ..\..\..\..\..\src\qs\qstamp.cpp
+
+
+
+
+
+
+ rt-spy
+ 0x4
+ ARM-ADS
+ 6160000::V6.16::ARMCLANG
+ 1
+
+
+ STM32L053R8Tx
+ STMicroelectronics
+ Keil.STM32L0xx_DFP.2.2.0
+ http://www.keil.com/pack/
+ IRAM(0x20000000,0x00002000) IROM(0x08000000,0x00010000) CPUTYPE("Cortex-M0+") CLOCK(12000000) ELITTLE
+
+
+ UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32L0xx_64 -FS08000000 -FL010000 -FP0($$Device:STM32L053R8Tx$Flash\STM32L0xx_64.FLM))
+ 0
+ $$Device:STM32L053R8Tx$Device\Include\stm32l0xx.h
+
+
+
+
+
+
+
+
+
+ $$Device:STM32L053R8Tx$SVD\STM32L053x.svd
+ 0
+ 0
+
+
+
+
+
+
+ 0
+ 0
+ 0
+ 0
+ 1
+
+ .\spy\
+ rt-qk
+ 1
+ 0
+ 0
+ 1
+ 1
+ .\spy\
+ 1
+ 0
+ 0
+
+ 0
+ 0
+
+
+ 0
+ 0
+ 0
+ 0
+
+
+ 1
+ 0
+ cmd /c "del .\spy\qstamp.o"
+
+ 0
+ 0
+ 0
+ 0
+
+
+ 1
+ 0
+ fromelf --bin --output .\spy\rt-qk.bin .\spy\rt-qk.axf
+
+ 0
+ 0
+ 0
+ 0
+
+ 0
+
+
+
+ 0
+ 0
+ 0
+ 0
+ 0
+ 1
+ 0
+ 0
+ 0
+ 0
+ 3
+
+
+ 1
+
+
+ SARMCM3.DLL
+ -REMAP
+ DARMCM1.DLL
+ -pCM0+
+ SARMCM3.DLL
+
+ TARMCM1.DLL
+ -pCM0+
+
+
+
+ 1
+ 0
+ 0
+ 0
+ 16
+
+
+
+
+ 1
+ 0
+ 0
+ 1
+ 1
+ 4096
+
+ 1
+ BIN\UL2CM3.DLL
+
+
+
+
+
+ 0
+
+
+
+ 0
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 0
+ 1
+ 1
+ 0
+ 0
+ 0
+ 0
+ 0
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 1
+ 0
+ 0
+ "Cortex-M0+"
+
+ 0
+ 0
+ 0
+ 1
+ 1
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 8
+ 0
+ 0
+ 0
+ 0
+ 3
+ 3
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 1
+ 0
+ 0
+ 0
+ 0
+ 1
+ 0
+
+
+ 0
+ 0x0
+ 0x0
+
+
+ 0
+ 0x0
+ 0x0
+
+
+ 0
+ 0x0
+ 0x0
+
+
+ 0
+ 0x0
+ 0x0
+
+
+ 0
+ 0x0
+ 0x0
+
+
+ 0
+ 0x0
+ 0x0
+
+
+ 0
+ 0x20000000
+ 0x2000
+
+
+ 1
+ 0x8000000
+ 0x10000
+
+
+ 0
+ 0x0
+ 0x0
+
+
+ 1
+ 0x0
+ 0x0
+
+
+ 1
+ 0x0
+ 0x0
+
+
+ 1
+ 0x0
+ 0x0
+
+
+ 1
+ 0x8000000
+ 0x10000
+
+
+ 1
+ 0x0
+ 0x0
+
+
+ 0
+ 0x0
+ 0x0
+
+
+ 0
+ 0x0
+ 0x0
+
+
+ 0
+ 0x0
+ 0x0
+
+
+ 0
+ 0x20000000
+ 0x2000
+
+
+ 0
+ 0x0
+ 0x0
+
+
+
+
+
+ 0
+ 7
+ 0
+ 0
+ 1
+ 0
+ 0
+ 0
+ 0
+ 0
+ 3
+ 0
+ 1
+ 0
+ 0
+ 0
+ 3
+ 3
+ 0
+ 0
+ 0
+ 0
+ 0
+
+
+ Q_SPY QK_USE_IRQ_HANDLER=LCD_IRQHandler QK_USE_IRQ_NUM=30
+
+ ..;..\..\..\..\..\include;..\..\..\..\..\ports\arm-cm\qk\armclang;..\..\..\..\..\3rd_party\CMSIS\Include;..\..\..\..\..\3rd_party\nucleo-l053r8
+
+
+
+ 1
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+ 1
+ 0
+ 4
+
+
+ Stack_Size=2048 Heap_Size=16
+
+
+
+
+
+ 0
+ 0
+ 0
+ 0
+ 1
+ 0
+ 0x00000000
+ 0x20000000
+
+ rt-qk.sct
+
+
+ --entry Reset_Handler
+
+
+
+
+
+
+
+ Application
+
+
+ app.hpp
+ 5
+ ..\app.hpp
+
+
+ bsp.cpp
+ 8
+ ..\bsp.cpp
+
+
+ bsp.hpp
+ 5
+ ..\bsp.hpp
+
+
+ main.cpp
+ 8
+ ..\main.cpp
+
+
+ periodic1.cpp
+ 8
+ ..\periodic1.cpp
+
+
+ periodic4.cpp
+ 8
+ ..\periodic4.cpp
+
+
+ sporadic2.cpp
+ 8
+ ..\sporadic2.cpp
+
+
+ sporadic3.cpp
+ 8
+ ..\sporadic3.cpp
+
+
+
+
+ nucleo-l053r8
+
+
+ stm32l0xx.h
+ 5
+ ..\..\..\..\..\3rd_party\nucleo-l053r8\stm32l0xx.h
+
+
+ stm32l053xx.h
+ 5
+ ..\..\..\..\..\3rd_party\nucleo-l053r8\stm32l053xx.h
+
+
+ system_stm32l0xx.c
+ 1
+ ..\..\..\..\..\3rd_party\nucleo-l053r8\system_stm32l0xx.c
+
+
+ system_stm32l0xx.h
+ 5
+ ..\..\..\..\..\3rd_party\nucleo-l053r8\system_stm32l0xx.h
+
+
+ startup_stm32l053xx.s
+ 2
+ ..\..\..\..\..\3rd_party\nucleo-l053r8\arm\startup_stm32l053xx.s
+
+
+
+
+ QP
+
+
+ qep_hsm.cpp
+ 8
+ ..\..\..\..\..\src\qf\qep_hsm.cpp
+
+
+ qep_msm.cpp
+ 8
+ ..\..\..\..\..\src\qf\qep_msm.cpp
+
+
+ qf_act.cpp
+ 8
+ ..\..\..\..\..\src\qf\qf_act.cpp
+
+
+ qf_actq.cpp
+ 8
+ ..\..\..\..\..\src\qf\qf_actq.cpp
+
+
+ qf_defer.cpp
+ 8
+ ..\..\..\..\..\src\qf\qf_defer.cpp
+
+
+ qf_dyn.cpp
+ 8
+ ..\..\..\..\..\src\qf\qf_dyn.cpp
+
+
+ qf_mem.cpp
+ 8
+ ..\..\..\..\..\src\qf\qf_mem.cpp
+
+
+ qf_ps.cpp
+ 8
+ ..\..\..\..\..\src\qf\qf_ps.cpp
+
+
+ qf_qact.cpp
+ 8
+ ..\..\..\..\..\src\qf\qf_qact.cpp
+
+
+ qf_qeq.cpp
+ 8
+ ..\..\..\..\..\src\qf\qf_qeq.cpp
+
+
+ qf_qmact.cpp
+ 8
+ ..\..\..\..\..\src\qf\qf_qmact.cpp
+
+
+ qf_time.cpp
+ 8
+ ..\..\..\..\..\src\qf\qf_time.cpp
+
+
+ qk.cpp
+ 8
+ ..\..\..\..\..\src\qk\qk.cpp
+
+
+
+
+ QP_port
+
+
+ qk_port.cpp
+ 8
+ ..\..\..\..\..\ports\arm-cm\qk\armclang\qk_port.cpp
+
+
+ qp_port.hpp
+ 5
+ ..\..\..\..\..\ports\arm-cm\qk\armclang\qp_port.hpp
+
+
+ qs_port.hpp
+ 5
+ ..\..\..\..\..\ports\arm-cm\qk\armclang\qs_port.hpp
+
+
+
+
+ QS
+
+
+ qs.cpp
+ 8
+ ..\..\..\..\..\src\qs\qs.cpp
+
+
+ qs_rx.cpp
+ 8
+ ..\..\..\..\..\src\qs\qs_rx.cpp
+
+
+ qstamp.cpp
+ 8
+ ..\..\..\..\..\src\qs\qstamp.cpp
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/examples/arm-cm/real-time_nucleo-l053r8/qk/bsp.cpp b/examples/arm-cm/real-time_nucleo-l053r8/qk/bsp.cpp
new file mode 100644
index 00000000..9930a248
--- /dev/null
+++ b/examples/arm-cm/real-time_nucleo-l053r8/qk/bsp.cpp
@@ -0,0 +1,294 @@
+//============================================================================
+// BSP for "real-time" Example
+// Last updated for version 7.3.1
+// Last updated on 2023-11-10
+//
+// Q u a n t u m L e a P s
+// ------------------------
+// Modern Embedded Software
+//
+// Copyright (C) 2005 Quantum Leaps, LLC. All rights reserved.
+//
+// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-QL-commercial
+//
+// This software is dual-licensed under the terms of the open source GNU
+// General Public License version 3 (or any later version), or alternatively,
+// under the terms of one of the closed source Quantum Leaps commercial
+// licenses.
+//
+// The terms of the open source GNU General Public License version 3
+// can be found at:
+//
+// The terms of the closed source Quantum Leaps commercial licenses
+// can be found at:
+//
+// Redistributions in source code must retain this top-level comment block.
+// Plagiarizing this software to sidestep the license obligations is illegal.
+//
+// Contact information:
+//
+//
+//============================================================================
+#include "qpcpp.hpp" // QP/C++ real-time embedded framework
+#include "bsp.hpp" // Board Support Package
+#include "app.hpp" // Application interface
+
+#include "stm32l0xx.h" // CMSIS-compliant header file for the MCU used
+// add other drivers if necessary...
+
+Q_DEFINE_THIS_MODULE("bsp") // for functional-safety assertions
+
+// Local-scope defines -----------------------------------------------------
+
+// test pins on GPIO PA (output)
+#define TST1_PIN 7U
+#define TST2_PIN 6U
+#define TST3_PIN 4U
+#define TST4_PIN 1U
+#define TST5_PIN 0U
+#define TST6_PIN 9U
+#define TST7_PIN 5U // LED LD2-Green
+
+// button on GPIO PC (input)
+#define B1_PIN 13U
+
+#ifdef Q_SPY
+ // QSpy source IDs
+ static QSpyId const l_SysTick_Handler = { 100U };
+
+#endif
+
+//============================================================================
+// Error handler and ISRs...
+extern "C" {
+
+Q_NORETURN Q_onError(char const * const module, int_t const id) {
+ // NOTE: this implementation of the error handler is intended only
+ // for debugging and MUST be changed for deployment of the application
+ // (assuming that you ship your production code with assertions enabled).
+ Q_UNUSED_PAR(module);
+ Q_UNUSED_PAR(id);
+ QS_ASSERTION(module, id, 10000U); // report assertion to QS
+
+#ifndef NDEBUG
+ // light up the user LED
+ GPIOA->BSRR = (1U << TST6_PIN);
+ for (;;) { // for debugging, hang on in an endless loop...
+ }
+#else
+ NVIC_SystemReset();
+ for (;;) { // explicitly "no-return"
+ }
+#endif
+}
+//............................................................................
+void assert_failed(char const * const module, int_t const id); // prototype
+void assert_failed(char const * const module, int_t const id) {
+ Q_onError(module, id);
+}
+
+// ISRs used in the application ==========================================
+
+void SysTick_Handler(); // prototype
+void SysTick_Handler() {
+ BSP::d1on();
+
+ QK_ISR_ENTRY(); // inform QK about entering an ISR
+
+ QP::QTimeEvt::TICK_X(0U, &l_SysTick_Handler); // time events at rate 0
+
+ // Perform the debouncing of sporadics. The algorithm for debouncing
+ // adapted from the book "Embedded Systems Dictionary" by Jack Ganssle
+ // and Michael Barr, page 71.
+ static struct {
+ uint32_t depressed;
+ uint32_t previous;
+ } sporadics = { 0U, 0U };
+ uint32_t current = ~GPIOC->IDR; // read Port C with state of Sporadic B1
+ uint32_t tmp = sporadics.depressed; // save the depressed sporadics
+ sporadics.depressed |= (sporadics.previous & current); // set depressed
+ sporadics.depressed &= (sporadics.previous | current); // clear released
+ sporadics.previous = current; // update the history
+ tmp ^= sporadics.depressed; // changed debounced depressed
+ current = sporadics.depressed;
+
+ if ((tmp & (1U << B1_PIN)) != 0U) { // debounced B1 state changed?
+ if ((current & (1U << B1_PIN)) != 0U) { // is B1 depressed?
+ // immutable sporadic-press event
+ static APP::SporadicSpecEvt const
+ sporadicA(APP::SPORADIC_A_SIG, 189U, 23U);
+ // immutable forward-press event
+ static APP::SporadicSpecEvt const
+ sporadicB(APP::SPORADIC_B_SIG, 89U, 23U);
+ APP::AO_Sporadic2->POST(&sporadicA, &l_SysTick_Handler);
+ APP::AO_Sporadic2->POST(&sporadicB, &l_SysTick_Handler);
+ }
+ else { // B1 is released
+ APP::AO_Periodic4->POST(BSP::getEvtPeriodic4(0U), &l_SysTick_Handler);
+ APP::AO_Periodic1->POST(BSP::getEvtPeriodic1(0U), &l_SysTick_Handler);
+ }
+ }
+
+ QK_ISR_EXIT(); // inform QK about exiting an ISR
+
+ BSP::d1off();
+}
+
+} // extern "C"
+
+// BSP functions =============================================================
+namespace BSP {
+
+void init() {
+ // Configure the MPU to prevent NULL-pointer dereferencing ...
+ MPU->RBAR = 0x0U // base address (NULL)
+ | MPU_RBAR_VALID_Msk // valid region
+ | (MPU_RBAR_REGION_Msk & 7U); // region #7
+ MPU->RASR = (7U << MPU_RASR_SIZE_Pos) // 2^(7+1) region
+ | (0x0U << MPU_RASR_AP_Pos) // no-access region
+ | MPU_RASR_ENABLE_Msk; // region enable
+ MPU->CTRL = MPU_CTRL_PRIVDEFENA_Msk // enable background region
+ | MPU_CTRL_ENABLE_Msk; // enable the MPU
+ __ISB();
+ __DSB();
+
+ // enable GPIO port PA clock
+ RCC->IOPENR |= (1U << 0U);
+
+ // set all used GPIOA pins as push-pull output, no pull-up, pull-down
+ GPIOA->MODER &=
+ ~((3U << 2U*TST1_PIN) | (3U << 2U*TST2_PIN) | (3U << 2U*TST3_PIN) |
+ (3U << 2U*TST4_PIN) | (3U << 2U*TST5_PIN) | (3U << 2U*TST6_PIN) |
+ (3U << 2U*TST7_PIN));
+ GPIOA->MODER |=
+ ((1U << 2U*TST1_PIN) | (1U << 2U*TST2_PIN) | (1U << 2U*TST3_PIN) |
+ (1U << 2U*TST4_PIN) | (1U << 2U*TST5_PIN) | (1U << 2U*TST6_PIN) |
+ (1U << 2U*TST7_PIN));
+ GPIOA->OTYPER &=
+ ~((1U << TST1_PIN) | (1U << TST2_PIN) | (1U << TST3_PIN) |
+ (1U << TST4_PIN) | (1U << TST5_PIN) | (1U << TST6_PIN) |
+ (1U << TST7_PIN));
+ GPIOA->PUPDR &=
+ ~((3U << 2U*TST1_PIN) | (3U << 2U*TST2_PIN) | (3U << 2U*TST3_PIN) |
+ (3U << 2U*TST4_PIN) | (3U << 2U*TST5_PIN) | (3U << 2U*TST6_PIN) |
+ (3U << 2U*TST7_PIN));
+
+ // enable GPIOC clock port for the Sporadic B1
+ RCC->IOPENR |= (1U << 2U);
+
+ // configure Sporadic B1 pin on GPIOC as input, no pull-up, pull-down
+ GPIOC->MODER &= ~(3U << 2U*B1_PIN);
+ GPIOC->PUPDR &= ~(3U << 2U*B1_PIN);
+}
+//............................................................................
+void start() {
+ // instantiate and start QP/C active objects...
+ static QP::QEvt const *periodic1QSto[10]; // Event queue storage
+ APP::AO_Periodic1->start(
+ Q_PRIO(1U, 1U), // QF-prio/pre-thre.
+ periodic1QSto, // storage for the AO's queue
+ Q_DIM(periodic1QSto), // queue length
+ nullptr, 0U, // stack storage, size (not used)
+ getEvtPeriodic1(0U)); // initialization param
+
+ static QP::QEvt const *sporadic2QSto[8]; // Event queue storage
+ APP::AO_Sporadic2->start(
+ Q_PRIO(2U, 3U), // QF-prio/pre-thre.
+ sporadic2QSto, // storage for the AO's queue
+ Q_DIM(sporadic2QSto), // queue length
+ nullptr, 0U, // stack storage, size (not used)
+ (void const *)0); // initialization param -- not used
+
+ static QP::QEvt const *sporadic3QSto[8]; // Event queue storage
+ APP::AO_Sporadic3->start(
+ Q_PRIO(3U, 3U), // QF-prio/pre-thre.
+ sporadic3QSto, // storage for the AO's queue
+ Q_DIM(sporadic3QSto), // queue length
+ nullptr, 0U, // stack storage, size (not used)
+ (void const *)0); // initialization param -- not used
+
+ static QP::QEvt const *periodic4QSto[8]; // Event queue storage
+ APP::AO_Periodic4->start(
+ Q_PRIO(4U, 4U), // QF-prio/pre-thre.
+ periodic4QSto, // storage for the AO's queue
+ Q_DIM(periodic4QSto), // queue length
+ nullptr, 0U, // stack storage, size (not used)
+ getEvtPeriodic4(0U)); // initialization event
+}
+//............................................................................
+void d1on() { GPIOA->BSRR = (1U << TST1_PIN); }
+void d1off() { GPIOA->BSRR = (1U << (TST1_PIN + 16U)); }
+//............................................................................
+void d2on() { GPIOA->BSRR = (1U << TST2_PIN); }
+void d2off() { GPIOA->BSRR = (1U << (TST2_PIN + 16U)); }
+//............................................................................
+void d3on() { GPIOA->BSRR = (1U << TST3_PIN); }
+void d3off() { GPIOA->BSRR = (1U << (TST3_PIN + 16U)); }
+//............................................................................
+void d4on() { GPIOA->BSRR = (1U << TST4_PIN); }
+void d4off() { GPIOA->BSRR = (1U << (TST4_PIN + 16U)); }
+//............................................................................
+void d5on() { GPIOA->BSRR = (1U << TST5_PIN); }
+void d5off() { GPIOA->BSRR = (1U << (TST5_PIN + 16U)); }
+//............................................................................
+void d6on() { GPIOA->BSRR = (1U << TST6_PIN); } // LED2
+void d6off() { GPIOA->BSRR = (1U << (TST6_PIN + 16U)); }
+//............................................................................
+void d7on() { GPIOA->BSRR = (1U << TST7_PIN); }
+void d7off() { GPIOA->BSRR = (1U << (TST7_PIN + 16U)); }
+
+//............................................................................
+QP::QEvt const *getEvtPeriodic1(uint8_t num) {
+ // immutable PERIODIC_SPEC events for Periodic1
+ static APP::PeriodicSpecEvt const periodicSpec1[] {
+ APP::PeriodicSpecEvt(APP::PERIODIC_SPEC_SIG, 40U, 5U),
+ APP::PeriodicSpecEvt(APP::PERIODIC_SPEC_SIG, 30U, 7U)
+ };
+ Q_REQUIRE_ID(500, num < Q_DIM(periodicSpec1)); // must be in range
+ return &periodicSpec1[num];
+}
+//............................................................................
+QP::QEvt const *getEvtPeriodic4(uint8_t num) {
+ // immutable PERIODIC_SPEC events for Periodic4
+ static APP::PeriodicSpecEvt const periodicSpec4[] {
+ APP::PeriodicSpecEvt(APP::PERIODIC_SPEC_SIG, 20U, 2U),
+ APP::PeriodicSpecEvt(APP::PERIODIC_SPEC_SIG, 10U, 1U)
+ };
+ Q_REQUIRE_ID(600, num < Q_DIM(periodicSpec4)); // must be in range
+ return &periodicSpec4[num];
+}
+
+} // namespace BSP
+
+// QF callbacks ==============================================================
+namespace QP {
+
+void QF::onStartup() {
+ SystemCoreClockUpdate();
+
+ // set up the SysTick timer to fire at TICKS_PER_SEC rate
+ SysTick_Config((SystemCoreClock / BSP::TICKS_PER_SEC) + 1U);
+
+ // set priorities of ISRs used in the system
+ NVIC_SetPriority(SysTick_IRQn, 0U);
+ // ...
+}
+//............................................................................
+void QF::onCleanup() {
+}
+//............................................................................
+void QK::onIdle() {
+ BSP::d7on(); // LED LD2
+#ifdef NDEBUG
+ // Put the CPU and peripherals to the low-power mode.
+ // you might need to customize the clock management for your application,
+ // see the datasheet for your particular Cortex-M MCU.
+ //
+ BSP::d7off();
+ __WFI(); // Wait-For-Interrupt
+ BSP::d7on();
+#endif
+ BSP::d7off();
+}
+
+} // namespace QP
diff --git a/examples/arm-cm/real-time_nucleo-l053r8/qk/bsp.hpp b/examples/arm-cm/real-time_nucleo-l053r8/qk/bsp.hpp
new file mode 100644
index 00000000..2af3c06e
--- /dev/null
+++ b/examples/arm-cm/real-time_nucleo-l053r8/qk/bsp.hpp
@@ -0,0 +1,69 @@
+//============================================================================
+// "real-time" example to demonstrate timing in QP/C++
+// Last Updated for Version: 7.3.0
+// Date of the Last Update: 2023-10-02
+//
+// Q u a n t u m L e a P s
+// ------------------------
+// Modern Embedded Software
+//
+// Copyright (C) 2005 Quantum Leaps, LLC. All rights reserved.
+//
+// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-QL-commercial
+//
+// This software is dual-licensed under the terms of the open source GNU
+// General Public License version 3 (or any later version), or alternatively,
+// under the terms of one of the closed source Quantum Leaps commercial
+// licenses.
+//
+// The terms of the open source GNU General Public License version 3
+// can be found at:
+//
+// The terms of the closed source Quantum Leaps commercial licenses
+// can be found at:
+//
+// Redistributions in source code must retain this top-level comment block.
+// Plagiarizing this software to sidestep the license obligations is illegal.
+//
+// Contact information:
+//
+//
+//============================================================================
+#ifndef HPP_
+#define HPP_
+
+namespace BSP {
+
+constexpr std::uint32_t TICKS_PER_SEC {1000U};
+
+void init();
+void start();
+
+void d1on();
+void d1off();
+
+void d2on();
+void d2off();
+
+void d3on();
+void d3off();
+
+void d4on();
+void d4off();
+
+void d5on();
+void d5off();
+
+void d6on();
+void d6off();
+
+void d7on();
+void d7off();
+
+// immutable events for Periodic active objects
+QP::QEvt const *getEvtPeriodic1(std::uint8_t num);
+QP::QEvt const *getEvtPeriodic4(std::uint8_t num);
+
+} // namespace BSP
+
+#endif // HPP_
diff --git a/examples/arm-cm/real-time_nucleo-l053r8/qk/main.cpp b/examples/arm-cm/real-time_nucleo-l053r8/qk/main.cpp
new file mode 100644
index 00000000..b8fdc5ea
--- /dev/null
+++ b/examples/arm-cm/real-time_nucleo-l053r8/qk/main.cpp
@@ -0,0 +1,44 @@
+//============================================================================
+// APP example
+// Last updated for version 7.3.1
+// Last updated on 2023-10-02
+//
+// Q u a n t u m L e a P s
+// ------------------------
+// Modern Embedded Software
+//
+// Copyright (C) 2005 Quantum Leaps, LLC.
+//
+// This program is open source software: you can redistribute it and/or
+// modify it under the terms of the GNU General Public License as published
+// by the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// Alternatively, this program may be distributed and modified under the
+// terms of Quantum Leaps commercial licenses, which expressly supersede
+// the GNU General Public License and are specifically designed for
+// licensees interested in retaining the proprietary status of their code.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, see .
+//
+// Contact information:
+//
+//
+//============================================================================
+#include "qpcpp.hpp" // QP/C++ real-time embedded framework
+#include "bsp.hpp" // Board Support Package
+#include "app.hpp" // Application interface
+
+//............................................................................
+int main(void) {
+ QP::QF::init(); // initialize the framework and the underlying RT kernel
+ BSP::init(); // initialize the BSP
+ BSP::start(); // start the AOs/Threads
+ return QP::QF::run(); // run the QF application
+}
diff --git a/examples/arm-cm/real-time_nucleo-l053r8/qk/periodic1.cpp b/examples/arm-cm/real-time_nucleo-l053r8/qk/periodic1.cpp
new file mode 100644
index 00000000..e4d4a316
--- /dev/null
+++ b/examples/arm-cm/real-time_nucleo-l053r8/qk/periodic1.cpp
@@ -0,0 +1,150 @@
+//$file${.::periodic1.cpp} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
+//
+// Model: real-time.qm
+// File: ${.::periodic1.cpp}
+//
+// This code has been generated by QM 5.3.0 .
+// DO NOT EDIT THIS FILE MANUALLY. All your changes will be lost.
+//
+// SPDX-License-Identifier: GPL-3.0-or-later
+//
+// This generated code is open source software: you can redistribute it under
+// the terms of the GNU General Public License as published by the Free
+// Software Foundation.
+//
+// This code is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+// more details.
+//
+// NOTE:
+// Alternatively, this generated code may be distributed under the terms
+// of Quantum Leaps commercial licenses, which expressly supersede the GNU
+// General Public License and are specifically designed for licensees
+// interested in retaining the proprietary status of their code.
+//
+// Contact information:
+//
+//
+//
+//$endhead${.::periodic1.cpp} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+#include "qpcpp.hpp" // QP/C++ real-time embedded framework
+#include "bsp.hpp" // Board Support Package
+#include "app.hpp" // Application interface
+
+namespace {
+Q_DEFINE_THIS_MODULE("periodic1")
+}
+
+//$declare${AOs::Periodic1} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
+namespace APP {
+
+//${AOs::Periodic1} ..........................................................
+class Periodic1 : public QP::QMActive {
+private:
+ QP::QTimeEvt m_te;
+ std::uint16_t m_toggles;
+
+public:
+ static Periodic1 inst;
+
+public:
+ Periodic1();
+
+protected:
+ QM_STATE_DECL( initial);
+ QM_STATE_DECL( active);
+}; // class Periodic1
+
+} // namespace APP
+//$enddecl${AOs::Periodic1} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+//$skip${QP_VERSION} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
+// Check for the minimum required QP version
+#if (QP_VERSION < 730U) || (QP_VERSION != ((QP_RELEASE^4294967295U) % 0x3E8U))
+#error qpcpp version 7.3.0 or higher required
+#endif
+//$endskip${QP_VERSION} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+//$define${Shared::AO_Periodic1} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
+namespace APP {
+
+//${Shared::AO_Periodic1} ....................................................
+QP::QActive * const AO_Periodic1 {&Periodic1::inst};
+
+} // namespace APP
+//$enddef${Shared::AO_Periodic1} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//$define${AOs::Periodic1} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
+namespace APP {
+
+//${AOs::Periodic1} ..........................................................
+Periodic1 Periodic1::inst;
+
+//${AOs::Periodic1::Periodic1} ...............................................
+Periodic1::Periodic1()
+ : QMActive(Q_STATE_CAST(&Periodic1::initial)),
+ m_te(this, TIMEOUT_SIG, 0U)
+{}
+
+//${AOs::Periodic1::SM} ......................................................
+QM_STATE_DEF(Periodic1, initial) {
+ //${AOs::Periodic1::SM::initial}
+ Q_REQUIRE_ID(300, (QP::QEvt::verify_(e))
+ && (e->sig == PERIODIC_SPEC_SIG));
+
+ m_te.armX(Q_EVT_CAST(PeriodicSpecEvt)->ticks,
+ Q_EVT_CAST(PeriodicSpecEvt)->ticks);
+ m_toggles = Q_EVT_CAST(PeriodicSpecEvt)->toggles;
+
+ QS_FUN_DICTIONARY(&Periodic1::active);
+ static QP::QMTranActTable const tatbl_ = { // tran-action table
+ &active_s, // target state
+ {
+ Q_ACTION_NULL // zero terminator
+ }
+ };
+ return qm_tran_init(&tatbl_);
+}
+
+//${AOs::Periodic1::SM::active} ..............................................
+QP::QMState const Periodic1::active_s = {
+ QM_STATE_NULL, // superstate (top)
+ &Periodic1::active,
+ Q_ACTION_NULL, // no entry action
+ Q_ACTION_NULL, // no exit action
+ Q_ACTION_NULL // no initial tran.
+};
+//${AOs::Periodic1::SM::active}
+QM_STATE_DEF(Periodic1, active) {
+ QP::QState status_;
+ switch (e->sig) {
+ //${AOs::Periodic1::SM::active::TIMEOUT}
+ case TIMEOUT_SIG: {
+ for (std::uint16_t i = m_toggles; i > 0U; --i) {
+ BSP::d6on();
+ BSP::d6off();
+ }
+ status_ = Q_RET_HANDLED;
+ break;
+ }
+ //${AOs::Periodic1::SM::active::PERIODIC_SPEC}
+ case PERIODIC_SPEC_SIG: {
+ BSP::d6on();
+ m_te.disarm();
+ m_te.armX(Q_EVT_CAST(PeriodicSpecEvt)->ticks,
+ Q_EVT_CAST(PeriodicSpecEvt)->ticks);
+ m_toggles = Q_EVT_CAST(PeriodicSpecEvt)->toggles;
+ BSP::d6off();
+ status_ = Q_RET_HANDLED;
+ break;
+ }
+ default: {
+ status_ = Q_RET_SUPER;
+ break;
+ }
+ }
+ return status_;
+}
+
+} // namespace APP
+//$enddef${AOs::Periodic1} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
diff --git a/examples/arm-cm/real-time_nucleo-l053r8/qk/periodic4.cpp b/examples/arm-cm/real-time_nucleo-l053r8/qk/periodic4.cpp
new file mode 100644
index 00000000..803db11e
--- /dev/null
+++ b/examples/arm-cm/real-time_nucleo-l053r8/qk/periodic4.cpp
@@ -0,0 +1,150 @@
+//$file${.::periodic4.cpp} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
+//
+// Model: real-time.qm
+// File: ${.::periodic4.cpp}
+//
+// This code has been generated by QM 5.3.0 .
+// DO NOT EDIT THIS FILE MANUALLY. All your changes will be lost.
+//
+// SPDX-License-Identifier: GPL-3.0-or-later
+//
+// This generated code is open source software: you can redistribute it under
+// the terms of the GNU General Public License as published by the Free
+// Software Foundation.
+//
+// This code is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+// more details.
+//
+// NOTE:
+// Alternatively, this generated code may be distributed under the terms
+// of Quantum Leaps commercial licenses, which expressly supersede the GNU
+// General Public License and are specifically designed for licensees
+// interested in retaining the proprietary status of their code.
+//
+// Contact information:
+//
+//
+//
+//$endhead${.::periodic4.cpp} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+#include "qpcpp.hpp" // QP/C++ real-time embedded framework
+#include "bsp.hpp" // Board Support Package
+#include "app.hpp" // Application interface
+
+namespace {
+Q_DEFINE_THIS_MODULE("periodic4")
+}
+
+//$declare${AOs::Periodic4} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
+namespace APP {
+
+//${AOs::Periodic4} ..........................................................
+class Periodic4 : public QP::QMActive {
+private:
+ QP::QTimeEvt m_te;
+ std::uint16_t m_toggles;
+
+public:
+ static Periodic4 inst;
+
+public:
+ Periodic4();
+
+protected:
+ QM_STATE_DECL( initial);
+ QM_STATE_DECL( active);
+}; // class Periodic4
+
+} // namespace APP
+//$enddecl${AOs::Periodic4} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+//$skip${QP_VERSION} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
+// Check for the minimum required QP version
+#if (QP_VERSION < 730U) || (QP_VERSION != ((QP_RELEASE^4294967295U) % 0x3E8U))
+#error qpcpp version 7.3.0 or higher required
+#endif
+//$endskip${QP_VERSION} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+//$define${Shared::AO_Periodic4} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
+namespace APP {
+
+//${Shared::AO_Periodic4} ....................................................
+QP::QActive * const AO_Periodic4 {&Periodic4::inst};
+
+} // namespace APP
+//$enddef${Shared::AO_Periodic4} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//$define${AOs::Periodic4} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
+namespace APP {
+
+//${AOs::Periodic4} ..........................................................
+Periodic4 Periodic4::inst;
+
+//${AOs::Periodic4::Periodic4} ...............................................
+Periodic4::Periodic4()
+ : QMActive(Q_STATE_CAST(&Periodic4::initial)),
+ m_te(this, TIMEOUT_SIG, 0U)
+{}
+
+//${AOs::Periodic4::SM} ......................................................
+QM_STATE_DEF(Periodic4, initial) {
+ //${AOs::Periodic4::SM::initial}
+ Q_REQUIRE_ID(300, QP::QEvt::verify_(e)
+ && (e->sig == PERIODIC_SPEC_SIG));
+
+ m_te.armX(Q_EVT_CAST(PeriodicSpecEvt)->ticks,
+ Q_EVT_CAST(PeriodicSpecEvt)->ticks);
+ m_toggles = Q_EVT_CAST(PeriodicSpecEvt)->toggles;
+
+ QS_FUN_DICTIONARY(&Periodic4::active);
+ static QP::QMTranActTable const tatbl_ = { // tran-action table
+ &active_s, // target state
+ {
+ Q_ACTION_NULL // zero terminator
+ }
+ };
+ return qm_tran_init(&tatbl_);
+}
+
+//${AOs::Periodic4::SM::active} ..............................................
+QP::QMState const Periodic4::active_s = {
+ QM_STATE_NULL, // superstate (top)
+ &Periodic4::active,
+ Q_ACTION_NULL, // no entry action
+ Q_ACTION_NULL, // no exit action
+ Q_ACTION_NULL // no initial tran.
+};
+//${AOs::Periodic4::SM::active}
+QM_STATE_DEF(Periodic4, active) {
+ QP::QState status_;
+ switch (e->sig) {
+ //${AOs::Periodic4::SM::active::TIMEOUT}
+ case TIMEOUT_SIG: {
+ for (std::uint16_t i = m_toggles; i > 0U; --i) {
+ BSP::d3on();
+ BSP::d3off();
+ }
+ status_ = Q_RET_HANDLED;
+ break;
+ }
+ //${AOs::Periodic4::SM::active::PERIODIC_SPEC}
+ case PERIODIC_SPEC_SIG: {
+ BSP::d3on();
+ m_te.disarm();
+ m_te.armX(Q_EVT_CAST(PeriodicSpecEvt)->ticks,
+ Q_EVT_CAST(PeriodicSpecEvt)->ticks);
+ m_toggles = Q_EVT_CAST(PeriodicSpecEvt)->toggles;
+ BSP::d3off();
+ status_ = Q_RET_HANDLED;
+ break;
+ }
+ default: {
+ status_ = Q_RET_SUPER;
+ break;
+ }
+ }
+ return status_;
+}
+
+} // namespace APP
+//$enddef${AOs::Periodic4} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
diff --git a/examples/arm-cm/real-time_nucleo-l053r8/qk/real-time.qm b/examples/arm-cm/real-time_nucleo-l053r8/qk/real-time.qm
new file mode 100644
index 00000000..0f84fb13
--- /dev/null
+++ b/examples/arm-cm/real-time_nucleo-l053r8/qk/real-time.qm
@@ -0,0 +1,287 @@
+
+
+
+
+
+ : QP::QSignal {
+ PERIODIC_SPEC_SIG = QP::Q_USER_SIG,
+ TIMEOUT_SIG,
+ SPORADIC_A_SIG,
+ SPORADIC_B_SIG,
+ REMINDER_SIG,
+ // ...
+ MAX_SIG // the last signal
+};
+
+
+
+
+
+
+
+
+ : QP::QEvt(s),
+ toggles(tg),
+ ticks(ti)
+
+
+
+
+
+
+
+
+ : QP::QEvt(s),
+ toggles(tg),
+ rtc_toggles(0U)
+
+
+
+ {&Periodic1::inst};
+
+
+ {&Periodic4::inst};
+
+
+ {&Sporadic2::inst};
+
+
+ {&Sporadic3::inst};
+
+
+
+
+
+
+
+
+ : QMActive(Q_STATE_CAST(&Periodic1::initial)),
+ m_te(this, TIMEOUT_SIG, 0U)
+
+
+
+ Q_REQUIRE_ID(300, (QP::QEvt::verify_(e))
+ && (e->sig == PERIODIC_SPEC_SIG));
+
+m_te.armX(Q_EVT_CAST(PeriodicSpecEvt)->ticks,
+ Q_EVT_CAST(PeriodicSpecEvt)->ticks);
+m_toggles = Q_EVT_CAST(PeriodicSpecEvt)->toggles;
+
+
+
+
+
+
+ for (std::uint16_t i = m_toggles; i > 0U; --i) {
+ BSP::d6on();
+ BSP::d6off();
+}
+
+
+
+
+
+ BSP::d6on();
+m_te.disarm();
+m_te.armX(Q_EVT_CAST(PeriodicSpecEvt)->ticks,
+ Q_EVT_CAST(PeriodicSpecEvt)->ticks);
+m_toggles = Q_EVT_CAST(PeriodicSpecEvt)->toggles;
+BSP::d6off();
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ : QMActive(Q_STATE_CAST(&Periodic4::initial)),
+ m_te(this, TIMEOUT_SIG, 0U)
+
+
+
+ Q_REQUIRE_ID(300, QP::QEvt::verify_(e)
+ && (e->sig == PERIODIC_SPEC_SIG));
+
+m_te.armX(Q_EVT_CAST(PeriodicSpecEvt)->ticks,
+ Q_EVT_CAST(PeriodicSpecEvt)->ticks);
+m_toggles = Q_EVT_CAST(PeriodicSpecEvt)->toggles;
+
+
+
+
+
+
+ for (std::uint16_t i = m_toggles; i > 0U; --i) {
+ BSP::d3on();
+ BSP::d3off();
+}
+
+
+
+
+
+ BSP::d3on();
+m_te.disarm();
+m_te.armX(Q_EVT_CAST(PeriodicSpecEvt)->ticks,
+ Q_EVT_CAST(PeriodicSpecEvt)->ticks);
+m_toggles = Q_EVT_CAST(PeriodicSpecEvt)->toggles;
+BSP::d3off();
+
+
+
+
+
+
+
+
+
+
+
+
+ : QMActive(Q_STATE_CAST(&Sporadic2::initial))
+
+
+
+ Q_UNUSED_PAR(e);
+
+
+
+
+
+
+ BSP::d5on();
+AO_Sporadic3->POST(e, this); // Sporadic2 --> Sporadic3
+BSP::d5off();
+
+
+
+
+
+ BSP::d5on();
+AO_Periodic1->POST(BSP::getEvtPeriodic1(1U), this);
+BSP::d5off();
+
+for (std::uint16_t i = Q_EVT_CAST(SporadicSpecEvt)->toggles;
+ i > 0U; --i)
+{
+ BSP::d5on();
+ BSP::d5off();
+}
+
+
+
+
+
+
+
+
+
+
+
+
+ : QMActive(Q_STATE_CAST(&Sporadic3::initial))
+
+
+
+ Q_UNUSED_PAR(e);
+
+
+
+
+
+
+ BSP::d4on();
+// Sporadic3 --> Periodic4
+AO_Periodic4->POST(BSP::getEvtPeriodic4(1U), this);
+BSP::d4off();
+
+for (std::uint16_t i = Q_EVT_CAST(SporadicSpecEvt)->toggles;
+ i > 0U; --i)
+{
+ BSP::d4on();
+ BSP::d4off();
+}
+
+
+
+
+
+
+
+
+
+
+
+
+ #ifndef APP_HPP_
+#define APP_HPP_
+
+$declare ${Shared}
+
+#endif // APP_HPP_
+
+
+ #include "qpcpp.hpp" // QP/C++ real-time embedded framework
+#include "bsp.hpp" // Board Support Package
+#include "app.hpp" // Application interface
+
+namespace {
+Q_DEFINE_THIS_MODULE("periodic1")
+}
+
+$declare ${AOs::Periodic1}
+
+$define ${Shared::AO_Periodic1}
+$define ${AOs::Periodic1}
+
+
+ #include "qpcpp.hpp" // QP/C++ real-time embedded framework
+#include "bsp.hpp" // Board Support Package
+#include "app.hpp" // Application interface
+
+namespace {
+Q_DEFINE_THIS_MODULE("periodic4")
+}
+
+$declare ${AOs::Periodic4}
+
+$define ${Shared::AO_Periodic4}
+$define ${AOs::Periodic4}
+
+
+ #include "qpcpp.hpp" // QP/C++ real-time embedded framework
+#include "bsp.hpp" // Board Support Package
+#include "app.hpp" // Application interface
+
+namespace {
+Q_DEFINE_THIS_MODULE("sporadic2")
+}
+
+$declare ${AOs::Sporadic2}
+
+$define ${Shared::AO_Sporadic2}
+$define ${AOs::Sporadic2}
+
+
+ #include "qpcpp.hpp" // QP/C++ real-time embedded framework
+#include "bsp.hpp" // Board Support Package
+#include "app.hpp" // Application interface
+
+namespace {
+Q_DEFINE_THIS_MODULE("sporadic3")
+}
+
+$declare ${AOs::Sporadic3}
+
+$define ${Shared::AO_Sporadic3}
+$define ${AOs::Sporadic3}
+
+
+
diff --git a/examples/arm-cm/real-time_nucleo-l053r8/qk/sporadic2.cpp b/examples/arm-cm/real-time_nucleo-l053r8/qk/sporadic2.cpp
new file mode 100644
index 00000000..bce445ee
--- /dev/null
+++ b/examples/arm-cm/real-time_nucleo-l053r8/qk/sporadic2.cpp
@@ -0,0 +1,143 @@
+//$file${.::sporadic2.cpp} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
+//
+// Model: real-time.qm
+// File: ${.::sporadic2.cpp}
+//
+// This code has been generated by QM 5.3.0 .
+// DO NOT EDIT THIS FILE MANUALLY. All your changes will be lost.
+//
+// SPDX-License-Identifier: GPL-3.0-or-later
+//
+// This generated code is open source software: you can redistribute it under
+// the terms of the GNU General Public License as published by the Free
+// Software Foundation.
+//
+// This code is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+// more details.
+//
+// NOTE:
+// Alternatively, this generated code may be distributed under the terms
+// of Quantum Leaps commercial licenses, which expressly supersede the GNU
+// General Public License and are specifically designed for licensees
+// interested in retaining the proprietary status of their code.
+//
+// Contact information:
+//
+//
+//
+//$endhead${.::sporadic2.cpp} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+#include "qpcpp.hpp" // QP/C++ real-time embedded framework
+#include "bsp.hpp" // Board Support Package
+#include "app.hpp" // Application interface
+
+namespace {
+Q_DEFINE_THIS_MODULE("sporadic2")
+}
+
+//$declare${AOs::Sporadic2} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
+namespace APP {
+
+//${AOs::Sporadic2} ..........................................................
+class Sporadic2 : public QP::QMActive {
+public:
+ static Sporadic2 inst;
+
+public:
+ Sporadic2();
+
+protected:
+ QM_STATE_DECL( initial);
+ QM_STATE_DECL( active);
+}; // class Sporadic2
+
+} // namespace APP
+//$enddecl${AOs::Sporadic2} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+//$skip${QP_VERSION} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
+// Check for the minimum required QP version
+#if (QP_VERSION < 730U) || (QP_VERSION != ((QP_RELEASE^4294967295U) % 0x3E8U))
+#error qpcpp version 7.3.0 or higher required
+#endif
+//$endskip${QP_VERSION} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+//$define${Shared::AO_Sporadic2} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
+namespace APP {
+
+//${Shared::AO_Sporadic2} ....................................................
+QP::QActive * const AO_Sporadic2 {&Sporadic2::inst};
+
+} // namespace APP
+//$enddef${Shared::AO_Sporadic2} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//$define${AOs::Sporadic2} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
+namespace APP {
+
+//${AOs::Sporadic2} ..........................................................
+Sporadic2 Sporadic2::inst;
+
+//${AOs::Sporadic2::Sporadic2} ...............................................
+Sporadic2::Sporadic2()
+ : QMActive(Q_STATE_CAST(&Sporadic2::initial))
+{}
+
+//${AOs::Sporadic2::SM} ......................................................
+QM_STATE_DEF(Sporadic2, initial) {
+ //${AOs::Sporadic2::SM::initial}
+ Q_UNUSED_PAR(e);
+
+ QS_FUN_DICTIONARY(&Sporadic2::active);
+ static QP::QMTranActTable const tatbl_ = { // tran-action table
+ &active_s, // target state
+ {
+ Q_ACTION_NULL // zero terminator
+ }
+ };
+ return qm_tran_init(&tatbl_);
+}
+
+//${AOs::Sporadic2::SM::active} ..............................................
+QP::QMState const Sporadic2::active_s = {
+ QM_STATE_NULL, // superstate (top)
+ &Sporadic2::active,
+ Q_ACTION_NULL, // no entry action
+ Q_ACTION_NULL, // no exit action
+ Q_ACTION_NULL // no initial tran.
+};
+//${AOs::Sporadic2::SM::active}
+QM_STATE_DEF(Sporadic2, active) {
+ QP::QState status_;
+ switch (e->sig) {
+ //${AOs::Sporadic2::SM::active::SPORADIC_A}
+ case SPORADIC_A_SIG: {
+ BSP::d5on();
+ AO_Sporadic3->POST(e, this); // Sporadic2 --> Sporadic3
+ BSP::d5off();
+ status_ = Q_RET_HANDLED;
+ break;
+ }
+ //${AOs::Sporadic2::SM::active::SPORADIC_B}
+ case SPORADIC_B_SIG: {
+ BSP::d5on();
+ AO_Periodic1->POST(BSP::getEvtPeriodic1(1U), this);
+ BSP::d5off();
+
+ for (std::uint16_t i = Q_EVT_CAST(SporadicSpecEvt)->toggles;
+ i > 0U; --i)
+ {
+ BSP::d5on();
+ BSP::d5off();
+ }
+ status_ = Q_RET_HANDLED;
+ break;
+ }
+ default: {
+ status_ = Q_RET_SUPER;
+ break;
+ }
+ }
+ return status_;
+}
+
+} // namespace APP
+//$enddef${AOs::Sporadic2} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
diff --git a/examples/arm-cm/real-time_nucleo-l053r8/qk/sporadic3.cpp b/examples/arm-cm/real-time_nucleo-l053r8/qk/sporadic3.cpp
new file mode 100644
index 00000000..cbdc973e
--- /dev/null
+++ b/examples/arm-cm/real-time_nucleo-l053r8/qk/sporadic3.cpp
@@ -0,0 +1,136 @@
+//$file${.::sporadic3.cpp} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
+//
+// Model: real-time.qm
+// File: ${.::sporadic3.cpp}
+//
+// This code has been generated by QM 5.3.0 .
+// DO NOT EDIT THIS FILE MANUALLY. All your changes will be lost.
+//
+// SPDX-License-Identifier: GPL-3.0-or-later
+//
+// This generated code is open source software: you can redistribute it under
+// the terms of the GNU General Public License as published by the Free
+// Software Foundation.
+//
+// This code is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+// more details.
+//
+// NOTE:
+// Alternatively, this generated code may be distributed under the terms
+// of Quantum Leaps commercial licenses, which expressly supersede the GNU
+// General Public License and are specifically designed for licensees
+// interested in retaining the proprietary status of their code.
+//
+// Contact information:
+//
+//
+//
+//$endhead${.::sporadic3.cpp} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+#include "qpcpp.hpp" // QP/C++ real-time embedded framework
+#include "bsp.hpp" // Board Support Package
+#include "app.hpp" // Application interface
+
+namespace {
+Q_DEFINE_THIS_MODULE("sporadic3")
+}
+
+//$declare${AOs::Sporadic3} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
+namespace APP {
+
+//${AOs::Sporadic3} ..........................................................
+class Sporadic3 : public QP::QMActive {
+public:
+ static Sporadic3 inst;
+
+public:
+ Sporadic3();
+
+protected:
+ QM_STATE_DECL( initial);
+ QM_STATE_DECL( active);
+}; // class Sporadic3
+
+} // namespace APP
+//$enddecl${AOs::Sporadic3} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+//$skip${QP_VERSION} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
+// Check for the minimum required QP version
+#if (QP_VERSION < 730U) || (QP_VERSION != ((QP_RELEASE^4294967295U) % 0x3E8U))
+#error qpcpp version 7.3.0 or higher required
+#endif
+//$endskip${QP_VERSION} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+//$define${Shared::AO_Sporadic3} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
+namespace APP {
+
+//${Shared::AO_Sporadic3} ....................................................
+QP::QActive * const AO_Sporadic3 {&Sporadic3::inst};
+
+} // namespace APP
+//$enddef${Shared::AO_Sporadic3} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+//$define${AOs::Sporadic3} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
+namespace APP {
+
+//${AOs::Sporadic3} ..........................................................
+Sporadic3 Sporadic3::inst;
+
+//${AOs::Sporadic3::Sporadic3} ...............................................
+Sporadic3::Sporadic3()
+ : QMActive(Q_STATE_CAST(&Sporadic3::initial))
+{}
+
+//${AOs::Sporadic3::SM} ......................................................
+QM_STATE_DEF(Sporadic3, initial) {
+ //${AOs::Sporadic3::SM::initial}
+ Q_UNUSED_PAR(e);
+
+ QS_FUN_DICTIONARY(&Sporadic3::active);
+ static QP::QMTranActTable const tatbl_ = { // tran-action table
+ &active_s, // target state
+ {
+ Q_ACTION_NULL // zero terminator
+ }
+ };
+ return qm_tran_init(&tatbl_);
+}
+
+//${AOs::Sporadic3::SM::active} ..............................................
+QP::QMState const Sporadic3::active_s = {
+ QM_STATE_NULL, // superstate (top)
+ &Sporadic3::active,
+ Q_ACTION_NULL, // no entry action
+ Q_ACTION_NULL, // no exit action
+ Q_ACTION_NULL // no initial tran.
+};
+//${AOs::Sporadic3::SM::active}
+QM_STATE_DEF(Sporadic3, active) {
+ QP::QState status_;
+ switch (e->sig) {
+ //${AOs::Sporadic3::SM::active::SPORADIC_A}
+ case SPORADIC_A_SIG: {
+ BSP::d4on();
+ // Sporadic3 --> Periodic4
+ AO_Periodic4->POST(BSP::getEvtPeriodic4(1U), this);
+ BSP::d4off();
+
+ for (std::uint16_t i = Q_EVT_CAST(SporadicSpecEvt)->toggles;
+ i > 0U; --i)
+ {
+ BSP::d4on();
+ BSP::d4off();
+ }
+ status_ = Q_RET_HANDLED;
+ break;
+ }
+ default: {
+ status_ = Q_RET_SUPER;
+ break;
+ }
+ }
+ return status_;
+}
+
+} // namespace APP
+//$enddef${AOs::Sporadic3} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
diff --git a/examples/arm-cm/real-time_nucleo-l053r8/qk/traces/rt-qk.png b/examples/arm-cm/real-time_nucleo-l053r8/qk/traces/rt-qk.png
new file mode 100644
index 00000000..b8805745
Binary files /dev/null and b/examples/arm-cm/real-time_nucleo-l053r8/qk/traces/rt-qk.png differ
diff --git a/examples/arm-cm/real-time_nucleo-l053r8/qk/traces/rt-qk.pvs b/examples/arm-cm/real-time_nucleo-l053r8/qk/traces/rt-qk.pvs
new file mode 100644
index 00000000..4aa49470
--- /dev/null
+++ b/examples/arm-cm/real-time_nucleo-l053r8/qk/traces/rt-qk.pvs
@@ -0,0 +1,77 @@
+[D0]
+name=D0
+enabled=true
+color=4279638298
+conversion_type=0
+conv_options=0
+
+[D1]
+name=D1
+enabled=true
+color=4287582722
+conversion_type=0
+conv_options=0
+
+[D2]
+name=D2
+enabled=true
+color=4291559424
+conversion_type=0
+conv_options=0
+
+[D3]
+name=D3
+enabled=true
+color=4294277376
+conversion_type=0
+conv_options=0
+
+[D4]
+name=D4
+enabled=true
+color=4293776384
+conversion_type=0
+conv_options=0
+
+[D5]
+name=D5
+enabled=true
+color=4285780502
+conversion_type=0
+conv_options=0
+
+[D6]
+name=D6
+enabled=true
+color=4281623972
+conversion_type=0
+conv_options=0
+
+[D7]
+name=D7
+enabled=true
+color=4285878395
+conversion_type=0
+conv_options=0
+
+[General]
+decode_signals=0
+generated_signals=0
+views=1
+meta_objs=0
+
+[view0]
+scale=2.4084778420038533e-5
+v_offset=-21
+splitter_state=@ByteArray(\0\0\0\xff\0\0\0\x1\0\0\0\x2\0\0\0?\0\0\x6\xd3\x1\0\0\0\x1\x1\0\0\0\x1\0)
+segment_display_mode=1
+offset=22 serialization::archive 14 0 0 0 0 0 0 0 0 0 0 0 0 0 6
+zero_offset=22 serialization::archive 14 0 0 0 0 0 0 0 0 0 0 0 0 0 6
+D0\trace_height=40
+D1\trace_height=40
+D2\trace_height=40
+D3\trace_height=40
+D4\trace_height=40
+D5\trace_height=40
+D6\trace_height=40
+D7\trace_height=40
diff --git a/examples/arm-cm/real-time_nucleo-l053r8/qk/traces/rt-qk.sr b/examples/arm-cm/real-time_nucleo-l053r8/qk/traces/rt-qk.sr
new file mode 100644
index 00000000..3ddb29c7
Binary files /dev/null and b/examples/arm-cm/real-time_nucleo-l053r8/qk/traces/rt-qk.sr differ
diff --git a/examples/arm-cm/real-time_nucleo-l053r8/qv-ms-tt/app.hpp b/examples/arm-cm/real-time_nucleo-l053r8/qv-ms-tt/app.hpp
new file mode 100644
index 00000000..fc6347aa
--- /dev/null
+++ b/examples/arm-cm/real-time_nucleo-l053r8/qv-ms-tt/app.hpp
@@ -0,0 +1,106 @@
+//$file${.::app.hpp} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
+//
+// Model: real-time-ms-tt.qm
+// File: ${.::app.hpp}
+//
+// This code has been generated by QM 5.3.0 .
+// DO NOT EDIT THIS FILE MANUALLY. All your changes will be lost.
+//
+// SPDX-License-Identifier: GPL-3.0-or-later
+//
+// This generated code is open source software: you can redistribute it under
+// the terms of the GNU General Public License as published by the Free
+// Software Foundation.
+//
+// This code is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+// more details.
+//
+// NOTE:
+// Alternatively, this generated code may be distributed under the terms
+// of Quantum Leaps commercial licenses, which expressly supersede the GNU
+// General Public License and are specifically designed for licensees
+// interested in retaining the proprietary status of their code.
+//
+// Contact information:
+//
+//
+//
+//$endhead${.::app.hpp} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+#ifndef APP_HPP_
+#define APP_HPP_
+
+//$declare${Shared} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
+namespace APP {
+
+//${Shared::AppSignals} ......................................................
+enum AppSignals : QP::QSignal {
+ TICK_SIG = QP::Q_USER_SIG,
+ RUN_SIG,
+ MODE0_SIG,
+ MODE1_SIG,
+
+ PERIODIC_SPEC_SIG,
+ SPORADIC_A_SIG,
+ SPORADIC_B_SIG,
+ // ...
+ MAX_SIG // the last signal
+};
+
+//${Shared::PeriodicSpecEvt} .................................................
+class PeriodicSpecEvt : public QP::QEvt {
+public:
+ std::uint16_t toggles;
+ std::uint8_t ticks;
+
+public:
+ constexpr PeriodicSpecEvt(
+ QP::QSignal s,
+ std::uint16_t tg,
+ std::uint8_t ti)
+ : QP::QEvt(s),
+ toggles(tg),
+ ticks(ti)
+ {}
+}; // class PeriodicSpecEvt
+
+//${Shared::SporadicSpecEvt} .................................................
+class SporadicSpecEvt : public QP::QEvt {
+public:
+ std::uint16_t toggles;
+ std::uint16_t rtc_toggles;
+
+public:
+ constexpr SporadicSpecEvt(
+ QP::QSignal s,
+ std::uint16_t tg,
+ std::uint16_t rtc)
+ : QP::QEvt(s),
+ toggles(tg),
+ rtc_toggles(rtc)
+ {}
+}; // class SporadicSpecEvt
+
+//${Shared::AO_Periodic1} ....................................................
+extern QP::QActive * const AO_Periodic1;
+
+//${Shared::AO_Periodic4} ....................................................
+extern QP::QActive * const AO_Periodic4;
+
+//${Shared::AO_Sporadic2} ....................................................
+extern QP::QActive * const AO_Sporadic2;
+
+//${Shared::AO_Sporadic3} ....................................................
+extern QP::QActive * const AO_Sporadic3;
+
+//${Shared::TTSched_tick} ....................................................
+void TTSched_tick();
+
+//${Shared::TTSched_mode} ....................................................
+void TTSched_mode(uint8_t mode);
+
+} // namespace APP
+//$enddecl${Shared} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+#endif // APP_HPP_
diff --git a/examples/arm-cm/real-time_nucleo-l053r8/qv-ms-tt/armclang/rt-qv-tt.sct b/examples/arm-cm/real-time_nucleo-l053r8/qv-ms-tt/armclang/rt-qv-tt.sct
new file mode 100644
index 00000000..04d0dc68
--- /dev/null
+++ b/examples/arm-cm/real-time_nucleo-l053r8/qv-ms-tt/armclang/rt-qv-tt.sct
@@ -0,0 +1,20 @@
+; *************************************************************
+; *** Scatter-Loading Description File generated by uVision ***
+;
+; Adapted by Quantum Leaps:
+; moved STACK as the first section in RW_IRAM1
+; *************************************************************
+
+LR_IROM1 0x08000000 0x00010000 { ; load region size_region
+ ER_IROM1 0x08000000 0x00010000 { ; load address = execution address
+ *.o (RESET, +First)
+ *(InRoot$$Sections)
+ .ANY (+RO)
+ .ANY (+XO)
+ }
+ RW_IRAM1 0x20000000 0x00002000 { ; RW data
+ *.o (STACK, +First)
+ .ANY (+RW +ZI)
+ }
+}
+
diff --git a/examples/uc-os2/arm-cm/dpp_nucleo-l053r8/armclang/dpp.uvoptx b/examples/arm-cm/real-time_nucleo-l053r8/qv-ms-tt/armclang/rt-qv-tt.uvoptx
similarity index 75%
rename from examples/uc-os2/arm-cm/dpp_nucleo-l053r8/armclang/dpp.uvoptx
rename to examples/arm-cm/real-time_nucleo-l053r8/qv-ms-tt/armclang/rt-qv-tt.uvoptx
index ef4646a4..c45edb0a 100644
--- a/examples/uc-os2/arm-cm/dpp_nucleo-l053r8/armclang/dpp.uvoptx
+++ b/examples/arm-cm/real-time_nucleo-l053r8/qv-ms-tt/armclang/rt-qv-tt.uvoptx
@@ -22,7 +22,7 @@
- dpp-dbg
+ rt-dbg
0x4
ARM-ADS
@@ -30,8 +30,8 @@
1
1
- 1
- 0
+ 0
+ 1
0
@@ -89,7 +89,7 @@
1
1
1
- 0
+ 1
1
1
1
@@ -117,26 +117,21 @@
STLink\ST-LINKIII-KEIL_SWO.dll
+
+ 0
+ UL2CM3
+ UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32L0xx_64 -FS08000000 -FL010000 -FP0($$Device:STM32L053R8Tx$CMSIS\Flash\STM32L0xx_64.FLM))
+
0
ST-LINKIII-KEIL_SWO
- -U-O207 -O207 -SF10000 -C0 -A0 -I0 -HNlocalhost -HP7184 -P1 -N00("ARM CoreSight SW-DP (ARM Core") -D00(0BC11477) -L00(0) -TO131090 -TC10000000 -TT10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO7 -FD20000000 -FC1000 -FN1 -FF0STM32L0xx_64.FLM -FS08000000 -FL010000 -FP0($$Device:STM32L053R8Tx$CMSIS\Flash\STM32L0xx_64.FLM)
+ -U066CFF484951775087074312 -O8431 -SF10000 -C0 -A0 -I0 -HNlocalhost -HP7184 -P2 -N00("ARM CoreSight SW-DP (ARM Core") -D00(0BC11477) -L00(0) -TO131090 -TC10000000 -TT10000000 -TP21 -TDS8004 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC800 -FN1 -FF0STM32L0xx_64.FLM -FS08000000 -FL010000 -FP0($$Device:STM32L053R8Tx$CMSIS\Flash\STM32L0xx_64.FLM) -WA0 -WE0 -WVCE4 -WS2710 -WM0 -WP2
0
DLGUARM
(105=-1,-1,-1,-1,0)
-
- 0
- UL2CM3
- UL2CM3(-O207 -S0 -C0 -FO7 -FN1 -FC1000 -FD20000000 -FF0STM32L0xx_64 -FL010000 -FS08000000 -FP0($$Device:STM32L053R8Tx$CMSIS\Flash\STM32L0xx_64.FLM)
-
-
- 0
- lmidk-agdi
- -U0E2006F4 -O4622 -S4 -FO61
-
0
ARMRTXEVENTFLAGS
@@ -145,7 +140,7 @@
0
DLGTARM
- (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1012=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)
+ (1010=979,559,1390,1061,0)(1007=2082,245,2289,466,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)
0
@@ -153,19 +148,57 @@
-
+
+
+ 0
+ 0
+ 65
+ 1
+ 134218732
+ 0
+ 0
+ 0
+ 0
+ 0
+ 1
+ ..\bsp.cpp
+
+ \\rt_qv_tt\../bsp.cpp\65
+
+
+ 1
+ 0
+ 112
+ 1
+ 134221064
+ 0
+ 0
+ 0
+ 0
+ 0
+ 1
+ ..\..\..\..\..\src\qf\qf_actq.cpp
+
+ \\rt_qv_tt\../../../../../src/qf/qf_actq.cpp\112
+
+
0
1
- OSTCBPrioTbl
+ QK_attr_
+
+
+ 1
+ 1
+ QF_readySet_
1
2
- 0x20000200
+ 0x2000020C
0
@@ -230,7 +263,7 @@
- dpp-rel
+ rt-rel
0x4
ARM-ADS
@@ -238,8 +271,8 @@
1
1
- 1
- 0
+ 0
+ 1
0
@@ -297,7 +330,7 @@
1
1
1
- 0
+ 1
1
1
1
@@ -311,7 +344,7 @@
1
0
0
- 5
+ 6
@@ -325,26 +358,21 @@
STLink\ST-LINKIII-KEIL_SWO.dll
+
+ 0
+ UL2CM3
+ UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32L0xx_64 -FS08000000 -FL010000 -FP0($$Device:STM32L053R8Tx$CMSIS\Flash\STM32L0xx_64.FLM))
+
0
ST-LINKIII-KEIL_SWO
- -U -O207 -SF10000 -C0 -A0 -I0 -HNlocalhost -HP7184 -P1 -N00("ARM CoreSight SW-DP (ARM Core") -D00(0BC11477) -L00(0) -TO131090 -TC10000000 -TT10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO7 -FD20000000 -FC1000 -FN1 -FF0STM32L0xx_64.FLM -FS08000000 -FL010000 -FP0($$Device:STM32L053R8Tx$CMSIS\Flash\STM32L0xx_64.FLM)
+ -U066CFF484951775087074312 -I0 -O8431 -S0 -C0 -A0 -N00("ARM CoreSight SW-DP") -D00(0BC11477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO7 -FD20000000 -FC1000 -FN1 -FF0STM32L0xx_64.FLM -FS08000000 -FL010000 -FP0($$Device:STM32L053R8Tx$CMSIS\Flash\STM32L0xx_64.FLM)
0
DLGUARM
(105=-1,-1,-1,-1,0)
-
- 0
- UL2CM3
- -O207 -S0 -C0 -FO7 -FN1 -FC1000 -FD20000000 -FF0STM32L0xx_64 -FL010000 -FS08000000 -FP0($$Device:STM32L053R8Tx$CMSIS\Flash\STM32L0xx_64.FLM)
-
-
- 0
- lmidk-agdi
- -U0E10259B -O4622 -S4 -FO61
-
0
ARMRTXEVENTFLAGS
@@ -353,7 +381,7 @@
0
DLGTARM
- (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1012=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)
+ (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)
0
@@ -422,7 +450,7 @@
1
- 0
+ 1
0
2
10000000
@@ -431,7 +459,7 @@
- dpp-spy
+ rt-spy
0x4
ARM-ADS
@@ -498,7 +526,7 @@
1
1
1
- 0
+ 1
1
1
1
@@ -526,26 +554,21 @@
STLink\ST-LINKIII-KEIL_SWO.dll
+
+ 0
+ UL2CM3
+ -O207 -S0 -C0 -FO7 -FN1 -FC1000 -FD20000000 -FF0STM32L0xx_64 -FL010000 -FS08000000 -FP0($$Device:STM32L053R8Tx$CMSIS\Flash\STM32L0xx_64.FLM)
+
0
ST-LINKIII-KEIL_SWO
- -U-O207 -O207 -SF10000 -C0 -A0 -I0 -HNlocalhost -HP7184 -P1 -N00("ARM CoreSight SW-DP (ARM Core") -D00(0BC11477) -L00(0) -TO131090 -TC10000000 -TT10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO7 -FD20000000 -FC1000 -FN1 -FF0STM32L0xx_64.FLM -FS08000000 -FL010000 -FP0($$Device:STM32L053R8Tx$CMSIS\Flash\STM32L0xx_64.FLM)
+ -U066CFF484951775087074312 -O8431 -SF4000 -C0 -A0 -I0 -HNlocalhost -HP7184 -P2 -N00("ARM CoreSight SW-DP") -D00(0BC11477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8004 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO7 -FD20000000 -FC1000 -FN1 -FF0STM32L0xx_64.FLM -FS08000000 -FL010000 -FP0($$Device:STM32L053R8Tx$CMSIS\Flash\STM32L0xx_64.FLM)
0
DLGUARM
(105=-1,-1,-1,-1,0)
-
- 0
- UL2CM3
- UL2CM3(-O207 -S0 -C0 -FO7 -FN1 -FC1000 -FD20000000 -FF0STM32L0xx_64 -FL010000 -FS08000000 -FP0($$Device:STM32L053R8Tx$CMSIS\Flash\STM32L0xx_64.FLM)
-
-
- 0
- lmidk-agdi
- -U0E2006F4 -O4622 -S4 -FO61
-
0
ARMRTXEVENTFLAGS
@@ -554,7 +577,7 @@
0
DLGTARM
- (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1012=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)
+ (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)
0
@@ -632,7 +655,7 @@
- Applicatioin
+ Application
1
0
0
@@ -644,26 +667,14 @@
0
0
0
- ..\app_cfg.h
- app_cfg.h
+ ..\app.hpp
+ app.hpp
0
0
1
2
- 5
- 0
- 0
- 0
- ..\os_cfg.h
- os_cfg.h
- 0
- 0
-
-
- 1
- 3
8
0
0
@@ -675,7 +686,7 @@
1
- 4
+ 3
5
0
0
@@ -687,19 +698,7 @@
1
- 5
- 5
- 0
- 0
- 0
- ..\dpp.hpp
- dpp.hpp
- 0
- 0
-
-
- 1
- 6
+ 4
8
0
0
@@ -709,6 +708,30 @@
0
0
+
+ 1
+ 5
+ 8
+ 0
+ 0
+ 0
+ ..\periodic1.cpp
+ periodic1.cpp
+ 0
+ 0
+
+
+ 1
+ 6
+ 8
+ 0
+ 0
+ 0
+ ..\periodic4.cpp
+ periodic4.cpp
+ 0
+ 0
+
1
7
@@ -716,8 +739,8 @@
0
0
0
- ..\philo.cpp
- philo.cpp
+ ..\sporadic2.cpp
+ sporadic2.cpp
0
0
@@ -728,8 +751,20 @@
0
0
0
- ..\table.cpp
- table.cpp
+ ..\sporadic3.cpp
+ sporadic3.cpp
+ 0
+ 0
+
+
+ 1
+ 9
+ 8
+ 0
+ 0
+ 0
+ ..\ttsched.cpp
+ ttsched.cpp
0
0
@@ -737,13 +772,13 @@
nucleo-l053r8
- 0
+ 1
0
0
0
2
- 9
+ 10
5
0
0
@@ -755,7 +790,7 @@
2
- 10
+ 11
5
0
0
@@ -767,7 +802,7 @@
2
- 11
+ 12
1
0
0
@@ -779,7 +814,7 @@
2
- 12
+ 13
5
0
0
@@ -791,7 +826,7 @@
2
- 13
+ 14
2
0
0
@@ -811,7 +846,7 @@
0
3
- 14
+ 15
8
0
0
@@ -823,7 +858,7 @@
3
- 15
+ 16
8
0
0
@@ -835,7 +870,7 @@
3
- 16
+ 17
8
0
0
@@ -847,7 +882,19 @@
3
- 17
+ 18
+ 8
+ 0
+ 0
+ 0
+ ..\..\..\..\..\src\qf\qf_actq.cpp
+ qf_actq.cpp
+ 0
+ 0
+
+
+ 3
+ 19
8
0
0
@@ -859,7 +906,7 @@
3
- 18
+ 20
8
0
0
@@ -871,7 +918,7 @@
3
- 19
+ 21
8
0
0
@@ -883,7 +930,7 @@
3
- 20
+ 22
8
0
0
@@ -895,7 +942,7 @@
3
- 21
+ 23
8
0
0
@@ -907,7 +954,7 @@
3
- 22
+ 24
8
0
0
@@ -919,7 +966,7 @@
3
- 23
+ 25
8
0
0
@@ -931,7 +978,7 @@
3
- 24
+ 26
8
0
0
@@ -941,6 +988,18 @@
0
0
+
+ 3
+ 27
+ 8
+ 0
+ 0
+ 0
+ ..\..\..\..\..\src\qv\qv.cpp
+ qv.cpp
+ 0
+ 0
+
@@ -951,13 +1010,37 @@
0
4
- 25
+ 28
8
0
0
0
- ..\..\..\..\..\ports\uc-os2\qf_port.cpp
- qf_port.cpp
+ ..\..\..\..\..\ports\arm-cm\qv\armclang\qv_port.cpp
+ qv_port.cpp
+ 0
+ 0
+
+
+ 4
+ 29
+ 5
+ 0
+ 0
+ 0
+ ..\..\..\..\..\ports\arm-cm\qv\armclang\qp_port.hpp
+ qp_port.hpp
+ 0
+ 0
+
+
+ 4
+ 30
+ 5
+ 0
+ 0
+ 0
+ ..\..\..\..\..\ports\arm-cm\qv\armclang\qs_port.hpp
+ qs_port.hpp
0
0
@@ -971,7 +1054,7 @@
0
5
- 26
+ 31
8
0
0
@@ -983,31 +1066,7 @@
5
- 27
- 8
- 0
- 0
- 0
- ..\..\..\..\..\src\qs\qs_64bit.cpp
- qs_64bit.cpp
- 0
- 0
-
-
- 5
- 28
- 8
- 0
- 0
- 0
- ..\..\..\..\..\src\qs\qs_fp.cpp
- qs_fp.cpp
- 0
- 0
-
-
- 5
- 29
+ 32
8
0
0
@@ -1019,7 +1078,7 @@
5
- 30
+ 33
8
0
0
@@ -1031,188 +1090,4 @@
-
- ucos-ii
- 0
- 0
- 0
- 0
-
- 6
- 31
- 1
- 0
- 0
- 0
- ..\..\..\..\..\3rd_party\uC-OS2\Source\os_core.c
- os_core.c
- 0
- 0
-
-
- 6
- 32
- 1
- 0
- 0
- 0
- ..\..\..\..\..\3rd_party\uC-OS2\Source\os_task.c
- os_task.c
- 0
- 0
-
-
- 6
- 33
- 1
- 0
- 0
- 0
- ..\..\..\..\..\3rd_party\uC-OS2\Source\os_flag.c
- os_flag.c
- 0
- 0
-
-
- 6
- 34
- 1
- 0
- 0
- 0
- ..\..\..\..\..\3rd_party\uC-OS2\Source\os_mbox.c
- os_mbox.c
- 0
- 0
-
-
- 6
- 35
- 1
- 0
- 0
- 0
- ..\..\..\..\..\3rd_party\uC-OS2\Source\os_mem.c
- os_mem.c
- 0
- 0
-
-
- 6
- 36
- 1
- 0
- 0
- 0
- ..\..\..\..\..\3rd_party\uC-OS2\Source\os_mutex.c
- os_mutex.c
- 0
- 0
-
-
- 6
- 37
- 1
- 0
- 0
- 0
- ..\..\..\..\..\3rd_party\uC-OS2\Source\os_q.c
- os_q.c
- 0
- 0
-
-
- 6
- 38
- 1
- 0
- 0
- 0
- ..\..\..\..\..\3rd_party\uC-OS2\Source\os_sem.c
- os_sem.c
- 0
- 0
-
-
- 6
- 39
- 1
- 0
- 0
- 0
- ..\..\..\..\..\3rd_party\uC-OS2\Source\os_time.c
- os_time.c
- 0
- 0
-
-
- 6
- 40
- 1
- 0
- 0
- 0
- ..\..\..\..\..\3rd_party\uC-OS2\Source\os_tmr.c
- os_tmr.c
- 0
- 0
-
-
-
-
- ucos-ii_port
- 0
- 0
- 0
- 0
-
- 7
- 41
- 1
- 0
- 0
- 0
- ..\..\..\..\..\3rd_party\uC-OS2\Ports\ARM-Cortex-M\ARMv6-M\os_cpu_c.c
- os_cpu_c.c
- 0
- 0
-
-
- 7
- 42
- 5
- 0
- 0
- 0
- ..\..\..\..\..\3rd_party\uC-OS2\Ports\ARM-Cortex-M\ARMv6-M\ARM\os_cpu.h
- os_cpu.h
- 0
- 0
-
-
- 7
- 43
- 2
- 0
- 0
- 0
- ..\..\..\..\..\3rd_party\uC-OS2\Ports\ARM-Cortex-M\ARMv6-M\ARM\os_cpu_a.asm
- os_cpu_a.asm
- 0
- 0
-
-
- 7
- 44
- 1
- 0
- 0
- 0
- ..\..\..\..\..\3rd_party\uC-OS2\Ports\ARM-Cortex-M\ARMv6-M\ARM\os_dbg.c
- os_dbg.c
- 0
- 0
-
-
-
diff --git a/examples/uc-os2/arm-cm/dpp_nucleo-l053r8/armclang/dpp.uvprojx b/examples/arm-cm/real-time_nucleo-l053r8/qv-ms-tt/armclang/rt-qv-tt.uvprojx
similarity index 80%
rename from examples/uc-os2/arm-cm/dpp_nucleo-l053r8/armclang/dpp.uvprojx
rename to examples/arm-cm/real-time_nucleo-l053r8/qv-ms-tt/armclang/rt-qv-tt.uvprojx
index e2c43169..dc183420 100644
--- a/examples/uc-os2/arm-cm/dpp_nucleo-l053r8/armclang/dpp.uvprojx
+++ b/examples/arm-cm/real-time_nucleo-l053r8/qv-ms-tt/armclang/rt-qv-tt.uvprojx
@@ -7,10 +7,10 @@
- dpp-dbg
+ rt-dbg
0x4
ARM-ADS
- 6160000::V6.16::ARMCLANG
+ 6190000::V6.19::ARMCLANG
1
@@ -21,9 +21,9 @@
IRAM(0x20000000,0x00002000) IROM(0x08000000,0x00010000) CPUTYPE("Cortex-M0+") CLOCK(12000000) ELITTLE
- UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32L0xx_64 -FS08000000 -FL010000 -FP0($$Device:STM32L053R8Tx$CMSIS\Flash\STM32L0xx_64.FLM))
+ UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32L0xx_64 -FS08000000 -FL010000 -FP0($$Device:STM32L053R8Tx$Flash\STM32L0xx_64.FLM))
0
- $$Device:STM32L053R8Tx$Drivers\CMSIS\Device\ST\STM32L0xx\Include\stm32l0xx.h
+ $$Device:STM32L053R8Tx$Device\Include\stm32l0xx.h
@@ -33,7 +33,7 @@
- $$Device:STM32L053R8Tx$CMSIS\SVD\STM32L053x.svd
+ $$Device:STM32L053R8Tx$SVD\STM32L053x.svd
0
0
@@ -49,7 +49,7 @@
1
.\dbg\
- dpp
+ rt-qv-tt
1
0
0
@@ -82,14 +82,14 @@
1
0
- fromelf --bin --output .\dbg\dpp.bin .\dbg\dpp.axf
+ fromelf --bin --output .\dbg\rt-qv-tt.bin .\dbg\rt-qv-tt.axf
0
0
0
0
- 1
+ 0
@@ -110,11 +110,11 @@
SARMCM3.DLL
- -REMAP-MPU
+ -REMAP
DARMCM1.DLL
-pCM0+
SARMCM3.DLL
- -MPU
+
TARMCM1.DLL
-pCM0+
@@ -134,7 +134,7 @@
0
1
1
- 4097
+ 4096
1
BIN\UL2CM3.DLL
@@ -186,6 +186,7 @@
0
0
0
+ 0
0
0
8
@@ -313,7 +314,7 @@
0
- 2
+ 5
0
0
1
@@ -324,8 +325,8 @@
0
3
0
- 1
- 1
+ 0
+ 0
0
0
3
@@ -337,9 +338,9 @@
0
-
+ USE_SCHED_DISABLE
- ..;..\..\..\..\..\include;..\..\..\..\..\ports\uc-os2;..\..\..\..\..\3rd_party\uC-OS2\Source;..\..\..\..\..\3rd_party\uC-OS2\Ports\ARM-Cortex-M\ARMv6-M\ARM;..\..\..\..\..\3rd_party\CMSIS\Include;..\..\..\..\..\3rd_party\nucleo-l053r8
+ ..;..\..\..\..\..\include;..\..\..\..\..\ports\arm-cm\qv\armclang;..\..\..\..\..\3rd_party\CMSIS\Include;..\..\..\..\..\3rd_party\nucleo-l053r8
@@ -361,7 +362,7 @@
- 1
+ 0
0
0
0
@@ -370,7 +371,7 @@
0x00000000
0x20000000
-
+ rt-qv-tt.sct
--entry Reset_Handler
@@ -381,17 +382,12 @@
- Applicatioin
+ Application
- app_cfg.h
+ app.hpp
5
- ..\app_cfg.h
-
-
- os_cfg.h
- 5
- ..\os_cfg.h
+ ..\app.hpp
bsp.cpp
@@ -403,25 +399,35 @@
5
..\bsp.hpp
-
- dpp.hpp
- 5
- ..\dpp.hpp
-
main.cpp
8
..\main.cpp
- philo.cpp
+ periodic1.cpp
8
- ..\philo.cpp
+ ..\periodic1.cpp
- table.cpp
+ periodic4.cpp
8
- ..\table.cpp
+ ..\periodic4.cpp
+
+
+ sporadic2.cpp
+ 8
+ ..\sporadic2.cpp
+
+
+ sporadic3.cpp
+ 8
+ ..\sporadic3.cpp
+
+
+ ttsched.cpp
+ 8
+ ..\ttsched.cpp
@@ -473,6 +479,11 @@
8
..\..\..\..\..\src\qf\qf_act.cpp
+
+ qf_actq.cpp
+ 8
+ ..\..\..\..\..\src\qf\qf_actq.cpp
+
qf_defer.cpp
8
@@ -513,15 +524,30 @@
8
..\..\..\..\..\src\qf\qf_time.cpp
+
+ qv.cpp
+ 8
+ ..\..\..\..\..\src\qv\qv.cpp
+
QP_port
- qf_port.cpp
+ qv_port.cpp
8
- ..\..\..\..\..\ports\uc-os2\qf_port.cpp
+ ..\..\..\..\..\ports\arm-cm\qv\armclang\qv_port.cpp
+
+
+ qp_port.hpp
+ 5
+ ..\..\..\..\..\ports\arm-cm\qv\armclang\qp_port.hpp
+
+
+ qs_port.hpp
+ 5
+ ..\..\..\..\..\ports\arm-cm\qv\armclang\qs_port.hpp
@@ -602,16 +628,6 @@
8
..\..\..\..\..\src\qs\qs.cpp
-
- qs_64bit.cpp
- 8
- ..\..\..\..\..\src\qs\qs_64bit.cpp
-
-
- qs_fp.cpp
- 8
- ..\..\..\..\..\src\qs\qs_fp.cpp
-
qs_rx.cpp
8
@@ -624,93 +640,13 @@
-
- ucos-ii
-
-
- os_core.c
- 1
- ..\..\..\..\..\3rd_party\uC-OS2\Source\os_core.c
-
-
- os_task.c
- 1
- ..\..\..\..\..\3rd_party\uC-OS2\Source\os_task.c
-
-
- os_flag.c
- 1
- ..\..\..\..\..\3rd_party\uC-OS2\Source\os_flag.c
-
-
- os_mbox.c
- 1
- ..\..\..\..\..\3rd_party\uC-OS2\Source\os_mbox.c
-
-
- os_mem.c
- 1
- ..\..\..\..\..\3rd_party\uC-OS2\Source\os_mem.c
-
-
- os_mutex.c
- 1
- ..\..\..\..\..\3rd_party\uC-OS2\Source\os_mutex.c
-
-
- os_q.c
- 1
- ..\..\..\..\..\3rd_party\uC-OS2\Source\os_q.c
-
-
- os_sem.c
- 1
- ..\..\..\..\..\3rd_party\uC-OS2\Source\os_sem.c
-
-
- os_time.c
- 1
- ..\..\..\..\..\3rd_party\uC-OS2\Source\os_time.c
-
-
- os_tmr.c
- 1
- ..\..\..\..\..\3rd_party\uC-OS2\Source\os_tmr.c
-
-
-
-
- ucos-ii_port
-
-
- os_cpu_c.c
- 1
- ..\..\..\..\..\3rd_party\uC-OS2\Ports\ARM-Cortex-M\ARMv6-M\os_cpu_c.c
-
-
- os_cpu.h
- 5
- ..\..\..\..\..\3rd_party\uC-OS2\Ports\ARM-Cortex-M\ARMv6-M\ARM\os_cpu.h
-
-
- os_cpu_a.asm
- 2
- ..\..\..\..\..\3rd_party\uC-OS2\Ports\ARM-Cortex-M\ARMv6-M\ARM\os_cpu_a.asm
-
-
- os_dbg.c
- 1
- ..\..\..\..\..\3rd_party\uC-OS2\Ports\ARM-Cortex-M\ARMv6-M\ARM\os_dbg.c
-
-
-
- dpp-rel
+ rt-rel
0x4
ARM-ADS
- 6130001::V6.13.1::.\ARMCLANG
+ 6160000::V6.16::ARMCLANG
1
@@ -721,9 +657,9 @@
IRAM(0x20000000,0x00002000) IROM(0x08000000,0x00010000) CPUTYPE("Cortex-M0+") CLOCK(12000000) ELITTLE
- UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32L0xx_64 -FS08000000 -FL010000 -FP0($$Device:STM32L053R8Tx$CMSIS\Flash\STM32L0xx_64.FLM))
+ UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32L0xx_64 -FS08000000 -FL010000 -FP0($$Device:STM32L053R8Tx$Flash\STM32L0xx_64.FLM))
0
- $$Device:STM32L053R8Tx$Drivers\CMSIS\Device\ST\STM32L0xx\Include\stm32l0xx.h
+ $$Device:STM32L053R8Tx$Device\Include\stm32l0xx.h
@@ -733,7 +669,7 @@
- $$Device:STM32L053R8Tx$CMSIS\SVD\STM32L053x.svd
+ $$Device:STM32L053R8Tx$SVD\STM32L053x.svd
0
0
@@ -749,7 +685,7 @@
1
.\rel\
- dpp
+ rt-qv-tt
1
0
0
@@ -782,14 +718,14 @@
1
0
- fromelf --bin --output .\rel\dpp.bin .\rel\dpp.axf
+ fromelf --bin --output .\rel\rt-qv-tt.bin .\rel\rt-qv-tt.axf
0
0
0
0
- 1
+ 0
@@ -810,11 +746,11 @@
SARMCM3.DLL
- -REMAP-MPU
+ -REMAP
DARMCM1.DLL
-pCM0+
SARMCM3.DLL
- -MPU
+
TARMCM1.DLL
-pCM0+
@@ -886,6 +822,7 @@
0
0
0
+ 0
0
0
8
@@ -1025,7 +962,7 @@
3
0
1
- 1
+ 0
0
0
3
@@ -1037,9 +974,9 @@
0
- NDEBUG
+ NDEBUG,USE_SCHED_DISABLE
- ..;..\..\..\..\..\include;..\..\..\..\..\ports\uc-os2;..\..\..\..\..\3rd_party\uC-OS2\Source;..\..\..\..\..\3rd_party\uC-OS2\Ports\ARM-Cortex-M\ARMv6-M\ARM;..\..\..\..\..\3rd_party\CMSIS\Include;..\..\..\..\..\3rd_party\nucleo-l053r8
+ ..;..\..\..\..\..\include;..\..\..\..\..\ports\arm-cm\qv\armclang;..\..\..\..\..\3rd_party\CMSIS\Include;..\..\..\..\..\3rd_party\nucleo-l053r8