MMS 2023-09-25 11:17:17 -04:00
parent 80d9bcd6fb
commit 32399054b8
247 changed files with 27753 additions and 12184 deletions

@ -1 +1 @@
Subproject commit de077b869b8980d124d9df3e5f7327500e28f178
Subproject commit 90b36151b30c5e4b1cf8fa2ab7862568a75806e9

19
LICENSES/License.txt Normal file
View File

@ -0,0 +1,19 @@
Quantum Leaps Dual-Licensing:
The QP/C Real-Time Embedded Framework is dually-licensed under
the following two alternatives:
1. Open source GNU General Public License (GPL)
version 3, or alternatively,
2. 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: https://www.gnu.org/licenses/gpl-3.0
The terms of the closed source Quantum Leaps commercial licenses
can be found at: https://www.state-machine.com/licensing
Redistributions in source code must retain the top-level comment blocks
in all files. Plagiarizing this software to sidestep the license
obligations is illegal.

View File

@ -1,6 +1,6 @@
//============================================================================
// Blinky example, EK-TM4C123GXL board, QK kernel
// Last updated for: @ref qpc_7_3_0
// Last updated for: @ref qpcpp_7_3_0
// Last updated on 2023-08-24
//
// Q u a n t u m L e a P s

View File

@ -16,7 +16,7 @@
<debug>1</debug>
<option>
<name>BrowseInfoPath</name>
<state>Debug\BrowseInfo</state>
<state>dbg</state>
</option>
<option>
<name>ExePath</name>
@ -36,11 +36,11 @@
</option>
<option>
<name>Input description</name>
<state>No specifier n, no float nor long long, no scan set, no assignment suppressing.</state>
<state>No specifier n, no float nor long long, no scan set, no assignment suppressing, without multibyte support.</state>
</option>
<option>
<name>Output description</name>
<state>No specifier a, A, no specifier n, no float nor long long, no flags.</state>
<state>No specifier a, A, no specifier n, no float nor long long, no flags, without multibyte support.</state>
</option>
<option>
<name>GOutputBinary</name>
@ -62,7 +62,7 @@
</option>
<option>
<name>RTDescription</name>
<state>Use the normal configuration of the C/C++ runtime library. No locale interface, C locale, no file descriptor support, no multibytes in printf and scanf, and no hex floats in strtod.</state>
<state>A compact configuration of the C/C++14 runtime library. No locale interface, C locale, no file descriptor support, no multibytes in printf and scanf, and no hex floats in strtod.</state>
</option>
<option>
<name>OGProductVersion</name>
@ -99,7 +99,7 @@
<option>
<name>GBECoreSlave</name>
<version>32</version>
<state>40</state>
<state>39</state>
</option>
<option>
<name>OGUseCmsis</name>
@ -201,7 +201,7 @@
</option>
<option>
<name>BuildFilesPath</name>
<state>Debug</state>
<state>dbg</state>
</option>
<option>
<name>PointerAuthentication</name>
@ -1096,7 +1096,7 @@
<debug>0</debug>
<option>
<name>BrowseInfoPath</name>
<state>Release\BrowseInfo</state>
<state>rel</state>
</option>
<option>
<name>ExePath</name>
@ -1116,11 +1116,11 @@
</option>
<option>
<name>Input description</name>
<state>No specifier n, no float nor long long, no scan set, no assignment suppressing.</state>
<state>No specifier n, no float nor long long, no scan set, no assignment suppressing, without multibyte support.</state>
</option>
<option>
<name>Output description</name>
<state>No specifier a, A, no specifier n, no float nor long long, no flags.</state>
<state>No specifier a, A, no specifier n, no float nor long long, no flags, without multibyte support.</state>
</option>
<option>
<name>GOutputBinary</name>
@ -1142,7 +1142,7 @@
</option>
<option>
<name>RTDescription</name>
<state>Use the normal configuration of the C/C++ runtime library. No locale interface, C locale, no file descriptor support, no multibytes in printf and scanf, and no hex floats in strtod.</state>
<state>A compact configuration of the C/C++14 runtime library. No locale interface, C locale, no file descriptor support, no multibytes in printf and scanf, and no hex floats in strtod.</state>
</option>
<option>
<name>OGProductVersion</name>
@ -1150,7 +1150,7 @@
</option>
<option>
<name>OGLastSavedByProductVersion</name>
<state>8.20.2.14834</state>
<state>9.32.1.54977</state>
</option>
<option>
<name>OGChipSelectEditMenu</name>
@ -1174,12 +1174,12 @@
</option>
<option>
<name>RTConfigPath2</name>
<state>$TOOLKIT_DIR$\INC\c\DLib_Config_Normal.h</state>
<state>$TOOLKIT_DIR$\inc\c\DLib_Config_Normal.h</state>
</option>
<option>
<name>GBECoreSlave</name>
<version>32</version>
<state>40</state>
<state>39</state>
</option>
<option>
<name>OGUseCmsis</name>
@ -1281,7 +1281,7 @@
</option>
<option>
<name>BuildFilesPath</name>
<state>Release</state>
<state>rel</state>
</option>
<option>
<name>PointerAuthentication</name>
@ -2176,7 +2176,7 @@
<debug>1</debug>
<option>
<name>BrowseInfoPath</name>
<state>Spy\BrowseInfo</state>
<state>spy</state>
</option>
<option>
<name>ExePath</name>
@ -2196,11 +2196,11 @@
</option>
<option>
<name>Input description</name>
<state>No specifier n, no float nor long long, no scan set, no assignment suppressing.</state>
<state>No specifier n, no float nor long long, no scan set, no assignment suppressing, without multibyte support.</state>
</option>
<option>
<name>Output description</name>
<state>No specifier a, A, no specifier n, no float nor long long, no flags.</state>
<state>No specifier a, A, no specifier n, no float nor long long, no flags, without multibyte support.</state>
</option>
<option>
<name>GOutputBinary</name>
@ -2222,7 +2222,7 @@
</option>
<option>
<name>RTDescription</name>
<state>Use the normal configuration of the C/C++ runtime library. No locale interface, C locale, no file descriptor support, no multibytes in printf and scanf, and no hex floats in strtod.</state>
<state>A compact configuration of the C/C++14 runtime library. No locale interface, C locale, no file descriptor support, no multibytes in printf and scanf, and no hex floats in strtod.</state>
</option>
<option>
<name>OGProductVersion</name>
@ -2230,7 +2230,7 @@
</option>
<option>
<name>OGLastSavedByProductVersion</name>
<state>8.20.2.14834</state>
<state>9.32.1.54977</state>
</option>
<option>
<name>OGChipSelectEditMenu</name>
@ -2254,12 +2254,12 @@
</option>
<option>
<name>RTConfigPath2</name>
<state>$TOOLKIT_DIR$\INC\c\DLib_Config_Normal.h</state>
<state>$TOOLKIT_DIR$\inc\c\DLib_Config_Normal.h</state>
</option>
<option>
<name>GBECoreSlave</name>
<version>32</version>
<state>40</state>
<state>39</state>
</option>
<option>
<name>OGUseCmsis</name>
@ -2361,7 +2361,7 @@
</option>
<option>
<name>BuildFilesPath</name>
<state>Spy</state>
<state>spy</state>
</option>
<option>
<name>PointerAuthentication</name>

View File

@ -1,59 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<session version="5.3.0">
<item name="license"></item>
<group name="locked"/>
<group name="settings">
<item name="tabs">1</item>
<item name="windows">0</item>
<item name="grid">3</item>
<item name="backups">0</item>
</group>
<group name="windows"/>
<group name="search">
<item name="options">2032128</item>
<item name="replace">0</item>
</group>
<group name="vars"/>
<group name="tools">
<group name="tool">
<item name="icon">0</item>
<item name="title"></item>
<item name="command"></item>
<item name="args"></item>
<item name="dir"></item>
<item name="options">0</item>
</group>
<group name="tool">
<item name="icon">0</item>
<item name="title"></item>
<item name="command"></item>
<item name="args"></item>
<item name="dir"></item>
<item name="options">0</item>
</group>
<group name="tool">
<item name="icon">0</item>
<item name="title"></item>
<item name="command"></item>
<item name="args"></item>
<item name="dir"></item>
<item name="options">0</item>
</group>
<group name="tool">
<item name="icon">0</item>
<item name="title"></item>
<item name="command"></item>
<item name="args"></item>
<item name="dir"></item>
<item name="options">0</item>
</group>
<group name="tool">
<item name="icon">0</item>
<item name="title"></item>
<item name="command"></item>
<item name="args"></item>
<item name="dir"></item>
<item name="options">0</item>
</group>
</group>
</session>

View File

@ -159,7 +159,7 @@
<Type>0</Type>
<LineNumber>83</LineNumber>
<EnabledFlag>1</EnabledFlag>
<Address>3072</Address>
<Address>3412</Address>
<ByteObject>0</ByteObject>
<HtxType>0</HtxType>
<ManyObjects>0</ManyObjects>
@ -175,7 +175,7 @@
<Type>0</Type>
<LineNumber>243</LineNumber>
<EnabledFlag>1</EnabledFlag>
<Address>13108</Address>
<Address>13720</Address>
<ByteObject>0</ByteObject>
<HtxType>0</HtxType>
<ManyObjects>0</ManyObjects>
@ -184,7 +184,7 @@
<BreakIfRCount>1</BreakIfRCount>
<Filename>..\..\table.cpp</Filename>
<ExecCommand></ExecCommand>
<Expression>\\dpp_qk\../../table.cpp\243</Expression>
<Expression>\\\../../table.cpp\243</Expression>
</Bp>
<Bp>
<Number>2</Number>

View File

@ -10,13 +10,13 @@
<TargetName>dpp-dbg</TargetName>
<ToolsetNumber>0x4</ToolsetNumber>
<ToolsetName>ARM-ADS</ToolsetName>
<pCCUsed>6160000::V6.16::ARMCLANG</pCCUsed>
<pCCUsed>6190000::V6.19::ARMCLANG</pCCUsed>
<uAC6>1</uAC6>
<TargetOption>
<TargetCommonOption>
<Device>EFM32PG1B200F256GM48</Device>
<Vendor>Silicon Labs</Vendor>
<PackID>SiliconLabs.GeckoPlatform_EFM32PG1B_DFP.4.0.0</PackID>
<PackID>SiliconLabs.GeckoPlatform_EFM32PG1B_DFP.4.3.0</PackID>
<PackURL>https://www.silabs.com/documents/public/cmsis-packs/</PackURL>
<Cpu>IRAM(0x20000000,0x00008000) IROM(0x00000000,0x00020000) CPUTYPE("Cortex-M4") FPU2 CLOCK(12000000) ELITTLE</Cpu>
<FlashUtilSpec></FlashUtilSpec>
@ -186,6 +186,7 @@
<RvdsVP>2</RvdsVP>
<RvdsMve>0</RvdsMve>
<RvdsCdeCp>0</RvdsCdeCp>
<nBranchProt>0</nBranchProt>
<hadIRAM2>0</hadIRAM2>
<hadIROM2>0</hadIROM2>
<StupSel>8</StupSel>
@ -641,7 +642,7 @@
<TargetCommonOption>
<Device>EFM32PG1B200F256GM48</Device>
<Vendor>Silicon Labs</Vendor>
<PackID>SiliconLabs.GeckoPlatform_EFM32PG1B_DFP.4.0.0</PackID>
<PackID>SiliconLabs.GeckoPlatform_EFM32PG1B_DFP.4.3.0</PackID>
<PackURL>https://www.silabs.com/documents/public/cmsis-packs/</PackURL>
<Cpu>IRAM(0x20000000,0x00008000) IROM(0x00000000,0x00020000) CPUTYPE("Cortex-M4") FPU2 CLOCK(12000000) ELITTLE</Cpu>
<FlashUtilSpec></FlashUtilSpec>
@ -811,6 +812,7 @@
<RvdsVP>2</RvdsVP>
<RvdsMve>0</RvdsMve>
<RvdsCdeCp>0</RvdsCdeCp>
<nBranchProt>0</nBranchProt>
<hadIRAM2>0</hadIRAM2>
<hadIROM2>0</hadIROM2>
<StupSel>8</StupSel>
@ -1260,13 +1262,13 @@
<TargetName>dpp-spy</TargetName>
<ToolsetNumber>0x4</ToolsetNumber>
<ToolsetName>ARM-ADS</ToolsetName>
<pCCUsed>6160000::V6.16::ARMCLANG</pCCUsed>
<pCCUsed>6190000::V6.19::ARMCLANG</pCCUsed>
<uAC6>1</uAC6>
<TargetOption>
<TargetCommonOption>
<Device>EFM32PG1B200F256GM48</Device>
<Vendor>Silicon Labs</Vendor>
<PackID>SiliconLabs.GeckoPlatform_EFM32PG1B_DFP.4.0.0</PackID>
<PackID>SiliconLabs.GeckoPlatform_EFM32PG1B_DFP.4.3.0</PackID>
<PackURL>https://www.silabs.com/documents/public/cmsis-packs/</PackURL>
<Cpu>IRAM(0x20000000,0x00008000) IROM(0x00000000,0x00020000) CPUTYPE("Cortex-M4") FPU2 CLOCK(12000000) ELITTLE</Cpu>
<FlashUtilSpec></FlashUtilSpec>
@ -1436,6 +1438,7 @@
<RvdsVP>2</RvdsVP>
<RvdsMve>0</RvdsMve>
<RvdsCdeCp>0</RvdsCdeCp>
<nBranchProt>0</nBranchProt>
<hadIRAM2>0</hadIRAM2>
<hadIROM2>0</hadIROM2>
<StupSel>8</StupSel>
@ -1563,7 +1566,7 @@
</ArmAdsMisc>
<Cads>
<interw>0</interw>
<Optim>1</Optim>
<Optim>2</Optim>
<oTime>0</oTime>
<SplitLS>0</SplitLS>
<OneElfS>1</OneElfS>

View File

@ -0,0 +1,271 @@
//============================================================================
// QP configuration file (QXK on ARM Cortex-M)
// Last updated for version: 7.3.0
// Last updated on: 2023-10-30
//
// 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: <www.gnu.org/licenses/gpl-3.0>
//
// The terms of the closed source Quantum Leaps commercial licenses
// can be found at: <www.state-machine.com/licensing>
//
// Redistributions in source code must retain this top-level comment block.
// Plagiarizing this software to sidestep the license obligations is illegal.
//
// Contact information:
// <www.state-machine.com>
// <info@state-machine.com>
//============================================================================
#ifndef QP_CONFIG_HPP_
#define QP_CONFIG_HPP_
//-------- <<< Use Configuration Wizard in Context Menu >>> -----------------
// <n>NOTE: Requires command-line macro: QP_CONFIG
// <i>This qp_config.h header file is activated only when the macro
// <i>QP_CONFIG is defined on the command-line to the compiler
// <n>-------------------------------------------
// <o>QP API compatibility version (QP_API_VERSION)
// <0=> 0 (Maximum compatibility)
// <580=>580 (QP 5.8.0 or newer)
// <660=>660 (QP 6.6.0 or newer)
// <691=>691 (QP 6.9.1 or newer)
// <700=>700 (QP 7.0.0 or newer)
// <9999=>9999 (Latest only)
// <i>QP API backwards compatibility with the QP/C API version.
// <i>Lower QP_API_VERSION values enable backwards compatibility
// <i>with lower (older) QP API versions.
// <i>For example, QP_API_VERSION==691 will enable the compatibility
// <i>layer with QP version 6.9.1 and newer, but not older than 6.9.1.
// <i>QP_API_VERSION==0 enables the maximum currently supported
// <i>backwards compatibility. Conversely, QP_API_VERSION==9999 means
// <i>that no backwards compatibility layer should be enabled.
// <i>Default: 0 (All supported)
#define QP_API_VERSION 0
//..........................................................................
// <h>QP Functional Safety (FuSa) Subsystem (Q_UNSAFE)
// <i>The QP FuSa Subsystem consists of the following facilities:
// <i>- Software assertions as a recommended technique
// <i> (called Failure Assertion Programming (FAP) in IEC 61508)
// <i>- Software Self-Monitoring (SSM), which encompasses such techniques:
// <i> * Duplicate Inverse Storage for critical variables
// <i> * Memory Markers for critical objects (e.g., events)
// <i> * Hard-limits for all loops
// <i> * Memory Isolation by means of Memory Protection Unit (MPU)
// <c3>Disable QP FuSa in development
// <i>Disable assertions and other self monitoring features
// <i>in development build configurations (NDEBUG undefined).
// <i>VIOLATES functional safety standards. NOT recommended !!!
//#ifndef NDEBUG
//#define Q_UNSAFE
//#endif
// </c>
// <c3>Disable QP FuSa in production release
// <i>Disable assertions and other self monitoring features
// <i>in the release build configurations (NDEBUG defined).
// <i>VIOLATES functional safety standards. NOT recommended !!!
//#ifdef NDEBUG
//#define Q_UNSAFE
//#endif
// </c>
// </h>
//..........................................................................
// <h>QEP Event Processor
// <i>Events and state machines.
// <o>Event signal size (Q_SIGNAL_SIZE)
// <1U=>1
// <2U=>2 (default)
// <4U=>4
// <i>Size of the QEvt signal for QEP/QF [bytes]
// <i>Default: 2
#define Q_SIGNAL_SIZE 2U
// </h>
//..........................................................................
// <h>QF Framework
// <i>Active Object framework
// <o>Maximum # Active Objects (QF_MAX_ACTIVE) <1-64>
// <i>Maximum # Active Objects in the system <1..64>
// <i>Default: 32
#define QF_MAX_ACTIVE 32U
// <o>Maximum # event pools (QF_MAX_EPOOL)
// <0=>0 no event pools
// <1=>1 <2=>2 <3=>3 (deafult) <4=>4 <5=>5
// <6=>6 <7=>7 <8=>8 <9=>9 <10=>10 <11=>11
// <12=>12 <13=>13 <14=>14 <15=>15
// <i>Maximum # Event Pools <1..15>
// <i>Default: 3
#define QF_MAX_EPOOL 3U
// <o>Maximum # clock tick rates (QF_MAX_TICK_RATE)
// <0=>0 no time events
// <1=>1 (default) <2=>2 <3=>3 <4=>4 <5=>5
// <6=>6 <7=>7 <8=>8 <9=>9 <10=>10 <11=>11
// <12=>12 <13=>13 <14=>14 <15=>15
// <i>Maximum # clock tick rates for time events <1..15>
// <i>Default: 1
#define QF_MAX_TICK_RATE 1U
// <c1>Dynamic Event Constructor (QEVT_DYN_CTOR)
// <i>Dynamic Event Constructor (RAII)
//#define QEVT_DYN_CTOR
// </c>
// <c1>Active Object stop API (QACTIVE_CAN_STOP)
// <i>Enable Active Object stop API (Not recommended)
//#define QACTIVE_CAN_STOP
// </c>
// <o>Event size (QF_EVENT_SIZ_SIZE)
// <1U=>1
// <2U=>2 (default)
// <4U=>4
// <i>Size of the dynamic events for QF [bytes]
// <i>Default: 2 (64K bytes maximum event size)
#define QF_EVENT_SIZ_SIZE 2U
// <o>Time event counter size (QF_TIMEEVT_CTR_SIZE)
// <1U=>1
// <2U=>2
// <4U=>4 (default)
// <i>Size of the QTimeEvt counter [bytes]
// <i>Default: 4 (2^32 dynamic range)
#define QF_TIMEEVT_CTR_SIZE 4U
// <o>Event queue counter size (QF_EQUEUE_CTR_SIZE)
// <1U=>1 (default)
// <2U=>2
// <4U=>4
// <i>Size of event queue counter [bytes]
// <i>Default: 1 (255 events maximum in a queue)
#define QF_EQUEUE_CTR_SIZE 1U
// <o>Memory pool counter size (QF_MPOOL_CTR_SIZE)
// <1U=>1
// <2U=>2 (default)
// <4U=>4
// <i>Size of memory pool counter [bytes]
// <i>Default: 2 (64K blocks maximum in a pool)
#define QF_MPOOL_CTR_SIZE 2U
// <o>Memory block size (QF_MPOOL_SIZ_SIZE)
// <1U=>1
// <2U=>2 (default)
// <4U=>4
// <i>Size of memory pool block [bytes]
// <i>Default: 2 (64K bytes maximum block size)
#define QF_MPOOL_SIZ_SIZE 2U
// </h>
//..........................................................................
// <h>QS Software Tracing
// <i>Target-resident component of QP/Spy software tracing system
// <i>(tracing instrumenation and command-input).
// <n>NOTE: Requires command-line macro: Q_SPY
// <i>The QS software tracing instrumenation is activated only when
// <i>the macro Q_SPY is defined on the command-line to the compiler.
// <i>Typically, Q_SPY is defined only in the "spy" build configuration.
// <o>QS timestamp size (QS_TIME_SIZE)
// <1U=>1
// <2U=>2
// <4U=>4 (default)
// <i>Size of the timestamp in QS [bytes]
// <i>Default: 4 (2^32 dynamic range)
#define QS_TIME_SIZE 4U
// <o>Object pointer size (QS_OBJ_PTR_SIZE)
// <2U=>2
// <4U=>4 (default)
// <8U=>8
// <i>Size of object pointer for QS [bytes]
// <i>Default: 4 (4G address space)
#define QS_OBJ_PTR_SIZE 4U
// <o>Function pointer size (QS_FUN_PTR_SIZE)
// <2U=>2
// <4U=>4 (default)
// <8U=>8
// <i>Size of function pointer for QS [bytes]
// <i>Default: 4 (4G address space)
#define QS_FUN_PTR_SIZE 4U
// <o>QS buffer counter size (QS_CTR_SIZE)
// <1U=>1
// <2U=>2 (default)
// <4U=>4
// <i>Size of the counter in the internal QS buffer [bytes]
// <i>Default: 2 (64K bytes in QS buffer)
#define QS_CTR_SIZE 2U
// </h>
//..........................................................................
// <h>QXK Preemptive Dual-Mode Kernel
// <i>Preemptive non-blocking/blocking RTOS kernel.
// <h>Context switch callback (QF_ON_CONTEXT_SW)
// <c2>Context switch callback WITHOUT QS
// <i>Enable context switch callback QF_onContextSw()
// <i>When Q_SPY is undefined.
//#ifndef Q_SPY
//#define QF_ON_CONTEXT_SW
//#endif
// </c>
// <c2>Context switch callback WITH QS
// <i>Enable context switch callback QF_onContextSw()
// <i>When Q_SPY is defined.
//#ifdef Q_SPY
//#define QF_ON_CONTEXT_SW
//#endif
// </c>
// </h>
// <c2>MPU memory isolation (QF_MEM_ISOLATE)
// <i>Enable memory isolation (requires MPU)
// <i>NOTE: implies QF_ON_CONTEXT_SW.
//#define QF_MEM_ISOLATE
// </c>
// <c4>Use IRQ handler for QXK return-from-preemption
// <i>Enable this option only if the NMI handler is used in the project.
// <i>If enabled, provide the otherwise unused IRQ number (QXK_USE_IRQ_NUM)
// <i>and the corresponding IRQ handler name (QXK_USE_IRQ_HANDLER)
// <i>in the "Text Editor" mode.
//#define QXK_USE_IRQ_NUM 31
//#define QXK_USE_IRQ_HANDLER Reserved31_IRQHandler
// </c>
// </h>
//------------- <<< end of configuration section >>> -----------------------
#endif // QP_CONFIG_HPP_

View File

@ -327,7 +327,7 @@
<bEvRecOn>1</bEvRecOn>
<bSchkAxf>0</bSchkAxf>
<bTchkAxf>0</bTchkAxf>
<nTsel>8</nTsel>
<nTsel>19</nTsel>
<sDll></sDll>
<sDllPa></sDllPa>
<sDlgDll></sDlgDll>
@ -721,6 +721,18 @@
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>1</GroupNumber>
<FileNumber>9</FileNumber>
<FileType>5</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\..\qp_config.hpp</PathWithFileName>
<FilenameWithoutPath>qp_config.hpp</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
</Group>
<Group>
@ -731,7 +743,7 @@
<RteFlg>0</RteFlg>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>9</FileNumber>
<FileNumber>10</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -743,7 +755,7 @@
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>10</FileNumber>
<FileNumber>11</FileNumber>
<FileType>5</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -755,7 +767,7 @@
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>11</FileNumber>
<FileNumber>12</FileNumber>
<FileType>2</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -767,7 +779,7 @@
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>12</FileNumber>
<FileNumber>13</FileNumber>
<FileType>5</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -779,7 +791,7 @@
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>13</FileNumber>
<FileNumber>14</FileNumber>
<FileType>5</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -791,7 +803,7 @@
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>14</FileNumber>
<FileNumber>15</FileNumber>
<FileType>5</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -803,7 +815,7 @@
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>15</FileNumber>
<FileNumber>16</FileNumber>
<FileType>5</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -823,7 +835,7 @@
<RteFlg>0</RteFlg>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>16</FileNumber>
<FileNumber>17</FileNumber>
<FileType>8</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -835,7 +847,7 @@
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>17</FileNumber>
<FileNumber>18</FileNumber>
<FileType>8</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -847,7 +859,7 @@
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>18</FileNumber>
<FileNumber>19</FileNumber>
<FileType>8</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -859,7 +871,7 @@
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>19</FileNumber>
<FileNumber>20</FileNumber>
<FileType>8</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -871,7 +883,7 @@
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>20</FileNumber>
<FileNumber>21</FileNumber>
<FileType>8</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -883,7 +895,7 @@
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>21</FileNumber>
<FileNumber>22</FileNumber>
<FileType>8</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -895,7 +907,7 @@
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>22</FileNumber>
<FileNumber>23</FileNumber>
<FileType>8</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -907,7 +919,7 @@
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>23</FileNumber>
<FileNumber>24</FileNumber>
<FileType>8</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -919,7 +931,7 @@
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>24</FileNumber>
<FileNumber>25</FileNumber>
<FileType>8</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -931,7 +943,7 @@
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>25</FileNumber>
<FileNumber>26</FileNumber>
<FileType>8</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -943,7 +955,7 @@
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>26</FileNumber>
<FileNumber>27</FileNumber>
<FileType>8</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -955,7 +967,7 @@
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>27</FileNumber>
<FileNumber>28</FileNumber>
<FileType>8</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -967,7 +979,7 @@
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>28</FileNumber>
<FileNumber>29</FileNumber>
<FileType>8</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -979,7 +991,7 @@
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>29</FileNumber>
<FileNumber>30</FileNumber>
<FileType>8</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -991,7 +1003,7 @@
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>30</FileNumber>
<FileNumber>31</FileNumber>
<FileType>8</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1003,7 +1015,7 @@
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>31</FileNumber>
<FileNumber>32</FileNumber>
<FileType>8</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1023,7 +1035,7 @@
<RteFlg>0</RteFlg>
<File>
<GroupNumber>4</GroupNumber>
<FileNumber>32</FileNumber>
<FileNumber>33</FileNumber>
<FileType>8</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1043,7 +1055,7 @@
<RteFlg>0</RteFlg>
<File>
<GroupNumber>5</GroupNumber>
<FileNumber>33</FileNumber>
<FileNumber>34</FileNumber>
<FileType>8</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1055,7 +1067,7 @@
</File>
<File>
<GroupNumber>5</GroupNumber>
<FileNumber>34</FileNumber>
<FileNumber>35</FileNumber>
<FileType>8</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1067,7 +1079,7 @@
</File>
<File>
<GroupNumber>5</GroupNumber>
<FileNumber>35</FileNumber>
<FileNumber>36</FileNumber>
<FileType>8</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1079,7 +1091,7 @@
</File>
<File>
<GroupNumber>5</GroupNumber>
<FileNumber>36</FileNumber>
<FileNumber>37</FileNumber>
<FileType>8</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1091,7 +1103,7 @@
</File>
<File>
<GroupNumber>5</GroupNumber>
<FileNumber>37</FileNumber>
<FileNumber>38</FileNumber>
<FileType>8</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>

View File

@ -10,7 +10,7 @@
<TargetName>dpp-dbg</TargetName>
<ToolsetNumber>0x4</ToolsetNumber>
<ToolsetName>ARM-ADS</ToolsetName>
<pCCUsed>6160000::V6.16::ARMCLANG</pCCUsed>
<pCCUsed>6190000::V6.19::ARMCLANG</pCCUsed>
<uAC6>1</uAC6>
<TargetOption>
<TargetCommonOption>
@ -186,6 +186,7 @@
<RvdsVP>2</RvdsVP>
<RvdsMve>0</RvdsMve>
<RvdsCdeCp>0</RvdsCdeCp>
<nBranchProt>0</nBranchProt>
<hadIRAM2>0</hadIRAM2>
<hadIROM2>0</hadIROM2>
<StupSel>8</StupSel>
@ -337,7 +338,7 @@
<v6Rtti>0</v6Rtti>
<VariousControls>
<MiscControls></MiscControls>
<Define></Define>
<Define>QP_CONFIG</Define>
<Undefine></Undefine>
<IncludePath>..\..;..\..\..\..\..\include;..\..\..\..\..\ports\arm-cm\qxk\armclang;..\..\..\..\..\3rd_party\CMSIS\Include;..\..\..\..\..\3rd_party\ek-tm4c123gxl</IncludePath>
</VariousControls>
@ -423,6 +424,11 @@
<FileType>8</FileType>
<FilePath>..\..\main.cpp</FilePath>
</File>
<File>
<FileName>qp_config.hpp</FileName>
<FileType>5</FileType>
<FilePath>..\..\qp_config.hpp</FilePath>
</File>
</Files>
</Group>
<Group>
@ -665,7 +671,7 @@
<TargetName>dpp-rel</TargetName>
<ToolsetNumber>0x4</ToolsetNumber>
<ToolsetName>ARM-ADS</ToolsetName>
<pCCUsed>6070000::V6.7::.\ARMCLANG</pCCUsed>
<pCCUsed>6190000::V6.19::ARMCLANG</pCCUsed>
<uAC6>1</uAC6>
<TargetOption>
<TargetCommonOption>
@ -841,6 +847,7 @@
<RvdsVP>2</RvdsVP>
<RvdsMve>0</RvdsMve>
<RvdsCdeCp>0</RvdsCdeCp>
<nBranchProt>0</nBranchProt>
<hadIRAM2>0</hadIRAM2>
<hadIROM2>0</hadIROM2>
<StupSel>8</StupSel>
@ -992,7 +999,7 @@
<v6Rtti>0</v6Rtti>
<VariousControls>
<MiscControls></MiscControls>
<Define>NDEBUG TARGET_IS_TM4C123_RB1</Define>
<Define>NDEBUG,QP_CONFIG</Define>
<Undefine></Undefine>
<IncludePath>..\..;..\..\..\..\..\include;..\..\..\..\..\ports\arm-cm\qxk\armclang;..\..\..\..\..\3rd_party\CMSIS\Include;..\..\..\..\..\3rd_party\ek-tm4c123gxl</IncludePath>
</VariousControls>
@ -1078,6 +1085,11 @@
<FileType>8</FileType>
<FilePath>..\..\main.cpp</FilePath>
</File>
<File>
<FileName>qp_config.hpp</FileName>
<FileType>5</FileType>
<FilePath>..\..\qp_config.hpp</FilePath>
</File>
</Files>
</Group>
<Group>
@ -1320,7 +1332,7 @@
<TargetName>dpp-spy</TargetName>
<ToolsetNumber>0x4</ToolsetNumber>
<ToolsetName>ARM-ADS</ToolsetName>
<pCCUsed>6160000::V6.16::ARMCLANG</pCCUsed>
<pCCUsed>6190000::V6.19::ARMCLANG</pCCUsed>
<uAC6>1</uAC6>
<TargetOption>
<TargetCommonOption>
@ -1496,6 +1508,7 @@
<RvdsVP>2</RvdsVP>
<RvdsMve>0</RvdsMve>
<RvdsCdeCp>0</RvdsCdeCp>
<nBranchProt>0</nBranchProt>
<hadIRAM2>0</hadIRAM2>
<hadIROM2>0</hadIROM2>
<StupSel>8</StupSel>
@ -1632,7 +1645,7 @@
<PlainCh>0</PlainCh>
<Ropi>0</Ropi>
<Rwpi>0</Rwpi>
<wLevel>2</wLevel>
<wLevel>3</wLevel>
<uThumb>0</uThumb>
<uSurpInc>1</uSurpInc>
<uC99>0</uC99>
@ -1647,7 +1660,7 @@
<v6Rtti>0</v6Rtti>
<VariousControls>
<MiscControls>-Wno-c++98-compat -Wno-non-virtual-dtor -Wno-padded</MiscControls>
<Define>Q_SPY TARGET_IS_TM4C123_RB1</Define>
<Define>Q_SPY,QP_CONFIG</Define>
<Undefine></Undefine>
<IncludePath>..\..;..\..\..\..\..\include;..\..\..\..\..\ports\arm-cm\qxk\armclang;..\..\..\..\..\3rd_party\CMSIS\Include;..\..\..\..\..\3rd_party\ek-tm4c123gxl</IncludePath>
</VariousControls>
@ -1733,6 +1746,11 @@
<FileType>8</FileType>
<FilePath>..\..\main.cpp</FilePath>
</File>
<File>
<FileName>qp_config.hpp</FileName>
<FileType>5</FileType>
<FilePath>..\..\qp_config.hpp</FilePath>
</File>
</Files>
</Group>
<Group>

View File

@ -186,6 +186,7 @@
<RvdsVP>2</RvdsVP>
<RvdsMve>0</RvdsMve>
<RvdsCdeCp>0</RvdsCdeCp>
<nBranchProt>0</nBranchProt>
<hadIRAM2>0</hadIRAM2>
<hadIROM2>0</hadIROM2>
<StupSel>8</StupSel>
@ -635,7 +636,7 @@
<TargetName>dpp-rel</TargetName>
<ToolsetNumber>0x4</ToolsetNumber>
<ToolsetName>ARM-ADS</ToolsetName>
<pCCUsed>6160000::V6.16::ARMCLANG</pCCUsed>
<pCCUsed>6190000::V6.19::ARMCLANG</pCCUsed>
<uAC6>1</uAC6>
<TargetOption>
<TargetCommonOption>
@ -811,6 +812,7 @@
<RvdsVP>2</RvdsVP>
<RvdsMve>0</RvdsMve>
<RvdsCdeCp>0</RvdsCdeCp>
<nBranchProt>0</nBranchProt>
<hadIRAM2>0</hadIRAM2>
<hadIROM2>0</hadIROM2>
<StupSel>8</StupSel>
@ -957,7 +959,7 @@
<v6LangP>3</v6LangP>
<vShortEn>0</vShortEn>
<vShortWch>0</vShortWch>
<v6Lto>1</v6Lto>
<v6Lto>0</v6Lto>
<v6WtE>0</v6WtE>
<v6Rtti>0</v6Rtti>
<VariousControls>
@ -1260,7 +1262,7 @@
<TargetName>dpp-spy</TargetName>
<ToolsetNumber>0x4</ToolsetNumber>
<ToolsetName>ARM-ADS</ToolsetName>
<pCCUsed>6160000::V6.16::ARMCLANG</pCCUsed>
<pCCUsed>6190000::V6.19::ARMCLANG</pCCUsed>
<uAC6>1</uAC6>
<TargetOption>
<TargetCommonOption>
@ -1436,6 +1438,7 @@
<RvdsVP>2</RvdsVP>
<RvdsMve>0</RvdsMve>
<RvdsCdeCp>0</RvdsCdeCp>
<nBranchProt>0</nBranchProt>
<hadIRAM2>0</hadIRAM2>
<hadIROM2>0</hadIROM2>
<StupSel>8</StupSel>
@ -1563,7 +1566,7 @@
</ArmAdsMisc>
<Cads>
<interw>0</interw>
<Optim>1</Optim>
<Optim>2</Optim>
<oTime>0</oTime>
<SplitLS>0</SplitLS>
<OneElfS>1</OneElfS>

View File

@ -147,6 +147,22 @@
<Bp>
<Number>0</Number>
<Type>0</Type>
<LineNumber>88</LineNumber>
<EnabledFlag>1</EnabledFlag>
<Address>3788</Address>
<ByteObject>0</ByteObject>
<HtxType>0</HtxType>
<ManyObjects>0</ManyObjects>
<SizeOfObject>0</SizeOfObject>
<BreakByAccess>0</BreakByAccess>
<BreakIfRCount>1</BreakIfRCount>
<Filename>..\bsp.cpp</Filename>
<ExecCommand></ExecCommand>
<Expression>\\dpp_qxk\../bsp.cpp\88</Expression>
</Bp>
<Bp>
<Number>1</Number>
<Type>0</Type>
<LineNumber>319</LineNumber>
<EnabledFlag>1</EnabledFlag>
<Address>1116</Address>
@ -717,6 +733,18 @@
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>1</GroupNumber>
<FileNumber>9</FileNumber>
<FileType>5</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\..\qp_config.hpp</PathWithFileName>
<FilenameWithoutPath>qp_config.hpp</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
</Group>
<Group>
@ -727,7 +755,7 @@
<RteFlg>0</RteFlg>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>9</FileNumber>
<FileNumber>10</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -739,7 +767,7 @@
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>10</FileNumber>
<FileNumber>11</FileNumber>
<FileType>5</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -751,7 +779,7 @@
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>11</FileNumber>
<FileNumber>12</FileNumber>
<FileType>2</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -763,7 +791,7 @@
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>12</FileNumber>
<FileNumber>13</FileNumber>
<FileType>5</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -775,7 +803,7 @@
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>13</FileNumber>
<FileNumber>14</FileNumber>
<FileType>5</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -787,7 +815,7 @@
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>14</FileNumber>
<FileNumber>15</FileNumber>
<FileType>5</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -799,7 +827,7 @@
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>15</FileNumber>
<FileNumber>16</FileNumber>
<FileType>5</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -819,7 +847,7 @@
<RteFlg>0</RteFlg>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>16</FileNumber>
<FileNumber>17</FileNumber>
<FileType>8</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -831,7 +859,7 @@
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>17</FileNumber>
<FileNumber>18</FileNumber>
<FileType>8</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -843,7 +871,7 @@
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>18</FileNumber>
<FileNumber>19</FileNumber>
<FileType>8</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -855,7 +883,7 @@
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>19</FileNumber>
<FileNumber>20</FileNumber>
<FileType>8</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -867,7 +895,7 @@
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>20</FileNumber>
<FileNumber>21</FileNumber>
<FileType>8</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -879,7 +907,7 @@
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>21</FileNumber>
<FileNumber>22</FileNumber>
<FileType>8</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -891,7 +919,7 @@
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>22</FileNumber>
<FileNumber>23</FileNumber>
<FileType>8</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -903,7 +931,7 @@
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>23</FileNumber>
<FileNumber>24</FileNumber>
<FileType>8</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -915,7 +943,7 @@
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>24</FileNumber>
<FileNumber>25</FileNumber>
<FileType>8</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -927,7 +955,7 @@
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>25</FileNumber>
<FileNumber>26</FileNumber>
<FileType>8</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -939,7 +967,7 @@
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>26</FileNumber>
<FileNumber>27</FileNumber>
<FileType>8</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -951,7 +979,7 @@
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>27</FileNumber>
<FileNumber>28</FileNumber>
<FileType>8</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -963,7 +991,7 @@
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>28</FileNumber>
<FileNumber>29</FileNumber>
<FileType>8</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -975,7 +1003,7 @@
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>29</FileNumber>
<FileNumber>30</FileNumber>
<FileType>8</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -987,7 +1015,7 @@
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>30</FileNumber>
<FileNumber>31</FileNumber>
<FileType>8</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -999,7 +1027,7 @@
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>31</FileNumber>
<FileNumber>32</FileNumber>
<FileType>8</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1019,7 +1047,7 @@
<RteFlg>0</RteFlg>
<File>
<GroupNumber>4</GroupNumber>
<FileNumber>32</FileNumber>
<FileNumber>33</FileNumber>
<FileType>8</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1039,7 +1067,7 @@
<RteFlg>0</RteFlg>
<File>
<GroupNumber>5</GroupNumber>
<FileNumber>33</FileNumber>
<FileNumber>34</FileNumber>
<FileType>8</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1051,7 +1079,7 @@
</File>
<File>
<GroupNumber>5</GroupNumber>
<FileNumber>34</FileNumber>
<FileNumber>35</FileNumber>
<FileType>8</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1063,7 +1091,7 @@
</File>
<File>
<GroupNumber>5</GroupNumber>
<FileNumber>35</FileNumber>
<FileNumber>36</FileNumber>
<FileType>8</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1075,7 +1103,7 @@
</File>
<File>
<GroupNumber>5</GroupNumber>
<FileNumber>36</FileNumber>
<FileNumber>37</FileNumber>
<FileType>8</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1087,7 +1115,7 @@
</File>
<File>
<GroupNumber>5</GroupNumber>
<FileNumber>37</FileNumber>
<FileNumber>38</FileNumber>
<FileType>8</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>

View File

@ -10,7 +10,7 @@
<TargetName>dpp-dbg</TargetName>
<ToolsetNumber>0x4</ToolsetNumber>
<ToolsetName>ARM-ADS</ToolsetName>
<pCCUsed>6160000::V6.16::ARMCLANG</pCCUsed>
<pCCUsed>6190000::V6.19::ARMCLANG</pCCUsed>
<uAC6>1</uAC6>
<TargetOption>
<TargetCommonOption>
@ -186,6 +186,7 @@
<RvdsVP>2</RvdsVP>
<RvdsMve>0</RvdsMve>
<RvdsCdeCp>0</RvdsCdeCp>
<nBranchProt>0</nBranchProt>
<hadIRAM2>0</hadIRAM2>
<hadIROM2>0</hadIROM2>
<StupSel>8</StupSel>
@ -423,6 +424,11 @@
<FileType>8</FileType>
<FilePath>..\..\main.cpp</FilePath>
</File>
<File>
<FileName>qp_config.hpp</FileName>
<FileType>5</FileType>
<FilePath>..\..\qp_config.hpp</FilePath>
</File>
</Files>
</Group>
<Group>
@ -841,6 +847,7 @@
<RvdsVP>2</RvdsVP>
<RvdsMve>0</RvdsMve>
<RvdsCdeCp>0</RvdsCdeCp>
<nBranchProt>0</nBranchProt>
<hadIRAM2>0</hadIRAM2>
<hadIROM2>0</hadIROM2>
<StupSel>8</StupSel>
@ -1078,6 +1085,11 @@
<FileType>8</FileType>
<FilePath>..\..\main.cpp</FilePath>
</File>
<File>
<FileName>qp_config.hpp</FileName>
<FileType>5</FileType>
<FilePath>..\..\qp_config.hpp</FilePath>
</File>
</Files>
</Group>
<Group>
@ -1320,7 +1332,7 @@
<TargetName>dpp-spy</TargetName>
<ToolsetNumber>0x4</ToolsetNumber>
<ToolsetName>ARM-ADS</ToolsetName>
<pCCUsed>6160000::V6.16::ARMCLANG</pCCUsed>
<pCCUsed>6190000::V6.19::ARMCLANG</pCCUsed>
<uAC6>1</uAC6>
<TargetOption>
<TargetCommonOption>
@ -1496,6 +1508,7 @@
<RvdsVP>2</RvdsVP>
<RvdsMve>0</RvdsMve>
<RvdsCdeCp>0</RvdsCdeCp>
<nBranchProt>0</nBranchProt>
<hadIRAM2>0</hadIRAM2>
<hadIROM2>0</hadIROM2>
<StupSel>8</StupSel>
@ -1623,7 +1636,7 @@
</ArmAdsMisc>
<Cads>
<interw>0</interw>
<Optim>1</Optim>
<Optim>2</Optim>
<oTime>0</oTime>
<SplitLS>0</SplitLS>
<OneElfS>1</OneElfS>
@ -1733,6 +1746,11 @@
<FileType>8</FileType>
<FilePath>..\..\main.cpp</FilePath>
</File>
<File>
<FileName>qp_config.hpp</FileName>
<FileType>5</FileType>
<FilePath>..\..\qp_config.hpp</FilePath>
</File>
</Files>
</Group>
<Group>

View File

@ -1,7 +1,7 @@
//============================================================================
// Product: DPP example, EK-TM4C123GXL board, QXK kernel, MPU isolation
// Last updated for version 7.3.0
// Last updated on 2023-08-15
// Last updated for version 7.3.1
// Last updated on 2023-12-04
//
// Q u a n t u m L e a P s
// ------------------------
@ -160,6 +160,7 @@ void GPIOPortA_IRQHandler(void); // prototype
void GPIOPortA_IRQHandler(void) {
QXK_ISR_ENTRY(); // inform QXK about entering an ISR
// for testing..
static QP::QEvt const testEvt(APP::TEST_SIG);
APP::AO_Table->POST(&testEvt, &l_GPIOPortA_IRQHandler);
@ -244,7 +245,7 @@ constexpr std::uint32_t STACK_SIZE_POW2 {11U};
// Table AO...................................................................
// size of Table instance, as power-of-2
constexpr std::uint32_t TABLE_SIZE_POW2 {6};
constexpr std::uint32_t TABLE_SIZE_POW2 {7U};
__attribute__((aligned((1U << TABLE_SIZE_POW2))))
static std::uint8_t Table_sto[1U << TABLE_SIZE_POW2];
@ -276,7 +277,7 @@ static MPU_Region const MPU_Table[3] = {
// Philo AOs..................................................................
// size of Philo instance, as power-of-2
constexpr std::uint32_t PHILO_SIZE_POW2 {6};
constexpr std::uint32_t PHILO_SIZE_POW2 {7U};
__attribute__((aligned((1U << PHILO_SIZE_POW2))))
static std::uint8_t Philo_sto[APP::N_PHILO][1U << PHILO_SIZE_POW2];
@ -394,8 +395,8 @@ static MPU_Region const MPU_Philo[APP::N_PHILO][3] = {
#endif
// XThread1 thread............................................................
constexpr std::uint32_t XTHREAD1_SIZE_POW2 {10U}; // XThread1 instance + stack
constexpr std::uint32_t XTHREAD1_STACK_SIZE {896U}; // Thread1 stack size
constexpr std::uint32_t XTHREAD1_SIZE_POW2 {10U}; // XThread1 instance + stack
constexpr std::uint32_t XTHREAD1_STACK_SIZE {880U}; // Thread1 stack size
__attribute__((aligned((1U << XTHREAD1_SIZE_POW2))))
std::uint8_t XThread1_sto[1U << XTHREAD1_SIZE_POW2];
@ -428,8 +429,8 @@ static MPU_Region const MPU_XThread1[3] = {
#endif
// Thread2 thread.............................................................
constexpr std::uint32_t XTHREAD2_SIZE_POW2 {10U}; // XThread2 instance + stack
constexpr std::uint32_t XTHREAD2_STACK_SIZE {896U}; // XThread2 stack size
constexpr std::uint32_t XTHREAD2_SIZE_POW2 {10U}; // XThread2 instance + stack
constexpr std::uint32_t XTHREAD2_STACK_SIZE {880U}; // XThread2 stack size
__attribute__((aligned((1U << XTHREAD2_SIZE_POW2))))
std::uint8_t XThread2_sto[1U << XTHREAD2_SIZE_POW2];

View File

@ -3248,12 +3248,6 @@
<file>
<name>$PROJ_DIR$\..\bsp.cpp</name>
</file>
<file>
<name>$PROJ_DIR$\..\..\bsp.h</name>
</file>
<file>
<name>$PROJ_DIR$\..\..\dpp.h</name>
</file>
<file>
<name>$PROJ_DIR$\..\..\main.cpp</name>
</file>

View File

@ -120,7 +120,7 @@
<SetRegEntry>
<Number>0</Number>
<Key>ST-LINKIII-KEIL_SWO</Key>
<Name>-U066BFF505153848667095842 -O206 -SF10000 -C0 -A0 -I0 -HNlocalhost -HP7184 -P1 -N00("ARM CoreSight SW-DP (ARM Core") -D00(0BC11477) -L00(0) -TO65554 -TC10000000 -TT10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO7 -FD20000000 -FC1000 -FN1 -FF0STM32C0x_32.FLM -FS08000000 -FL08000 -FP0($$Device:STM32C031C6Tx$CMSIS\Flash\STM32C0x_32.FLM)</Name>
<Name>-U066BFF505153848667095842 -O206 -SF10000 -C0 -A0 -I0 -HNlocalhost -HP7184 -P1 -N00("ARM CoreSight SW-DP (ARM Core") -D00(0BC11477) -L00(0) -TO65554 -TC10000000 -TT10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO7 -FD20000000 -FC1000 -FN1 -FF0STM32C0x_32.FLM -FS08000000 -FL08000 -FP0($$Device:STM32C031C6Tx$CMSIS\Flash\STM32C0x_32.FLM) -WA0 -WE0 -WVCE4 -WS2710 -WM0 -WP2</Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>

View File

@ -10,7 +10,7 @@
<TargetName>dpp-dbg</TargetName>
<ToolsetNumber>0x4</ToolsetNumber>
<ToolsetName>ARM-ADS</ToolsetName>
<pCCUsed>6160000::V6.16::ARMCLANG</pCCUsed>
<pCCUsed>6190000::V6.19::ARMCLANG</pCCUsed>
<uAC6>1</uAC6>
<TargetOption>
<TargetCommonOption>
@ -186,6 +186,7 @@
<RvdsVP>0</RvdsVP>
<RvdsMve>0</RvdsMve>
<RvdsCdeCp>0</RvdsCdeCp>
<nBranchProt>0</nBranchProt>
<hadIRAM2>0</hadIRAM2>
<hadIROM2>0</hadIROM2>
<StupSel>8</StupSel>
@ -313,7 +314,7 @@
</ArmAdsMisc>
<Cads>
<interw>0</interw>
<Optim>1</Optim>
<Optim>2</Optim>
<oTime>0</oTime>
<SplitLS>0</SplitLS>
<OneElfS>1</OneElfS>
@ -816,6 +817,7 @@
<RvdsVP>0</RvdsVP>
<RvdsMve>0</RvdsMve>
<RvdsCdeCp>0</RvdsCdeCp>
<nBranchProt>0</nBranchProt>
<hadIRAM2>0</hadIRAM2>
<hadIROM2>0</hadIROM2>
<StupSel>8</StupSel>
@ -1446,6 +1448,7 @@
<RvdsVP>0</RvdsVP>
<RvdsMve>0</RvdsMve>
<RvdsCdeCp>0</RvdsCdeCp>
<nBranchProt>0</nBranchProt>
<hadIRAM2>0</hadIRAM2>
<hadIROM2>0</hadIROM2>
<StupSel>8</StupSel>

View File

@ -0,0 +1,984 @@
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<ProjectOpt xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="project_optx.xsd">
<SchemaVersion>1.0</SchemaVersion>
<Header>### uVision Project, (C) Keil Software</Header>
<Extensions>
<cExt>*.c</cExt>
<aExt>*.s*; *.src; *.a*</aExt>
<oExt>*.obj; *.o</oExt>
<lExt>*.lib</lExt>
<tExt>*.txt;*.h;*.hpp;*.inc;*.md;*.qm</tExt>
<pExt>*.plm</pExt>
<CppX>*.cpp</CppX>
<nMigrate>0</nMigrate>
</Extensions>
<DaveTm>
<dwLowDateTime>0</dwLowDateTime>
<dwHighDateTime>0</dwHighDateTime>
</DaveTm>
<Target>
<TargetName>dpp-dbg</TargetName>
<ToolsetNumber>0x3</ToolsetNumber>
<ToolsetName>ARM-GNU</ToolsetName>
<TargetOption>
<CLKARM>12000000</CLKARM>
<OPTTT>
<gFlags>1</gFlags>
<BeepAtEnd>1</BeepAtEnd>
<RunSim>0</RunSim>
<RunTarget>1</RunTarget>
<RunAbUc>0</RunAbUc>
</OPTTT>
<OPTHX>
<HexSelection>1</HexSelection>
<FlashByte>65535</FlashByte>
<HexRangeLowAddress>0</HexRangeLowAddress>
<HexRangeHighAddress>0</HexRangeHighAddress>
<HexOffset>0</HexOffset>
</OPTHX>
<OPTLEX>
<PageWidth>120</PageWidth>
<PageLength>65</PageLength>
<TabStop>8</TabStop>
<ListingPath>.\dbg\</ListingPath>
</OPTLEX>
<ListingPage>
<CreateCListing>1</CreateCListing>
<CreateAListing>1</CreateAListing>
<CreateLListing>1</CreateLListing>
<CreateIListing>0</CreateIListing>
<AsmCond>1</AsmCond>
<AsmSymb>1</AsmSymb>
<AsmXref>0</AsmXref>
<CCond>1</CCond>
<CCode>0</CCode>
<CListInc>0</CListInc>
<CSymb>0</CSymb>
<LinkerCodeListing>0</LinkerCodeListing>
</ListingPage>
<OPTXL>
<LMap>1</LMap>
<LComments>1</LComments>
<LGenerateSymbols>1</LGenerateSymbols>
<LLibSym>1</LLibSym>
<LLines>1</LLines>
<LLocSym>1</LLocSym>
<LPubSym>1</LPubSym>
<LXref>0</LXref>
<LExpSel>0</LExpSel>
</OPTXL>
<OPTFL>
<tvExp>1</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<IsCurrentTarget>1</IsCurrentTarget>
</OPTFL>
<CpuCode>18</CpuCode>
<DebugOpt>
<uSim>0</uSim>
<uTrg>1</uTrg>
<sLdApp>1</sLdApp>
<sGomain>1</sGomain>
<sRbreak>1</sRbreak>
<sRwatch>1</sRwatch>
<sRmem>1</sRmem>
<sRfunc>1</sRfunc>
<sRbox>1</sRbox>
<tLdApp>1</tLdApp>
<tGomain>1</tGomain>
<tRbreak>1</tRbreak>
<tRwatch>1</tRwatch>
<tRmem>1</tRmem>
<tRfunc>0</tRfunc>
<tRbox>1</tRbox>
<tRtrace>1</tRtrace>
<sRSysVw>1</sRSysVw>
<tRSysVw>1</tRSysVw>
<sRunDeb>0</sRunDeb>
<sLrtime>0</sLrtime>
<bEvRecOn>1</bEvRecOn>
<bSchkAxf>0</bSchkAxf>
<bTchkAxf>0</bTchkAxf>
<nTsel>6</nTsel>
<sDll></sDll>
<sDllPa></sDllPa>
<sDlgDll></sDlgDll>
<sDlgPa></sDlgPa>
<sIfile></sIfile>
<tDll></tDll>
<tDllPa></tDllPa>
<tDlgDll></tDlgDll>
<tDlgPa></tDlgPa>
<tIfile></tIfile>
<pMon>STLink\ST-LINKIII-KEIL_SWO.dll</pMon>
</DebugOpt>
<TargetDriverDllRegistry>
<SetRegEntry>
<Number>0</Number>
<Key>ARMRTXEVENTFLAGS</Key>
<Name>-L70 -Z18 -C0 -M0 -T1</Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
<Key>DLGTARM</Key>
<Name>(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)</Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
<Key>ARMDBGFLAGS</Key>
<Name></Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
<Key>ST-LINKIII-KEIL_SWO</Key>
<Name>-U -O206 -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 -FF0STM32C0x_32.FLM -FS08000000 -FL08000 -FP0($$Device:STM32C031C6Tx$CMSIS\Flash\STM32C0x_32.FLM) -WA0 -WE0 -WVCE4 -WS2710 -WM0 -WP2</Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
<Key>DLGUARM</Key>
<Name>(105=-1,-1,-1,-1,0)</Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
<Key>UL2CM3</Key>
<Name>UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32C0x_32 -FS08000000 -FL08000 -FP0($$Device:STM32C031C6Tx$CMSIS\Flash\STM32C0x_32.FLM))</Name>
</SetRegEntry>
</TargetDriverDllRegistry>
<Breakpoint/>
<MemoryWindow1>
<Mm>
<WinNumber>1</WinNumber>
<SubType>2</SubType>
<ItemText>0x20000200</ItemText>
<AccSizeX>0</AccSizeX>
</Mm>
</MemoryWindow1>
<MemoryWindow2>
<Mm>
<WinNumber>2</WinNumber>
<SubType>0</SubType>
<ItemText>0x400</ItemText>
<AccSizeX>0</AccSizeX>
</Mm>
</MemoryWindow2>
<Tracepoint>
<THDelay>0</THDelay>
</Tracepoint>
<DebugFlag>
<trace>0</trace>
<periodic>0</periodic>
<aLwin>1</aLwin>
<aCover>0</aCover>
<aSer1>0</aSer1>
<aSer2>0</aSer2>
<aPa>0</aPa>
<viewmode>1</viewmode>
<vrSel>0</vrSel>
<aSym>0</aSym>
<aTbox>0</aTbox>
<AscS1>0</AscS1>
<AscS2>0</AscS2>
<AscS3>0</AscS3>
<aSer3>0</aSer3>
<eProf>0</eProf>
<aLa>0</aLa>
<aPa1>0</aPa1>
<AscS4>0</AscS4>
<aSer4>0</aSer4>
<StkLoc>0</StkLoc>
<TrcWin>0</TrcWin>
<newCpu>0</newCpu>
<uProt>0</uProt>
</DebugFlag>
<LintExecutable></LintExecutable>
<LintConfigFile></LintConfigFile>
<bLintAuto>0</bLintAuto>
<bAutoGenD>0</bAutoGenD>
<LntExFlags>0</LntExFlags>
<pMisraName></pMisraName>
<pszMrule></pszMrule>
<pSingCmds></pSingCmds>
<pMultCmds></pMultCmds>
<pMisraNamep></pMisraNamep>
<pszMrulep></pszMrulep>
<pSingCmdsp></pSingCmdsp>
<pMultCmdsp></pMultCmdsp>
<DebugDescription>
<Enable>1</Enable>
<EnableFlashSeq>0</EnableFlashSeq>
<EnableLog>0</EnableLog>
<Protocol>2</Protocol>
<DbgClock>10000000</DbgClock>
</DebugDescription>
</TargetOption>
</Target>
<Target>
<TargetName>dpp-rel</TargetName>
<ToolsetNumber>0x3</ToolsetNumber>
<ToolsetName>ARM-GNU</ToolsetName>
<TargetOption>
<CLKARM>12000000</CLKARM>
<OPTTT>
<gFlags>1</gFlags>
<BeepAtEnd>1</BeepAtEnd>
<RunSim>0</RunSim>
<RunTarget>1</RunTarget>
<RunAbUc>0</RunAbUc>
</OPTTT>
<OPTHX>
<HexSelection>1</HexSelection>
<FlashByte>65535</FlashByte>
<HexRangeLowAddress>0</HexRangeLowAddress>
<HexRangeHighAddress>0</HexRangeHighAddress>
<HexOffset>0</HexOffset>
</OPTHX>
<OPTLEX>
<PageWidth>120</PageWidth>
<PageLength>65</PageLength>
<TabStop>8</TabStop>
<ListingPath>.\rel\</ListingPath>
</OPTLEX>
<ListingPage>
<CreateCListing>1</CreateCListing>
<CreateAListing>1</CreateAListing>
<CreateLListing>1</CreateLListing>
<CreateIListing>0</CreateIListing>
<AsmCond>1</AsmCond>
<AsmSymb>1</AsmSymb>
<AsmXref>0</AsmXref>
<CCond>1</CCond>
<CCode>0</CCode>
<CListInc>0</CListInc>
<CSymb>0</CSymb>
<LinkerCodeListing>0</LinkerCodeListing>
</ListingPage>
<OPTXL>
<LMap>1</LMap>
<LComments>1</LComments>
<LGenerateSymbols>1</LGenerateSymbols>
<LLibSym>1</LLibSym>
<LLines>1</LLines>
<LLocSym>1</LLocSym>
<LPubSym>1</LPubSym>
<LXref>0</LXref>
<LExpSel>0</LExpSel>
</OPTXL>
<OPTFL>
<tvExp>1</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<IsCurrentTarget>0</IsCurrentTarget>
</OPTFL>
<CpuCode>18</CpuCode>
<DebugOpt>
<uSim>0</uSim>
<uTrg>1</uTrg>
<sLdApp>1</sLdApp>
<sGomain>1</sGomain>
<sRbreak>1</sRbreak>
<sRwatch>1</sRwatch>
<sRmem>1</sRmem>
<sRfunc>1</sRfunc>
<sRbox>1</sRbox>
<tLdApp>1</tLdApp>
<tGomain>1</tGomain>
<tRbreak>1</tRbreak>
<tRwatch>1</tRwatch>
<tRmem>1</tRmem>
<tRfunc>0</tRfunc>
<tRbox>1</tRbox>
<tRtrace>1</tRtrace>
<sRSysVw>1</sRSysVw>
<tRSysVw>1</tRSysVw>
<sRunDeb>0</sRunDeb>
<sLrtime>0</sLrtime>
<bEvRecOn>1</bEvRecOn>
<bSchkAxf>0</bSchkAxf>
<bTchkAxf>0</bTchkAxf>
<nTsel>6</nTsel>
<sDll></sDll>
<sDllPa></sDllPa>
<sDlgDll></sDlgDll>
<sDlgPa></sDlgPa>
<sIfile></sIfile>
<tDll></tDll>
<tDllPa></tDllPa>
<tDlgDll></tDlgDll>
<tDlgPa></tDlgPa>
<tIfile></tIfile>
<pMon>STLink\ST-LINKIII-KEIL_SWO.dll</pMon>
</DebugOpt>
<TargetDriverDllRegistry>
<SetRegEntry>
<Number>0</Number>
<Key>UL2CM3</Key>
<Name>UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32C0x_32 -FS08000000 -FL08000 -FP0($$Device:STM32C031C6Tx$CMSIS\Flash\STM32C0x_32.FLM))</Name>
</SetRegEntry>
</TargetDriverDllRegistry>
<Breakpoint/>
<MemoryWindow1>
<Mm>
<WinNumber>1</WinNumber>
<SubType>2</SubType>
<ItemText>0x20000200</ItemText>
<AccSizeX>0</AccSizeX>
</Mm>
</MemoryWindow1>
<MemoryWindow2>
<Mm>
<WinNumber>2</WinNumber>
<SubType>0</SubType>
<ItemText>0x400</ItemText>
<AccSizeX>0</AccSizeX>
</Mm>
</MemoryWindow2>
<Tracepoint>
<THDelay>0</THDelay>
</Tracepoint>
<DebugFlag>
<trace>0</trace>
<periodic>0</periodic>
<aLwin>1</aLwin>
<aCover>0</aCover>
<aSer1>0</aSer1>
<aSer2>0</aSer2>
<aPa>0</aPa>
<viewmode>1</viewmode>
<vrSel>0</vrSel>
<aSym>0</aSym>
<aTbox>0</aTbox>
<AscS1>0</AscS1>
<AscS2>0</AscS2>
<AscS3>0</AscS3>
<aSer3>0</aSer3>
<eProf>0</eProf>
<aLa>0</aLa>
<aPa1>0</aPa1>
<AscS4>0</AscS4>
<aSer4>0</aSer4>
<StkLoc>0</StkLoc>
<TrcWin>0</TrcWin>
<newCpu>0</newCpu>
<uProt>0</uProt>
</DebugFlag>
<LintExecutable></LintExecutable>
<LintConfigFile></LintConfigFile>
<bLintAuto>0</bLintAuto>
<bAutoGenD>0</bAutoGenD>
<LntExFlags>0</LntExFlags>
<pMisraName></pMisraName>
<pszMrule></pszMrule>
<pSingCmds></pSingCmds>
<pMultCmds></pMultCmds>
<pMisraNamep></pMisraNamep>
<pszMrulep></pszMrulep>
<pSingCmdsp></pSingCmdsp>
<pMultCmdsp></pMultCmdsp>
<DebugDescription>
<Enable>1</Enable>
<EnableFlashSeq>1</EnableFlashSeq>
<EnableLog>0</EnableLog>
<Protocol>2</Protocol>
<DbgClock>10000000</DbgClock>
</DebugDescription>
</TargetOption>
</Target>
<Target>
<TargetName>dpp-spy</TargetName>
<ToolsetNumber>0x3</ToolsetNumber>
<ToolsetName>ARM-GNU</ToolsetName>
<TargetOption>
<CLKARM>12000000</CLKARM>
<OPTTT>
<gFlags>1</gFlags>
<BeepAtEnd>1</BeepAtEnd>
<RunSim>0</RunSim>
<RunTarget>1</RunTarget>
<RunAbUc>0</RunAbUc>
</OPTTT>
<OPTHX>
<HexSelection>1</HexSelection>
<FlashByte>65535</FlashByte>
<HexRangeLowAddress>0</HexRangeLowAddress>
<HexRangeHighAddress>0</HexRangeHighAddress>
<HexOffset>0</HexOffset>
</OPTHX>
<OPTLEX>
<PageWidth>120</PageWidth>
<PageLength>65</PageLength>
<TabStop>8</TabStop>
<ListingPath>.\spy\</ListingPath>
</OPTLEX>
<ListingPage>
<CreateCListing>1</CreateCListing>
<CreateAListing>1</CreateAListing>
<CreateLListing>1</CreateLListing>
<CreateIListing>0</CreateIListing>
<AsmCond>1</AsmCond>
<AsmSymb>1</AsmSymb>
<AsmXref>0</AsmXref>
<CCond>1</CCond>
<CCode>0</CCode>
<CListInc>0</CListInc>
<CSymb>0</CSymb>
<LinkerCodeListing>0</LinkerCodeListing>
</ListingPage>
<OPTXL>
<LMap>1</LMap>
<LComments>1</LComments>
<LGenerateSymbols>1</LGenerateSymbols>
<LLibSym>1</LLibSym>
<LLines>1</LLines>
<LLocSym>1</LLocSym>
<LPubSym>1</LPubSym>
<LXref>0</LXref>
<LExpSel>0</LExpSel>
</OPTXL>
<OPTFL>
<tvExp>1</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<IsCurrentTarget>0</IsCurrentTarget>
</OPTFL>
<CpuCode>18</CpuCode>
<DebugOpt>
<uSim>0</uSim>
<uTrg>1</uTrg>
<sLdApp>1</sLdApp>
<sGomain>1</sGomain>
<sRbreak>1</sRbreak>
<sRwatch>1</sRwatch>
<sRmem>1</sRmem>
<sRfunc>1</sRfunc>
<sRbox>1</sRbox>
<tLdApp>1</tLdApp>
<tGomain>1</tGomain>
<tRbreak>1</tRbreak>
<tRwatch>1</tRwatch>
<tRmem>1</tRmem>
<tRfunc>0</tRfunc>
<tRbox>1</tRbox>
<tRtrace>1</tRtrace>
<sRSysVw>1</sRSysVw>
<tRSysVw>1</tRSysVw>
<sRunDeb>0</sRunDeb>
<sLrtime>0</sLrtime>
<bEvRecOn>1</bEvRecOn>
<bSchkAxf>0</bSchkAxf>
<bTchkAxf>0</bTchkAxf>
<nTsel>6</nTsel>
<sDll></sDll>
<sDllPa></sDllPa>
<sDlgDll></sDlgDll>
<sDlgPa></sDlgPa>
<sIfile></sIfile>
<tDll></tDll>
<tDllPa></tDllPa>
<tDlgDll></tDlgDll>
<tDlgPa></tDlgPa>
<tIfile></tIfile>
<pMon>STLink\ST-LINKIII-KEIL_SWO.dll</pMon>
</DebugOpt>
<TargetDriverDllRegistry>
<SetRegEntry>
<Number>0</Number>
<Key>UL2CM3</Key>
<Name>UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32C0x_32 -FS08000000 -FL08000 -FP0($$Device:STM32C031C6Tx$CMSIS\Flash\STM32C0x_32.FLM))</Name>
</SetRegEntry>
</TargetDriverDllRegistry>
<Breakpoint/>
<MemoryWindow1>
<Mm>
<WinNumber>1</WinNumber>
<SubType>2</SubType>
<ItemText>0x20000200</ItemText>
<AccSizeX>0</AccSizeX>
</Mm>
</MemoryWindow1>
<MemoryWindow2>
<Mm>
<WinNumber>2</WinNumber>
<SubType>0</SubType>
<ItemText>0x400</ItemText>
<AccSizeX>0</AccSizeX>
</Mm>
</MemoryWindow2>
<Tracepoint>
<THDelay>0</THDelay>
</Tracepoint>
<DebugFlag>
<trace>0</trace>
<periodic>0</periodic>
<aLwin>1</aLwin>
<aCover>0</aCover>
<aSer1>0</aSer1>
<aSer2>0</aSer2>
<aPa>0</aPa>
<viewmode>1</viewmode>
<vrSel>0</vrSel>
<aSym>0</aSym>
<aTbox>0</aTbox>
<AscS1>0</AscS1>
<AscS2>0</AscS2>
<AscS3>0</AscS3>
<aSer3>0</aSer3>
<eProf>0</eProf>
<aLa>0</aLa>
<aPa1>0</aPa1>
<AscS4>0</AscS4>
<aSer4>0</aSer4>
<StkLoc>0</StkLoc>
<TrcWin>0</TrcWin>
<newCpu>0</newCpu>
<uProt>0</uProt>
</DebugFlag>
<LintExecutable></LintExecutable>
<LintConfigFile></LintConfigFile>
<bLintAuto>0</bLintAuto>
<bAutoGenD>0</bAutoGenD>
<LntExFlags>0</LntExFlags>
<pMisraName></pMisraName>
<pszMrule></pszMrule>
<pSingCmds></pSingCmds>
<pMultCmds></pMultCmds>
<pMisraNamep></pMisraNamep>
<pszMrulep></pszMrulep>
<pSingCmdsp></pSingCmdsp>
<pMultCmdsp></pMultCmdsp>
<SystemViewers>
<Entry>
<Name>System Viewer\GPIOA</Name>
<WinId>35904</WinId>
</Entry>
<Entry>
<Name>System Viewer\USART2</Name>
<WinId>35905</WinId>
</Entry>
</SystemViewers>
<DebugDescription>
<Enable>1</Enable>
<EnableFlashSeq>0</EnableFlashSeq>
<EnableLog>0</EnableLog>
<Protocol>2</Protocol>
<DbgClock>10000000</DbgClock>
</DebugDescription>
</TargetOption>
</Target>
<Group>
<GroupName>Source Code</GroupName>
<tvExp>1</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel>
<RteFlg>0</RteFlg>
<File>
<GroupNumber>1</GroupNumber>
<FileNumber>1</FileNumber>
<FileType>8</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\bsp.cpp</PathWithFileName>
<FilenameWithoutPath>bsp.cpp</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>1</GroupNumber>
<FileNumber>2</FileNumber>
<FileType>5</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\..\bsp.hpp</PathWithFileName>
<FilenameWithoutPath>bsp.hpp</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>1</GroupNumber>
<FileNumber>3</FileNumber>
<FileType>5</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\..\dpp.hpp</PathWithFileName>
<FilenameWithoutPath>dpp.hpp</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>1</GroupNumber>
<FileNumber>4</FileNumber>
<FileType>8</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\..\main.cpp</PathWithFileName>
<FilenameWithoutPath>main.cpp</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>1</GroupNumber>
<FileNumber>5</FileNumber>
<FileType>8</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\..\philo.cpp</PathWithFileName>
<FilenameWithoutPath>philo.cpp</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>1</GroupNumber>
<FileNumber>6</FileNumber>
<FileType>5</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\..\qp_config.hpp</PathWithFileName>
<FilenameWithoutPath>qp_config.hpp</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>1</GroupNumber>
<FileNumber>7</FileNumber>
<FileType>5</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\..\README.md</PathWithFileName>
<FilenameWithoutPath>README.md</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>1</GroupNumber>
<FileNumber>8</FileNumber>
<FileType>8</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\..\table.cpp</PathWithFileName>
<FilenameWithoutPath>table.cpp</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
</Group>
<Group>
<GroupName>nucleo-c031c6</GroupName>
<tvExp>1</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel>
<RteFlg>0</RteFlg>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>9</FileNumber>
<FileType>5</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\..\..\..\..\3rd_party\nucleo-c031c6\stm32c0xx.h</PathWithFileName>
<FilenameWithoutPath>stm32c0xx.h</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>10</FileNumber>
<FileType>5</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\..\..\..\..\3rd_party\nucleo-c031c6\stm32c031xx.h</PathWithFileName>
<FilenameWithoutPath>stm32c031xx.h</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>11</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\..\..\..\..\3rd_party\nucleo-c031c6\system_stm32c0xx.c</PathWithFileName>
<FilenameWithoutPath>system_stm32c0xx.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>12</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\..\..\..\..\3rd_party\nucleo-c031c6\gnu\startup_stm32c031xx.c</PathWithFileName>
<FilenameWithoutPath>startup_stm32c031xx.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
</Group>
<Group>
<GroupName>QP</GroupName>
<tvExp>1</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel>
<RteFlg>0</RteFlg>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>13</FileNumber>
<FileType>8</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\..\..\..\..\src\qf\qep_hsm.cpp</PathWithFileName>
<FilenameWithoutPath>qep_hsm.cpp</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>14</FileNumber>
<FileType>8</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\..\..\..\..\src\qv\qv.cpp</PathWithFileName>
<FilenameWithoutPath>qv.cpp</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>15</FileNumber>
<FileType>8</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\..\..\..\..\src\qf\qep_msm.cpp</PathWithFileName>
<FilenameWithoutPath>qep_msm.cpp</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>16</FileNumber>
<FileType>8</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\..\..\..\..\src\qf\qf_act.cpp</PathWithFileName>
<FilenameWithoutPath>qf_act.cpp</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>17</FileNumber>
<FileType>8</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\..\..\..\..\src\qf\qf_actq.cpp</PathWithFileName>
<FilenameWithoutPath>qf_actq.cpp</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>18</FileNumber>
<FileType>8</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\..\..\..\..\src\qf\qf_defer.cpp</PathWithFileName>
<FilenameWithoutPath>qf_defer.cpp</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>19</FileNumber>
<FileType>8</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\..\..\..\..\src\qf\qf_dyn.cpp</PathWithFileName>
<FilenameWithoutPath>qf_dyn.cpp</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>20</FileNumber>
<FileType>8</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\..\..\..\..\src\qf\qf_mem.cpp</PathWithFileName>
<FilenameWithoutPath>qf_mem.cpp</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>21</FileNumber>
<FileType>8</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\..\..\..\..\src\qf\qf_ps.cpp</PathWithFileName>
<FilenameWithoutPath>qf_ps.cpp</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>22</FileNumber>
<FileType>8</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\..\..\..\..\src\qf\qf_qact.cpp</PathWithFileName>
<FilenameWithoutPath>qf_qact.cpp</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>23</FileNumber>
<FileType>8</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\..\..\..\..\src\qf\qf_qeq.cpp</PathWithFileName>
<FilenameWithoutPath>qf_qeq.cpp</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>24</FileNumber>
<FileType>8</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\..\..\..\..\src\qf\qf_qmact.cpp</PathWithFileName>
<FilenameWithoutPath>qf_qmact.cpp</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>25</FileNumber>
<FileType>8</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\..\..\..\..\src\qf\qf_time.cpp</PathWithFileName>
<FilenameWithoutPath>qf_time.cpp</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
</Group>
<Group>
<GroupName>QP_port</GroupName>
<tvExp>1</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel>
<RteFlg>0</RteFlg>
<File>
<GroupNumber>4</GroupNumber>
<FileNumber>26</FileNumber>
<FileType>5</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\..\..\..\..\ports\arm-cm\qv\gnu\qp_port.hpp</PathWithFileName>
<FilenameWithoutPath>qp_port.hpp</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>4</GroupNumber>
<FileNumber>27</FileNumber>
<FileType>5</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\..\..\..\..\ports\arm-cm\qv\gnu\qs_port.hpp</PathWithFileName>
<FilenameWithoutPath>qs_port.hpp</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>4</GroupNumber>
<FileNumber>28</FileNumber>
<FileType>8</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\..\..\..\..\ports\arm-cm\qv\gnu\qv_port.cpp</PathWithFileName>
<FilenameWithoutPath>qv_port.cpp</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
</Group>
<Group>
<GroupName>QS</GroupName>
<tvExp>1</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel>
<RteFlg>0</RteFlg>
<File>
<GroupNumber>5</GroupNumber>
<FileNumber>29</FileNumber>
<FileType>8</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\..\..\..\..\src\qs\qs.cpp</PathWithFileName>
<FilenameWithoutPath>qs.cpp</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>5</GroupNumber>
<FileNumber>30</FileNumber>
<FileType>8</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\..\..\..\..\src\qs\qs_rx.cpp</PathWithFileName>
<FilenameWithoutPath>qs_rx.cpp</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>5</GroupNumber>
<FileNumber>31</FileNumber>
<FileType>8</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\..\..\..\..\src\qs\qstamp.cpp</PathWithFileName>
<FilenameWithoutPath>qstamp.cpp</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
</Group>
</ProjectOpt>

File diff suppressed because it is too large Load Diff

View File

@ -3248,12 +3248,6 @@
<file>
<name>$PROJ_DIR$\..\bsp.cpp</name>
</file>
<file>
<name>$PROJ_DIR$\..\..\bsp.h</name>
</file>
<file>
<name>$PROJ_DIR$\..\..\dpp.h</name>
</file>
<file>
<name>$PROJ_DIR$\..\..\main.cpp</name>
</file>

View File

@ -0,0 +1,16 @@
/*
* Auto generated Run-Time-Environment Configuration File
* *** Do not modify ! ***
*
* Project: 'dpp-qxk'
* Target: 'dpp-dbg'
*/
#ifndef PRE_INCLUDE_UTILITY_QS_H
#define PRE_INCLUDE_UTILITY_QS_H
/* Quantum-Leaps.QP/C++::Utility:QS:7.2.1 */
#define Q_SPY
#endif /* PRE_INCLUDE_UTILITY_QS_H */

View File

@ -0,0 +1,27 @@
/*
* Auto generated Run-Time-Environment Configuration File
* *** Do not modify ! ***
*
* Project: 'dpp-qxk'
* Target: 'dpp-dbg'
*/
#ifndef RTE_COMPONENTS_H
#define RTE_COMPONENTS_H
/*
* Define the Device Header File:
*/
#define CMSIS_device_header "stm32c0xx.h"
/* Quantum-Leaps.QP/C++::Utility:Ports:Native:QXK:7.2.1 */
#define RTE_UTILITY_QP_CPP_PORT_QXK /* QP/CPP QXK Kernel */
/* Quantum-Leaps.QP/C++::Utility:QEP:7.2.1 */
#define RTE_UTILITY_QP_CPP_QEP /* QP/CPP QEP */
/* Quantum-Leaps.QP/C++::Utility:QF:7.2.1 */
#define RTE_UTILITY_QP_CPP_QF /* QP/CPP QF */
#endif /* RTE_COMPONENTS_H */

View File

@ -0,0 +1,23 @@
; *************************************************************
; *** Scatter-Loading Description File generated by uVision ***
;
; Adapted by Quantum Leaps:
; moved STACK as the first section in RW_STACK
; *************************************************************
LR_IROM1 0x08000000 0x00008000 { ; load region size_region
ER_IROM1 0x08000000 0x00008000 { ; load address = execution address
*.o (RESET, +First)
*(InRoot$$Sections)
.ANY (+RO)
.ANY (+XO)
}
RW_STACK 0x20000000 {
* (STACK, +First)
}
RW_IRAM1 +0 (0x00003000 - 2048) {
.ANY (+RW +ZI)
}
}

View File

@ -0,0 +1,792 @@
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<ProjectOpt xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="project_optx.xsd">
<SchemaVersion>1.0</SchemaVersion>
<Header>### uVision Project, (C) Keil Software</Header>
<Extensions>
<cExt>*.c</cExt>
<aExt>*.s*; *.src; *.a*</aExt>
<oExt>*.obj; *.o</oExt>
<lExt>*.lib</lExt>
<tExt>*.txt; *.h; *.hpp *.inc; *.md</tExt>
<pExt>*.plm</pExt>
<CppX>*.cpp</CppX>
<nMigrate>0</nMigrate>
</Extensions>
<DaveTm>
<dwLowDateTime>0</dwLowDateTime>
<dwHighDateTime>0</dwHighDateTime>
</DaveTm>
<Target>
<TargetName>dpp-dbg</TargetName>
<ToolsetNumber>0x4</ToolsetNumber>
<ToolsetName>ARM-ADS</ToolsetName>
<TargetOption>
<CLKADS>12000000</CLKADS>
<OPTTT>
<gFlags>1</gFlags>
<BeepAtEnd>1</BeepAtEnd>
<RunSim>0</RunSim>
<RunTarget>1</RunTarget>
<RunAbUc>0</RunAbUc>
</OPTTT>
<OPTHX>
<HexSelection>1</HexSelection>
<FlashByte>65535</FlashByte>
<HexRangeLowAddress>0</HexRangeLowAddress>
<HexRangeHighAddress>0</HexRangeHighAddress>
<HexOffset>0</HexOffset>
</OPTHX>
<OPTLEX>
<PageWidth>79</PageWidth>
<PageLength>66</PageLength>
<TabStop>8</TabStop>
<ListingPath>.\dbg\</ListingPath>
</OPTLEX>
<ListingPage>
<CreateCListing>1</CreateCListing>
<CreateAListing>1</CreateAListing>
<CreateLListing>1</CreateLListing>
<CreateIListing>0</CreateIListing>
<AsmCond>1</AsmCond>
<AsmSymb>1</AsmSymb>
<AsmXref>0</AsmXref>
<CCond>1</CCond>
<CCode>0</CCode>
<CListInc>0</CListInc>
<CSymb>0</CSymb>
<LinkerCodeListing>0</LinkerCodeListing>
</ListingPage>
<OPTXL>
<LMap>1</LMap>
<LComments>1</LComments>
<LGenerateSymbols>1</LGenerateSymbols>
<LLibSym>1</LLibSym>
<LLines>1</LLines>
<LLocSym>1</LLocSym>
<LPubSym>1</LPubSym>
<LXref>0</LXref>
<LExpSel>0</LExpSel>
</OPTXL>
<OPTFL>
<tvExp>1</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<IsCurrentTarget>1</IsCurrentTarget>
</OPTFL>
<CpuCode>18</CpuCode>
<DebugOpt>
<uSim>0</uSim>
<uTrg>1</uTrg>
<sLdApp>1</sLdApp>
<sGomain>1</sGomain>
<sRbreak>1</sRbreak>
<sRwatch>1</sRwatch>
<sRmem>1</sRmem>
<sRfunc>1</sRfunc>
<sRbox>1</sRbox>
<tLdApp>1</tLdApp>
<tGomain>1</tGomain>
<tRbreak>1</tRbreak>
<tRwatch>1</tRwatch>
<tRmem>1</tRmem>
<tRfunc>0</tRfunc>
<tRbox>1</tRbox>
<tRtrace>0</tRtrace>
<sRSysVw>1</sRSysVw>
<tRSysVw>1</tRSysVw>
<sRunDeb>0</sRunDeb>
<sLrtime>0</sLrtime>
<bEvRecOn>1</bEvRecOn>
<bSchkAxf>0</bSchkAxf>
<bTchkAxf>0</bTchkAxf>
<nTsel>6</nTsel>
<sDll></sDll>
<sDllPa></sDllPa>
<sDlgDll></sDlgDll>
<sDlgPa></sDlgPa>
<sIfile></sIfile>
<tDll></tDll>
<tDllPa></tDllPa>
<tDlgDll></tDlgDll>
<tDlgPa></tDlgPa>
<tIfile></tIfile>
<pMon>STLink\ST-LINKIII-KEIL_SWO.dll</pMon>
</DebugOpt>
<TargetDriverDllRegistry>
<SetRegEntry>
<Number>0</Number>
<Key>ST-LINKIII-KEIL_SWO</Key>
<Name>-U066BFF505153848667095842 -O206 -SF10000 -C0 -A0 -I0 -HNlocalhost -HP7184 -P1 -N00("ARM CoreSight SW-DP (ARM Core") -D00(0BC11477) -L00(0) -TO65554 -TC10000000 -TT10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO7 -FD20000000 -FC1000 -FN1 -FF0STM32C0x_32.FLM -FS08000000 -FL08000 -FP0($$Device:STM32C031C6Tx$CMSIS\Flash\STM32C0x_32.FLM)</Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
<Key>UL2CM3</Key>
<Name>-U -O206 -S8 -C0 -P00 -N00("") -D00(00000000) -L00(0) -TO65554 -TC10000000 -TT10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO7 -FD20000000 -FC1000 -FN1 -FF0STM32C0x_32.FLM -FS08000000 -FL08000 -FP0($$Device:STM32C031C6Tx$CMSIS\Flash\STM32C0x_32.FLM)</Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
<Key>DLGUARM</Key>
<Name>(105=-1,-1,-1,-1,0)</Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
<Key>ARMRTXEVENTFLAGS</Key>
<Name>-L70 -Z18 -C0 -M0 -T1</Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
<Key>DLGTARM</Key>
<Name>(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)</Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
<Key>ARMDBGFLAGS</Key>
<Name></Name>
</SetRegEntry>
</TargetDriverDllRegistry>
<Breakpoint/>
<MemoryWindow1>
<Mm>
<WinNumber>1</WinNumber>
<SubType>2</SubType>
<ItemText>0x20000200</ItemText>
<AccSizeX>0</AccSizeX>
</Mm>
</MemoryWindow1>
<MemoryWindow2>
<Mm>
<WinNumber>2</WinNumber>
<SubType>0</SubType>
<ItemText>0x400</ItemText>
<AccSizeX>0</AccSizeX>
</Mm>
</MemoryWindow2>
<Tracepoint>
<THDelay>0</THDelay>
</Tracepoint>
<DebugFlag>
<trace>0</trace>
<periodic>0</periodic>
<aLwin>1</aLwin>
<aCover>0</aCover>
<aSer1>0</aSer1>
<aSer2>0</aSer2>
<aPa>0</aPa>
<viewmode>1</viewmode>
<vrSel>0</vrSel>
<aSym>0</aSym>
<aTbox>0</aTbox>
<AscS1>0</AscS1>
<AscS2>0</AscS2>
<AscS3>0</AscS3>
<aSer3>0</aSer3>
<eProf>0</eProf>
<aLa>0</aLa>
<aPa1>0</aPa1>
<AscS4>0</AscS4>
<aSer4>0</aSer4>
<StkLoc>0</StkLoc>
<TrcWin>0</TrcWin>
<newCpu>0</newCpu>
<uProt>0</uProt>
</DebugFlag>
<LintExecutable></LintExecutable>
<LintConfigFile></LintConfigFile>
<bLintAuto>0</bLintAuto>
<bAutoGenD>0</bAutoGenD>
<LntExFlags>0</LntExFlags>
<pMisraName></pMisraName>
<pszMrule></pszMrule>
<pSingCmds></pSingCmds>
<pMultCmds></pMultCmds>
<pMisraNamep></pMisraNamep>
<pszMrulep></pszMrulep>
<pSingCmdsp></pSingCmdsp>
<pMultCmdsp></pMultCmdsp>
<DebugDescription>
<Enable>1</Enable>
<EnableFlashSeq>0</EnableFlashSeq>
<EnableLog>0</EnableLog>
<Protocol>2</Protocol>
<DbgClock>10000000</DbgClock>
</DebugDescription>
</TargetOption>
</Target>
<Target>
<TargetName>dpp-rel</TargetName>
<ToolsetNumber>0x4</ToolsetNumber>
<ToolsetName>ARM-ADS</ToolsetName>
<TargetOption>
<CLKADS>12000000</CLKADS>
<OPTTT>
<gFlags>1</gFlags>
<BeepAtEnd>1</BeepAtEnd>
<RunSim>0</RunSim>
<RunTarget>1</RunTarget>
<RunAbUc>0</RunAbUc>
</OPTTT>
<OPTHX>
<HexSelection>1</HexSelection>
<FlashByte>65535</FlashByte>
<HexRangeLowAddress>0</HexRangeLowAddress>
<HexRangeHighAddress>0</HexRangeHighAddress>
<HexOffset>0</HexOffset>
</OPTHX>
<OPTLEX>
<PageWidth>79</PageWidth>
<PageLength>66</PageLength>
<TabStop>8</TabStop>
<ListingPath>.\rel\</ListingPath>
</OPTLEX>
<ListingPage>
<CreateCListing>1</CreateCListing>
<CreateAListing>1</CreateAListing>
<CreateLListing>1</CreateLListing>
<CreateIListing>0</CreateIListing>
<AsmCond>1</AsmCond>
<AsmSymb>1</AsmSymb>
<AsmXref>0</AsmXref>
<CCond>1</CCond>
<CCode>0</CCode>
<CListInc>0</CListInc>
<CSymb>0</CSymb>
<LinkerCodeListing>0</LinkerCodeListing>
</ListingPage>
<OPTXL>
<LMap>1</LMap>
<LComments>1</LComments>
<LGenerateSymbols>1</LGenerateSymbols>
<LLibSym>1</LLibSym>
<LLines>1</LLines>
<LLocSym>1</LLocSym>
<LPubSym>1</LPubSym>
<LXref>0</LXref>
<LExpSel>0</LExpSel>
</OPTXL>
<OPTFL>
<tvExp>1</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<IsCurrentTarget>0</IsCurrentTarget>
</OPTFL>
<CpuCode>18</CpuCode>
<DebugOpt>
<uSim>0</uSim>
<uTrg>1</uTrg>
<sLdApp>1</sLdApp>
<sGomain>1</sGomain>
<sRbreak>1</sRbreak>
<sRwatch>1</sRwatch>
<sRmem>1</sRmem>
<sRfunc>1</sRfunc>
<sRbox>1</sRbox>
<tLdApp>1</tLdApp>
<tGomain>1</tGomain>
<tRbreak>1</tRbreak>
<tRwatch>1</tRwatch>
<tRmem>1</tRmem>
<tRfunc>0</tRfunc>
<tRbox>1</tRbox>
<tRtrace>0</tRtrace>
<sRSysVw>1</sRSysVw>
<tRSysVw>1</tRSysVw>
<sRunDeb>0</sRunDeb>
<sLrtime>0</sLrtime>
<bEvRecOn>1</bEvRecOn>
<bSchkAxf>0</bSchkAxf>
<bTchkAxf>0</bTchkAxf>
<nTsel>6</nTsel>
<sDll></sDll>
<sDllPa></sDllPa>
<sDlgDll></sDlgDll>
<sDlgPa></sDlgPa>
<sIfile></sIfile>
<tDll></tDll>
<tDllPa></tDllPa>
<tDlgDll></tDlgDll>
<tDlgPa></tDlgPa>
<tIfile></tIfile>
<pMon>STLink\ST-LINKIII-KEIL_SWO.dll</pMon>
</DebugOpt>
<TargetDriverDllRegistry>
<SetRegEntry>
<Number>0</Number>
<Key>UL2CM3</Key>
<Name>UL2CM3(-S0 -C0 -P0 ) -FN1 -FC1000 -FD20000000 -FF0STM32C0x_32 -FL08000 -FS08000000 -FP0($$Device:STM32C031C6Tx$CMSIS\Flash\STM32C0x_32.FLM)</Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
<Key>ST-LINKIII-KEIL_SWO</Key>
<Name>UL2CM3(-S0 -C0 -P0 ) -FN1 -FC1000 -FD20000000 -FF0STM32C0x_32 -FL08000 -FS08000000 -FP0($$Device:STM32C031C6Tx$CMSIS\Flash\STM32C0x_32.FLM)</Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
<Key>DLGUARM</Key>
<Name>(105=-1,-1,-1,-1,0)</Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
<Key>ARMRTXEVENTFLAGS</Key>
<Name>-L70 -Z18 -C0 -M0 -T1</Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
<Key>DLGTARM</Key>
<Name>(1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)</Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
<Key>ARMDBGFLAGS</Key>
<Name></Name>
</SetRegEntry>
</TargetDriverDllRegistry>
<Breakpoint/>
<MemoryWindow1>
<Mm>
<WinNumber>1</WinNumber>
<SubType>2</SubType>
<ItemText>0x20000200</ItemText>
<AccSizeX>0</AccSizeX>
</Mm>
</MemoryWindow1>
<MemoryWindow2>
<Mm>
<WinNumber>2</WinNumber>
<SubType>0</SubType>
<ItemText>0x400</ItemText>
<AccSizeX>0</AccSizeX>
</Mm>
</MemoryWindow2>
<Tracepoint>
<THDelay>0</THDelay>
</Tracepoint>
<DebugFlag>
<trace>0</trace>
<periodic>0</periodic>
<aLwin>1</aLwin>
<aCover>0</aCover>
<aSer1>0</aSer1>
<aSer2>0</aSer2>
<aPa>0</aPa>
<viewmode>1</viewmode>
<vrSel>0</vrSel>
<aSym>0</aSym>
<aTbox>0</aTbox>
<AscS1>0</AscS1>
<AscS2>0</AscS2>
<AscS3>0</AscS3>
<aSer3>0</aSer3>
<eProf>0</eProf>
<aLa>0</aLa>
<aPa1>0</aPa1>
<AscS4>0</AscS4>
<aSer4>0</aSer4>
<StkLoc>0</StkLoc>
<TrcWin>0</TrcWin>
<newCpu>0</newCpu>
<uProt>0</uProt>
</DebugFlag>
<LintExecutable></LintExecutable>
<LintConfigFile></LintConfigFile>
<bLintAuto>0</bLintAuto>
<bAutoGenD>0</bAutoGenD>
<LntExFlags>0</LntExFlags>
<pMisraName></pMisraName>
<pszMrule></pszMrule>
<pSingCmds></pSingCmds>
<pMultCmds></pMultCmds>
<pMisraNamep></pMisraNamep>
<pszMrulep></pszMrulep>
<pSingCmdsp></pSingCmdsp>
<pMultCmdsp></pMultCmdsp>
<DebugDescription>
<Enable>1</Enable>
<EnableFlashSeq>1</EnableFlashSeq>
<EnableLog>0</EnableLog>
<Protocol>2</Protocol>
<DbgClock>10000000</DbgClock>
</DebugDescription>
</TargetOption>
</Target>
<Target>
<TargetName>dpp-spy</TargetName>
<ToolsetNumber>0x4</ToolsetNumber>
<ToolsetName>ARM-ADS</ToolsetName>
<TargetOption>
<CLKADS>12000000</CLKADS>
<OPTTT>
<gFlags>1</gFlags>
<BeepAtEnd>1</BeepAtEnd>
<RunSim>0</RunSim>
<RunTarget>1</RunTarget>
<RunAbUc>0</RunAbUc>
</OPTTT>
<OPTHX>
<HexSelection>1</HexSelection>
<FlashByte>65535</FlashByte>
<HexRangeLowAddress>0</HexRangeLowAddress>
<HexRangeHighAddress>0</HexRangeHighAddress>
<HexOffset>0</HexOffset>
</OPTHX>
<OPTLEX>
<PageWidth>79</PageWidth>
<PageLength>66</PageLength>
<TabStop>8</TabStop>
<ListingPath>.\spy\</ListingPath>
</OPTLEX>
<ListingPage>
<CreateCListing>1</CreateCListing>
<CreateAListing>1</CreateAListing>
<CreateLListing>1</CreateLListing>
<CreateIListing>0</CreateIListing>
<AsmCond>1</AsmCond>
<AsmSymb>1</AsmSymb>
<AsmXref>0</AsmXref>
<CCond>1</CCond>
<CCode>0</CCode>
<CListInc>0</CListInc>
<CSymb>0</CSymb>
<LinkerCodeListing>0</LinkerCodeListing>
</ListingPage>
<OPTXL>
<LMap>1</LMap>
<LComments>1</LComments>
<LGenerateSymbols>1</LGenerateSymbols>
<LLibSym>1</LLibSym>
<LLines>1</LLines>
<LLocSym>1</LLocSym>
<LPubSym>1</LPubSym>
<LXref>0</LXref>
<LExpSel>0</LExpSel>
</OPTXL>
<OPTFL>
<tvExp>1</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<IsCurrentTarget>0</IsCurrentTarget>
</OPTFL>
<CpuCode>18</CpuCode>
<DebugOpt>
<uSim>0</uSim>
<uTrg>1</uTrg>
<sLdApp>1</sLdApp>
<sGomain>1</sGomain>
<sRbreak>1</sRbreak>
<sRwatch>1</sRwatch>
<sRmem>1</sRmem>
<sRfunc>1</sRfunc>
<sRbox>1</sRbox>
<tLdApp>1</tLdApp>
<tGomain>1</tGomain>
<tRbreak>1</tRbreak>
<tRwatch>1</tRwatch>
<tRmem>1</tRmem>
<tRfunc>0</tRfunc>
<tRbox>1</tRbox>
<tRtrace>0</tRtrace>
<sRSysVw>1</sRSysVw>
<tRSysVw>1</tRSysVw>
<sRunDeb>0</sRunDeb>
<sLrtime>0</sLrtime>
<bEvRecOn>1</bEvRecOn>
<bSchkAxf>0</bSchkAxf>
<bTchkAxf>0</bTchkAxf>
<nTsel>6</nTsel>
<sDll></sDll>
<sDllPa></sDllPa>
<sDlgDll></sDlgDll>
<sDlgPa></sDlgPa>
<sIfile></sIfile>
<tDll></tDll>
<tDllPa></tDllPa>
<tDlgDll></tDlgDll>
<tDlgPa></tDlgPa>
<tIfile></tIfile>
<pMon>STLink\ST-LINKIII-KEIL_SWO.dll</pMon>
</DebugOpt>
<TargetDriverDllRegistry>
<SetRegEntry>
<Number>0</Number>
<Key>UL2CM3</Key>
<Name>UL2CM3(-S0 -C0 -P0 ) -FN1 -FC1000 -FD20000000 -FF0STM32C0x_32 -FL08000 -FS08000000 -FP0($$Device:STM32C031C6Tx$CMSIS\Flash\STM32C0x_32.FLM)</Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
<Key>ST-LINKIII-KEIL_SWO</Key>
<Name>-U-O206 -O206 -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 -FF0STM32C0x_32.FLM -FS08000000 -FL08000 -FP0($$Device:STM32C031C6Tx$CMSIS\Flash\STM32C0x_32.FLM)</Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
<Key>DLGUARM</Key>
<Name>(105=-1,-1,-1,-1,0)</Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
<Key>ARMRTXEVENTFLAGS</Key>
<Name>-L70 -Z18 -C0 -M0 -T1</Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
<Key>DLGTARM</Key>
<Name>(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)</Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
<Key>ARMDBGFLAGS</Key>
<Name></Name>
</SetRegEntry>
</TargetDriverDllRegistry>
<Breakpoint/>
<MemoryWindow1>
<Mm>
<WinNumber>1</WinNumber>
<SubType>2</SubType>
<ItemText>0x20000200</ItemText>
<AccSizeX>0</AccSizeX>
</Mm>
</MemoryWindow1>
<MemoryWindow2>
<Mm>
<WinNumber>2</WinNumber>
<SubType>0</SubType>
<ItemText>0x400</ItemText>
<AccSizeX>0</AccSizeX>
</Mm>
</MemoryWindow2>
<Tracepoint>
<THDelay>0</THDelay>
</Tracepoint>
<DebugFlag>
<trace>0</trace>
<periodic>0</periodic>
<aLwin>1</aLwin>
<aCover>0</aCover>
<aSer1>0</aSer1>
<aSer2>0</aSer2>
<aPa>0</aPa>
<viewmode>1</viewmode>
<vrSel>0</vrSel>
<aSym>0</aSym>
<aTbox>0</aTbox>
<AscS1>0</AscS1>
<AscS2>0</AscS2>
<AscS3>0</AscS3>
<aSer3>0</aSer3>
<eProf>0</eProf>
<aLa>0</aLa>
<aPa1>0</aPa1>
<AscS4>0</AscS4>
<aSer4>0</aSer4>
<StkLoc>0</StkLoc>
<TrcWin>0</TrcWin>
<newCpu>0</newCpu>
<uProt>0</uProt>
</DebugFlag>
<LintExecutable></LintExecutable>
<LintConfigFile></LintConfigFile>
<bLintAuto>0</bLintAuto>
<bAutoGenD>0</bAutoGenD>
<LntExFlags>0</LntExFlags>
<pMisraName></pMisraName>
<pszMrule></pszMrule>
<pSingCmds></pSingCmds>
<pMultCmds></pMultCmds>
<pMisraNamep></pMisraNamep>
<pszMrulep></pszMrulep>
<pSingCmdsp></pSingCmdsp>
<pMultCmdsp></pMultCmdsp>
<DebugDescription>
<Enable>1</Enable>
<EnableFlashSeq>0</EnableFlashSeq>
<EnableLog>0</EnableLog>
<Protocol>2</Protocol>
<DbgClock>10000000</DbgClock>
</DebugDescription>
</TargetOption>
</Target>
<Group>
<GroupName>Source Code</GroupName>
<tvExp>1</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel>
<RteFlg>0</RteFlg>
<File>
<GroupNumber>1</GroupNumber>
<FileNumber>1</FileNumber>
<FileType>8</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\bsp.cpp</PathWithFileName>
<FilenameWithoutPath>bsp.cpp</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>1</GroupNumber>
<FileNumber>2</FileNumber>
<FileType>5</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\..\bsp.hpp</PathWithFileName>
<FilenameWithoutPath>bsp.hpp</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>1</GroupNumber>
<FileNumber>3</FileNumber>
<FileType>5</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\..\dpp.hpp</PathWithFileName>
<FilenameWithoutPath>dpp.hpp</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>1</GroupNumber>
<FileNumber>4</FileNumber>
<FileType>8</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\..\philo.cpp</PathWithFileName>
<FilenameWithoutPath>philo.cpp</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>1</GroupNumber>
<FileNumber>5</FileNumber>
<FileType>8</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\..\table.cpp</PathWithFileName>
<FilenameWithoutPath>table.cpp</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>1</GroupNumber>
<FileNumber>6</FileNumber>
<FileType>5</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>.\dpp-qxk.sct</PathWithFileName>
<FilenameWithoutPath>dpp-qxk.sct</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>1</GroupNumber>
<FileNumber>7</FileNumber>
<FileType>8</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\xthread1.cpp</PathWithFileName>
<FilenameWithoutPath>xthread1.cpp</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>1</GroupNumber>
<FileNumber>8</FileNumber>
<FileType>8</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\xthread2.cpp</PathWithFileName>
<FilenameWithoutPath>xthread2.cpp</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>1</GroupNumber>
<FileNumber>9</FileNumber>
<FileType>8</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\..\main.cpp</PathWithFileName>
<FilenameWithoutPath>main.cpp</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
</Group>
<Group>
<GroupName>nucleo-c031c6</GroupName>
<tvExp>1</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel>
<RteFlg>0</RteFlg>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>10</FileNumber>
<FileType>5</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\..\..\..\..\3rd_party\nucleo-c031c6\stm32c0xx.h</PathWithFileName>
<FilenameWithoutPath>stm32c0xx.h</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>11</FileNumber>
<FileType>5</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\..\..\..\..\3rd_party\nucleo-c031c6\stm32c031xx.h</PathWithFileName>
<FilenameWithoutPath>stm32c031xx.h</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>12</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\..\..\..\..\3rd_party\nucleo-c031c6\system_stm32c0xx.c</PathWithFileName>
<FilenameWithoutPath>system_stm32c0xx.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>13</FileNumber>
<FileType>2</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\..\..\..\..\3rd_party\nucleo-c031c6\arm\startup_stm32c031xx.s</PathWithFileName>
<FilenameWithoutPath>startup_stm32c031xx.s</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
</Group>
<Group>
<GroupName>::Utility</GroupName>
<tvExp>1</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel>
<RteFlg>1</RteFlg>
</Group>
</ProjectOpt>

File diff suppressed because it is too large Load Diff

View File

@ -121,11 +121,11 @@ void SysTick_Handler(void) {
if ((tmp & (1U << B1_PIN)) != 0U) { // debounced B1 state changed?
if ((current & (1U << B1_PIN)) != 0U) { // is B1 depressed?
static QP::QEvt const pauseEvt(APP::PAUSE_SIG);
static QP::QEvt const pauseEvt { APP::PAUSE_SIG };
QP::QActive::PUBLISH(&pauseEvt, &l_SysTick_Handler);
}
else { // the button is released
static QP::QEvt const serveEvt(APP::SERVE_SIG);
static QP::QEvt const serveEvt { APP::SERVE_SIG };
QP::QActive::PUBLISH(&serveEvt, &l_SysTick_Handler);
}
}
@ -144,7 +144,7 @@ void EXTI0_1_IRQHandler(void) {
QXK_ISR_ENTRY(); // inform QXK about entering an ISR
// for testing..
static QP::QEvt const testEvt(APP::TEST_SIG);
static QP::QEvt const testEvt { APP::TEST_SIG };
APP::AO_Table->POST(&testEvt, &l_EXTI0_1_IRQHandler);
QXK_ISR_EXIT(); // inform QXK about exiting an ISR

View File

@ -3248,12 +3248,6 @@
<file>
<name>$PROJ_DIR$\..\bsp.cpp</name>
</file>
<file>
<name>$PROJ_DIR$\..\..\bsp.h</name>
</file>
<file>
<name>$PROJ_DIR$\..\..\dpp.h</name>
</file>
<file>
<name>$PROJ_DIR$\..\..\main.cpp</name>
</file>

View File

@ -171,7 +171,7 @@ void EXTI0_1_IRQHandler(void) {
// QK_ISR_ENTRY/QK_ISR_EXIT and they cannot post or publish events.
void USART2_IRQHandler(void); // prototype
void USART2_IRQHandler(void) {
void USART2_IRQHandler(void) { // used in QS-RX (kernel UNAWARE interrutp)
// is RX register NOT empty?
QF_MEM_SYS();
if ((USART2->ISR & (1U << 5U)) != 0U) {
@ -707,7 +707,6 @@ void QK::onIdle() {
QF_MEM_SYS();
if ((USART2->ISR & (1U << 7U)) != 0U) { // is TXE empty?
std::uint16_t b = QS::getByte();
if (b != QS_EOD) { // not End-Of-Data?
USART2->TDR = b; // put into the DR register
}

View File

@ -3251,12 +3251,6 @@
<file>
<name>$PROJ_DIR$\..\bsp.cpp</name>
</file>
<file>
<name>$PROJ_DIR$\..\..\bsp.h</name>
</file>
<file>
<name>$PROJ_DIR$\..\..\dpp.h</name>
</file>
<file>
<name>$PROJ_DIR$\..\..\main.cpp</name>
</file>

View File

@ -3251,12 +3251,6 @@
<file>
<name>$PROJ_DIR$\..\bsp.cpp</name>
</file>
<file>
<name>$PROJ_DIR$\..\..\bsp.h</name>
</file>
<file>
<name>$PROJ_DIR$\..\..\dpp.h</name>
</file>
<file>
<name>$PROJ_DIR$\..\..\main.cpp</name>
</file>

View File

@ -120,7 +120,7 @@
<SetRegEntry>
<Number>0</Number>
<Key>ST-LINKIII-KEIL_SWO</Key>
<Name>-U066BFF505153848667095842 -O206 -SF10000 -C0 -A0 -I0 -HNlocalhost -HP7184 -P1 -N00("ARM CoreSight SW-DP (ARM Core") -D00(0BC11477) -L00(0) -TO65554 -TC10000000 -TT10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO7 -FD20000000 -FC1000 -FN1 -FF0STM32C0x_32.FLM -FS08000000 -FL08000 -FP0($$Device:STM32C031C6Tx$CMSIS\Flash\STM32C0x_32.FLM)</Name>
<Name>-U066BFF505153848667095842 -O206 -SF10000 -C0 -A0 -I0 -HNlocalhost -HP7184 -P1 -N00("ARM CoreSight SW-DP (ARM Core") -D00(0BC11477) -L00(0) -TO65554 -TC10000000 -TT10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO7 -FD20000000 -FC1000 -FN1 -FF0STM32C0x_32.FLM -FS08000000 -FL08000 -FP0($$Device:STM32C031C6Tx$CMSIS\Flash\STM32C0x_32.FLM) -WA0 -WE0 -WVCE4 -WS2710 -WM0 -WP2</Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
@ -140,7 +140,7 @@
<SetRegEntry>
<Number>0</Number>
<Key>DLGTARM</Key>
<Name>(1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1012=3265,900,3740,1214,1)(1009=-1,-1,-1,-1,0)</Name>
<Name>(1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1012=3265,900,3740,1214,0)(1009=-1,-1,-1,-1,0)</Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
@ -148,24 +148,7 @@
<Name></Name>
</SetRegEntry>
</TargetDriverDllRegistry>
<Breakpoint>
<Bp>
<Number>0</Number>
<Type>0</Type>
<LineNumber>91</LineNumber>
<EnabledFlag>1</EnabledFlag>
<Address>134220590</Address>
<ByteObject>0</ByteObject>
<HtxType>0</HtxType>
<ManyObjects>0</ManyObjects>
<SizeOfObject>0</SizeOfObject>
<BreakByAccess>0</BreakByAccess>
<BreakIfRCount>1</BreakIfRCount>
<Filename>..\bsp.cpp</Filename>
<ExecCommand></ExecCommand>
<Expression>\\dpp_qxk\../bsp.cpp\91</Expression>
</Bp>
</Breakpoint>
<Breakpoint/>
<MemoryWindow1>
<Mm>
<WinNumber>1</WinNumber>

View File

@ -10,7 +10,7 @@
<TargetName>dpp-dbg</TargetName>
<ToolsetNumber>0x4</ToolsetNumber>
<ToolsetName>ARM-ADS</ToolsetName>
<pCCUsed>6160000::V6.16::ARMCLANG</pCCUsed>
<pCCUsed>6190000::V6.19::ARMCLANG</pCCUsed>
<uAC6>1</uAC6>
<TargetOption>
<TargetCommonOption>
@ -186,6 +186,7 @@
<RvdsVP>0</RvdsVP>
<RvdsMve>0</RvdsMve>
<RvdsCdeCp>0</RvdsCdeCp>
<nBranchProt>0</nBranchProt>
<hadIRAM2>0</hadIRAM2>
<hadIROM2>0</hadIROM2>
<StupSel>8</StupSel>
@ -841,6 +842,7 @@
<RvdsVP>0</RvdsVP>
<RvdsMve>0</RvdsMve>
<RvdsCdeCp>0</RvdsCdeCp>
<nBranchProt>0</nBranchProt>
<hadIRAM2>0</hadIRAM2>
<hadIROM2>0</hadIROM2>
<StupSel>8</StupSel>
@ -1320,7 +1322,7 @@
<TargetName>dpp-spy</TargetName>
<ToolsetNumber>0x4</ToolsetNumber>
<ToolsetName>ARM-ADS</ToolsetName>
<pCCUsed>6160000::V6.16::ARMCLANG</pCCUsed>
<pCCUsed>6190000::V6.19::ARMCLANG</pCCUsed>
<uAC6>1</uAC6>
<TargetOption>
<TargetCommonOption>
@ -1496,6 +1498,7 @@
<RvdsVP>0</RvdsVP>
<RvdsMve>0</RvdsMve>
<RvdsCdeCp>0</RvdsCdeCp>
<nBranchProt>0</nBranchProt>
<hadIRAM2>0</hadIRAM2>
<hadIROM2>0</hadIROM2>
<StupSel>8</StupSel>

View File

@ -1,7 +1,7 @@
//============================================================================
// Product: DPP example, NUCLEO-C031C6 board, QXK kernel, MPU isolation
// Last updated for version 7.3.0
// Last updated on 2023-08-15
// Last updated for version 7.3.1
// Last updated on 2023-12-03
//
// Q u a n t u m L e a P s
// ------------------------
@ -157,6 +157,7 @@ void EXTI0_1_IRQHandler(void); // prototype
void EXTI0_1_IRQHandler(void) {
QXK_ISR_ENTRY(); // inform QXK about entering an ISR
// for testing..
static QP::QEvt const testEvt(APP::TEST_SIG);
APP::AO_Table->POST(&testEvt, &l_EXTI0_1_IRQHandler);
@ -171,7 +172,7 @@ void EXTI0_1_IRQHandler(void) {
// QXK_ISR_ENTRY/QXK_ISR_EXIT and they cannot post or publish events.
void USART2_IRQHandler(void); // prototype
void USART2_IRQHandler(void) {
void USART2_IRQHandler(void) { // used in QS-RX (kernel UNAWARE interrutp)
// is RX register NOT empty?
QF_MEM_SYS();
if ((USART2->ISR & (1U << 5U)) != 0U) {
@ -238,7 +239,7 @@ constexpr std::uint32_t STACK_SIZE_POW2 {11U};
// Table AO...................................................................
// size of Table instance, as power-of-2
constexpr std::uint32_t TABLE_SIZE_POW2 {6};
constexpr std::uint32_t TABLE_SIZE_POW2 {7U};
__attribute__((aligned((1U << TABLE_SIZE_POW2))))
static std::uint8_t Table_sto[1U << TABLE_SIZE_POW2];
@ -270,7 +271,7 @@ static MPU_Region const MPU_Table[3] = {
// Philo AOs..................................................................
// size of Philo instance, as power-of-2
constexpr std::uint32_t PHILO_SIZE_POW2 {6};
constexpr std::uint32_t PHILO_SIZE_POW2 {7U};
__attribute__((aligned((1U << PHILO_SIZE_POW2))))
static std::uint8_t Philo_sto[APP::N_PHILO][1U << PHILO_SIZE_POW2];
@ -388,8 +389,8 @@ static MPU_Region const MPU_Philo[APP::N_PHILO][3] = {
#endif
// XThread1 thread............................................................
constexpr std::uint32_t XTHREAD1_SIZE_POW2 {9U}; // XThread1 instance + stack
constexpr std::uint32_t XTHREAD1_STACK_SIZE {448U}; // Thread1 stack size
constexpr std::uint32_t XTHREAD1_SIZE_POW2 {10U}; // XThread1 instance + stack
constexpr std::uint32_t XTHREAD1_STACK_SIZE {400U}; // XThread1 stack size
__attribute__((aligned((1U << XTHREAD1_SIZE_POW2))))
std::uint8_t XThread1_sto[1U << XTHREAD1_SIZE_POW2];
@ -422,8 +423,8 @@ static MPU_Region const MPU_XThread1[3] = {
#endif
// XThread2 thread............................................................
constexpr std::uint32_t XTHREAD2_SIZE_POW2 {9U}; // XThread1 instance + stack
constexpr std::uint32_t XTHREAD2_STACK_SIZE {448U}; // Thread1 stack size
constexpr std::uint32_t XTHREAD2_SIZE_POW2 {10U}; // XThread2 instance + stack
constexpr std::uint32_t XTHREAD2_STACK_SIZE {400U}; // XThread2 stack size
__attribute__((aligned((1U << XTHREAD2_SIZE_POW2))))
std::uint8_t XThread2_sto[1U << XTHREAD2_SIZE_POW2];
@ -818,18 +819,7 @@ void QXK::onIdle() {
// 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.
//
// !!!CAUTION!!!
// The WFI instruction stops the CPU clock, which unfortunately disables
// the JTAG port, so the ST-Link debugger can no longer connect to the
// board. For that reason, the call to __WFI() has to be used with CAUTION.
//
// NOTE: If you find your board "frozen" like this, strap BOOT0 to VDD and
// reset the board, then connect with ST-Link Utilities and erase the part.
// The trick with BOOT(0) is it gets the part to run the System Loader
// instead of your broken code. When done disconnect BOOT0, and start over.
//
//__WFI(); // Wait-For-Interrupt
__WFI(); // Wait-For-Interrupt
#endif
}

View File

@ -78,7 +78,7 @@
</option>
<option>
<name>GenLowLevelInterface</name>
<state>1</state>
<state>0</state>
</option>
<option>
<name>GEndianModeBE</name>
@ -146,7 +146,7 @@
</option>
<option>
<name>OgLibHeap</name>
<state>0</state>
<state>3</state>
</option>
<option>
<name>OGLibAdditionalLocale</name>
@ -226,6 +226,7 @@
</option>
<option>
<name>CCDefines</name>
<state>QF_MEM_ISOLATE</state>
<state>STM32C031xx</state>
</option>
<option>
@ -1306,6 +1307,7 @@
<option>
<name>CCDefines</name>
<state>NDEBUG</state>
<state>QF_MEM_ISOLATE</state>
<state>STM32C031xx</state>
</option>
<option>
@ -2386,6 +2388,7 @@
<option>
<name>CCDefines</name>
<state>Q_SPY</state>
<state>QF_MEM_ISOLATE</state>
<state>STM32C031xx</state>
</option>
<option>
@ -3245,12 +3248,6 @@
<file>
<name>$PROJ_DIR$\..\bsp.cpp</name>
</file>
<file>
<name>$PROJ_DIR$\..\..\bsp.h</name>
</file>
<file>
<name>$PROJ_DIR$\..\..\dpp.h</name>
</file>
<file>
<name>$PROJ_DIR$\..\..\main.cpp</name>
</file>

View File

@ -517,7 +517,7 @@
<SetRegEntry>
<Number>0</Number>
<Key>ST-LINKIII-KEIL_SWO</Key>
<Name>-U0675FF504955857567065746 -O8399 -SF4000 -C0 -A0 -I0 -HNlocalhost -HP7184 -P2 -N00("ARM CoreSight SW-DP") -D00(6BA02477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8004 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO7 -FD20010000 -FC1000 -FN1 -FF0STM32H7x_2048.FLM -FS08000000 -FL0200000 -FP0($$Device:STM32H743ZITx$CMSIS\Flash\STM32H7x_2048.FLM)</Name>
<Name>-U0675FF504955857567065746 -O8399 -SF10000 -C0 -A0 -I0 -HNlocalhost -HP7184 -P2 -N00("ARM CoreSight SW-DP (ARM Core") -D00(6BA02477) -L00(0) -TO131090 -TC10000000 -TT10000000 -TP21 -TDS8004 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO7 -FD20010000 -FC1000 -FN1 -FF0STM32H7x_2048.FLM -FS08000000 -FL0200000 -FP0($$Device:STM32H743ZITx$CMSIS\Flash\STM32H7x_2048.FLM) -WA0 -WE0 -WVCE4 -WS2710 -WM0 -WP2</Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
@ -540,7 +540,31 @@
<Name></Name>
</SetRegEntry>
</TargetDriverDllRegistry>
<Breakpoint/>
<Breakpoint>
<Bp>
<Number>0</Number>
<Type>0</Type>
<LineNumber>75</LineNumber>
<EnabledFlag>1</EnabledFlag>
<Address>134223008</Address>
<ByteObject>0</ByteObject>
<HtxType>0</HtxType>
<ManyObjects>0</ManyObjects>
<SizeOfObject>0</SizeOfObject>
<BreakByAccess>0</BreakByAccess>
<BreakIfRCount>1</BreakIfRCount>
<Filename>..\bsp.cpp</Filename>
<ExecCommand></ExecCommand>
<Expression>\\dpp_qk\../bsp.cpp\75</Expression>
</Bp>
</Breakpoint>
<WatchWindow1>
<Ww>
<count>0</count>
<WinNumber>1</WinNumber>
<ItemText>QK_priv_</ItemText>
</Ww>
</WatchWindow1>
<MemoryWindow1>
<Mm>
<WinNumber>1</WinNumber>

View File

@ -16,8 +16,8 @@
<TargetCommonOption>
<Device>STM32H743ZITx</Device>
<Vendor>STMicroelectronics</Vendor>
<PackID>Keil.STM32H7xx_DFP.3.0.0</PackID>
<PackURL>http://www.keil.com/pack/</PackURL>
<PackID>Keil.STM32H7xx_DFP.3.1.1</PackID>
<PackURL>https://www.keil.com/pack/</PackURL>
<Cpu>IRAM(0x20000000,0x00020000) IRAM2(0x24000000,0x00080000) IROM(0x08000000,0x00200000) CPUTYPE("Cortex-M7") FPU3(DFPU) CLOCK(12000000) ELITTLE</Cpu>
<FlashUtilSpec></FlashUtilSpec>
<StartupFile></StartupFile>
@ -186,6 +186,7 @@
<RvdsVP>3</RvdsVP>
<RvdsMve>0</RvdsMve>
<RvdsCdeCp>0</RvdsCdeCp>
<nBranchProt>0</nBranchProt>
<hadIRAM2>1</hadIRAM2>
<hadIROM2>0</hadIROM2>
<StupSel>8</StupSel>
@ -681,8 +682,8 @@
<TargetCommonOption>
<Device>STM32H743ZITx</Device>
<Vendor>STMicroelectronics</Vendor>
<PackID>Keil.STM32H7xx_DFP.3.0.0</PackID>
<PackURL>http://www.keil.com/pack/</PackURL>
<PackID>Keil.STM32H7xx_DFP.3.1.1</PackID>
<PackURL>https://www.keil.com/pack/</PackURL>
<Cpu>IRAM(0x20000000,0x00020000) IRAM2(0x24000000,0x00080000) IROM(0x08000000,0x00200000) CPUTYPE("Cortex-M7") FPU3(DFPU) CLOCK(12000000) ELITTLE</Cpu>
<FlashUtilSpec></FlashUtilSpec>
<StartupFile></StartupFile>
@ -851,6 +852,7 @@
<RvdsVP>3</RvdsVP>
<RvdsMve>0</RvdsMve>
<RvdsCdeCp>0</RvdsCdeCp>
<nBranchProt>0</nBranchProt>
<hadIRAM2>1</hadIRAM2>
<hadIROM2>0</hadIROM2>
<StupSel>8</StupSel>
@ -1340,14 +1342,14 @@
<TargetName>dpp-spy</TargetName>
<ToolsetNumber>0x4</ToolsetNumber>
<ToolsetName>ARM-ADS</ToolsetName>
<pCCUsed>6160000::V6.16::ARMCLANG</pCCUsed>
<pCCUsed>6190000::V6.19::ARMCLANG</pCCUsed>
<uAC6>1</uAC6>
<TargetOption>
<TargetCommonOption>
<Device>STM32H743ZITx</Device>
<Vendor>STMicroelectronics</Vendor>
<PackID>Keil.STM32H7xx_DFP.3.0.0</PackID>
<PackURL>http://www.keil.com/pack/</PackURL>
<PackID>Keil.STM32H7xx_DFP.3.1.1</PackID>
<PackURL>https://www.keil.com/pack/</PackURL>
<Cpu>IRAM(0x20000000,0x00020000) IRAM2(0x24000000,0x00080000) IROM(0x08000000,0x00200000) CPUTYPE("Cortex-M7") FPU3(DFPU) CLOCK(12000000) ELITTLE</Cpu>
<FlashUtilSpec></FlashUtilSpec>
<StartupFile></StartupFile>
@ -1516,6 +1518,7 @@
<RvdsVP>3</RvdsVP>
<RvdsMve>0</RvdsMve>
<RvdsCdeCp>0</RvdsCdeCp>
<nBranchProt>0</nBranchProt>
<hadIRAM2>1</hadIRAM2>
<hadIROM2>0</hadIROM2>
<StupSel>8</StupSel>

View File

@ -1,7 +1,7 @@
//============================================================================
// Product: DPP example, NUCLEO-H743ZI board, QK kernel
// Last updated for version 7.3.0
// Last updated on 2023-08-15
// Last updated for version 7.3.1
// Last updated on 2023-11-29
//
// Q u a n t u m L e a P s
// ------------------------
@ -145,8 +145,8 @@ void SysTick_Handler(void) {
#ifdef Q_SPY
// ISR for receiving bytes from the QSPY Back-End
// NOTE: This ISR is "QF-unaware" meaning that it does not interact with
// the QF/QK and is not disabled. Such ISRs don't need to call
// QK_ISR_ENTRY/QK_ISR_EXIT and they cannot post or publish events.
// the QF/QK and is not disabled. Such ISRs don't need to call QK_ISR_ENTRY/
// QK_ISR_EXIT and they cannot post or publish events.
void USART3_IRQHandler(void); // prototype
void USART3_IRQHandler(void) {
@ -194,10 +194,6 @@ void init() {
// enable the MemManage_Handler for MPU exception
SCB->SHCSR |= SCB_SHCSR_MEMFAULTENA_Msk;
// NOTE: SystemInit() has been already called from the startup code
// but SystemCoreClock needs to be updated
SystemCoreClockUpdate();
SCB_EnableICache(); // Enable I-Cache
SCB_EnableDCache(); // Enable D-Cache
@ -231,7 +227,9 @@ void init() {
// setup the QS filters...
QS_GLB_FILTER(QP::QS_ALL_RECORDS); // all records
QS_GLB_FILTER(-QP::QS_QF_TICK); // exclude the clock tick
QS_GLB_FILTER(-QP::QS_QF_TICK); // exclude
QS_GLB_FILTER(-QP::QS_SCHED_LOCK); // exclude
QS_GLB_FILTER(-QP::QS_SCHED_UNLOCK); // exclude
}
//............................................................................
void start() {
@ -316,6 +314,10 @@ std::uint32_t random() { // a very cheap pseudo-random-number generator
return (rnd >> 8U);
}
//............................................................................
void terminate(std::int16_t result) {
Q_UNUSED_PAR(result);
}
//............................................................................
void ledOn() {
BSP_LED_On(LED1);
}
@ -323,10 +325,6 @@ void ledOn() {
void ledOff() {
BSP_LED_Off(LED1);
}
//............................................................................
void terminate(int16_t result) {
Q_UNUSED_PAR(result);
}
} // namespace BSP
@ -336,14 +334,12 @@ namespace QP {
// QF callbacks...
void QF::onStartup() {
// set up the SysTick timer to fire at BSP::TICKS_PER_SEC rate
SysTick_Config(SystemCoreClock / BSP::TICKS_PER_SEC);
// assign all priority bits for preemption-prio. and none to sub-prio.
// NOTE: this might have been changed by STM32Cube.
NVIC_SetPriorityGrouping(0U);
// set up the SysTick timer to fire at BSP_TICKS_PER_SEC rate
SystemCoreClockUpdate();
SysTick_Config(SystemCoreClock / BSP::TICKS_PER_SEC);
// set priorities of ALL ISRs used in the system, see NOTE1
@ -367,10 +363,15 @@ void QK::onIdle() {
BSP_LED_Off(LED3);
QF_INT_ENABLE();
// exercise scheduler lock from idle thread
QP::QSchedStatus lockStat = QP::QK::schedLock(1U); // 1U prio. ceiling
// Some floating point code is to exercise the VFP...
double volatile x = 1.73205;
x = x * 1.73205;
QP::QK::schedUnlock(lockStat);
#ifdef Q_SPY
QF_INT_DISABLE();
QS::rxParse(); // parse all the received bytes
@ -381,7 +382,7 @@ void QK::onIdle() {
std::uint16_t b = QS::getByte();
QF_INT_ENABLE();
if (b != QS_EOD) { // not End-Of-Data?
if (b != QS_EOD) { // not End-Of-Data?
l_uartHandle.Instance->TDR = b; // put into TDR
}
}
@ -495,7 +496,7 @@ void onCommand(std::uint8_t cmdId, std::uint32_t param1,
} // namespace QP
//============================================================================
// NOTE1:
// NOTE0:
// The QF_AWARE_ISR_CMSIS_PRI constant from the QF port specifies the highest
// ISR priority that is disabled by the QF framework. The value is suitable
// for the NVIC_SetPriority() CMSIS function.
@ -508,7 +509,7 @@ void onCommand(std::uint8_t cmdId, std::uint32_t param1,
// Conversely, any ISRs prioritized above the QF_AWARE_ISR_CMSIS_PRI priority
// level (i.e., with the numerical values of priorities less than
// QF_AWARE_ISR_CMSIS_PRI) are never disabled and are not aware of the kernel.
// Such "QF-unaware" ISRs cannot call ANY QF/QK services. In particular they
// Such "QF-unaware" ISRs cannot call ANY QF services. In particular they
// can NOT call the macros QK_ISR_ENTRY/QK_ISR_ENTRY. The only mechanism
// by which a "QF-unaware" ISR can communicate with the QF framework is by
// triggering a "QF-aware" ISR, which can post/publish events.

View File

@ -1,7 +1,7 @@
//============================================================================
// Product: DPP example, NUCLEO-H743ZI board, QV kernel
// Last updated for version 7.3.0
// Last updated on 2023-08-15
// Last updated for version 7.3.1
// Last updated on 2023-11-30
//
// Q u a n t u m L e a P s
// ------------------------
@ -193,10 +193,6 @@ void init() {
// enable the MemManage_Handler for MPU exception
SCB->SHCSR |= SCB_SHCSR_MEMFAULTENA_Msk;
// NOTE: SystemInit() has been already called from the startup code
// but SystemCoreClock needs to be updated
SystemCoreClockUpdate();
SCB_EnableICache(); // Enable I-Cache
SCB_EnableDCache(); // Enable D-Cache
@ -330,19 +326,17 @@ namespace QP {
// QF callbacks...
void QF::onStartup() {
// set up the SysTick timer to fire at BSP::TICKS_PER_SEC rate
// set up the SysTick timer to fire at BSP_TICKS_PER_SEC rate
SystemCoreClockUpdate();
SysTick_Config(SystemCoreClock / BSP::TICKS_PER_SEC);
// assign all priority bits for preemption-prio. and none to sub-prio.
// NOTE: this might have been changed by STM32Cube.
NVIC_SetPriorityGrouping(0U);
// set up the SysTick timer to fire at BSP_TICKS_PER_SEC rate
SysTick_Config(SystemCoreClock / BSP::TICKS_PER_SEC);
// set priorities of ALL ISRs used in the system, see NOTE1
NVIC_SetPriority(USART3_IRQn, 0U); // kernel UNAWARE interrupt
NVIC_SetPriority(SysTick_IRQn, QF_AWARE_ISR_CMSIS_PRI + 1U);
NVIC_SetPriority(SysTick_IRQn, QF_AWARE_ISR_CMSIS_PRI + 0U);
// ...
// enable IRQs...
@ -359,6 +353,12 @@ void QV::onIdle() { // CAUTION: called with interrupts DISABLED, see NOTE0
BSP_LED_On (LED3);
BSP_LED_Off(LED3);
// Some floating point code is to exercise the VFP...
QF_INT_ENABLE();
double volatile x = 1.73205;
x = x * 1.73205;
QF_INT_DISABLE();
#ifdef Q_SPY
// interrupts still disabled
QS::rxParse(); // parse all the received bytes
@ -487,8 +487,8 @@ void onCommand(std::uint8_t cmdId, std::uint32_t param1,
//
// Only ISRs prioritized at or below the QF_AWARE_ISR_CMSIS_PRI level (i.e.,
// with the numerical values of priorities equal or higher than
// QF_AWARE_ISR_CMSIS_PRI) are allowed to call the QV_ISR_ENTRY/QV_ISR_ENTRY
// macros or any other QF services. These ISRs are "QF-aware".
// QF_AWARE_ISR_CMSIS_PRI) are allowed to call any QF services. These ISRs
// are "QF-aware".
//
// Conversely, any ISRs prioritized above the QF_AWARE_ISR_CMSIS_PRI priority
// level (i.e., with the numerical values of priorities less than
@ -499,8 +499,14 @@ void onCommand(std::uint8_t cmdId, std::uint32_t param1,
// triggering a "QF-aware" ISR, which can post/publish events.
//
// NOTE2:
// The QV_onIdle() callback is called with interrupts disabled, because the
// determination of the idle condition might change by any interrupt posting
// an event. QV_onIdle() must internally enable interrupts, ideally
// atomically with putting the CPU to the power-saving mode.
//
// NOTE3:
// The User LED is used to visualize the idle loop activity. The brightness
// of the LED is proportional to the frequency of the idle loop.
// of the LED is proportional to the frequency of invcations of the idle loop.
// Please note that the LED is toggled with interrupts locked, so no interrupt
// execution time contributes to the brightness of the User LED.
//

View File

@ -125,7 +125,7 @@
<SetRegEntry>
<Number>0</Number>
<Key>ST-LINKIII-KEIL_SWO</Key>
<Name>-U0675FF504955857567065746 -O8399 -SF10000 -C0 -A0 -I0 -HNlocalhost -HP7184 -P2 -N00("ARM CoreSight SW-DP (ARM Core") -D00(6BA02477) -L00(0) -TO131090 -TC10000000 -TT10000000 -TP21 -TDS8004 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO7 -FD20010000 -FC1000 -FN1 -FF0STM32H7x_2048.FLM -FS08000000 -FL0200000 -FP0($$Device:STM32H743ZITx$CMSIS\Flash\STM32H7x_2048.FLM)</Name>
<Name>-U0675FF504955857567065746 -O8399 -SF10000 -C0 -A0 -I0 -HNlocalhost -HP7184 -P2 -N00("ARM CoreSight SW-DP (ARM Core") -D00(6BA02477) -L00(0) -TO131090 -TC10000000 -TT10000000 -TP21 -TDS8004 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO7 -FD20010000 -FC1000 -FN1 -FF0STM32H7x_2048.FLM -FS08000000 -FL0200000 -FP0($$Device:STM32H743ZITx$CMSIS\Flash\STM32H7x_2048.FLM) -WA0 -WE0 -WVCE4 -WS2710 -WM0 -WP2</Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
@ -148,7 +148,36 @@
<Name></Name>
</SetRegEntry>
</TargetDriverDllRegistry>
<Breakpoint/>
<Breakpoint>
<Bp>
<Number>0</Number>
<Type>0</Type>
<LineNumber>419</LineNumber>
<EnabledFlag>1</EnabledFlag>
<Address>134223124</Address>
<ByteObject>0</ByteObject>
<HtxType>0</HtxType>
<ManyObjects>0</ManyObjects>
<SizeOfObject>0</SizeOfObject>
<BreakByAccess>0</BreakByAccess>
<BreakIfRCount>1</BreakIfRCount>
<Filename>..\..\..\..\..\src\qxk\qxk.cpp</Filename>
<ExecCommand></ExecCommand>
<Expression>\\dpp_qxk\../../../../../src/qxk/qxk.cpp\419</Expression>
</Bp>
</Breakpoint>
<WatchWindow1>
<Ww>
<count>0</count>
<WinNumber>1</WinNumber>
<ItemText>QP::QActive::registry_</ItemText>
</Ww>
<Ww>
<count>1</count>
<WinNumber>1</WinNumber>
<ItemText>QActive::registry_</ItemText>
</Ww>
</WatchWindow1>
<MemoryWindow1>
<Mm>
<WinNumber>1</WinNumber>

View File

@ -10,14 +10,14 @@
<TargetName>dpp-dbg</TargetName>
<ToolsetNumber>0x4</ToolsetNumber>
<ToolsetName>ARM-ADS</ToolsetName>
<pCCUsed>6160000::V6.16::ARMCLANG</pCCUsed>
<pCCUsed>6190000::V6.19::ARMCLANG</pCCUsed>
<uAC6>1</uAC6>
<TargetOption>
<TargetCommonOption>
<Device>STM32H743ZITx</Device>
<Vendor>STMicroelectronics</Vendor>
<PackID>Keil.STM32H7xx_DFP.3.0.0</PackID>
<PackURL>http://www.keil.com/pack/</PackURL>
<PackID>Keil.STM32H7xx_DFP.3.1.1</PackID>
<PackURL>https://www.keil.com/pack/</PackURL>
<Cpu>IRAM(0x20000000,0x00020000) IRAM2(0x24000000,0x00080000) IROM(0x08000000,0x00200000) CPUTYPE("Cortex-M7") FPU3(DFPU) CLOCK(12000000) ELITTLE</Cpu>
<FlashUtilSpec></FlashUtilSpec>
<StartupFile></StartupFile>
@ -186,6 +186,7 @@
<RvdsVP>3</RvdsVP>
<RvdsMve>0</RvdsMve>
<RvdsCdeCp>0</RvdsCdeCp>
<nBranchProt>0</nBranchProt>
<hadIRAM2>1</hadIRAM2>
<hadIROM2>0</hadIROM2>
<StupSel>8</StupSel>
@ -706,8 +707,8 @@
<TargetCommonOption>
<Device>STM32H743ZITx</Device>
<Vendor>STMicroelectronics</Vendor>
<PackID>Keil.STM32H7xx_DFP.3.0.0</PackID>
<PackURL>http://www.keil.com/pack/</PackURL>
<PackID>Keil.STM32H7xx_DFP.3.1.1</PackID>
<PackURL>https://www.keil.com/pack/</PackURL>
<Cpu>IRAM(0x20000000,0x00020000) IRAM2(0x24000000,0x00080000) IROM(0x08000000,0x00200000) CPUTYPE("Cortex-M7") FPU3(DFPU) CLOCK(12000000) ELITTLE</Cpu>
<FlashUtilSpec></FlashUtilSpec>
<StartupFile></StartupFile>
@ -876,6 +877,7 @@
<RvdsVP>3</RvdsVP>
<RvdsMve>0</RvdsMve>
<RvdsCdeCp>0</RvdsCdeCp>
<nBranchProt>0</nBranchProt>
<hadIRAM2>1</hadIRAM2>
<hadIROM2>0</hadIROM2>
<StupSel>8</StupSel>
@ -1390,14 +1392,14 @@
<TargetName>dpp-spy</TargetName>
<ToolsetNumber>0x4</ToolsetNumber>
<ToolsetName>ARM-ADS</ToolsetName>
<pCCUsed>6160000::V6.16::ARMCLANG</pCCUsed>
<pCCUsed>6190000::V6.19::ARMCLANG</pCCUsed>
<uAC6>1</uAC6>
<TargetOption>
<TargetCommonOption>
<Device>STM32H743ZITx</Device>
<Vendor>STMicroelectronics</Vendor>
<PackID>Keil.STM32H7xx_DFP.3.0.0</PackID>
<PackURL>http://www.keil.com/pack/</PackURL>
<PackID>Keil.STM32H7xx_DFP.3.1.1</PackID>
<PackURL>https://www.keil.com/pack/</PackURL>
<Cpu>IRAM(0x20000000,0x00020000) IRAM2(0x24000000,0x00080000) IROM(0x08000000,0x00200000) CPUTYPE("Cortex-M7") FPU3(DFPU) CLOCK(12000000) ELITTLE</Cpu>
<FlashUtilSpec></FlashUtilSpec>
<StartupFile></StartupFile>
@ -1566,6 +1568,7 @@
<RvdsVP>3</RvdsVP>
<RvdsMve>0</RvdsMve>
<RvdsCdeCp>0</RvdsCdeCp>
<nBranchProt>0</nBranchProt>
<hadIRAM2>1</hadIRAM2>
<hadIROM2>0</hadIROM2>
<StupSel>8</StupSel>
@ -1693,7 +1696,7 @@
</ArmAdsMisc>
<Cads>
<interw>0</interw>
<Optim>2</Optim>
<Optim>7</Optim>
<oTime>0</oTime>
<SplitLS>0</SplitLS>
<OneElfS>1</OneElfS>

View File

@ -1,13 +1,13 @@
##############################################################################
# Product: Makefile for QP/C++ on STM32 NUCLEO-L053R8, QK kernel, GNU-ARM
# Last Updated for Version: 7.2.0
# Date of the Last Update: 2022-12-14
# Last Updated for Version: 7.3.1
# Date of the Last Update: 2023-11-13
#
# Q u a n t u m L e a P s
# ------------------------
# Modern Embedded Software
#
# Copyright (C) 2005-2021 Quantum Leaps, LLC. All rights reserved.
# Copyright (C) 2005 Quantum Leaps, LLC. 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
@ -132,10 +132,8 @@ LIB_DIRS :=
LIBS :=
# defines
DEFINES := \
-DQF_ON_CONTEXT_SW \
-DQK_USE_IRQ_HANDLER=LCD_IRQHandler \
-DQK_USE_IRQ_NUM=30
DEFINES := -DSTM32L053xx \
-DQF_ON_CONTEXT_SW
# ARM CPU, ARCH, FPU, and Float-ABI types...
# ARM_CPU: [cortex-m0 | cortex-m0plus | cortex-m1 | cortex-m3 | cortex-m4]

View File

@ -228,6 +228,7 @@
<name>CCDefines</name>
<state>QK_USE_IRQ_HANDLER=LCD_IRQHandler</state>
<state>QK_USE_IRQ_NUM=30</state>
<state>STM32L053xx</state>
</option>
<option>
<name>CCPreprocFile</name>
@ -994,7 +995,7 @@
</option>
<option>
<name>IlinkTrustzoneImportLibraryOut</name>
<state>###Unitialized###</state>
<state>dpp-qk_import_lib.o</state>
</option>
<option>
<name>OILinkExtraOption</name>
@ -1307,6 +1308,7 @@
<option>
<name>CCDefines</name>
<state>NDEBUG</state>
<state>STM32L053xx</state>
</option>
<option>
<name>CCPreprocFile</name>
@ -2386,6 +2388,7 @@
<option>
<name>CCDefines</name>
<state>Q_SPY</state>
<state>STM32L053xx</state>
</option>
<option>
<name>CCPreprocFile</name>

View File

@ -899,7 +899,7 @@
<Group>
<GroupName>QP_port</GroupName>
<tvExp>1</tvExp>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel>
<RteFlg>0</RteFlg>
@ -919,7 +919,7 @@
<Group>
<GroupName>QS</GroupName>
<tvExp>1</tvExp>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel>
<RteFlg>0</RteFlg>

View File

@ -10,7 +10,7 @@
<TargetName>dpp-dbg</TargetName>
<ToolsetNumber>0x4</ToolsetNumber>
<ToolsetName>ARM-ADS</ToolsetName>
<pCCUsed>6160000::V6.16::ARMCLANG</pCCUsed>
<pCCUsed>6190000::V6.19::ARMCLANG</pCCUsed>
<uAC6>1</uAC6>
<TargetOption>
<TargetCommonOption>
@ -186,6 +186,7 @@
<RvdsVP>0</RvdsVP>
<RvdsMve>0</RvdsMve>
<RvdsCdeCp>0</RvdsCdeCp>
<nBranchProt>0</nBranchProt>
<hadIRAM2>0</hadIRAM2>
<hadIROM2>0</hadIROM2>
<StupSel>8</StupSel>
@ -791,6 +792,7 @@
<RvdsVP>0</RvdsVP>
<RvdsMve>0</RvdsMve>
<RvdsCdeCp>0</RvdsCdeCp>
<nBranchProt>0</nBranchProt>
<hadIRAM2>0</hadIRAM2>
<hadIROM2>0</hadIROM2>
<StupSel>8</StupSel>
@ -1396,6 +1398,7 @@
<RvdsVP>0</RvdsVP>
<RvdsMve>0</RvdsMve>
<RvdsCdeCp>0</RvdsCdeCp>
<nBranchProt>0</nBranchProt>
<hadIRAM2>0</hadIRAM2>
<hadIROM2>0</hadIROM2>
<StupSel>8</StupSel>

View File

@ -1,13 +1,13 @@
##############################################################################
# Product: Makefile for QP/C++ on STM32 NUCLEO-L053R8, QV kernel, GNU-ARM
# Last Updated for Version: 7.0.1
# Date of the Last Update: 2022-05-23
# Last Updated for Version: 7.3.1
# Date of the Last Update: 2023-11-13
#
# Q u a n t u m L e a P s
# ------------------------
# Modern Embedded Software
#
# Copyright (C) 2005-2021 Quantum Leaps, LLC. All rights reserved.
# Copyright (C) 2005 Quantum Leaps, LLC. 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
@ -133,7 +133,7 @@ LIB_DIRS :=
LIBS :=
# defines
DEFINES :=
DEFINES := -DSTM32L053xx
# ARM CPU, ARCH, FPU, and Float-ABI types...
# ARM_CPU: [cortex-m0 | cortex-m0plus | cortex-m1 | cortex-m3 | cortex-m4]

View File

@ -226,7 +226,7 @@
</option>
<option>
<name>CCDefines</name>
<state></state>
<state>STM32L053xx</state>
</option>
<option>
<name>CCPreprocFile</name>
@ -1306,6 +1306,7 @@
<option>
<name>CCDefines</name>
<state>NDEBUG</state>
<state>STM32L053xx</state>
</option>
<option>
<name>CCPreprocFile</name>
@ -2385,6 +2386,7 @@
<option>
<name>CCDefines</name>
<state>Q_SPY</state>
<state>STM32L053xx</state>
</option>
<option>
<name>CCPreprocFile</name>

View File

@ -1,7 +1,7 @@
##############################################################################
# Product: Makefile for QP/C++ on NUCLEO-L053R8, QXK kernel, GNU-ARM
# Last Updated for Version: 7.3.0
# Date of the Last Update: 2023-09-08
# Last Updated for Version: 7.3.1
# Date of the Last Update: 2023-11-13
#
# Q u a n t u m L e a P s
# ------------------------
@ -137,7 +137,7 @@ LIB_DIRS :=
LIBS :=
# defines
DEFINES := \
DEFINES := -DSTM32L053xx \
-DQF_ON_CONTEXT_SW
# ARM CPU, ARCH, FPU, and Float-ABI types...

View File

@ -229,6 +229,7 @@
<state>QF_ON_CONTEXT_SW</state>
<state>QXK_USE_IRQ_HANDLER=LCD_IRQHandler</state>
<state>QXK_USE_IRQ_NUM=30</state>
<state>STM32L053xx</state>
</option>
<option>
<name>CCPreprocFile</name>
@ -1308,6 +1309,7 @@
<option>
<name>CCDefines</name>
<state>NDEBUG</state>
<state>STM32L053xx</state>
</option>
<option>
<name>CCPreprocFile</name>
@ -2388,6 +2390,7 @@
<name>CCDefines</name>
<state>Q_SPY</state>
<state>QF_ON_CONTEXT_SW</state>
<state>STM32L053xx</state>
</option>
<option>
<name>CCPreprocFile</name>

View File

@ -486,7 +486,7 @@
<bEvRecOn>1</bEvRecOn>
<bSchkAxf>0</bSchkAxf>
<bTchkAxf>0</bTchkAxf>
<nTsel>5</nTsel>
<nTsel>6</nTsel>
<sDll></sDll>
<sDllPa></sDllPa>
<sDlgDll></sDlgDll>

View File

@ -186,6 +186,7 @@
<RvdsVP>2</RvdsVP>
<RvdsMve>0</RvdsMve>
<RvdsCdeCp>0</RvdsCdeCp>
<nBranchProt>0</nBranchProt>
<hadIRAM2>0</hadIRAM2>
<hadIROM2>0</hadIROM2>
<StupSel>8</StupSel>
@ -876,6 +877,7 @@
<RvdsVP>2</RvdsVP>
<RvdsMve>0</RvdsMve>
<RvdsCdeCp>0</RvdsCdeCp>
<nBranchProt>0</nBranchProt>
<hadIRAM2>0</hadIRAM2>
<hadIROM2>0</hadIROM2>
<StupSel>8</StupSel>
@ -1390,7 +1392,7 @@
<TargetName>dpp-spy</TargetName>
<ToolsetNumber>0x4</ToolsetNumber>
<ToolsetName>ARM-ADS</ToolsetName>
<pCCUsed>6160000::V6.16::ARMCLANG</pCCUsed>
<pCCUsed>6190000::V6.19::ARMCLANG</pCCUsed>
<uAC6>1</uAC6>
<TargetOption>
<TargetCommonOption>
@ -1566,6 +1568,7 @@
<RvdsVP>2</RvdsVP>
<RvdsMve>0</RvdsMve>
<RvdsCdeCp>0</RvdsCdeCp>
<nBranchProt>0</nBranchProt>
<hadIRAM2>0</hadIRAM2>
<hadIROM2>0</hadIROM2>
<StupSel>8</StupSel>
@ -1693,7 +1696,7 @@
</ArmAdsMisc>
<Cads>
<interw>1</interw>
<Optim>2</Optim>
<Optim>7</Optim>
<oTime>0</oTime>
<SplitLS>0</SplitLS>
<OneElfS>1</OneElfS>

View File

@ -186,6 +186,7 @@
<RvdsVP>2</RvdsVP>
<RvdsMve>0</RvdsMve>
<RvdsCdeCp>0</RvdsCdeCp>
<nBranchProt>0</nBranchProt>
<hadIRAM2>0</hadIRAM2>
<hadIROM2>0</hadIROM2>
<StupSel>8</StupSel>
@ -901,6 +902,7 @@
<RvdsVP>2</RvdsVP>
<RvdsMve>0</RvdsMve>
<RvdsCdeCp>0</RvdsCdeCp>
<nBranchProt>0</nBranchProt>
<hadIRAM2>0</hadIRAM2>
<hadIROM2>0</hadIROM2>
<StupSel>8</StupSel>
@ -1440,7 +1442,7 @@
<TargetName>dpp-spy</TargetName>
<ToolsetNumber>0x4</ToolsetNumber>
<ToolsetName>ARM-ADS</ToolsetName>
<pCCUsed>6160000::V6.16::ARMCLANG</pCCUsed>
<pCCUsed>6190000::V6.19::ARMCLANG</pCCUsed>
<uAC6>1</uAC6>
<TargetOption>
<TargetCommonOption>
@ -1616,6 +1618,7 @@
<RvdsVP>2</RvdsVP>
<RvdsMve>0</RvdsMve>
<RvdsCdeCp>0</RvdsCdeCp>
<nBranchProt>0</nBranchProt>
<hadIRAM2>0</hadIRAM2>
<hadIROM2>0</hadIROM2>
<StupSel>8</StupSel>
@ -1743,7 +1746,7 @@
</ArmAdsMisc>
<Cads>
<interw>1</interw>
<Optim>2</Optim>
<Optim>7</Optim>
<oTime>0</oTime>
<SplitLS>0</SplitLS>
<OneElfS>1</OneElfS>

View File

@ -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**.
<p align="center">
<img src="./stm32-nucleo-l053r8.jpg"/><br>
<b>STM32 NUCLEO-L053R8</b>
</p>
<p align="center">
<img src="./real-time_trace.png"/><br>
<b>Logic analyzer trace after pressing the button (QK kernel)</b>
</p>
# 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.
<p align="center">
<img src="./stm32-nucleo-l053r8_conn.png"/><br>
<b>Connecting STM32 NUCLEO-L053R8 to a logic analyzer</b>
</p>
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%

View File

@ -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 <www.state-machine.com/qm>.
// 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:
// <www.state-machine.com/licensing>
// <info@state-machine.com>
//
//$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_

View File

@ -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)
}
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -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: <www.gnu.org/licenses/gpl-3.0>
//
// The terms of the closed source Quantum Leaps commercial licenses
// can be found at: <www.state-machine.com/licensing>
//
// Redistributions in source code must retain this top-level comment block.
// Plagiarizing this software to sidestep the license obligations is illegal.
//
// Contact information:
// <www.state-machine.com/licensing>
// <info@state-machine.com>
//============================================================================
#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

View File

@ -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: <www.gnu.org/licenses/gpl-3.0>
//
// The terms of the closed source Quantum Leaps commercial licenses
// can be found at: <www.state-machine.com/licensing>
//
// Redistributions in source code must retain this top-level comment block.
// Plagiarizing this software to sidestep the license obligations is illegal.
//
// Contact information:
// <www.state-machine.com/licensing>
// <info@state-machine.com>
//============================================================================
#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_

View File

@ -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. <www.state-machine.com>
//
// 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 <www.gnu.org/licenses/>.
//
// Contact information:
// <www.state-machine.com/licensing>
// <info@state-machine.com>
//============================================================================
#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
}

View File

@ -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 <www.state-machine.com/qm>.
// 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:
// <www.state-machine.com/licensing>
// <info@state-machine.com>
//
//$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} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

View File

@ -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 <www.state-machine.com/qm>.
// 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:
// <www.state-machine.com/licensing>
// <info@state-machine.com>
//
//$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} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

View File

@ -0,0 +1,287 @@
<?xml version="1.0" encoding="UTF-8"?>
<model version="5.3.0" links="0">
<framework name="qpcpp"/>
<package name="Shared" stereotype="0x01" namespace="APP::">
<attribute name="AppSignals" type="enum" visibility="0x04" properties="0x00">
<code>: QP::QSignal {
PERIODIC_SPEC_SIG = QP::Q_USER_SIG,
TIMEOUT_SIG,
SPORADIC_A_SIG,
SPORADIC_B_SIG,
REMINDER_SIG,
// ...
MAX_SIG // the last signal
};</code>
</attribute>
<class name="PeriodicSpecEvt" superclass="qpcpp::QEvt">
<attribute name="toggles" type="std::uint16_t" visibility="0x00" properties="0x00"/>
<attribute name="ticks" type="std::uint8_t" visibility="0x00" properties="0x00"/>
<operation name="PeriodicSpecEvt" type="constexpr" visibility="0x00" properties="0x02">
<parameter name="s" type="QP::QSignal"/>
<parameter name="tg" type="std::uint16_t"/>
<parameter name="ti" type="std::uint8_t"/>
<code> : QP::QEvt(s),
toggles(tg),
ticks(ti)</code>
</operation>
</class>
<class name="SporadicSpecEvt" superclass="qpcpp::QEvt">
<attribute name="toggles" type="std::uint16_t" visibility="0x00" properties="0x00"/>
<attribute name="rtc_toggles" type="std::uint16_t" visibility="0x00" properties="0x00"/>
<operation name="SporadicSpecEvt" type="constexpr" visibility="0x00" properties="0x02">
<parameter name="s" type="QP::QSignal"/>
<parameter name="tg" type="std::uint16_t"/>
<code> : QP::QEvt(s),
toggles(tg),
rtc_toggles(0U)</code>
</operation>
</class>
<attribute name="AO_Periodic1" type="QP::QActive * const" visibility="0x00" properties="0x00">
<code>{&amp;Periodic1::inst};</code>
</attribute>
<attribute name="AO_Periodic4" type="QP::QActive * const" visibility="0x00" properties="0x00">
<code>{&amp;Periodic4::inst};</code>
</attribute>
<attribute name="AO_Sporadic2" type="QP::QActive * const" visibility="0x00" properties="0x00">
<code>{&amp;Sporadic2::inst};</code>
</attribute>
<attribute name="AO_Sporadic3" type="QP::QActive * const" visibility="0x00" properties="0x00">
<code>{&amp;Sporadic3::inst};</code>
</attribute>
</package>
<package name="AOs" stereotype="0x02" namespace="APP::">
<class name="Periodic1" superclass="qpcpp::QMActive">
<attribute name="m_te" type="QP::QTimeEvt" visibility="0x02" properties="0x00"/>
<attribute name="m_toggles" type="std::uint16_t" visibility="0x02" properties="0x00"/>
<attribute name="inst" type="Periodic1" visibility="0x00" properties="0x01"/>
<operation name="Periodic1" type="" visibility="0x00" properties="0x00">
<code> : QMActive(Q_STATE_CAST(&amp;Periodic1::initial)),
m_te(this, TIMEOUT_SIG, 0U)</code>
</operation>
<statechart properties="0x02">
<initial target="../1">
<action>Q_REQUIRE_ID(300, (QP::QEvt::verify_(e))
&amp;&amp; (e-&gt;sig == PERIODIC_SPEC_SIG));
m_te.armX(Q_EVT_CAST(PeriodicSpecEvt)-&gt;ticks,
Q_EVT_CAST(PeriodicSpecEvt)-&gt;ticks);
m_toggles = Q_EVT_CAST(PeriodicSpecEvt)-&gt;toggles;</action>
<initial_glyph conn="2,4,5,1,46,4,-2">
<action box="0,-2,6,2"/>
</initial_glyph>
</initial>
<state name="active">
<tran trig="TIMEOUT">
<action brief="long-RTC">for (std::uint16_t i = m_toggles; i &gt; 0U; --i) {
BSP::d6on();
BSP::d6off();
}</action>
<tran_glyph conn="2,20,3,-1,40">
<action box="0,-2,19,2"/>
</tran_glyph>
</tran>
<tran trig="PERIODIC_SPEC">
<action>BSP::d6on();
m_te.disarm();
m_te.armX(Q_EVT_CAST(PeriodicSpecEvt)-&gt;ticks,
Q_EVT_CAST(PeriodicSpecEvt)-&gt;ticks);
m_toggles = Q_EVT_CAST(PeriodicSpecEvt)-&gt;toggles;
BSP::d6off();</action>
<tran_glyph conn="2,14,3,-1,40">
<action box="0,-2,35,2"/>
</tran_glyph>
</tran>
<state_glyph node="2,6,44,18"/>
</state>
<state_diagram size="50,28"/>
</statechart>
</class>
<class name="Periodic4" superclass="qpcpp::QMActive">
<attribute name="m_te" type="QP::QTimeEvt" visibility="0x02" properties="0x00"/>
<attribute name="m_toggles" type="std::uint16_t" visibility="0x02" properties="0x00"/>
<attribute name="inst" type="Periodic4" visibility="0x00" properties="0x01"/>
<operation name="Periodic4" type="" visibility="0x00" properties="0x00">
<code> : QMActive(Q_STATE_CAST(&amp;Periodic4::initial)),
m_te(this, TIMEOUT_SIG, 0U)</code>
</operation>
<statechart properties="0x02">
<initial target="../1">
<action>Q_REQUIRE_ID(300, QP::QEvt::verify_(e)
&amp;&amp; (e-&gt;sig == PERIODIC_SPEC_SIG));
m_te.armX(Q_EVT_CAST(PeriodicSpecEvt)-&gt;ticks,
Q_EVT_CAST(PeriodicSpecEvt)-&gt;ticks);
m_toggles = Q_EVT_CAST(PeriodicSpecEvt)-&gt;toggles;</action>
<initial_glyph conn="2,4,5,1,46,4,-2">
<action box="0,-2,6,2"/>
</initial_glyph>
</initial>
<state name="active">
<tran trig="TIMEOUT">
<action brief="long-RTC">for (std::uint16_t i = m_toggles; i &gt; 0U; --i) {
BSP::d3on();
BSP::d3off();
}</action>
<tran_glyph conn="2,20,3,-1,40">
<action box="0,-2,19,2"/>
</tran_glyph>
</tran>
<tran trig="PERIODIC_SPEC">
<action>BSP::d3on();
m_te.disarm();
m_te.armX(Q_EVT_CAST(PeriodicSpecEvt)-&gt;ticks,
Q_EVT_CAST(PeriodicSpecEvt)-&gt;ticks);
m_toggles = Q_EVT_CAST(PeriodicSpecEvt)-&gt;toggles;
BSP::d3off();</action>
<tran_glyph conn="2,14,3,-1,40">
<action box="0,-2,15,2"/>
</tran_glyph>
</tran>
<state_glyph node="2,6,44,18"/>
</state>
<state_diagram size="50,28"/>
</statechart>
</class>
<class name="Sporadic2" superclass="qpcpp::QMActive">
<attribute name="inst" type="Sporadic2" visibility="0x00" properties="0x01"/>
<operation name="Sporadic2" type="" visibility="0x00" properties="0x00">
<code> : QMActive(Q_STATE_CAST(&amp;Sporadic2::initial))</code>
</operation>
<statechart properties="0x02">
<initial target="../1">
<action>Q_UNUSED_PAR(e);</action>
<initial_glyph conn="2,4,5,1,42,4,-2">
<action box="0,-2,6,2"/>
</initial_glyph>
</initial>
<state name="active">
<tran trig="SPORADIC_A">
<action brief="post-Sporadic3">BSP::d5on();
AO_Sporadic3-&gt;POST(e, this); // Sporadic2 --&gt; Sporadic3
BSP::d5off();</action>
<tran_glyph conn="2,12,3,-1,34">
<action box="0,-2,35,3"/>
</tran_glyph>
</tran>
<tran trig="SPORADIC_B">
<action brief="post-to-Periodic1,long-RTC">BSP::d5on();
AO_Periodic1-&gt;POST(BSP::getEvtPeriodic1(1U), this);
BSP::d5off();
for (std::uint16_t i = Q_EVT_CAST(SporadicSpecEvt)-&gt;toggles;
i &gt; 0U; --i)
{
BSP::d5on();
BSP::d5off();
}</action>
<tran_glyph conn="2,16,3,-1,34">
<action box="0,-2,34,2"/>
</tran_glyph>
</tran>
<state_glyph node="2,6,40,14"/>
</state>
<state_diagram size="50,24"/>
</statechart>
</class>
<class name="Sporadic3" superclass="qpcpp::QMActive">
<attribute name="inst" type="Sporadic3" visibility="0x00" properties="0x01"/>
<operation name="Sporadic3" type="" visibility="0x00" properties="0x00">
<code> : QMActive(Q_STATE_CAST(&amp;Sporadic3::initial))</code>
</operation>
<statechart properties="0x02">
<initial target="../1">
<action>Q_UNUSED_PAR(e);</action>
<initial_glyph conn="2,4,5,1,42,4,-2">
<action box="0,-2,6,2"/>
</initial_glyph>
</initial>
<state name="active">
<tran trig="SPORADIC_A">
<action brief="post-to-Periodic4,long-RTC">BSP::d4on();
// Sporadic3 --&gt; Periodic4
AO_Periodic4-&gt;POST(BSP::getEvtPeriodic4(1U), this);
BSP::d4off();
for (std::uint16_t i = Q_EVT_CAST(SporadicSpecEvt)-&gt;toggles;
i &gt; 0U; --i)
{
BSP::d4on();
BSP::d4off();
}</action>
<tran_glyph conn="2,12,3,-1,36">
<action box="0,-2,37,2"/>
</tran_glyph>
</tran>
<state_glyph node="2,6,40,10"/>
</state>
<state_diagram size="50,18"/>
</statechart>
</class>
</package>
<directory name=".">
<file name="app.hpp">
<text>#ifndef APP_HPP_
#define APP_HPP_
$declare ${Shared}
#endif // APP_HPP_</text>
</file>
<file name="periodic1.cpp">
<text>#include &quot;qpcpp.hpp&quot; // QP/C++ real-time embedded framework
#include &quot;bsp.hpp&quot; // Board Support Package
#include &quot;app.hpp&quot; // Application interface
namespace {
Q_DEFINE_THIS_MODULE(&quot;periodic1&quot;)
}
$declare ${AOs::Periodic1}
$define ${Shared::AO_Periodic1}
$define ${AOs::Periodic1}</text>
</file>
<file name="periodic4.cpp">
<text>#include &quot;qpcpp.hpp&quot; // QP/C++ real-time embedded framework
#include &quot;bsp.hpp&quot; // Board Support Package
#include &quot;app.hpp&quot; // Application interface
namespace {
Q_DEFINE_THIS_MODULE(&quot;periodic4&quot;)
}
$declare ${AOs::Periodic4}
$define ${Shared::AO_Periodic4}
$define ${AOs::Periodic4}</text>
</file>
<file name="sporadic2.cpp">
<text>#include &quot;qpcpp.hpp&quot; // QP/C++ real-time embedded framework
#include &quot;bsp.hpp&quot; // Board Support Package
#include &quot;app.hpp&quot; // Application interface
namespace {
Q_DEFINE_THIS_MODULE(&quot;sporadic2&quot;)
}
$declare ${AOs::Sporadic2}
$define ${Shared::AO_Sporadic2}
$define ${AOs::Sporadic2}</text>
</file>
<file name="sporadic3.cpp">
<text>#include &quot;qpcpp.hpp&quot; // QP/C++ real-time embedded framework
#include &quot;bsp.hpp&quot; // Board Support Package
#include &quot;app.hpp&quot; // Application interface
namespace {
Q_DEFINE_THIS_MODULE(&quot;sporadic3&quot;)
}
$declare ${AOs::Sporadic3}
$define ${Shared::AO_Sporadic3}
$define ${AOs::Sporadic3}</text>
</file>
</directory>
</model>

View File

@ -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 <www.state-machine.com/qm>.
// 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:
// <www.state-machine.com/licensing>
// <info@state-machine.com>
//
//$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} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

View File

@ -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 <www.state-machine.com/qm>.
// 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:
// <www.state-machine.com/licensing>
// <info@state-machine.com>
//
//$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} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

View File

@ -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

View File

@ -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 <www.state-machine.com/qm>.
// 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:
// <www.state-machine.com/licensing>
// <info@state-machine.com>
//
//$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_

View File

@ -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)
}
}

View File

@ -22,7 +22,7 @@
</DaveTm>
<Target>
<TargetName>dpp-dbg</TargetName>
<TargetName>rt-dbg</TargetName>
<ToolsetNumber>0x4</ToolsetNumber>
<ToolsetName>ARM-ADS</ToolsetName>
<TargetOption>
@ -30,8 +30,8 @@
<OPTTT>
<gFlags>1</gFlags>
<BeepAtEnd>1</BeepAtEnd>
<RunSim>1</RunSim>
<RunTarget>0</RunTarget>
<RunSim>0</RunSim>
<RunTarget>1</RunTarget>
<RunAbUc>0</RunAbUc>
</OPTTT>
<OPTHX>
@ -89,7 +89,7 @@
<sRfunc>1</sRfunc>
<sRbox>1</sRbox>
<tLdApp>1</tLdApp>
<tGomain>0</tGomain>
<tGomain>1</tGomain>
<tRbreak>1</tRbreak>
<tRwatch>1</tRwatch>
<tRmem>1</tRmem>
@ -117,26 +117,21 @@
<pMon>STLink\ST-LINKIII-KEIL_SWO.dll</pMon>
</DebugOpt>
<TargetDriverDllRegistry>
<SetRegEntry>
<Number>0</Number>
<Key>UL2CM3</Key>
<Name>UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32L0xx_64 -FS08000000 -FL010000 -FP0($$Device:STM32L053R8Tx$CMSIS\Flash\STM32L0xx_64.FLM))</Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
<Key>ST-LINKIII-KEIL_SWO</Key>
<Name>-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)</Name>
<Name>-U066CFF484951775087074312 -O8431 -SF10000 -C0 -A0 -I0 -HNlocalhost -HP7184 -P2 -N00("ARM CoreSight SW-DP (ARM Core") -D00(0BC11477) -L00(0) -TO131090 -TC10000000 -TT10000000 -TP21 -TDS8004 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC800 -FN1 -FF0STM32L0xx_64.FLM -FS08000000 -FL010000 -FP0($$Device:STM32L053R8Tx$CMSIS\Flash\STM32L0xx_64.FLM) -WA0 -WE0 -WVCE4 -WS2710 -WM0 -WP2</Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
<Key>DLGUARM</Key>
<Name>(105=-1,-1,-1,-1,0)</Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
<Key>UL2CM3</Key>
<Name>UL2CM3(-O207 -S0 -C0 -FO7 -FN1 -FC1000 -FD20000000 -FF0STM32L0xx_64 -FL010000 -FS08000000 -FP0($$Device:STM32L053R8Tx$CMSIS\Flash\STM32L0xx_64.FLM)</Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
<Key>lmidk-agdi</Key>
<Name>-U0E2006F4 -O4622 -S4 -FO61</Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
<Key>ARMRTXEVENTFLAGS</Key>
@ -145,7 +140,7 @@
<SetRegEntry>
<Number>0</Number>
<Key>DLGTARM</Key>
<Name>(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)</Name>
<Name>(1010=979,559,1390,1061,0)(1007=2082,245,2289,466,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)</Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
@ -153,19 +148,57 @@
<Name></Name>
</SetRegEntry>
</TargetDriverDllRegistry>
<Breakpoint/>
<Breakpoint>
<Bp>
<Number>0</Number>
<Type>0</Type>
<LineNumber>65</LineNumber>
<EnabledFlag>1</EnabledFlag>
<Address>134218732</Address>
<ByteObject>0</ByteObject>
<HtxType>0</HtxType>
<ManyObjects>0</ManyObjects>
<SizeOfObject>0</SizeOfObject>
<BreakByAccess>0</BreakByAccess>
<BreakIfRCount>1</BreakIfRCount>
<Filename>..\bsp.cpp</Filename>
<ExecCommand></ExecCommand>
<Expression>\\rt_qv_tt\../bsp.cpp\65</Expression>
</Bp>
<Bp>
<Number>1</Number>
<Type>0</Type>
<LineNumber>112</LineNumber>
<EnabledFlag>1</EnabledFlag>
<Address>134221064</Address>
<ByteObject>0</ByteObject>
<HtxType>0</HtxType>
<ManyObjects>0</ManyObjects>
<SizeOfObject>0</SizeOfObject>
<BreakByAccess>0</BreakByAccess>
<BreakIfRCount>1</BreakIfRCount>
<Filename>..\..\..\..\..\src\qf\qf_actq.cpp</Filename>
<ExecCommand></ExecCommand>
<Expression>\\rt_qv_tt\../../../../../src/qf/qf_actq.cpp\112</Expression>
</Bp>
</Breakpoint>
<WatchWindow1>
<Ww>
<count>0</count>
<WinNumber>1</WinNumber>
<ItemText>OSTCBPrioTbl</ItemText>
<ItemText>QK_attr_</ItemText>
</Ww>
<Ww>
<count>1</count>
<WinNumber>1</WinNumber>
<ItemText>QF_readySet_</ItemText>
</Ww>
</WatchWindow1>
<MemoryWindow1>
<Mm>
<WinNumber>1</WinNumber>
<SubType>2</SubType>
<ItemText>0x20000200</ItemText>
<ItemText>0x2000020C</ItemText>
<AccSizeX>0</AccSizeX>
</Mm>
</MemoryWindow1>
@ -230,7 +263,7 @@
</Target>
<Target>
<TargetName>dpp-rel</TargetName>
<TargetName>rt-rel</TargetName>
<ToolsetNumber>0x4</ToolsetNumber>
<ToolsetName>ARM-ADS</ToolsetName>
<TargetOption>
@ -238,8 +271,8 @@
<OPTTT>
<gFlags>1</gFlags>
<BeepAtEnd>1</BeepAtEnd>
<RunSim>1</RunSim>
<RunTarget>0</RunTarget>
<RunSim>0</RunSim>
<RunTarget>1</RunTarget>
<RunAbUc>0</RunAbUc>
</OPTTT>
<OPTHX>
@ -297,7 +330,7 @@
<sRfunc>1</sRfunc>
<sRbox>1</sRbox>
<tLdApp>1</tLdApp>
<tGomain>0</tGomain>
<tGomain>1</tGomain>
<tRbreak>1</tRbreak>
<tRwatch>1</tRwatch>
<tRmem>1</tRmem>
@ -311,7 +344,7 @@
<bEvRecOn>1</bEvRecOn>
<bSchkAxf>0</bSchkAxf>
<bTchkAxf>0</bTchkAxf>
<nTsel>5</nTsel>
<nTsel>6</nTsel>
<sDll></sDll>
<sDllPa></sDllPa>
<sDlgDll></sDlgDll>
@ -325,26 +358,21 @@
<pMon>STLink\ST-LINKIII-KEIL_SWO.dll</pMon>
</DebugOpt>
<TargetDriverDllRegistry>
<SetRegEntry>
<Number>0</Number>
<Key>UL2CM3</Key>
<Name>UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32L0xx_64 -FS08000000 -FL010000 -FP0($$Device:STM32L053R8Tx$CMSIS\Flash\STM32L0xx_64.FLM))</Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
<Key>ST-LINKIII-KEIL_SWO</Key>
<Name>-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)</Name>
<Name>-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)</Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
<Key>DLGUARM</Key>
<Name>(105=-1,-1,-1,-1,0)</Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
<Key>UL2CM3</Key>
<Name>-O207 -S0 -C0 -FO7 -FN1 -FC1000 -FD20000000 -FF0STM32L0xx_64 -FL010000 -FS08000000 -FP0($$Device:STM32L053R8Tx$CMSIS\Flash\STM32L0xx_64.FLM)</Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
<Key>lmidk-agdi</Key>
<Name>-U0E10259B -O4622 -S4 -FO61</Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
<Key>ARMRTXEVENTFLAGS</Key>
@ -353,7 +381,7 @@
<SetRegEntry>
<Number>0</Number>
<Key>DLGTARM</Key>
<Name>(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)</Name>
<Name>(1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)</Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
@ -422,7 +450,7 @@
<pMultCmdsp></pMultCmdsp>
<DebugDescription>
<Enable>1</Enable>
<EnableFlashSeq>0</EnableFlashSeq>
<EnableFlashSeq>1</EnableFlashSeq>
<EnableLog>0</EnableLog>
<Protocol>2</Protocol>
<DbgClock>10000000</DbgClock>
@ -431,7 +459,7 @@
</Target>
<Target>
<TargetName>dpp-spy</TargetName>
<TargetName>rt-spy</TargetName>
<ToolsetNumber>0x4</ToolsetNumber>
<ToolsetName>ARM-ADS</ToolsetName>
<TargetOption>
@ -498,7 +526,7 @@
<sRfunc>1</sRfunc>
<sRbox>1</sRbox>
<tLdApp>1</tLdApp>
<tGomain>0</tGomain>
<tGomain>1</tGomain>
<tRbreak>1</tRbreak>
<tRwatch>1</tRwatch>
<tRmem>1</tRmem>
@ -526,26 +554,21 @@
<pMon>STLink\ST-LINKIII-KEIL_SWO.dll</pMon>
</DebugOpt>
<TargetDriverDllRegistry>
<SetRegEntry>
<Number>0</Number>
<Key>UL2CM3</Key>
<Name>-O207 -S0 -C0 -FO7 -FN1 -FC1000 -FD20000000 -FF0STM32L0xx_64 -FL010000 -FS08000000 -FP0($$Device:STM32L053R8Tx$CMSIS\Flash\STM32L0xx_64.FLM)</Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
<Key>ST-LINKIII-KEIL_SWO</Key>
<Name>-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)</Name>
<Name>-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)</Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
<Key>DLGUARM</Key>
<Name>(105=-1,-1,-1,-1,0)</Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
<Key>UL2CM3</Key>
<Name>UL2CM3(-O207 -S0 -C0 -FO7 -FN1 -FC1000 -FD20000000 -FF0STM32L0xx_64 -FL010000 -FS08000000 -FP0($$Device:STM32L053R8Tx$CMSIS\Flash\STM32L0xx_64.FLM)</Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
<Key>lmidk-agdi</Key>
<Name>-U0E2006F4 -O4622 -S4 -FO61</Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
<Key>ARMRTXEVENTFLAGS</Key>
@ -554,7 +577,7 @@
<SetRegEntry>
<Number>0</Number>
<Key>DLGTARM</Key>
<Name>(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)</Name>
<Name>(1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)</Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
@ -632,7 +655,7 @@
</Target>
<Group>
<GroupName>Applicatioin</GroupName>
<GroupName>Application</GroupName>
<tvExp>1</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel>
@ -644,26 +667,14 @@
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\app_cfg.h</PathWithFileName>
<FilenameWithoutPath>app_cfg.h</FilenameWithoutPath>
<PathWithFileName>..\app.hpp</PathWithFileName>
<FilenameWithoutPath>app.hpp</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>1</GroupNumber>
<FileNumber>2</FileNumber>
<FileType>5</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\os_cfg.h</PathWithFileName>
<FilenameWithoutPath>os_cfg.h</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>1</GroupNumber>
<FileNumber>3</FileNumber>
<FileType>8</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -675,7 +686,7 @@
</File>
<File>
<GroupNumber>1</GroupNumber>
<FileNumber>4</FileNumber>
<FileNumber>3</FileNumber>
<FileType>5</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -687,19 +698,7 @@
</File>
<File>
<GroupNumber>1</GroupNumber>
<FileNumber>5</FileNumber>
<FileType>5</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\dpp.hpp</PathWithFileName>
<FilenameWithoutPath>dpp.hpp</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>1</GroupNumber>
<FileNumber>6</FileNumber>
<FileNumber>4</FileNumber>
<FileType>8</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -709,6 +708,30 @@
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>1</GroupNumber>
<FileNumber>5</FileNumber>
<FileType>8</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\periodic1.cpp</PathWithFileName>
<FilenameWithoutPath>periodic1.cpp</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>1</GroupNumber>
<FileNumber>6</FileNumber>
<FileType>8</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\periodic4.cpp</PathWithFileName>
<FilenameWithoutPath>periodic4.cpp</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>1</GroupNumber>
<FileNumber>7</FileNumber>
@ -716,8 +739,8 @@
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\philo.cpp</PathWithFileName>
<FilenameWithoutPath>philo.cpp</FilenameWithoutPath>
<PathWithFileName>..\sporadic2.cpp</PathWithFileName>
<FilenameWithoutPath>sporadic2.cpp</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
@ -728,8 +751,20 @@
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\table.cpp</PathWithFileName>
<FilenameWithoutPath>table.cpp</FilenameWithoutPath>
<PathWithFileName>..\sporadic3.cpp</PathWithFileName>
<FilenameWithoutPath>sporadic3.cpp</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>1</GroupNumber>
<FileNumber>9</FileNumber>
<FileType>8</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\ttsched.cpp</PathWithFileName>
<FilenameWithoutPath>ttsched.cpp</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
@ -737,13 +772,13 @@
<Group>
<GroupName>nucleo-l053r8</GroupName>
<tvExp>0</tvExp>
<tvExp>1</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel>
<RteFlg>0</RteFlg>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>9</FileNumber>
<FileNumber>10</FileNumber>
<FileType>5</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -755,7 +790,7 @@
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>10</FileNumber>
<FileNumber>11</FileNumber>
<FileType>5</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -767,7 +802,7 @@
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>11</FileNumber>
<FileNumber>12</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -779,7 +814,7 @@
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>12</FileNumber>
<FileNumber>13</FileNumber>
<FileType>5</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -791,7 +826,7 @@
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>13</FileNumber>
<FileNumber>14</FileNumber>
<FileType>2</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -811,7 +846,7 @@
<RteFlg>0</RteFlg>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>14</FileNumber>
<FileNumber>15</FileNumber>
<FileType>8</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -823,7 +858,7 @@
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>15</FileNumber>
<FileNumber>16</FileNumber>
<FileType>8</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -835,7 +870,7 @@
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>16</FileNumber>
<FileNumber>17</FileNumber>
<FileType>8</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -847,7 +882,19 @@
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>17</FileNumber>
<FileNumber>18</FileNumber>
<FileType>8</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\..\..\..\..\src\qf\qf_actq.cpp</PathWithFileName>
<FilenameWithoutPath>qf_actq.cpp</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>19</FileNumber>
<FileType>8</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -859,7 +906,7 @@
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>18</FileNumber>
<FileNumber>20</FileNumber>
<FileType>8</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -871,7 +918,7 @@
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>19</FileNumber>
<FileNumber>21</FileNumber>
<FileType>8</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -883,7 +930,7 @@
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>20</FileNumber>
<FileNumber>22</FileNumber>
<FileType>8</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -895,7 +942,7 @@
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>21</FileNumber>
<FileNumber>23</FileNumber>
<FileType>8</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -907,7 +954,7 @@
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>22</FileNumber>
<FileNumber>24</FileNumber>
<FileType>8</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -919,7 +966,7 @@
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>23</FileNumber>
<FileNumber>25</FileNumber>
<FileType>8</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -931,7 +978,7 @@
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>24</FileNumber>
<FileNumber>26</FileNumber>
<FileType>8</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -941,6 +988,18 @@
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>27</FileNumber>
<FileType>8</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\..\..\..\..\src\qv\qv.cpp</PathWithFileName>
<FilenameWithoutPath>qv.cpp</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
</Group>
<Group>
@ -951,13 +1010,37 @@
<RteFlg>0</RteFlg>
<File>
<GroupNumber>4</GroupNumber>
<FileNumber>25</FileNumber>
<FileNumber>28</FileNumber>
<FileType>8</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\..\..\..\..\ports\uc-os2\qf_port.cpp</PathWithFileName>
<FilenameWithoutPath>qf_port.cpp</FilenameWithoutPath>
<PathWithFileName>..\..\..\..\..\ports\arm-cm\qv\armclang\qv_port.cpp</PathWithFileName>
<FilenameWithoutPath>qv_port.cpp</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>4</GroupNumber>
<FileNumber>29</FileNumber>
<FileType>5</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\..\..\..\..\ports\arm-cm\qv\armclang\qp_port.hpp</PathWithFileName>
<FilenameWithoutPath>qp_port.hpp</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>4</GroupNumber>
<FileNumber>30</FileNumber>
<FileType>5</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\..\..\..\..\ports\arm-cm\qv\armclang\qs_port.hpp</PathWithFileName>
<FilenameWithoutPath>qs_port.hpp</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
@ -971,7 +1054,7 @@
<RteFlg>0</RteFlg>
<File>
<GroupNumber>5</GroupNumber>
<FileNumber>26</FileNumber>
<FileNumber>31</FileNumber>
<FileType>8</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -983,31 +1066,7 @@
</File>
<File>
<GroupNumber>5</GroupNumber>
<FileNumber>27</FileNumber>
<FileType>8</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\..\..\..\..\src\qs\qs_64bit.cpp</PathWithFileName>
<FilenameWithoutPath>qs_64bit.cpp</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>5</GroupNumber>
<FileNumber>28</FileNumber>
<FileType>8</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\..\..\..\..\src\qs\qs_fp.cpp</PathWithFileName>
<FilenameWithoutPath>qs_fp.cpp</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>5</GroupNumber>
<FileNumber>29</FileNumber>
<FileNumber>32</FileNumber>
<FileType>8</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1019,7 +1078,7 @@
</File>
<File>
<GroupNumber>5</GroupNumber>
<FileNumber>30</FileNumber>
<FileNumber>33</FileNumber>
<FileType>8</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1031,188 +1090,4 @@
</File>
</Group>
<Group>
<GroupName>ucos-ii</GroupName>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel>
<RteFlg>0</RteFlg>
<File>
<GroupNumber>6</GroupNumber>
<FileNumber>31</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\..\..\..\..\3rd_party\uC-OS2\Source\os_core.c</PathWithFileName>
<FilenameWithoutPath>os_core.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>6</GroupNumber>
<FileNumber>32</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\..\..\..\..\3rd_party\uC-OS2\Source\os_task.c</PathWithFileName>
<FilenameWithoutPath>os_task.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>6</GroupNumber>
<FileNumber>33</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\..\..\..\..\3rd_party\uC-OS2\Source\os_flag.c</PathWithFileName>
<FilenameWithoutPath>os_flag.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>6</GroupNumber>
<FileNumber>34</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\..\..\..\..\3rd_party\uC-OS2\Source\os_mbox.c</PathWithFileName>
<FilenameWithoutPath>os_mbox.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>6</GroupNumber>
<FileNumber>35</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\..\..\..\..\3rd_party\uC-OS2\Source\os_mem.c</PathWithFileName>
<FilenameWithoutPath>os_mem.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>6</GroupNumber>
<FileNumber>36</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\..\..\..\..\3rd_party\uC-OS2\Source\os_mutex.c</PathWithFileName>
<FilenameWithoutPath>os_mutex.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>6</GroupNumber>
<FileNumber>37</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\..\..\..\..\3rd_party\uC-OS2\Source\os_q.c</PathWithFileName>
<FilenameWithoutPath>os_q.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>6</GroupNumber>
<FileNumber>38</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\..\..\..\..\3rd_party\uC-OS2\Source\os_sem.c</PathWithFileName>
<FilenameWithoutPath>os_sem.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>6</GroupNumber>
<FileNumber>39</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\..\..\..\..\3rd_party\uC-OS2\Source\os_time.c</PathWithFileName>
<FilenameWithoutPath>os_time.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>6</GroupNumber>
<FileNumber>40</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\..\..\..\..\3rd_party\uC-OS2\Source\os_tmr.c</PathWithFileName>
<FilenameWithoutPath>os_tmr.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
</Group>
<Group>
<GroupName>ucos-ii_port</GroupName>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel>
<RteFlg>0</RteFlg>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>41</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\..\..\..\..\3rd_party\uC-OS2\Ports\ARM-Cortex-M\ARMv6-M\os_cpu_c.c</PathWithFileName>
<FilenameWithoutPath>os_cpu_c.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>42</FileNumber>
<FileType>5</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\..\..\..\..\3rd_party\uC-OS2\Ports\ARM-Cortex-M\ARMv6-M\ARM\os_cpu.h</PathWithFileName>
<FilenameWithoutPath>os_cpu.h</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>43</FileNumber>
<FileType>2</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\..\..\..\..\3rd_party\uC-OS2\Ports\ARM-Cortex-M\ARMv6-M\ARM\os_cpu_a.asm</PathWithFileName>
<FilenameWithoutPath>os_cpu_a.asm</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>44</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\..\..\..\..\3rd_party\uC-OS2\Ports\ARM-Cortex-M\ARMv6-M\ARM\os_dbg.c</PathWithFileName>
<FilenameWithoutPath>os_dbg.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
</Group>
</ProjectOpt>

View File

@ -7,10 +7,10 @@
<Targets>
<Target>
<TargetName>dpp-dbg</TargetName>
<TargetName>rt-dbg</TargetName>
<ToolsetNumber>0x4</ToolsetNumber>
<ToolsetName>ARM-ADS</ToolsetName>
<pCCUsed>6160000::V6.16::ARMCLANG</pCCUsed>
<pCCUsed>6190000::V6.19::ARMCLANG</pCCUsed>
<uAC6>1</uAC6>
<TargetOption>
<TargetCommonOption>
@ -21,9 +21,9 @@
<Cpu>IRAM(0x20000000,0x00002000) IROM(0x08000000,0x00010000) CPUTYPE("Cortex-M0+") CLOCK(12000000) ELITTLE</Cpu>
<FlashUtilSpec></FlashUtilSpec>
<StartupFile></StartupFile>
<FlashDriverDll>UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32L0xx_64 -FS08000000 -FL010000 -FP0($$Device:STM32L053R8Tx$CMSIS\Flash\STM32L0xx_64.FLM))</FlashDriverDll>
<FlashDriverDll>UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32L0xx_64 -FS08000000 -FL010000 -FP0($$Device:STM32L053R8Tx$Flash\STM32L0xx_64.FLM))</FlashDriverDll>
<DeviceId>0</DeviceId>
<RegisterFile>$$Device:STM32L053R8Tx$Drivers\CMSIS\Device\ST\STM32L0xx\Include\stm32l0xx.h</RegisterFile>
<RegisterFile>$$Device:STM32L053R8Tx$Device\Include\stm32l0xx.h</RegisterFile>
<MemoryEnv></MemoryEnv>
<Cmp></Cmp>
<Asm></Asm>
@ -33,7 +33,7 @@
<SLE66CMisc></SLE66CMisc>
<SLE66AMisc></SLE66AMisc>
<SLE66LinkerMisc></SLE66LinkerMisc>
<SFDFile>$$Device:STM32L053R8Tx$CMSIS\SVD\STM32L053x.svd</SFDFile>
<SFDFile>$$Device:STM32L053R8Tx$SVD\STM32L053x.svd</SFDFile>
<bCustSvd>0</bCustSvd>
<UseEnv>0</UseEnv>
<BinPath></BinPath>
@ -49,7 +49,7 @@
<InvalidFlash>1</InvalidFlash>
</TargetStatus>
<OutputDirectory>.\dbg\</OutputDirectory>
<OutputName>dpp</OutputName>
<OutputName>rt-qv-tt</OutputName>
<CreateExecutable>1</CreateExecutable>
<CreateLib>0</CreateLib>
<CreateHexFile>0</CreateHexFile>
@ -82,14 +82,14 @@
<AfterMake>
<RunUserProg1>1</RunUserProg1>
<RunUserProg2>0</RunUserProg2>
<UserProg1Name>fromelf --bin --output .\dbg\dpp.bin .\dbg\dpp.axf</UserProg1Name>
<UserProg1Name>fromelf --bin --output .\dbg\rt-qv-tt.bin .\dbg\rt-qv-tt.axf</UserProg1Name>
<UserProg2Name></UserProg2Name>
<UserProg1Dos16Mode>0</UserProg1Dos16Mode>
<UserProg2Dos16Mode>0</UserProg2Dos16Mode>
<nStopA1X>0</nStopA1X>
<nStopA2X>0</nStopA2X>
</AfterMake>
<SelectedForBatchBuild>1</SelectedForBatchBuild>
<SelectedForBatchBuild>0</SelectedForBatchBuild>
<SVCSIdString></SVCSIdString>
</TargetCommonOption>
<CommonProperty>
@ -110,11 +110,11 @@
</CommonProperty>
<DllOption>
<SimDllName>SARMCM3.DLL</SimDllName>
<SimDllArguments> -REMAP-MPU </SimDllArguments>
<SimDllArguments> -REMAP </SimDllArguments>
<SimDlgDll>DARMCM1.DLL</SimDlgDll>
<SimDlgDllArguments>-pCM0+</SimDlgDllArguments>
<TargetDllName>SARMCM3.DLL</TargetDllName>
<TargetDllArguments>-MPU </TargetDllArguments>
<TargetDllArguments> </TargetDllArguments>
<TargetDlgDll>TARMCM1.DLL</TargetDlgDll>
<TargetDlgDllArguments>-pCM0+</TargetDlgDllArguments>
</DllOption>
@ -134,7 +134,7 @@
<RunIndependent>0</RunIndependent>
<UpdateFlashBeforeDebugging>1</UpdateFlashBeforeDebugging>
<Capability>1</Capability>
<DriverSelection>4097</DriverSelection>
<DriverSelection>4096</DriverSelection>
</Flash1>
<bUseTDR>1</bUseTDR>
<Flash2>BIN\UL2CM3.DLL</Flash2>
@ -186,6 +186,7 @@
<RvdsVP>0</RvdsVP>
<RvdsMve>0</RvdsMve>
<RvdsCdeCp>0</RvdsCdeCp>
<nBranchProt>0</nBranchProt>
<hadIRAM2>0</hadIRAM2>
<hadIROM2>0</hadIROM2>
<StupSel>8</StupSel>
@ -313,7 +314,7 @@
</ArmAdsMisc>
<Cads>
<interw>0</interw>
<Optim>2</Optim>
<Optim>5</Optim>
<oTime>0</oTime>
<SplitLS>0</SplitLS>
<OneElfS>1</OneElfS>
@ -324,8 +325,8 @@
<Rwpi>0</Rwpi>
<wLevel>3</wLevel>
<uThumb>0</uThumb>
<uSurpInc>1</uSurpInc>
<uC99>1</uC99>
<uSurpInc>0</uSurpInc>
<uC99>0</uC99>
<uGnu>0</uGnu>
<useXO>0</useXO>
<v6Lang>3</v6Lang>
@ -337,9 +338,9 @@
<v6Rtti>0</v6Rtti>
<VariousControls>
<MiscControls></MiscControls>
<Define></Define>
<Define>USE_SCHED_DISABLE</Define>
<Undefine></Undefine>
<IncludePath>..;..\..\..\..\..\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</IncludePath>
<IncludePath>..;..\..\..\..\..\include;..\..\..\..\..\ports\arm-cm\qv\armclang;..\..\..\..\..\3rd_party\CMSIS\Include;..\..\..\..\..\3rd_party\nucleo-l053r8</IncludePath>
</VariousControls>
</Cads>
<Aads>
@ -361,7 +362,7 @@
</VariousControls>
</Aads>
<LDads>
<umfTarg>1</umfTarg>
<umfTarg>0</umfTarg>
<Ropi>0</Ropi>
<Rwpi>0</Rwpi>
<noStLib>0</noStLib>
@ -370,7 +371,7 @@
<TextAddressRange>0x00000000</TextAddressRange>
<DataAddressRange>0x20000000</DataAddressRange>
<pXoBase></pXoBase>
<ScatterFile></ScatterFile>
<ScatterFile>rt-qv-tt.sct</ScatterFile>
<IncludeLibs></IncludeLibs>
<IncludeLibsPath></IncludeLibsPath>
<Misc>--entry Reset_Handler</Misc>
@ -381,17 +382,12 @@
</TargetOption>
<Groups>
<Group>
<GroupName>Applicatioin</GroupName>
<GroupName>Application</GroupName>
<Files>
<File>
<FileName>app_cfg.h</FileName>
<FileName>app.hpp</FileName>
<FileType>5</FileType>
<FilePath>..\app_cfg.h</FilePath>
</File>
<File>
<FileName>os_cfg.h</FileName>
<FileType>5</FileType>
<FilePath>..\os_cfg.h</FilePath>
<FilePath>..\app.hpp</FilePath>
</File>
<File>
<FileName>bsp.cpp</FileName>
@ -403,25 +399,35 @@
<FileType>5</FileType>
<FilePath>..\bsp.hpp</FilePath>
</File>
<File>
<FileName>dpp.hpp</FileName>
<FileType>5</FileType>
<FilePath>..\dpp.hpp</FilePath>
</File>
<File>
<FileName>main.cpp</FileName>
<FileType>8</FileType>
<FilePath>..\main.cpp</FilePath>
</File>
<File>
<FileName>philo.cpp</FileName>
<FileName>periodic1.cpp</FileName>
<FileType>8</FileType>
<FilePath>..\philo.cpp</FilePath>
<FilePath>..\periodic1.cpp</FilePath>
</File>
<File>
<FileName>table.cpp</FileName>
<FileName>periodic4.cpp</FileName>
<FileType>8</FileType>
<FilePath>..\table.cpp</FilePath>
<FilePath>..\periodic4.cpp</FilePath>
</File>
<File>
<FileName>sporadic2.cpp</FileName>
<FileType>8</FileType>
<FilePath>..\sporadic2.cpp</FilePath>
</File>
<File>
<FileName>sporadic3.cpp</FileName>
<FileType>8</FileType>
<FilePath>..\sporadic3.cpp</FilePath>
</File>
<File>
<FileName>ttsched.cpp</FileName>
<FileType>8</FileType>
<FilePath>..\ttsched.cpp</FilePath>
</File>
</Files>
</Group>
@ -473,6 +479,11 @@
<FileType>8</FileType>
<FilePath>..\..\..\..\..\src\qf\qf_act.cpp</FilePath>
</File>
<File>
<FileName>qf_actq.cpp</FileName>
<FileType>8</FileType>
<FilePath>..\..\..\..\..\src\qf\qf_actq.cpp</FilePath>
</File>
<File>
<FileName>qf_defer.cpp</FileName>
<FileType>8</FileType>
@ -513,15 +524,30 @@
<FileType>8</FileType>
<FilePath>..\..\..\..\..\src\qf\qf_time.cpp</FilePath>
</File>
<File>
<FileName>qv.cpp</FileName>
<FileType>8</FileType>
<FilePath>..\..\..\..\..\src\qv\qv.cpp</FilePath>
</File>
</Files>
</Group>
<Group>
<GroupName>QP_port</GroupName>
<Files>
<File>
<FileName>qf_port.cpp</FileName>
<FileName>qv_port.cpp</FileName>
<FileType>8</FileType>
<FilePath>..\..\..\..\..\ports\uc-os2\qf_port.cpp</FilePath>
<FilePath>..\..\..\..\..\ports\arm-cm\qv\armclang\qv_port.cpp</FilePath>
</File>
<File>
<FileName>qp_port.hpp</FileName>
<FileType>5</FileType>
<FilePath>..\..\..\..\..\ports\arm-cm\qv\armclang\qp_port.hpp</FilePath>
</File>
<File>
<FileName>qs_port.hpp</FileName>
<FileType>5</FileType>
<FilePath>..\..\..\..\..\ports\arm-cm\qv\armclang\qs_port.hpp</FilePath>
</File>
</Files>
</Group>
@ -602,16 +628,6 @@
<FileType>8</FileType>
<FilePath>..\..\..\..\..\src\qs\qs.cpp</FilePath>
</File>
<File>
<FileName>qs_64bit.cpp</FileName>
<FileType>8</FileType>
<FilePath>..\..\..\..\..\src\qs\qs_64bit.cpp</FilePath>
</File>
<File>
<FileName>qs_fp.cpp</FileName>
<FileType>8</FileType>
<FilePath>..\..\..\..\..\src\qs\qs_fp.cpp</FilePath>
</File>
<File>
<FileName>qs_rx.cpp</FileName>
<FileType>8</FileType>
@ -624,93 +640,13 @@
</File>
</Files>
</Group>
<Group>
<GroupName>ucos-ii</GroupName>
<Files>
<File>
<FileName>os_core.c</FileName>
<FileType>1</FileType>
<FilePath>..\..\..\..\..\3rd_party\uC-OS2\Source\os_core.c</FilePath>
</File>
<File>
<FileName>os_task.c</FileName>
<FileType>1</FileType>
<FilePath>..\..\..\..\..\3rd_party\uC-OS2\Source\os_task.c</FilePath>
</File>
<File>
<FileName>os_flag.c</FileName>
<FileType>1</FileType>
<FilePath>..\..\..\..\..\3rd_party\uC-OS2\Source\os_flag.c</FilePath>
</File>
<File>
<FileName>os_mbox.c</FileName>
<FileType>1</FileType>
<FilePath>..\..\..\..\..\3rd_party\uC-OS2\Source\os_mbox.c</FilePath>
</File>
<File>
<FileName>os_mem.c</FileName>
<FileType>1</FileType>
<FilePath>..\..\..\..\..\3rd_party\uC-OS2\Source\os_mem.c</FilePath>
</File>
<File>
<FileName>os_mutex.c</FileName>
<FileType>1</FileType>
<FilePath>..\..\..\..\..\3rd_party\uC-OS2\Source\os_mutex.c</FilePath>
</File>
<File>
<FileName>os_q.c</FileName>
<FileType>1</FileType>
<FilePath>..\..\..\..\..\3rd_party\uC-OS2\Source\os_q.c</FilePath>
</File>
<File>
<FileName>os_sem.c</FileName>
<FileType>1</FileType>
<FilePath>..\..\..\..\..\3rd_party\uC-OS2\Source\os_sem.c</FilePath>
</File>
<File>
<FileName>os_time.c</FileName>
<FileType>1</FileType>
<FilePath>..\..\..\..\..\3rd_party\uC-OS2\Source\os_time.c</FilePath>
</File>
<File>
<FileName>os_tmr.c</FileName>
<FileType>1</FileType>
<FilePath>..\..\..\..\..\3rd_party\uC-OS2\Source\os_tmr.c</FilePath>
</File>
</Files>
</Group>
<Group>
<GroupName>ucos-ii_port</GroupName>
<Files>
<File>
<FileName>os_cpu_c.c</FileName>
<FileType>1</FileType>
<FilePath>..\..\..\..\..\3rd_party\uC-OS2\Ports\ARM-Cortex-M\ARMv6-M\os_cpu_c.c</FilePath>
</File>
<File>
<FileName>os_cpu.h</FileName>
<FileType>5</FileType>
<FilePath>..\..\..\..\..\3rd_party\uC-OS2\Ports\ARM-Cortex-M\ARMv6-M\ARM\os_cpu.h</FilePath>
</File>
<File>
<FileName>os_cpu_a.asm</FileName>
<FileType>2</FileType>
<FilePath>..\..\..\..\..\3rd_party\uC-OS2\Ports\ARM-Cortex-M\ARMv6-M\ARM\os_cpu_a.asm</FilePath>
</File>
<File>
<FileName>os_dbg.c</FileName>
<FileType>1</FileType>
<FilePath>..\..\..\..\..\3rd_party\uC-OS2\Ports\ARM-Cortex-M\ARMv6-M\ARM\os_dbg.c</FilePath>
</File>
</Files>
</Group>
</Groups>
</Target>
<Target>
<TargetName>dpp-rel</TargetName>
<TargetName>rt-rel</TargetName>
<ToolsetNumber>0x4</ToolsetNumber>
<ToolsetName>ARM-ADS</ToolsetName>
<pCCUsed>6130001::V6.13.1::.\ARMCLANG</pCCUsed>
<pCCUsed>6160000::V6.16::ARMCLANG</pCCUsed>
<uAC6>1</uAC6>
<TargetOption>
<TargetCommonOption>
@ -721,9 +657,9 @@
<Cpu>IRAM(0x20000000,0x00002000) IROM(0x08000000,0x00010000) CPUTYPE("Cortex-M0+") CLOCK(12000000) ELITTLE</Cpu>
<FlashUtilSpec></FlashUtilSpec>
<StartupFile></StartupFile>
<FlashDriverDll>UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32L0xx_64 -FS08000000 -FL010000 -FP0($$Device:STM32L053R8Tx$CMSIS\Flash\STM32L0xx_64.FLM))</FlashDriverDll>
<FlashDriverDll>UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32L0xx_64 -FS08000000 -FL010000 -FP0($$Device:STM32L053R8Tx$Flash\STM32L0xx_64.FLM))</FlashDriverDll>
<DeviceId>0</DeviceId>
<RegisterFile>$$Device:STM32L053R8Tx$Drivers\CMSIS\Device\ST\STM32L0xx\Include\stm32l0xx.h</RegisterFile>
<RegisterFile>$$Device:STM32L053R8Tx$Device\Include\stm32l0xx.h</RegisterFile>
<MemoryEnv></MemoryEnv>
<Cmp></Cmp>
<Asm></Asm>
@ -733,7 +669,7 @@
<SLE66CMisc></SLE66CMisc>
<SLE66AMisc></SLE66AMisc>
<SLE66LinkerMisc></SLE66LinkerMisc>
<SFDFile>$$Device:STM32L053R8Tx$CMSIS\SVD\STM32L053x.svd</SFDFile>
<SFDFile>$$Device:STM32L053R8Tx$SVD\STM32L053x.svd</SFDFile>
<bCustSvd>0</bCustSvd>
<UseEnv>0</UseEnv>
<BinPath></BinPath>
@ -749,7 +685,7 @@
<InvalidFlash>1</InvalidFlash>
</TargetStatus>
<OutputDirectory>.\rel\</OutputDirectory>
<OutputName>dpp</OutputName>
<OutputName>rt-qv-tt</OutputName>
<CreateExecutable>1</CreateExecutable>
<CreateLib>0</CreateLib>
<CreateHexFile>0</CreateHexFile>
@ -782,14 +718,14 @@
<AfterMake>
<RunUserProg1>1</RunUserProg1>
<RunUserProg2>0</RunUserProg2>
<UserProg1Name>fromelf --bin --output .\rel\dpp.bin .\rel\dpp.axf</UserProg1Name>
<UserProg1Name>fromelf --bin --output .\rel\rt-qv-tt.bin .\rel\rt-qv-tt.axf</UserProg1Name>
<UserProg2Name></UserProg2Name>
<UserProg1Dos16Mode>0</UserProg1Dos16Mode>
<UserProg2Dos16Mode>0</UserProg2Dos16Mode>
<nStopA1X>0</nStopA1X>
<nStopA2X>0</nStopA2X>
</AfterMake>
<SelectedForBatchBuild>1</SelectedForBatchBuild>
<SelectedForBatchBuild>0</SelectedForBatchBuild>
<SVCSIdString></SVCSIdString>
</TargetCommonOption>
<CommonProperty>
@ -810,11 +746,11 @@
</CommonProperty>
<DllOption>
<SimDllName>SARMCM3.DLL</SimDllName>
<SimDllArguments> -REMAP-MPU </SimDllArguments>
<SimDllArguments> -REMAP </SimDllArguments>
<SimDlgDll>DARMCM1.DLL</SimDlgDll>
<SimDlgDllArguments>-pCM0+</SimDlgDllArguments>
<TargetDllName>SARMCM3.DLL</TargetDllName>
<TargetDllArguments>-MPU </TargetDllArguments>
<TargetDllArguments> </TargetDllArguments>
<TargetDlgDll>TARMCM1.DLL</TargetDlgDll>
<TargetDlgDllArguments>-pCM0+</TargetDlgDllArguments>
</DllOption>
@ -886,6 +822,7 @@
<RvdsVP>0</RvdsVP>
<RvdsMve>0</RvdsMve>
<RvdsCdeCp>0</RvdsCdeCp>
<nBranchProt>0</nBranchProt>
<hadIRAM2>0</hadIRAM2>
<hadIROM2>0</hadIROM2>
<StupSel>8</StupSel>
@ -1025,7 +962,7 @@
<wLevel>3</wLevel>
<uThumb>0</uThumb>
<uSurpInc>1</uSurpInc>
<uC99>1</uC99>
<uC99>0</uC99>
<uGnu>0</uGnu>
<useXO>0</useXO>
<v6Lang>3</v6Lang>
@ -1037,9 +974,9 @@
<v6Rtti>0</v6Rtti>
<VariousControls>
<MiscControls></MiscControls>
<Define>NDEBUG</Define>
<Define>NDEBUG,USE_SCHED_DISABLE</Define>
<Undefine></Undefine>
<IncludePath>..;..\..\..\..\..\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</IncludePath>
<IncludePath>..;..\..\..\..\..\include;..\..\..\..\..\ports\arm-cm\qv\armclang;..\..\..\..\..\3rd_party\CMSIS\Include;..\..\..\..\..\3rd_party\nucleo-l053r8</IncludePath>
</VariousControls>
</Cads>
<Aads>
@ -1061,7 +998,7 @@
</VariousControls>
</Aads>
<LDads>
<umfTarg>1</umfTarg>
<umfTarg>0</umfTarg>
<Ropi>0</Ropi>
<Rwpi>0</Rwpi>
<noStLib>0</noStLib>
@ -1070,7 +1007,7 @@
<TextAddressRange>0x00000000</TextAddressRange>
<DataAddressRange>0x20000000</DataAddressRange>
<pXoBase></pXoBase>
<ScatterFile>dpp-qv.sct</ScatterFile>
<ScatterFile>rt-qv-tt.sct</ScatterFile>
<IncludeLibs></IncludeLibs>
<IncludeLibsPath></IncludeLibsPath>
<Misc>--entry Reset_Handler</Misc>
@ -1081,17 +1018,12 @@
</TargetOption>
<Groups>
<Group>
<GroupName>Applicatioin</GroupName>
<GroupName>Application</GroupName>
<Files>
<File>
<FileName>app_cfg.h</FileName>
<FileName>app.hpp</FileName>
<FileType>5</FileType>
<FilePath>..\app_cfg.h</FilePath>
</File>
<File>
<FileName>os_cfg.h</FileName>
<FileType>5</FileType>
<FilePath>..\os_cfg.h</FilePath>
<FilePath>..\app.hpp</FilePath>
</File>
<File>
<FileName>bsp.cpp</FileName>
@ -1103,25 +1035,35 @@
<FileType>5</FileType>
<FilePath>..\bsp.hpp</FilePath>
</File>
<File>
<FileName>dpp.hpp</FileName>
<FileType>5</FileType>
<FilePath>..\dpp.hpp</FilePath>
</File>
<File>
<FileName>main.cpp</FileName>
<FileType>8</FileType>
<FilePath>..\main.cpp</FilePath>
</File>
<File>
<FileName>philo.cpp</FileName>
<FileName>periodic1.cpp</FileName>
<FileType>8</FileType>
<FilePath>..\philo.cpp</FilePath>
<FilePath>..\periodic1.cpp</FilePath>
</File>
<File>
<FileName>table.cpp</FileName>
<FileName>periodic4.cpp</FileName>
<FileType>8</FileType>
<FilePath>..\table.cpp</FilePath>
<FilePath>..\periodic4.cpp</FilePath>
</File>
<File>
<FileName>sporadic2.cpp</FileName>
<FileType>8</FileType>
<FilePath>..\sporadic2.cpp</FilePath>
</File>
<File>
<FileName>sporadic3.cpp</FileName>
<FileType>8</FileType>
<FilePath>..\sporadic3.cpp</FilePath>
</File>
<File>
<FileName>ttsched.cpp</FileName>
<FileType>8</FileType>
<FilePath>..\ttsched.cpp</FilePath>
</File>
</Files>
</Group>
@ -1173,6 +1115,11 @@
<FileType>8</FileType>
<FilePath>..\..\..\..\..\src\qf\qf_act.cpp</FilePath>
</File>
<File>
<FileName>qf_actq.cpp</FileName>
<FileType>8</FileType>
<FilePath>..\..\..\..\..\src\qf\qf_actq.cpp</FilePath>
</File>
<File>
<FileName>qf_defer.cpp</FileName>
<FileType>8</FileType>
@ -1213,15 +1160,30 @@
<FileType>8</FileType>
<FilePath>..\..\..\..\..\src\qf\qf_time.cpp</FilePath>
</File>
<File>
<FileName>qv.cpp</FileName>
<FileType>8</FileType>
<FilePath>..\..\..\..\..\src\qv\qv.cpp</FilePath>
</File>
</Files>
</Group>
<Group>
<GroupName>QP_port</GroupName>
<Files>
<File>
<FileName>qf_port.cpp</FileName>
<FileName>qv_port.cpp</FileName>
<FileType>8</FileType>
<FilePath>..\..\..\..\..\ports\uc-os2\qf_port.cpp</FilePath>
<FilePath>..\..\..\..\..\ports\arm-cm\qv\armclang\qv_port.cpp</FilePath>
</File>
<File>
<FileName>qp_port.hpp</FileName>
<FileType>5</FileType>
<FilePath>..\..\..\..\..\ports\arm-cm\qv\armclang\qp_port.hpp</FilePath>
</File>
<File>
<FileName>qs_port.hpp</FileName>
<FileType>5</FileType>
<FilePath>..\..\..\..\..\ports\arm-cm\qv\armclang\qs_port.hpp</FilePath>
</File>
</Files>
</Group>
@ -1302,16 +1264,6 @@
<FileType>8</FileType>
<FilePath>..\..\..\..\..\src\qs\qs.cpp</FilePath>
</File>
<File>
<FileName>qs_64bit.cpp</FileName>
<FileType>8</FileType>
<FilePath>..\..\..\..\..\src\qs\qs_64bit.cpp</FilePath>
</File>
<File>
<FileName>qs_fp.cpp</FileName>
<FileType>8</FileType>
<FilePath>..\..\..\..\..\src\qs\qs_fp.cpp</FilePath>
</File>
<File>
<FileName>qs_rx.cpp</FileName>
<FileType>8</FileType>
@ -1324,90 +1276,10 @@
</File>
</Files>
</Group>
<Group>
<GroupName>ucos-ii</GroupName>
<Files>
<File>
<FileName>os_core.c</FileName>
<FileType>1</FileType>
<FilePath>..\..\..\..\..\3rd_party\uC-OS2\Source\os_core.c</FilePath>
</File>
<File>
<FileName>os_task.c</FileName>
<FileType>1</FileType>
<FilePath>..\..\..\..\..\3rd_party\uC-OS2\Source\os_task.c</FilePath>
</File>
<File>
<FileName>os_flag.c</FileName>
<FileType>1</FileType>
<FilePath>..\..\..\..\..\3rd_party\uC-OS2\Source\os_flag.c</FilePath>
</File>
<File>
<FileName>os_mbox.c</FileName>
<FileType>1</FileType>
<FilePath>..\..\..\..\..\3rd_party\uC-OS2\Source\os_mbox.c</FilePath>
</File>
<File>
<FileName>os_mem.c</FileName>
<FileType>1</FileType>
<FilePath>..\..\..\..\..\3rd_party\uC-OS2\Source\os_mem.c</FilePath>
</File>
<File>
<FileName>os_mutex.c</FileName>
<FileType>1</FileType>
<FilePath>..\..\..\..\..\3rd_party\uC-OS2\Source\os_mutex.c</FilePath>
</File>
<File>
<FileName>os_q.c</FileName>
<FileType>1</FileType>
<FilePath>..\..\..\..\..\3rd_party\uC-OS2\Source\os_q.c</FilePath>
</File>
<File>
<FileName>os_sem.c</FileName>
<FileType>1</FileType>
<FilePath>..\..\..\..\..\3rd_party\uC-OS2\Source\os_sem.c</FilePath>
</File>
<File>
<FileName>os_time.c</FileName>
<FileType>1</FileType>
<FilePath>..\..\..\..\..\3rd_party\uC-OS2\Source\os_time.c</FilePath>
</File>
<File>
<FileName>os_tmr.c</FileName>
<FileType>1</FileType>
<FilePath>..\..\..\..\..\3rd_party\uC-OS2\Source\os_tmr.c</FilePath>
</File>
</Files>
</Group>
<Group>
<GroupName>ucos-ii_port</GroupName>
<Files>
<File>
<FileName>os_cpu_c.c</FileName>
<FileType>1</FileType>
<FilePath>..\..\..\..\..\3rd_party\uC-OS2\Ports\ARM-Cortex-M\ARMv6-M\os_cpu_c.c</FilePath>
</File>
<File>
<FileName>os_cpu.h</FileName>
<FileType>5</FileType>
<FilePath>..\..\..\..\..\3rd_party\uC-OS2\Ports\ARM-Cortex-M\ARMv6-M\ARM\os_cpu.h</FilePath>
</File>
<File>
<FileName>os_cpu_a.asm</FileName>
<FileType>2</FileType>
<FilePath>..\..\..\..\..\3rd_party\uC-OS2\Ports\ARM-Cortex-M\ARMv6-M\ARM\os_cpu_a.asm</FilePath>
</File>
<File>
<FileName>os_dbg.c</FileName>
<FileType>1</FileType>
<FilePath>..\..\..\..\..\3rd_party\uC-OS2\Ports\ARM-Cortex-M\ARMv6-M\ARM\os_dbg.c</FilePath>
</File>
</Files>
</Group>
</Groups>
</Target>
<Target>
<TargetName>dpp-spy</TargetName>
<TargetName>rt-spy</TargetName>
<ToolsetNumber>0x4</ToolsetNumber>
<ToolsetName>ARM-ADS</ToolsetName>
<pCCUsed>6160000::V6.16::ARMCLANG</pCCUsed>
@ -1421,9 +1293,9 @@
<Cpu>IRAM(0x20000000,0x00002000) IROM(0x08000000,0x00010000) CPUTYPE("Cortex-M0+") CLOCK(12000000) ELITTLE</Cpu>
<FlashUtilSpec></FlashUtilSpec>
<StartupFile></StartupFile>
<FlashDriverDll>UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32L0xx_64 -FS08000000 -FL010000 -FP0($$Device:STM32L053R8Tx$CMSIS\Flash\STM32L0xx_64.FLM))</FlashDriverDll>
<FlashDriverDll>UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32L0xx_64 -FS08000000 -FL010000 -FP0($$Device:STM32L053R8Tx$Flash\STM32L0xx_64.FLM))</FlashDriverDll>
<DeviceId>0</DeviceId>
<RegisterFile>$$Device:STM32L053R8Tx$Drivers\CMSIS\Device\ST\STM32L0xx\Include\stm32l0xx.h</RegisterFile>
<RegisterFile>$$Device:STM32L053R8Tx$Device\Include\stm32l0xx.h</RegisterFile>
<MemoryEnv></MemoryEnv>
<Cmp></Cmp>
<Asm></Asm>
@ -1433,7 +1305,7 @@
<SLE66CMisc></SLE66CMisc>
<SLE66AMisc></SLE66AMisc>
<SLE66LinkerMisc></SLE66LinkerMisc>
<SFDFile>$$Device:STM32L053R8Tx$CMSIS\SVD\STM32L053x.svd</SFDFile>
<SFDFile>$$Device:STM32L053R8Tx$SVD\STM32L053x.svd</SFDFile>
<bCustSvd>0</bCustSvd>
<UseEnv>0</UseEnv>
<BinPath></BinPath>
@ -1449,7 +1321,7 @@
<InvalidFlash>1</InvalidFlash>
</TargetStatus>
<OutputDirectory>.\spy\</OutputDirectory>
<OutputName>dpp</OutputName>
<OutputName>rt-qv-tt</OutputName>
<CreateExecutable>1</CreateExecutable>
<CreateLib>0</CreateLib>
<CreateHexFile>0</CreateHexFile>
@ -1482,14 +1354,14 @@
<AfterMake>
<RunUserProg1>1</RunUserProg1>
<RunUserProg2>0</RunUserProg2>
<UserProg1Name>fromelf --bin --output .\spy\dpp.bin .\spy\dpp.axf</UserProg1Name>
<UserProg1Name>fromelf --bin --output .\spy\rt-qv-tt.bin .\spy\rt-qv-tt.axf</UserProg1Name>
<UserProg2Name></UserProg2Name>
<UserProg1Dos16Mode>0</UserProg1Dos16Mode>
<UserProg2Dos16Mode>0</UserProg2Dos16Mode>
<nStopA1X>0</nStopA1X>
<nStopA2X>0</nStopA2X>
</AfterMake>
<SelectedForBatchBuild>1</SelectedForBatchBuild>
<SelectedForBatchBuild>0</SelectedForBatchBuild>
<SVCSIdString></SVCSIdString>
</TargetCommonOption>
<CommonProperty>
@ -1510,11 +1382,11 @@
</CommonProperty>
<DllOption>
<SimDllName>SARMCM3.DLL</SimDllName>
<SimDllArguments> -REMAP-MPU </SimDllArguments>
<SimDllArguments> -REMAP </SimDllArguments>
<SimDlgDll>DARMCM1.DLL</SimDlgDll>
<SimDlgDllArguments>-pCM0+</SimDlgDllArguments>
<TargetDllName>SARMCM3.DLL</TargetDllName>
<TargetDllArguments>-MPU </TargetDllArguments>
<TargetDllArguments> </TargetDllArguments>
<TargetDlgDll>TARMCM1.DLL</TargetDlgDll>
<TargetDlgDllArguments>-pCM0+</TargetDlgDllArguments>
</DllOption>
@ -1534,7 +1406,7 @@
<RunIndependent>0</RunIndependent>
<UpdateFlashBeforeDebugging>1</UpdateFlashBeforeDebugging>
<Capability>1</Capability>
<DriverSelection>4097</DriverSelection>
<DriverSelection>4096</DriverSelection>
</Flash1>
<bUseTDR>1</bUseTDR>
<Flash2>BIN\UL2CM3.DLL</Flash2>
@ -1586,6 +1458,7 @@
<RvdsVP>0</RvdsVP>
<RvdsMve>0</RvdsMve>
<RvdsCdeCp>0</RvdsCdeCp>
<nBranchProt>0</nBranchProt>
<hadIRAM2>0</hadIRAM2>
<hadIROM2>0</hadIROM2>
<StupSel>8</StupSel>
@ -1725,7 +1598,7 @@
<wLevel>3</wLevel>
<uThumb>0</uThumb>
<uSurpInc>1</uSurpInc>
<uC99>1</uC99>
<uC99>0</uC99>
<uGnu>0</uGnu>
<useXO>0</useXO>
<v6Lang>3</v6Lang>
@ -1737,9 +1610,9 @@
<v6Rtti>0</v6Rtti>
<VariousControls>
<MiscControls></MiscControls>
<Define>Q_SPY</Define>
<Define>Q_SPY,USE_SCHED_DISABLE</Define>
<Undefine></Undefine>
<IncludePath>..;..\..\..\..\..\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</IncludePath>
<IncludePath>..;..\..\..\..\..\include;..\..\..\..\..\ports\arm-cm\qv\armclang;..\..\..\..\..\3rd_party\CMSIS\Include;..\..\..\..\..\3rd_party\nucleo-l053r8</IncludePath>
</VariousControls>
</Cads>
<Aads>
@ -1761,7 +1634,7 @@
</VariousControls>
</Aads>
<LDads>
<umfTarg>1</umfTarg>
<umfTarg>0</umfTarg>
<Ropi>0</Ropi>
<Rwpi>0</Rwpi>
<noStLib>0</noStLib>
@ -1770,7 +1643,7 @@
<TextAddressRange>0x00000000</TextAddressRange>
<DataAddressRange>0x20000000</DataAddressRange>
<pXoBase></pXoBase>
<ScatterFile></ScatterFile>
<ScatterFile>rt-qv-tt.sct</ScatterFile>
<IncludeLibs></IncludeLibs>
<IncludeLibsPath></IncludeLibsPath>
<Misc>--entry Reset_Handler</Misc>
@ -1781,17 +1654,12 @@
</TargetOption>
<Groups>
<Group>
<GroupName>Applicatioin</GroupName>
<GroupName>Application</GroupName>
<Files>
<File>
<FileName>app_cfg.h</FileName>
<FileName>app.hpp</FileName>
<FileType>5</FileType>
<FilePath>..\app_cfg.h</FilePath>
</File>
<File>
<FileName>os_cfg.h</FileName>
<FileType>5</FileType>
<FilePath>..\os_cfg.h</FilePath>
<FilePath>..\app.hpp</FilePath>
</File>
<File>
<FileName>bsp.cpp</FileName>
@ -1803,25 +1671,35 @@
<FileType>5</FileType>
<FilePath>..\bsp.hpp</FilePath>
</File>
<File>
<FileName>dpp.hpp</FileName>
<FileType>5</FileType>
<FilePath>..\dpp.hpp</FilePath>
</File>
<File>
<FileName>main.cpp</FileName>
<FileType>8</FileType>
<FilePath>..\main.cpp</FilePath>
</File>
<File>
<FileName>philo.cpp</FileName>
<FileName>periodic1.cpp</FileName>
<FileType>8</FileType>
<FilePath>..\philo.cpp</FilePath>
<FilePath>..\periodic1.cpp</FilePath>
</File>
<File>
<FileName>table.cpp</FileName>
<FileName>periodic4.cpp</FileName>
<FileType>8</FileType>
<FilePath>..\table.cpp</FilePath>
<FilePath>..\periodic4.cpp</FilePath>
</File>
<File>
<FileName>sporadic2.cpp</FileName>
<FileType>8</FileType>
<FilePath>..\sporadic2.cpp</FilePath>
</File>
<File>
<FileName>sporadic3.cpp</FileName>
<FileType>8</FileType>
<FilePath>..\sporadic3.cpp</FilePath>
</File>
<File>
<FileName>ttsched.cpp</FileName>
<FileType>8</FileType>
<FilePath>..\ttsched.cpp</FilePath>
</File>
</Files>
</Group>
@ -1873,6 +1751,11 @@
<FileType>8</FileType>
<FilePath>..\..\..\..\..\src\qf\qf_act.cpp</FilePath>
</File>
<File>
<FileName>qf_actq.cpp</FileName>
<FileType>8</FileType>
<FilePath>..\..\..\..\..\src\qf\qf_actq.cpp</FilePath>
</File>
<File>
<FileName>qf_defer.cpp</FileName>
<FileType>8</FileType>
@ -1913,15 +1796,30 @@
<FileType>8</FileType>
<FilePath>..\..\..\..\..\src\qf\qf_time.cpp</FilePath>
</File>
<File>
<FileName>qv.cpp</FileName>
<FileType>8</FileType>
<FilePath>..\..\..\..\..\src\qv\qv.cpp</FilePath>
</File>
</Files>
</Group>
<Group>
<GroupName>QP_port</GroupName>
<Files>
<File>
<FileName>qf_port.cpp</FileName>
<FileName>qv_port.cpp</FileName>
<FileType>8</FileType>
<FilePath>..\..\..\..\..\ports\uc-os2\qf_port.cpp</FilePath>
<FilePath>..\..\..\..\..\ports\arm-cm\qv\armclang\qv_port.cpp</FilePath>
</File>
<File>
<FileName>qp_port.hpp</FileName>
<FileType>5</FileType>
<FilePath>..\..\..\..\..\ports\arm-cm\qv\armclang\qp_port.hpp</FilePath>
</File>
<File>
<FileName>qs_port.hpp</FileName>
<FileType>5</FileType>
<FilePath>..\..\..\..\..\ports\arm-cm\qv\armclang\qs_port.hpp</FilePath>
</File>
</Files>
</Group>
@ -1933,16 +1831,6 @@
<FileType>8</FileType>
<FilePath>..\..\..\..\..\src\qs\qs.cpp</FilePath>
</File>
<File>
<FileName>qs_64bit.cpp</FileName>
<FileType>8</FileType>
<FilePath>..\..\..\..\..\src\qs\qs_64bit.cpp</FilePath>
</File>
<File>
<FileName>qs_fp.cpp</FileName>
<FileType>8</FileType>
<FilePath>..\..\..\..\..\src\qs\qs_fp.cpp</FilePath>
</File>
<File>
<FileName>qs_rx.cpp</FileName>
<FileType>8</FileType>
@ -1955,86 +1843,6 @@
</File>
</Files>
</Group>
<Group>
<GroupName>ucos-ii</GroupName>
<Files>
<File>
<FileName>os_core.c</FileName>
<FileType>1</FileType>
<FilePath>..\..\..\..\..\3rd_party\uC-OS2\Source\os_core.c</FilePath>
</File>
<File>
<FileName>os_task.c</FileName>
<FileType>1</FileType>
<FilePath>..\..\..\..\..\3rd_party\uC-OS2\Source\os_task.c</FilePath>
</File>
<File>
<FileName>os_flag.c</FileName>
<FileType>1</FileType>
<FilePath>..\..\..\..\..\3rd_party\uC-OS2\Source\os_flag.c</FilePath>
</File>
<File>
<FileName>os_mbox.c</FileName>
<FileType>1</FileType>
<FilePath>..\..\..\..\..\3rd_party\uC-OS2\Source\os_mbox.c</FilePath>
</File>
<File>
<FileName>os_mem.c</FileName>
<FileType>1</FileType>
<FilePath>..\..\..\..\..\3rd_party\uC-OS2\Source\os_mem.c</FilePath>
</File>
<File>
<FileName>os_mutex.c</FileName>
<FileType>1</FileType>
<FilePath>..\..\..\..\..\3rd_party\uC-OS2\Source\os_mutex.c</FilePath>
</File>
<File>
<FileName>os_q.c</FileName>
<FileType>1</FileType>
<FilePath>..\..\..\..\..\3rd_party\uC-OS2\Source\os_q.c</FilePath>
</File>
<File>
<FileName>os_sem.c</FileName>
<FileType>1</FileType>
<FilePath>..\..\..\..\..\3rd_party\uC-OS2\Source\os_sem.c</FilePath>
</File>
<File>
<FileName>os_time.c</FileName>
<FileType>1</FileType>
<FilePath>..\..\..\..\..\3rd_party\uC-OS2\Source\os_time.c</FilePath>
</File>
<File>
<FileName>os_tmr.c</FileName>
<FileType>1</FileType>
<FilePath>..\..\..\..\..\3rd_party\uC-OS2\Source\os_tmr.c</FilePath>
</File>
</Files>
</Group>
<Group>
<GroupName>ucos-ii_port</GroupName>
<Files>
<File>
<FileName>os_cpu_c.c</FileName>
<FileType>1</FileType>
<FilePath>..\..\..\..\..\3rd_party\uC-OS2\Ports\ARM-Cortex-M\ARMv6-M\os_cpu_c.c</FilePath>
</File>
<File>
<FileName>os_cpu.h</FileName>
<FileType>5</FileType>
<FilePath>..\..\..\..\..\3rd_party\uC-OS2\Ports\ARM-Cortex-M\ARMv6-M\ARM\os_cpu.h</FilePath>
</File>
<File>
<FileName>os_cpu_a.asm</FileName>
<FileType>2</FileType>
<FilePath>..\..\..\..\..\3rd_party\uC-OS2\Ports\ARM-Cortex-M\ARMv6-M\ARM\os_cpu_a.asm</FilePath>
</File>
<File>
<FileName>os_dbg.c</FileName>
<FileType>1</FileType>
<FilePath>..\..\..\..\..\3rd_party\uC-OS2\Ports\ARM-Cortex-M\ARMv6-M\ARM\os_dbg.c</FilePath>
</File>
</Files>
</Group>
</Groups>
</Target>
</Targets>

View File

@ -0,0 +1,296 @@
//============================================================================
// BSP for "real-time" Example
// Last updated for version 7.3.1
// Last updated on 2023-10-03
//
// 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: <www.gnu.org/licenses/gpl-3.0>
//
// The terms of the closed source Quantum Leaps commercial licenses
// can be found at: <www.state-machine.com/licensing>
//
// Redistributions in source code must retain this top-level comment block.
// Plagiarizing this software to sidestep the license obligations is illegal.
//
// Contact information:
// <www.state-machine.com/licensing>
// <info@state-machine.com>
//============================================================================
#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(void); // prototype
void SysTick_Handler(void) {
BSP::d1on();
APP::TTSched_tick(); // run the TT scheduler
// 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::TTSched_mode(1U);
APP::AO_Sporadic2->POST(&sporadicA, &l_SysTick_Handler);
APP::AO_Sporadic2->POST(&sporadicB, &l_SysTick_Handler);
}
else { // B1 is released
APP::TTSched_mode(0U);
APP::AO_Periodic4->POST(BSP::getEvtPeriodic4(0U), &l_SysTick_Handler);
APP::AO_Periodic1->POST(BSP::getEvtPeriodic1(0U), &l_SysTick_Handler);
}
}
QV_ARM_ERRATUM_838869();
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(
1U, // QF-prio
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(
2U, // QF-prio
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(
3U, // QF-prio
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(
4U, // QF-prio
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 QV::onIdle() { // CAUTION: called with interrupts DISABLED
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();
QV_CPU_SLEEP(); // atomically go to sleep and enable interrupts
BSP::d7on();
#else
QF_INT_ENABLE(); // just enable interrupts
#endif
BSP::d7off();
}
} // namespace QP

View File

@ -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: <www.gnu.org/licenses/gpl-3.0>
//
// The terms of the closed source Quantum Leaps commercial licenses
// can be found at: <www.state-machine.com/licensing>
//
// Redistributions in source code must retain this top-level comment block.
// Plagiarizing this software to sidestep the license obligations is illegal.
//
// Contact information:
// <www.state-machine.com/licensing>
// <info@state-machine.com>
//============================================================================
#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_

View File

@ -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. <www.state-machine.com>
//
// 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 <www.gnu.org/licenses/>.
//
// Contact information:
// <www.state-machine.com/licensing>
// <info@state-machine.com>
//============================================================================
#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
}

View File

@ -0,0 +1,143 @@
//$file${.::periodic1.cpp} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
//
// Model: real-time-ms-tt.qm
// File: ${.::periodic1.cpp}
//
// This code has been generated by QM 5.3.0 <www.state-machine.com/qm>.
// 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:
// <www.state-machine.com/licensing>
// <info@state-machine.com>
//
//$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${Components::Periodic1} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
namespace APP {
//${Components::Periodic1} ...................................................
class Periodic1 : public QP::QMActive {
private:
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${Components::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${Components::Periodic1} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
namespace APP {
//${Components::Periodic1} ...................................................
Periodic1 Periodic1::inst;
//${Components::Periodic1::Periodic1} ........................................
Periodic1::Periodic1()
: QMActive(Q_STATE_CAST(&Periodic1::initial))
{}
//${Components::Periodic1::SM} ...............................................
QM_STATE_DEF(Periodic1, initial) {
//${Components::Periodic1::SM::initial}
Q_REQUIRE_ID(300, (QP::QEvt::verify_(e))
&& (e->sig == PERIODIC_SPEC_SIG));
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_);
}
//${Components::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.
};
//${Components::Periodic1::SM::active}
QM_STATE_DEF(Periodic1, active) {
QP::QState status_;
switch (e->sig) {
//${Components::Periodic1::SM::active::RUN}
case RUN_SIG: {
for (std::uint16_t i = m_toggles; i > 0U; --i) {
BSP::d6on();
BSP::d6off();
}
status_ = Q_RET_HANDLED;
break;
}
//${Components::Periodic1::SM::active::PERIODIC_SPEC}
case PERIODIC_SPEC_SIG: {
BSP::d6on();
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${Components::Periodic1} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

View File

@ -0,0 +1,143 @@
//$file${.::periodic4.cpp} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
//
// Model: real-time-ms-tt.qm
// File: ${.::periodic4.cpp}
//
// This code has been generated by QM 5.3.0 <www.state-machine.com/qm>.
// 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:
// <www.state-machine.com/licensing>
// <info@state-machine.com>
//
//$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${Components::Periodic4} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
namespace APP {
//${Components::Periodic4} ...................................................
class Periodic4 : public QP::QMActive {
private:
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${Components::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${Components::Periodic4} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
namespace APP {
//${Components::Periodic4} ...................................................
Periodic4 Periodic4::inst;
//${Components::Periodic4::Periodic4} ........................................
Periodic4::Periodic4()
: QMActive(Q_STATE_CAST(&Periodic4::initial))
{}
//${Components::Periodic4::SM} ...............................................
QM_STATE_DEF(Periodic4, initial) {
//${Components::Periodic4::SM::initial}
Q_REQUIRE_ID(300, QP::QEvt::verify_(e)
&& (e->sig == PERIODIC_SPEC_SIG));
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_);
}
//${Components::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.
};
//${Components::Periodic4::SM::active}
QM_STATE_DEF(Periodic4, active) {
QP::QState status_;
switch (e->sig) {
//${Components::Periodic4::SM::active::RUN}
case RUN_SIG: {
for (std::uint16_t i = m_toggles; i > 0U; --i) {
BSP::d3on();
BSP::d3off();
}
status_ = Q_RET_HANDLED;
break;
}
//${Components::Periodic4::SM::active::PERIODIC_SPEC}
case PERIODIC_SPEC_SIG: {
BSP::d3on();
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${Components::Periodic4} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

View File

@ -0,0 +1,507 @@
<?xml version="1.0" encoding="UTF-8"?>
<model version="5.3.0" links="0">
<framework name="qpcpp"/>
<package name="Shared" stereotype="0x01" namespace="APP::">
<attribute name="AppSignals" type="enum" visibility="0x04" properties="0x00">
<code>: 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
};</code>
</attribute>
<class name="PeriodicSpecEvt" superclass="qpcpp::QEvt">
<attribute name="toggles" type="std::uint16_t" visibility="0x00" properties="0x00"/>
<attribute name="ticks" type="std::uint8_t" visibility="0x00" properties="0x00"/>
<operation name="PeriodicSpecEvt" type="constexpr" visibility="0x00" properties="0x02">
<parameter name="s" type="QP::QSignal"/>
<parameter name="tg" type="std::uint16_t"/>
<parameter name="ti" type="std::uint8_t"/>
<code> : QP::QEvt(s),
toggles(tg),
ticks(ti)</code>
</operation>
</class>
<class name="SporadicSpecEvt" superclass="qpcpp::QEvt">
<attribute name="toggles" type="std::uint16_t" visibility="0x00" properties="0x00"/>
<attribute name="rtc_toggles" type="std::uint16_t" visibility="0x00" properties="0x00"/>
<operation name="SporadicSpecEvt" type="constexpr" visibility="0x00" properties="0x02">
<parameter name="s" type="QP::QSignal"/>
<parameter name="tg" type="std::uint16_t"/>
<parameter name="rtc" type="std::uint16_t"/>
<code> : QP::QEvt(s),
toggles(tg),
rtc_toggles(rtc)</code>
</operation>
</class>
<attribute name="AO_Periodic1" type="QP::QActive * const" visibility="0x00" properties="0x00">
<code>{&amp;Periodic1::inst};</code>
</attribute>
<attribute name="AO_Periodic4" type="QP::QActive * const" visibility="0x00" properties="0x00">
<code>{&amp;Periodic4::inst};</code>
</attribute>
<attribute name="AO_Sporadic2" type="QP::QActive * const" visibility="0x00" properties="0x00">
<code>{&amp;Sporadic2::inst};</code>
</attribute>
<attribute name="AO_Sporadic3" type="QP::QActive * const" visibility="0x00" properties="0x00">
<code>{&amp;Sporadic3::inst};</code>
</attribute>
<operation name="TTSched_tick" type="void" visibility="0x00" properties="0x00">
<code>static QP::QEvt const tickEvt(TICK_SIG);
TTSched::inst.dispatch(&amp;tickEvt, 0U);</code>
</operation>
<operation name="TTSched_mode" type="void" visibility="0x00" properties="0x00">
<parameter name="mode" type="uint8_t"/>
<code>static QP::QEvt const modeEvt[2] {
QP::QEvt(MODE0_SIG),
QP::QEvt(MODE1_SIG),
};
TTSched::inst.dispatch(&amp;modeEvt[mode], 0U);</code>
</operation>
</package>
<package name="Components" stereotype="0x02" namespace="APP::">
<class name="TTSched" superclass="qpcpp::QMsm">
<attribute name="inst" type="TTSched" visibility="0x00" properties="0x01"/>
<operation name="TTSched" type="" visibility="0x00" properties="0x00">
<code> : QMsm(Q_STATE_CAST(&amp;TTSched::initial))
init(0U);</code>
</operation>
<statechart properties="0x00">
<initial target="../1/2">
<initial_glyph conn="2,2,5,0,28,10">
<action box="0,-2,10,2"/>
</initial_glyph>
</initial>
<state name="active">
<tran trig="MODE0" target="../2">
<tran_glyph conn="2,10,3,0,13,2">
<action box="0,-2,10,2"/>
</tran_glyph>
</tran>
<tran trig="MODE1" target="../6">
<tran_glyph conn="86,10,1,0,-28,2">
<action box="-8,-2,10,2"/>
</tran_glyph>
</tran>
<state name="m0tick0">
<tran trig="TICK" target="../../3">
<action>AO_Periodic4-&gt;POST(&amp;runEvt, 0U);</action>
<tran_glyph conn="4,16,3,1,36,12,-2">
<action box="0,-2,34,5"/>
</tran_glyph>
</tran>
<state_glyph node="4,12,34,10"/>
</state>
<state name="m0tick1">
<tran trig="TICK" target="../../4">
<tran_glyph conn="4,30,3,1,36,12,-2">
<action box="0,-2,32,4"/>
</tran_glyph>
</tran>
<state_glyph node="4,26,34,10"/>
</state>
<state name="m0tick2">
<tran trig="TICK" target="../../5">
<action>AO_Periodic4-&gt;POST(&amp;runEvt, 0U);</action>
<tran_glyph conn="4,44,3,1,36,12,-2">
<action box="0,-2,32,4"/>
</tran_glyph>
</tran>
<state_glyph node="4,40,34,10"/>
</state>
<state name="m0tick3">
<tran trig="TICK" target="../../2">
<action>AO_Periodic1-&gt;POST(&amp;runEvt, 0U);</action>
<tran_glyph conn="4,58,3,1,38,-44,-4">
<action box="0,-2,32,4"/>
</tran_glyph>
</tran>
<state_glyph node="4,54,34,10"/>
</state>
<state name="m1tick0">
<tran trig="TICK" target="../../7">
<action>AO_Periodic4-&gt;POST(&amp;runEvt, 0U);
AO_Sporadic3-&gt;POST(&amp;runEvt, 0U);</action>
<tran_glyph conn="46,16,3,1,36,12,-2">
<action box="0,-2,34,8"/>
</tran_glyph>
</tran>
<state_glyph node="46,12,34,10"/>
</state>
<state name="m1tick1">
<tran trig="TICK" target="../../8">
<action>AO_Periodic4-&gt;POST(&amp;runEvt, 0U);
AO_Sporadic3-&gt;POST(&amp;runEvt, 0U);</action>
<tran_glyph conn="46,30,3,1,36,12,-2">
<action box="0,-2,36,8"/>
</tran_glyph>
</tran>
<state_glyph node="46,26,34,10"/>
</state>
<state name="m1tick2">
<tran trig="TICK" target="../../9">
<action>AO_Periodic4-&gt;POST(&amp;runEvt, 0U);
AO_Sporadic2-&gt;POST(&amp;runEvt, 0U);</action>
<tran_glyph conn="46,44,3,1,36,12,-2">
<action box="0,-2,36,8"/>
</tran_glyph>
</tran>
<state_glyph node="46,40,34,10"/>
</state>
<state name="m1tick3">
<tran trig="TICK" target="../../10">
<action>AO_Periodic4-&gt;POST(&amp;runEvt, 0U);
AO_Sporadic3-&gt;POST(&amp;runEvt, 0U);</action>
<tran_glyph conn="46,58,3,1,36,12,-2">
<action box="0,-2,36,8"/>
</tran_glyph>
</tran>
<state_glyph node="46,54,34,10"/>
</state>
<state name="m1tick4">
<tran trig="TICK" target="../../11">
<action>AO_Periodic4-&gt;POST(&amp;runEvt, 0U);
AO_Periodic1-&gt;POST(&amp;runEvt, 0U);</action>
<tran_glyph conn="46,72,3,1,36,12,-2">
<action box="0,-2,36,8"/>
</tran_glyph>
</tran>
<state_glyph node="46,68,34,10"/>
</state>
<state name="m1tick5">
<tran trig="TICK" target="../../6">
<action>AO_Periodic4-&gt;POST(&amp;runEvt, 0U);
AO_Sporadic3-&gt;POST(&amp;runEvt, 0U);</action>
<tran_glyph conn="46,86,3,1,38,-72,-4">
<action box="0,-2,36,8"/>
</tran_glyph>
</tran>
<state_glyph node="46,82,34,10"/>
</state>
<state_glyph node="2,4,84,92"/>
</state>
<state_diagram size="90,103"/>
</statechart>
</class>
<class name="Periodic1" superclass="qpcpp::QMActive">
<attribute name="m_toggles" type="std::uint16_t" visibility="0x02" properties="0x00"/>
<attribute name="inst" type="Periodic1" visibility="0x00" properties="0x01"/>
<operation name="Periodic1" type="" visibility="0x00" properties="0x00">
<code> : QMActive(Q_STATE_CAST(&amp;Periodic1::initial))</code>
</operation>
<statechart properties="0x02">
<initial target="../1">
<action>Q_REQUIRE_ID(300, (QP::QEvt::verify_(e))
&amp;&amp; (e-&gt;sig == PERIODIC_SPEC_SIG));
m_toggles = Q_EVT_CAST(PeriodicSpecEvt)-&gt;toggles;</action>
<initial_glyph conn="2,4,5,1,46,4,-2">
<action box="0,-2,6,2"/>
</initial_glyph>
</initial>
<state name="active">
<tran trig="RUN">
<action brief="long-RTC">for (std::uint16_t i = m_toggles; i &gt; 0U; --i) {
BSP::d6on();
BSP::d6off();
}</action>
<tran_glyph conn="2,20,3,-1,40">
<action box="0,-2,19,2"/>
</tran_glyph>
</tran>
<tran trig="PERIODIC_SPEC">
<action>BSP::d6on();
m_toggles = Q_EVT_CAST(PeriodicSpecEvt)-&gt;toggles;
BSP::d6off();</action>
<tran_glyph conn="2,14,3,-1,40">
<action box="0,-2,35,2"/>
</tran_glyph>
</tran>
<state_glyph node="2,6,44,18"/>
</state>
<state_diagram size="50,28"/>
</statechart>
</class>
<class name="Periodic4" superclass="qpcpp::QMActive">
<attribute name="m_toggles" type="std::uint16_t" visibility="0x02" properties="0x00"/>
<attribute name="inst" type="Periodic4" visibility="0x00" properties="0x01"/>
<operation name="Periodic4" type="" visibility="0x00" properties="0x00">
<code> : QMActive(Q_STATE_CAST(&amp;Periodic4::initial))</code>
</operation>
<statechart properties="0x02">
<initial target="../1">
<action>Q_REQUIRE_ID(300, QP::QEvt::verify_(e)
&amp;&amp; (e-&gt;sig == PERIODIC_SPEC_SIG));
m_toggles = Q_EVT_CAST(PeriodicSpecEvt)-&gt;toggles;</action>
<initial_glyph conn="2,4,5,1,46,4,-2">
<action box="0,-2,6,2"/>
</initial_glyph>
</initial>
<state name="active">
<tran trig="RUN">
<action brief="long-RTC">for (std::uint16_t i = m_toggles; i &gt; 0U; --i) {
BSP::d3on();
BSP::d3off();
}</action>
<tran_glyph conn="2,20,3,-1,40">
<action box="0,-2,19,2"/>
</tran_glyph>
</tran>
<tran trig="PERIODIC_SPEC">
<action>BSP::d3on();
m_toggles = Q_EVT_CAST(PeriodicSpecEvt)-&gt;toggles;
BSP::d3off();</action>
<tran_glyph conn="2,14,3,-1,40">
<action box="0,-2,15,2"/>
</tran_glyph>
</tran>
<state_glyph node="2,6,44,18"/>
</state>
<state_diagram size="50,28"/>
</statechart>
</class>
<class name="Sporadic2" superclass="qpcpp::QMActive">
<attribute name="m_per_rtc" type="std::uint16_t" visibility="0x00" properties="0x00"/>
<attribute name="m_total" type="std::uint16_t" visibility="0x00" properties="0x00"/>
<attribute name="m_done" type="std::uint16_t" visibility="0x00" properties="0x00"/>
<attribute name="inst" type="Sporadic2" visibility="0x00" properties="0x01"/>
<operation name="Sporadic2" type="" visibility="0x00" properties="0x00">
<code> : QMActive(Q_STATE_CAST(&amp;Sporadic2::initial))</code>
</operation>
<statechart properties="0x02">
<initial target="../1">
<action>Q_UNUSED_PAR(e);</action>
<initial_glyph conn="2,4,5,1,44,4,-2">
<action box="0,-2,6,2"/>
</initial_glyph>
</initial>
<state name="active">
<tran trig="SPORADIC_A">
<action brief="post-Sporadic3">BSP::d5on();
AO_Sporadic3-&gt;POST(e, this); // Sporadic2 --&gt; Sporadic3
BSP::d5off();</action>
<tran_glyph conn="2,12,3,-1,34">
<action box="0,-2,35,3"/>
</tran_glyph>
</tran>
<tran trig="SPORADIC_B" target="../3">
<action brief="post-to-Periodic1,long-RTC">BSP::d5on();
AO_Periodic1-&gt;POST(BSP::getEvtPeriodic1(1U), this);
m_per_rtc = Q_EVT_CAST(SporadicSpecEvt)-&gt;rtc_toggles;
m_total = Q_EVT_CAST(SporadicSpecEvt)-&gt;toggles;
m_done = 0U;
BSP::d5off();</action>
<tran_glyph conn="2,16,3,1,40,6,-2">
<action box="0,-2,34,2"/>
</tran_glyph>
</tran>
<tran trig="RUN">
<action>BSP::d5on();
BSP::d5off();</action>
<tran_glyph conn="2,22,3,-1,34">
<action box="0,-2,10,2"/>
</tran_glyph>
</tran>
<state name="busy">
<entry>std::uint16_t toggles = m_total - m_done;
if (toggles &gt; m_per_rtc) {
toggles = m_per_rtc;
}
m_done += toggles;
for (; toggles &gt; 0U; --toggles) {
BSP::d5on();
BSP::d5off();
}</entry>
<tran trig="RUN">
<choice target="../..">
<guard>m_done &lt; m_total</guard>
<choice_glyph conn="18,28,5,0,22">
<action box="1,0,21,2"/>
</choice_glyph>
</choice>
<choice target="../../..">
<guard brief="else"/>
<action>BSP::d5on();
BSP::d5off();</action>
<choice_glyph conn="18,28,4,1,6,26">
<action box="1,6,10,2"/>
</choice_glyph>
</choice>
<tran_glyph conn="4,28,3,-1,14">
<action box="0,-2,10,2"/>
</tran_glyph>
</tran>
<state_glyph node="4,20,36,12">
<entry box="1,2,6,2"/>
</state_glyph>
</state>
<state_glyph node="2,6,42,34"/>
</state>
<state_diagram size="50,44"/>
</statechart>
</class>
<class name="Sporadic3" superclass="qpcpp::QMActive">
<attribute name="m_per_rtc" type="std::uint16_t" visibility="0x00" properties="0x00"/>
<attribute name="m_total" type="std::uint16_t" visibility="0x00" properties="0x00"/>
<attribute name="m_done" type="std::uint16_t" visibility="0x00" properties="0x00"/>
<attribute name="inst" type="Sporadic3" visibility="0x00" properties="0x01"/>
<operation name="Sporadic3" type="" visibility="0x00" properties="0x00">
<code> : QMActive(Q_STATE_CAST(&amp;Sporadic3::initial))</code>
</operation>
<statechart properties="0x02">
<initial target="../1">
<action>Q_UNUSED_PAR(e);</action>
<initial_glyph conn="2,4,5,1,44,4,-2">
<action box="0,-2,6,2"/>
</initial_glyph>
</initial>
<state name="active">
<tran trig="SPORADIC_A" target="../2">
<action brief="post-to-Periodic4,long-RTC">BSP::d4on();
AO_Periodic4-&gt;POST(BSP::getEvtPeriodic4(1U), this);
m_per_rtc = Q_EVT_CAST(SporadicSpecEvt)-&gt;rtc_toggles;
m_total = Q_EVT_CAST(SporadicSpecEvt)-&gt;toggles;
m_done = 0U;
BSP::d4off();</action>
<tran_glyph conn="2,12,3,1,40,10,-2">
<action box="0,-2,37,2"/>
</tran_glyph>
</tran>
<tran trig="RUN">
<action>BSP::d4on();
BSP::d4off();</action>
<tran_glyph conn="2,22,3,-1,34">
<action box="1,0,10,2"/>
</tran_glyph>
</tran>
<state name="busy">
<entry>std::uint16_t toggles = m_total - m_done;
if (toggles &gt; m_per_rtc) {
toggles = m_per_rtc;
}
m_done += toggles;
for (; toggles &gt; 0U; --toggles) {
BSP::d4on();
BSP::d4off();
}</entry>
<tran trig="RUN">
<choice target="../..">
<guard>m_done &lt; m_total</guard>
<choice_glyph conn="18,28,5,0,22">
<action box="1,0,21,2"/>
</choice_glyph>
</choice>
<choice target="../../..">
<guard brief="else"/>
<action>BSP::d4on();
BSP::d4off();</action>
<choice_glyph conn="18,28,4,1,6,26">
<action box="1,6,10,2"/>
</choice_glyph>
</choice>
<tran_glyph conn="4,28,3,-1,14">
<action box="0,-2,10,2"/>
</tran_glyph>
</tran>
<state_glyph node="4,20,36,12">
<entry box="1,2,6,2"/>
</state_glyph>
</state>
<state_glyph node="2,6,42,34"/>
</state>
<state_diagram size="50,44"/>
</statechart>
</class>
</package>
<directory name=".">
<file name="app.hpp">
<text>#ifndef APP_HPP_
#define APP_HPP_
$declare ${Shared}
#endif // APP_HPP_</text>
</file>
<file name="ttsched.cpp">
<text>#include &quot;qpcpp.hpp&quot; // QP/C++ real-time embedded framework
#include &quot;bsp.hpp&quot; // Board Support Package
#include &quot;app.hpp&quot; // Application interface
$declare ${Components::TTSched}
Q_DEFINE_THIS_MODULE(&quot;ttsched&quot;)
static QP::QEvt const runEvt(APP::RUN_SIG);
$define ${Shared::TTSched_tick}
$define ${Shared::TTSched_mode}
$define ${Components::TTSched}</text>
</file>
<file name="periodic1.cpp">
<text>#include &quot;qpcpp.hpp&quot; // QP/C++ real-time embedded framework
#include &quot;bsp.hpp&quot; // Board Support Package
#include &quot;app.hpp&quot; // Application interface
namespace {
Q_DEFINE_THIS_MODULE(&quot;periodic1&quot;)
}
$declare ${Components::Periodic1}
$define ${Shared::AO_Periodic1}
$define ${Components::Periodic1}</text>
</file>
<file name="periodic4.cpp">
<text>#include &quot;qpcpp.hpp&quot; // QP/C++ real-time embedded framework
#include &quot;bsp.hpp&quot; // Board Support Package
#include &quot;app.hpp&quot; // Application interface
namespace {
Q_DEFINE_THIS_MODULE(&quot;periodic4&quot;)
}
$declare ${Components::Periodic4}
$define ${Shared::AO_Periodic4}
$define ${Components::Periodic4}</text>
</file>
<file name="sporadic2.cpp">
<text>#include &quot;qpcpp.hpp&quot; // QP/C++ real-time embedded framework
#include &quot;bsp.hpp&quot; // Board Support Package
#include &quot;app.hpp&quot; // Application interface
namespace {
Q_DEFINE_THIS_MODULE(&quot;sporadic2&quot;)
}
$declare ${Components::Sporadic2}
$define ${Shared::AO_Sporadic2}
$define ${Components::Sporadic2}</text>
</file>
<file name="sporadic3.cpp">
<text>#include &quot;qpcpp.hpp&quot; // QP/C++ real-time embedded framework
#include &quot;bsp.hpp&quot; // Board Support Package
#include &quot;app.hpp&quot; // Application interface
namespace {
Q_DEFINE_THIS_MODULE(&quot;sporadic3&quot;)
}
$declare ${Components::Sporadic3}
$define ${Shared::AO_Sporadic3}
$define ${Components::Sporadic3}</text>
</file>
</directory>
</model>

View File

@ -0,0 +1,228 @@
//$file${.::sporadic2.cpp} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
//
// Model: real-time-ms-tt.qm
// File: ${.::sporadic2.cpp}
//
// This code has been generated by QM 5.3.0 <www.state-machine.com/qm>.
// 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:
// <www.state-machine.com/licensing>
// <info@state-machine.com>
//
//$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${Components::Sporadic2} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
namespace APP {
//${Components::Sporadic2} ...................................................
class Sporadic2 : public QP::QMActive {
public:
std::uint16_t m_per_rtc;
std::uint16_t m_total;
std::uint16_t m_done;
static Sporadic2 inst;
public:
Sporadic2();
protected:
QM_STATE_DECL( initial);
QM_STATE_DECL( active);
QM_STATE_DECL( busy);
QM_ACTION_DECL(busy_e);
}; // class Sporadic2
} // namespace APP
//$enddecl${Components::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${Components::Sporadic2} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
namespace APP {
//${Components::Sporadic2} ...................................................
Sporadic2 Sporadic2::inst;
//${Components::Sporadic2::Sporadic2} ........................................
Sporadic2::Sporadic2()
: QMActive(Q_STATE_CAST(&Sporadic2::initial))
{}
//${Components::Sporadic2::SM} ...............................................
QM_STATE_DEF(Sporadic2, initial) {
//${Components::Sporadic2::SM::initial}
Q_UNUSED_PAR(e);
QS_FUN_DICTIONARY(&Sporadic2::active);
QS_FUN_DICTIONARY(&Sporadic2::busy);
static QP::QMTranActTable const tatbl_ = { // tran-action table
&active_s, // target state
{
Q_ACTION_NULL // zero terminator
}
};
return qm_tran_init(&tatbl_);
}
//${Components::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.
};
//${Components::Sporadic2::SM::active}
QM_STATE_DEF(Sporadic2, active) {
QP::QState status_;
switch (e->sig) {
//${Components::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;
}
//${Components::Sporadic2::SM::active::SPORADIC_B}
case SPORADIC_B_SIG: {
BSP::d5on();
AO_Periodic1->POST(BSP::getEvtPeriodic1(1U), this);
m_per_rtc = Q_EVT_CAST(SporadicSpecEvt)->rtc_toggles;
m_total = Q_EVT_CAST(SporadicSpecEvt)->toggles;
m_done = 0U;
BSP::d5off();
static struct {
QP::QMState const *target;
QP::QActionHandler act[2];
} const tatbl_ = { // tran-action table
&busy_s, // target state
{
&busy_e, // entry
Q_ACTION_NULL // zero terminator
}
};
status_ = qm_tran(&tatbl_);
break;
}
//${Components::Sporadic2::SM::active::RUN}
case RUN_SIG: {
BSP::d5on();
BSP::d5off();
status_ = Q_RET_HANDLED;
break;
}
default: {
status_ = Q_RET_SUPER;
break;
}
}
return status_;
}
//${Components::Sporadic2::SM::active::busy} .................................
QP::QMState const Sporadic2::busy_s = {
&Sporadic2::active_s, // superstate
&Sporadic2::busy,
&Sporadic2::busy_e,
Q_ACTION_NULL, // no exit action
Q_ACTION_NULL // no initial tran.
};
//${Components::Sporadic2::SM::active::busy}
QM_ACTION_DEF(Sporadic2, busy_e) {
std::uint16_t toggles = m_total - m_done;
if (toggles > m_per_rtc) {
toggles = m_per_rtc;
}
m_done += toggles;
for (; toggles > 0U; --toggles) {
BSP::d5on();
BSP::d5off();
}
return qm_entry(&busy_s);
}
//${Components::Sporadic2::SM::active::busy}
QM_STATE_DEF(Sporadic2, busy) {
QP::QState status_;
switch (e->sig) {
//${Components::Sporadic2::SM::active::busy::RUN}
case RUN_SIG: {
//${Components::Sporadic2::SM::active::busy::RUN::[m_done<m_total]}
if (m_done < m_total) {
static struct {
QP::QMState const *target;
QP::QActionHandler act[2];
} const tatbl_ = { // tran-action table
&busy_s, // target state
{
&busy_e, // entry
Q_ACTION_NULL // zero terminator
}
};
status_ = qm_tran(&tatbl_);
}
//${Components::Sporadic2::SM::active::busy::RUN::[else]}
else {
BSP::d5on();
BSP::d5off();
static QP::QMTranActTable const tatbl_ = { // tran-action table
&active_s, // target state
{
Q_ACTION_NULL // zero terminator
}
};
status_ = qm_tran(&tatbl_);
}
break;
}
default: {
status_ = Q_RET_SUPER;
break;
}
}
return status_;
}
} // namespace APP
//$enddef${Components::Sporadic2} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

View File

@ -0,0 +1,220 @@
//$file${.::sporadic3.cpp} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
//
// Model: real-time-ms-tt.qm
// File: ${.::sporadic3.cpp}
//
// This code has been generated by QM 5.3.0 <www.state-machine.com/qm>.
// 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:
// <www.state-machine.com/licensing>
// <info@state-machine.com>
//
//$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${Components::Sporadic3} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
namespace APP {
//${Components::Sporadic3} ...................................................
class Sporadic3 : public QP::QMActive {
public:
std::uint16_t m_per_rtc;
std::uint16_t m_total;
std::uint16_t m_done;
static Sporadic3 inst;
public:
Sporadic3();
protected:
QM_STATE_DECL( initial);
QM_STATE_DECL( active);
QM_STATE_DECL( busy);
QM_ACTION_DECL(busy_e);
}; // class Sporadic3
} // namespace APP
//$enddecl${Components::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${Components::Sporadic3} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
namespace APP {
//${Components::Sporadic3} ...................................................
Sporadic3 Sporadic3::inst;
//${Components::Sporadic3::Sporadic3} ........................................
Sporadic3::Sporadic3()
: QMActive(Q_STATE_CAST(&Sporadic3::initial))
{}
//${Components::Sporadic3::SM} ...............................................
QM_STATE_DEF(Sporadic3, initial) {
//${Components::Sporadic3::SM::initial}
Q_UNUSED_PAR(e);
QS_FUN_DICTIONARY(&Sporadic3::active);
QS_FUN_DICTIONARY(&Sporadic3::busy);
static QP::QMTranActTable const tatbl_ = { // tran-action table
&active_s, // target state
{
Q_ACTION_NULL // zero terminator
}
};
return qm_tran_init(&tatbl_);
}
//${Components::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.
};
//${Components::Sporadic3::SM::active}
QM_STATE_DEF(Sporadic3, active) {
QP::QState status_;
switch (e->sig) {
//${Components::Sporadic3::SM::active::SPORADIC_A}
case SPORADIC_A_SIG: {
BSP::d4on();
AO_Periodic4->POST(BSP::getEvtPeriodic4(1U), this);
m_per_rtc = Q_EVT_CAST(SporadicSpecEvt)->rtc_toggles;
m_total = Q_EVT_CAST(SporadicSpecEvt)->toggles;
m_done = 0U;
BSP::d4off();
static struct {
QP::QMState const *target;
QP::QActionHandler act[2];
} const tatbl_ = { // tran-action table
&busy_s, // target state
{
&busy_e, // entry
Q_ACTION_NULL // zero terminator
}
};
status_ = qm_tran(&tatbl_);
break;
}
//${Components::Sporadic3::SM::active::RUN}
case RUN_SIG: {
BSP::d4on();
BSP::d4off();
status_ = Q_RET_HANDLED;
break;
}
default: {
status_ = Q_RET_SUPER;
break;
}
}
return status_;
}
//${Components::Sporadic3::SM::active::busy} .................................
QP::QMState const Sporadic3::busy_s = {
&Sporadic3::active_s, // superstate
&Sporadic3::busy,
&Sporadic3::busy_e,
Q_ACTION_NULL, // no exit action
Q_ACTION_NULL // no initial tran.
};
//${Components::Sporadic3::SM::active::busy}
QM_ACTION_DEF(Sporadic3, busy_e) {
std::uint16_t toggles = m_total - m_done;
if (toggles > m_per_rtc) {
toggles = m_per_rtc;
}
m_done += toggles;
for (; toggles > 0U; --toggles) {
BSP::d4on();
BSP::d4off();
}
return qm_entry(&busy_s);
}
//${Components::Sporadic3::SM::active::busy}
QM_STATE_DEF(Sporadic3, busy) {
QP::QState status_;
switch (e->sig) {
//${Components::Sporadic3::SM::active::busy::RUN}
case RUN_SIG: {
//${Components::Sporadic3::SM::active::busy::RUN::[m_done<m_total]}
if (m_done < m_total) {
static struct {
QP::QMState const *target;
QP::QActionHandler act[2];
} const tatbl_ = { // tran-action table
&busy_s, // target state
{
&busy_e, // entry
Q_ACTION_NULL // zero terminator
}
};
status_ = qm_tran(&tatbl_);
}
//${Components::Sporadic3::SM::active::busy::RUN::[else]}
else {
BSP::d4on();
BSP::d4off();
static QP::QMTranActTable const tatbl_ = { // tran-action table
&active_s, // target state
{
Q_ACTION_NULL // zero terminator
}
};
status_ = qm_tran(&tatbl_);
}
break;
}
default: {
status_ = Q_RET_SUPER;
break;
}
}
return status_;
}
} // namespace APP
//$enddef${Components::Sporadic3} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

View File

@ -0,0 +1,493 @@
//$file${.::ttsched.cpp} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
//
// Model: real-time-ms-tt.qm
// File: ${.::ttsched.cpp}
//
// This code has been generated by QM 5.3.0 <www.state-machine.com/qm>.
// 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:
// <www.state-machine.com/licensing>
// <info@state-machine.com>
//
//$endhead${.::ttsched.cpp} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
#include "qpcpp.hpp" // QP/C++ real-time embedded framework
#include "bsp.hpp" // Board Support Package
#include "app.hpp" // Application interface
//$declare${Components::TTSched} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
namespace APP {
//${Components::TTSched} .....................................................
class TTSched : public QP::QMsm {
public:
static TTSched inst;
public:
TTSched();
protected:
QM_STATE_DECL( initial);
QM_STATE_DECL( active);
QM_STATE_DECL( m0tick0);
QM_STATE_DECL( m0tick1);
QM_STATE_DECL( m0tick2);
QM_STATE_DECL( m0tick3);
QM_STATE_DECL( m1tick0);
QM_STATE_DECL( m1tick1);
QM_STATE_DECL( m1tick2);
QM_STATE_DECL( m1tick3);
QM_STATE_DECL( m1tick4);
QM_STATE_DECL( m1tick5);
}; // class TTSched
} // namespace APP
//$enddecl${Components::TTSched} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Q_DEFINE_THIS_MODULE("ttsched")
static QP::QEvt const runEvt(APP::RUN_SIG);
//$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::TTSched_tick} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
namespace APP {
//${Shared::TTSched_tick} ....................................................
void TTSched_tick() {
static QP::QEvt const tickEvt(TICK_SIG);
TTSched::inst.dispatch(&tickEvt, 0U);
}
} // namespace APP
//$enddef${Shared::TTSched_tick} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//$define${Shared::TTSched_mode} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
namespace APP {
//${Shared::TTSched_mode} ....................................................
void TTSched_mode(uint8_t mode) {
static QP::QEvt const modeEvt[2] {
QP::QEvt(MODE0_SIG),
QP::QEvt(MODE1_SIG),
};
TTSched::inst.dispatch(&modeEvt[mode], 0U);
}
} // namespace APP
//$enddef${Shared::TTSched_mode} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//$define${Components::TTSched} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
namespace APP {
//${Components::TTSched} .....................................................
TTSched TTSched::inst;
//${Components::TTSched::TTSched} ............................................
TTSched::TTSched()
: QMsm(Q_STATE_CAST(&TTSched::initial))
{
init(0U);
}
//${Components::TTSched::SM} .................................................
QM_STATE_DEF(TTSched, initial) {
//${Components::TTSched::SM::initial}
static QP::QMTranActTable const tatbl_ = { // tran-action table
&m0tick0_s, // target state
{
Q_ACTION_NULL // zero terminator
}
};
return qm_tran_init(&tatbl_);
}
//${Components::TTSched::SM::active} .........................................
QP::QMState const TTSched::active_s = {
QM_STATE_NULL, // superstate (top)
&TTSched::active,
Q_ACTION_NULL, // no entry action
Q_ACTION_NULL, // no exit action
Q_ACTION_NULL // no initial tran.
};
//${Components::TTSched::SM::active}
QM_STATE_DEF(TTSched, active) {
QP::QState status_;
switch (e->sig) {
//${Components::TTSched::SM::active::MODE0}
case MODE0_SIG: {
static QP::QMTranActTable const tatbl_ = { // tran-action table
&m0tick0_s, // target state
{
Q_ACTION_NULL // zero terminator
}
};
status_ = qm_tran(&tatbl_);
break;
}
//${Components::TTSched::SM::active::MODE1}
case MODE1_SIG: {
static QP::QMTranActTable const tatbl_ = { // tran-action table
&m1tick0_s, // target state
{
Q_ACTION_NULL // zero terminator
}
};
status_ = qm_tran(&tatbl_);
break;
}
default: {
status_ = Q_RET_SUPER;
break;
}
}
return status_;
}
//${Components::TTSched::SM::active::m0tick0} ................................
QP::QMState const TTSched::m0tick0_s = {
&TTSched::active_s, // superstate
&TTSched::m0tick0,
Q_ACTION_NULL, // no entry action
Q_ACTION_NULL, // no exit action
Q_ACTION_NULL // no initial tran.
};
//${Components::TTSched::SM::active::m0tick0}
QM_STATE_DEF(TTSched, m0tick0) {
QP::QState status_;
switch (e->sig) {
//${Components::TTSched::SM::active::m0tick0::TICK}
case TICK_SIG: {
AO_Periodic4->POST(&runEvt, 0U);
static QP::QMTranActTable const tatbl_ = { // tran-action table
&m0tick1_s, // target state
{
Q_ACTION_NULL // zero terminator
}
};
status_ = qm_tran(&tatbl_);
break;
}
default: {
status_ = Q_RET_SUPER;
break;
}
}
return status_;
}
//${Components::TTSched::SM::active::m0tick1} ................................
QP::QMState const TTSched::m0tick1_s = {
&TTSched::active_s, // superstate
&TTSched::m0tick1,
Q_ACTION_NULL, // no entry action
Q_ACTION_NULL, // no exit action
Q_ACTION_NULL // no initial tran.
};
//${Components::TTSched::SM::active::m0tick1}
QM_STATE_DEF(TTSched, m0tick1) {
QP::QState status_;
switch (e->sig) {
//${Components::TTSched::SM::active::m0tick1::TICK}
case TICK_SIG: {
static QP::QMTranActTable const tatbl_ = { // tran-action table
&m0tick2_s, // target state
{
Q_ACTION_NULL // zero terminator
}
};
status_ = qm_tran(&tatbl_);
break;
}
default: {
status_ = Q_RET_SUPER;
break;
}
}
return status_;
}
//${Components::TTSched::SM::active::m0tick2} ................................
QP::QMState const TTSched::m0tick2_s = {
&TTSched::active_s, // superstate
&TTSched::m0tick2,
Q_ACTION_NULL, // no entry action
Q_ACTION_NULL, // no exit action
Q_ACTION_NULL // no initial tran.
};
//${Components::TTSched::SM::active::m0tick2}
QM_STATE_DEF(TTSched, m0tick2) {
QP::QState status_;
switch (e->sig) {
//${Components::TTSched::SM::active::m0tick2::TICK}
case TICK_SIG: {
AO_Periodic4->POST(&runEvt, 0U);
static QP::QMTranActTable const tatbl_ = { // tran-action table
&m0tick3_s, // target state
{
Q_ACTION_NULL // zero terminator
}
};
status_ = qm_tran(&tatbl_);
break;
}
default: {
status_ = Q_RET_SUPER;
break;
}
}
return status_;
}
//${Components::TTSched::SM::active::m0tick3} ................................
QP::QMState const TTSched::m0tick3_s = {
&TTSched::active_s, // superstate
&TTSched::m0tick3,
Q_ACTION_NULL, // no entry action
Q_ACTION_NULL, // no exit action
Q_ACTION_NULL // no initial tran.
};
//${Components::TTSched::SM::active::m0tick3}
QM_STATE_DEF(TTSched, m0tick3) {
QP::QState status_;
switch (e->sig) {
//${Components::TTSched::SM::active::m0tick3::TICK}
case TICK_SIG: {
AO_Periodic1->POST(&runEvt, 0U);
static QP::QMTranActTable const tatbl_ = { // tran-action table
&m0tick0_s, // target state
{
Q_ACTION_NULL // zero terminator
}
};
status_ = qm_tran(&tatbl_);
break;
}
default: {
status_ = Q_RET_SUPER;
break;
}
}
return status_;
}
//${Components::TTSched::SM::active::m1tick0} ................................
QP::QMState const TTSched::m1tick0_s = {
&TTSched::active_s, // superstate
&TTSched::m1tick0,
Q_ACTION_NULL, // no entry action
Q_ACTION_NULL, // no exit action
Q_ACTION_NULL // no initial tran.
};
//${Components::TTSched::SM::active::m1tick0}
QM_STATE_DEF(TTSched, m1tick0) {
QP::QState status_;
switch (e->sig) {
//${Components::TTSched::SM::active::m1tick0::TICK}
case TICK_SIG: {
AO_Periodic4->POST(&runEvt, 0U);
AO_Sporadic3->POST(&runEvt, 0U);
static QP::QMTranActTable const tatbl_ = { // tran-action table
&m1tick1_s, // target state
{
Q_ACTION_NULL // zero terminator
}
};
status_ = qm_tran(&tatbl_);
break;
}
default: {
status_ = Q_RET_SUPER;
break;
}
}
return status_;
}
//${Components::TTSched::SM::active::m1tick1} ................................
QP::QMState const TTSched::m1tick1_s = {
&TTSched::active_s, // superstate
&TTSched::m1tick1,
Q_ACTION_NULL, // no entry action
Q_ACTION_NULL, // no exit action
Q_ACTION_NULL // no initial tran.
};
//${Components::TTSched::SM::active::m1tick1}
QM_STATE_DEF(TTSched, m1tick1) {
QP::QState status_;
switch (e->sig) {
//${Components::TTSched::SM::active::m1tick1::TICK}
case TICK_SIG: {
AO_Periodic4->POST(&runEvt, 0U);
AO_Sporadic3->POST(&runEvt, 0U);
static QP::QMTranActTable const tatbl_ = { // tran-action table
&m1tick2_s, // target state
{
Q_ACTION_NULL // zero terminator
}
};
status_ = qm_tran(&tatbl_);
break;
}
default: {
status_ = Q_RET_SUPER;
break;
}
}
return status_;
}
//${Components::TTSched::SM::active::m1tick2} ................................
QP::QMState const TTSched::m1tick2_s = {
&TTSched::active_s, // superstate
&TTSched::m1tick2,
Q_ACTION_NULL, // no entry action
Q_ACTION_NULL, // no exit action
Q_ACTION_NULL // no initial tran.
};
//${Components::TTSched::SM::active::m1tick2}
QM_STATE_DEF(TTSched, m1tick2) {
QP::QState status_;
switch (e->sig) {
//${Components::TTSched::SM::active::m1tick2::TICK}
case TICK_SIG: {
AO_Periodic4->POST(&runEvt, 0U);
AO_Sporadic2->POST(&runEvt, 0U);
static QP::QMTranActTable const tatbl_ = { // tran-action table
&m1tick3_s, // target state
{
Q_ACTION_NULL // zero terminator
}
};
status_ = qm_tran(&tatbl_);
break;
}
default: {
status_ = Q_RET_SUPER;
break;
}
}
return status_;
}
//${Components::TTSched::SM::active::m1tick3} ................................
QP::QMState const TTSched::m1tick3_s = {
&TTSched::active_s, // superstate
&TTSched::m1tick3,
Q_ACTION_NULL, // no entry action
Q_ACTION_NULL, // no exit action
Q_ACTION_NULL // no initial tran.
};
//${Components::TTSched::SM::active::m1tick3}
QM_STATE_DEF(TTSched, m1tick3) {
QP::QState status_;
switch (e->sig) {
//${Components::TTSched::SM::active::m1tick3::TICK}
case TICK_SIG: {
AO_Periodic4->POST(&runEvt, 0U);
AO_Sporadic3->POST(&runEvt, 0U);
static QP::QMTranActTable const tatbl_ = { // tran-action table
&m1tick4_s, // target state
{
Q_ACTION_NULL // zero terminator
}
};
status_ = qm_tran(&tatbl_);
break;
}
default: {
status_ = Q_RET_SUPER;
break;
}
}
return status_;
}
//${Components::TTSched::SM::active::m1tick4} ................................
QP::QMState const TTSched::m1tick4_s = {
&TTSched::active_s, // superstate
&TTSched::m1tick4,
Q_ACTION_NULL, // no entry action
Q_ACTION_NULL, // no exit action
Q_ACTION_NULL // no initial tran.
};
//${Components::TTSched::SM::active::m1tick4}
QM_STATE_DEF(TTSched, m1tick4) {
QP::QState status_;
switch (e->sig) {
//${Components::TTSched::SM::active::m1tick4::TICK}
case TICK_SIG: {
AO_Periodic4->POST(&runEvt, 0U);
AO_Periodic1->POST(&runEvt, 0U);
static QP::QMTranActTable const tatbl_ = { // tran-action table
&m1tick5_s, // target state
{
Q_ACTION_NULL // zero terminator
}
};
status_ = qm_tran(&tatbl_);
break;
}
default: {
status_ = Q_RET_SUPER;
break;
}
}
return status_;
}
//${Components::TTSched::SM::active::m1tick5} ................................
QP::QMState const TTSched::m1tick5_s = {
&TTSched::active_s, // superstate
&TTSched::m1tick5,
Q_ACTION_NULL, // no entry action
Q_ACTION_NULL, // no exit action
Q_ACTION_NULL // no initial tran.
};
//${Components::TTSched::SM::active::m1tick5}
QM_STATE_DEF(TTSched, m1tick5) {
QP::QState status_;
switch (e->sig) {
//${Components::TTSched::SM::active::m1tick5::TICK}
case TICK_SIG: {
AO_Periodic4->POST(&runEvt, 0U);
AO_Sporadic3->POST(&runEvt, 0U);
static QP::QMTranActTable const tatbl_ = { // tran-action table
&m1tick0_s, // target state
{
Q_ACTION_NULL // zero terminator
}
};
status_ = qm_tran(&tatbl_);
break;
}
default: {
status_ = Q_RET_SUPER;
break;
}
}
return status_;
}
} // namespace APP
//$enddef${Components::TTSched} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

View File

@ -0,0 +1,97 @@
//$file${.::app.hpp} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
//
// Model: real-time-ms.qm
// File: ${.::app.hpp}
//
// This code has been generated by QM 5.3.0 <www.state-machine.com/qm>.
// 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:
// <www.state-machine.com/licensing>
// <info@state-machine.com>
//
//$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,
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;
} // namespace APP
//$enddecl${Shared} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
#endif // APP_HPP_

View File

@ -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)
}
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,297 @@
//============================================================================
// BSP for "real-time" Example
// Last updated for version 7.3.1
// Last updated on 2023-10-03
//
// 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: <www.gnu.org/licenses/gpl-3.0>
//
// The terms of the closed source Quantum Leaps commercial licenses
// can be found at: <www.state-machine.com/licensing>
//
// Redistributions in source code must retain this top-level comment block.
// Plagiarizing this software to sidestep the license obligations is illegal.
//
// Contact information:
// <www.state-machine.com/licensing>
// <info@state-machine.com>
//============================================================================
#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(void); // prototype
void SysTick_Handler(void) {
BSP::d1on();
QP::QTimeEvt::TICK_X(0U, &l_SysTick_Handler); // time events at rate 0
#ifdef USE_SCHED_DISABLE
QP::QV::schedEnable(); // <== enable the scheduler to process next clock tick
#endif
// 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);
}
}
QV_ARM_ERRATUM_838869();
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(
1U, // QF-prio
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(
2U, // QF-prio
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(
3U, // QF-prio
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(
4U, // QF-prio
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 QV::onIdle() { // CAUTION: called with interrupts DISABLED
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();
QV_CPU_SLEEP(); // atomically go to sleep and enable interrupts
BSP::d7on();
#else
QF_INT_ENABLE(); // just enable interrupts
#endif
BSP::d7off();
}
} // namespace QP

View File

@ -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: <www.gnu.org/licenses/gpl-3.0>
//
// The terms of the closed source Quantum Leaps commercial licenses
// can be found at: <www.state-machine.com/licensing>
//
// Redistributions in source code must retain this top-level comment block.
// Plagiarizing this software to sidestep the license obligations is illegal.
//
// Contact information:
// <www.state-machine.com/licensing>
// <info@state-machine.com>
//============================================================================
#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_

View File

@ -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. <www.state-machine.com>
//
// 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 <www.gnu.org/licenses/>.
//
// Contact information:
// <www.state-machine.com/licensing>
// <info@state-machine.com>
//============================================================================
#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
}

View File

@ -0,0 +1,154 @@
//$file${.::periodic1.cpp} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
//
// Model: real-time-ms.qm
// File: ${.::periodic1.cpp}
//
// This code has been generated by QM 5.3.0 <www.state-machine.com/qm>.
// 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:
// <www.state-machine.com/licensing>
// <info@state-machine.com>
//
//$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();
}
#ifdef USE_SCHED_DISABLE
QP::QV::schedDisable(1U); // <== disable scheduler up to given prio.
#endif
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} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

View File

@ -0,0 +1,150 @@
//$file${.::periodic4.cpp} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
//
// Model: real-time-ms.qm
// File: ${.::periodic4.cpp}
//
// This code has been generated by QM 5.3.0 <www.state-machine.com/qm>.
// 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:
// <www.state-machine.com/licensing>
// <info@state-machine.com>
//
//$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} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

View File

@ -0,0 +1,379 @@
<?xml version="1.0" encoding="UTF-8"?>
<model version="5.3.0" links="0">
<framework name="qpcpp"/>
<package name="Shared" stereotype="0x01" namespace="APP::">
<attribute name="AppSignals" type="enum" visibility="0x04" properties="0x00">
<code>: QP::QSignal {
PERIODIC_SPEC_SIG = QP::Q_USER_SIG,
TIMEOUT_SIG,
SPORADIC_A_SIG,
SPORADIC_B_SIG,
REMINDER_SIG,
// ...
MAX_SIG // the last signal
};</code>
</attribute>
<class name="PeriodicSpecEvt" superclass="qpcpp::QEvt">
<attribute name="toggles" type="std::uint16_t" visibility="0x00" properties="0x00"/>
<attribute name="ticks" type="std::uint8_t" visibility="0x00" properties="0x00"/>
<operation name="PeriodicSpecEvt" type="constexpr" visibility="0x00" properties="0x02">
<parameter name="s" type="QP::QSignal"/>
<parameter name="tg" type="std::uint16_t"/>
<parameter name="ti" type="std::uint8_t"/>
<code> : QP::QEvt(s),
toggles(tg),
ticks(ti)</code>
</operation>
</class>
<class name="SporadicSpecEvt" superclass="qpcpp::QEvt">
<attribute name="toggles" type="std::uint16_t" visibility="0x00" properties="0x00"/>
<attribute name="rtc_toggles" type="std::uint16_t" visibility="0x00" properties="0x00"/>
<operation name="SporadicSpecEvt" type="constexpr" visibility="0x00" properties="0x02">
<parameter name="s" type="QP::QSignal"/>
<parameter name="tg" type="std::uint16_t"/>
<parameter name="rtc" type="std::uint16_t"/>
<code> : QP::QEvt(s),
toggles(tg),
rtc_toggles(rtc)</code>
</operation>
</class>
<attribute name="AO_Periodic1" type="QP::QActive * const" visibility="0x00" properties="0x00">
<code>{&amp;Periodic1::inst};</code>
</attribute>
<attribute name="AO_Periodic4" type="QP::QActive * const" visibility="0x00" properties="0x00">
<code>{&amp;Periodic4::inst};</code>
</attribute>
<attribute name="AO_Sporadic2" type="QP::QActive * const" visibility="0x00" properties="0x00">
<code>{&amp;Sporadic2::inst};</code>
</attribute>
<attribute name="AO_Sporadic3" type="QP::QActive * const" visibility="0x00" properties="0x00">
<code>{&amp;Sporadic3::inst};</code>
</attribute>
</package>
<package name="AOs" stereotype="0x02" namespace="APP::">
<class name="Periodic1" superclass="qpcpp::QMActive">
<attribute name="m_te" type="QP::QTimeEvt" visibility="0x02" properties="0x00"/>
<attribute name="m_toggles" type="std::uint16_t" visibility="0x02" properties="0x00"/>
<attribute name="inst" type="Periodic1" visibility="0x00" properties="0x01"/>
<operation name="Periodic1" type="" visibility="0x00" properties="0x00">
<code> : QMActive(Q_STATE_CAST(&amp;Periodic1::initial)),
m_te(this, TIMEOUT_SIG, 0U)</code>
</operation>
<statechart properties="0x02">
<initial target="../1">
<action>Q_REQUIRE_ID(300, (QP::QEvt::verify_(e))
&amp;&amp; (e-&gt;sig == PERIODIC_SPEC_SIG));
m_te.armX(Q_EVT_CAST(PeriodicSpecEvt)-&gt;ticks,
Q_EVT_CAST(PeriodicSpecEvt)-&gt;ticks);
m_toggles = Q_EVT_CAST(PeriodicSpecEvt)-&gt;toggles;</action>
<initial_glyph conn="2,4,5,1,46,4,-2">
<action box="0,-2,6,2"/>
</initial_glyph>
</initial>
<state name="active">
<tran trig="TIMEOUT">
<action brief="long-RTC">for (std::uint16_t i = m_toggles; i &gt; 0U; --i) {
BSP::d6on();
BSP::d6off();
}
#ifdef USE_SCHED_DISABLE
QP::QV::schedDisable(1U); // &lt;== disable scheduler up to given prio.
#endif</action>
<tran_glyph conn="2,20,3,-1,40">
<action box="0,-2,19,2"/>
</tran_glyph>
</tran>
<tran trig="PERIODIC_SPEC">
<action>BSP::d6on();
m_te.disarm();
m_te.armX(Q_EVT_CAST(PeriodicSpecEvt)-&gt;ticks,
Q_EVT_CAST(PeriodicSpecEvt)-&gt;ticks);
m_toggles = Q_EVT_CAST(PeriodicSpecEvt)-&gt;toggles;
BSP::d6off();</action>
<tran_glyph conn="2,14,3,-1,40">
<action box="0,-2,35,2"/>
</tran_glyph>
</tran>
<state_glyph node="2,6,44,18"/>
</state>
<state_diagram size="50,28"/>
</statechart>
</class>
<class name="Periodic4" superclass="qpcpp::QMActive">
<attribute name="m_te" type="QP::QTimeEvt" visibility="0x02" properties="0x00"/>
<attribute name="m_toggles" type="std::uint16_t" visibility="0x02" properties="0x00"/>
<attribute name="inst" type="Periodic4" visibility="0x00" properties="0x01"/>
<operation name="Periodic4" type="" visibility="0x00" properties="0x00">
<code> : QMActive(Q_STATE_CAST(&amp;Periodic4::initial)),
m_te(this, TIMEOUT_SIG, 0U)</code>
</operation>
<statechart properties="0x02">
<initial target="../1">
<action>Q_REQUIRE_ID(300, QP::QEvt::verify_(e)
&amp;&amp; (e-&gt;sig == PERIODIC_SPEC_SIG));
m_te.armX(Q_EVT_CAST(PeriodicSpecEvt)-&gt;ticks,
Q_EVT_CAST(PeriodicSpecEvt)-&gt;ticks);
m_toggles = Q_EVT_CAST(PeriodicSpecEvt)-&gt;toggles;</action>
<initial_glyph conn="2,4,5,1,46,4,-2">
<action box="0,-2,6,2"/>
</initial_glyph>
</initial>
<state name="active">
<tran trig="TIMEOUT">
<action brief="long-RTC">for (std::uint16_t i = m_toggles; i &gt; 0U; --i) {
BSP::d3on();
BSP::d3off();
}</action>
<tran_glyph conn="2,20,3,-1,40">
<action box="0,-2,19,2"/>
</tran_glyph>
</tran>
<tran trig="PERIODIC_SPEC">
<action>BSP::d3on();
m_te.disarm();
m_te.armX(Q_EVT_CAST(PeriodicSpecEvt)-&gt;ticks,
Q_EVT_CAST(PeriodicSpecEvt)-&gt;ticks);
m_toggles = Q_EVT_CAST(PeriodicSpecEvt)-&gt;toggles;
BSP::d3off();</action>
<tran_glyph conn="2,14,3,-1,40">
<action box="0,-2,15,2"/>
</tran_glyph>
</tran>
<state_glyph node="2,6,44,18"/>
</state>
<state_diagram size="50,28"/>
</statechart>
</class>
<class name="Sporadic2" superclass="qpcpp::QMActive">
<attribute name="m_per_rtc" type="std::uint16_t" visibility="0x00" properties="0x00"/>
<attribute name="m_total" type="std::uint16_t" visibility="0x00" properties="0x00"/>
<attribute name="m_done" type="std::uint16_t" visibility="0x00" properties="0x00"/>
<attribute name="inst" type="Sporadic2" visibility="0x00" properties="0x01"/>
<operation name="Sporadic2" type="" visibility="0x00" properties="0x00">
<code> : QMActive(Q_STATE_CAST(&amp;Sporadic2::initial))</code>
</operation>
<statechart properties="0x02">
<initial target="../1">
<action>Q_UNUSED_PAR(e);</action>
<initial_glyph conn="2,4,5,1,44,4,-2">
<action box="0,-2,6,2"/>
</initial_glyph>
</initial>
<state name="active">
<tran trig="SPORADIC_A">
<action brief="post-Sporadic3">BSP::d5on();
AO_Sporadic3-&gt;POST(e, this); // Sporadic2 --&gt; Sporadic3
BSP::d5off();</action>
<tran_glyph conn="2,12,3,-1,34">
<action box="0,-2,35,3"/>
</tran_glyph>
</tran>
<tran trig="SPORADIC_B" target="../2">
<action brief="post-to-Periodic1,long-RTC">BSP::d5on();
AO_Periodic1-&gt;POST(BSP::getEvtPeriodic1(1U), this);
m_per_rtc = Q_EVT_CAST(SporadicSpecEvt)-&gt;rtc_toggles;
m_total = Q_EVT_CAST(SporadicSpecEvt)-&gt;toggles;
m_done = 0U;
#ifdef USE_SCHED_DISABLE
QP::QV::schedDisable(2U); // &lt;== disable scheduler up to given prio.
#endif
BSP::d5off();</action>
<tran_glyph conn="2,16,3,1,40,6,-2">
<action box="0,-2,34,2"/>
</tran_glyph>
</tran>
<state name="busy">
<entry>BSP::d5on();
static QP::QEvt const reminderEvt(REMINDER_SIG);
postLIFO(&amp;reminderEvt);
BSP::d5off();</entry>
<tran trig="REMINDER">
<action>std::uint16_t toggles = m_total - m_done;
if (toggles &gt; m_per_rtc) {
toggles = m_per_rtc;
}
m_done += toggles;
for (; toggles &gt; 0U; --toggles) {
BSP::d5on();
BSP::d5off();
}
#ifdef USE_SCHED_DISABLE
QP::QV::schedDisable(2U); // &lt;== disable scheduler up to given prio.
#endif</action>
<choice target="../..">
<guard>m_done &lt; m_total</guard>
<choice_glyph conn="18,28,5,0,22">
<action box="1,0,21,2"/>
</choice_glyph>
</choice>
<choice target="../../..">
<guard brief="else"/>
<choice_glyph conn="18,28,4,1,6,26">
<action box="1,6,10,2"/>
</choice_glyph>
</choice>
<tran_glyph conn="4,28,3,-1,14">
<action box="0,-2,10,2"/>
</tran_glyph>
</tran>
<state_glyph node="4,20,36,12">
<entry box="1,2,6,2"/>
</state_glyph>
</state>
<state_glyph node="2,6,42,34"/>
</state>
<state_diagram size="50,44"/>
</statechart>
</class>
<class name="Sporadic3" superclass="qpcpp::QMActive">
<attribute name="m_per_rtc" type="std::uint16_t" visibility="0x00" properties="0x00"/>
<attribute name="m_total" type="std::uint16_t" visibility="0x00" properties="0x00"/>
<attribute name="m_done" type="std::uint16_t" visibility="0x00" properties="0x00"/>
<attribute name="inst" type="Sporadic3" visibility="0x00" properties="0x01"/>
<operation name="Sporadic3" type="" visibility="0x00" properties="0x00">
<code> : QMActive(Q_STATE_CAST(&amp;Sporadic3::initial))</code>
</operation>
<statechart properties="0x02">
<initial target="../1">
<action>Q_UNUSED_PAR(e);</action>
<initial_glyph conn="2,4,5,1,44,4,-2">
<action box="0,-2,6,2"/>
</initial_glyph>
</initial>
<state name="active">
<tran trig="SPORADIC_A" target="../1">
<action brief="post-to-Periodic4,long-RTC">BSP::d4on();
AO_Periodic4-&gt;POST(BSP::getEvtPeriodic4(1U), this);
m_per_rtc = Q_EVT_CAST(SporadicSpecEvt)-&gt;rtc_toggles;
m_total = Q_EVT_CAST(SporadicSpecEvt)-&gt;toggles;
m_done = 0U;
#ifdef USE_SCHED_DISABLE
QP::QV::schedDisable(3U); // &lt;== disable scheduler up to given prio.
#endif
BSP::d4off();</action>
<tran_glyph conn="2,12,3,1,40,10,-2">
<action box="0,-2,37,2"/>
</tran_glyph>
</tran>
<state name="busy">
<entry>BSP::d4on();
static QP::QEvt const reminderEvt(REMINDER_SIG);
postLIFO(&amp;reminderEvt);
BSP::d4off();</entry>
<tran trig="REMINDER">
<action>std::uint16_t toggles = m_total - m_done;
if (toggles &gt; m_per_rtc) {
toggles = m_per_rtc;
}
m_done += toggles;
for (; toggles &gt; 0U; --toggles) {
BSP::d4on();
BSP::d4off();
}
#ifdef USE_SCHED_DISABLE
QP::QV::schedDisable(3U); // &lt;== disable scheduler up to given prio.
#endif</action>
<choice target="../..">
<guard>m_done &lt; m_total</guard>
<choice_glyph conn="18,28,5,0,22">
<action box="1,0,21,2"/>
</choice_glyph>
</choice>
<choice target="../../..">
<guard brief="else"/>
<choice_glyph conn="18,28,4,1,6,26">
<action box="1,6,10,2"/>
</choice_glyph>
</choice>
<tran_glyph conn="4,28,3,-1,14">
<action box="0,-2,10,2"/>
</tran_glyph>
</tran>
<state_glyph node="4,20,36,12">
<entry box="1,2,6,2"/>
</state_glyph>
</state>
<state_glyph node="2,6,42,34"/>
</state>
<state_diagram size="50,44"/>
</statechart>
</class>
</package>
<directory name=".">
<file name="app.hpp">
<text>#ifndef APP_HPP_
#define APP_HPP_
$declare ${Shared}
#endif // APP_HPP_</text>
</file>
<file name="periodic1.cpp">
<text>#include &quot;qpcpp.hpp&quot; // QP/C++ real-time embedded framework
#include &quot;bsp.hpp&quot; // Board Support Package
#include &quot;app.hpp&quot; // Application interface
namespace {
Q_DEFINE_THIS_MODULE(&quot;periodic1&quot;)
}
$declare ${AOs::Periodic1}
$define ${Shared::AO_Periodic1}
$define ${AOs::Periodic1}</text>
</file>
<file name="periodic4.cpp">
<text>#include &quot;qpcpp.hpp&quot; // QP/C++ real-time embedded framework
#include &quot;bsp.hpp&quot; // Board Support Package
#include &quot;app.hpp&quot; // Application interface
namespace {
Q_DEFINE_THIS_MODULE(&quot;periodic4&quot;)
}
$declare ${AOs::Periodic4}
$define ${Shared::AO_Periodic4}
$define ${AOs::Periodic4}</text>
</file>
<file name="sporadic2.cpp">
<text>#include &quot;qpcpp.hpp&quot; // QP/C++ real-time embedded framework
#include &quot;bsp.hpp&quot; // Board Support Package
#include &quot;app.hpp&quot; // Application interface
namespace {
Q_DEFINE_THIS_MODULE(&quot;sporadic2&quot;)
}
$declare ${AOs::Sporadic2}
$define ${Shared::AO_Sporadic2}
$define ${AOs::Sporadic2}</text>
</file>
<file name="sporadic3.cpp">
<text>#include &quot;qpcpp.hpp&quot; // QP/C++ real-time embedded framework
#include &quot;bsp.hpp&quot; // Board Support Package
#include &quot;app.hpp&quot; // Application interface
namespace {
Q_DEFINE_THIS_MODULE(&quot;sporadic3&quot;)
}
$declare ${AOs::Sporadic3}
$define ${Shared::AO_Sporadic3}
$define ${AOs::Sporadic3}</text>
</file>
</directory>
</model>

View File

@ -0,0 +1,232 @@
//$file${.::sporadic2.cpp} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
//
// Model: real-time-ms.qm
// File: ${.::sporadic2.cpp}
//
// This code has been generated by QM 5.3.0 <www.state-machine.com/qm>.
// 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:
// <www.state-machine.com/licensing>
// <info@state-machine.com>
//
//$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:
std::uint16_t m_per_rtc;
std::uint16_t m_total;
std::uint16_t m_done;
static Sporadic2 inst;
public:
Sporadic2();
protected:
QM_STATE_DECL( initial);
QM_STATE_DECL( active);
QM_STATE_DECL( busy);
QM_ACTION_DECL(busy_e);
}; // 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);
QS_FUN_DICTIONARY(&Sporadic2::busy);
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);
m_per_rtc = Q_EVT_CAST(SporadicSpecEvt)->rtc_toggles;
m_total = Q_EVT_CAST(SporadicSpecEvt)->toggles;
m_done = 0U;
#ifdef USE_SCHED_DISABLE
QP::QV::schedDisable(2U); // <== disable scheduler up to given prio.
#endif
BSP::d5off();
static struct {
QP::QMState const *target;
QP::QActionHandler act[2];
} const tatbl_ = { // tran-action table
&busy_s, // target state
{
&busy_e, // entry
Q_ACTION_NULL // zero terminator
}
};
status_ = qm_tran(&tatbl_);
break;
}
default: {
status_ = Q_RET_SUPER;
break;
}
}
return status_;
}
//${AOs::Sporadic2::SM::active::busy} ........................................
QP::QMState const Sporadic2::busy_s = {
&Sporadic2::active_s, // superstate
&Sporadic2::busy,
&Sporadic2::busy_e,
Q_ACTION_NULL, // no exit action
Q_ACTION_NULL // no initial tran.
};
//${AOs::Sporadic2::SM::active::busy}
QM_ACTION_DEF(Sporadic2, busy_e) {
BSP::d5on();
static QP::QEvt const reminderEvt(REMINDER_SIG);
postLIFO(&reminderEvt);
BSP::d5off();
return qm_entry(&busy_s);
}
//${AOs::Sporadic2::SM::active::busy}
QM_STATE_DEF(Sporadic2, busy) {
QP::QState status_;
switch (e->sig) {
//${AOs::Sporadic2::SM::active::busy::REMINDER}
case REMINDER_SIG: {
std::uint16_t toggles = m_total - m_done;
if (toggles > m_per_rtc) {
toggles = m_per_rtc;
}
m_done += toggles;
for (; toggles > 0U; --toggles) {
BSP::d5on();
BSP::d5off();
}
#ifdef USE_SCHED_DISABLE
QP::QV::schedDisable(2U); // <== disable scheduler up to given prio.
#endif
//${AOs::Sporadic2::SM::active::busy::REMINDER::[m_done<m_total]}
if (m_done < m_total) {
static struct {
QP::QMState const *target;
QP::QActionHandler act[2];
} const tatbl_ = { // tran-action table
&busy_s, // target state
{
&busy_e, // entry
Q_ACTION_NULL // zero terminator
}
};
status_ = qm_tran(&tatbl_);
}
//${AOs::Sporadic2::SM::active::busy::REMINDER::[else]}
else {
static QP::QMTranActTable const tatbl_ = { // tran-action table
&active_s, // target state
{
Q_ACTION_NULL // zero terminator
}
};
status_ = qm_tran(&tatbl_);
}
break;
}
default: {
status_ = Q_RET_SUPER;
break;
}
}
return status_;
}
} // namespace APP
//$enddef${AOs::Sporadic2} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

View File

@ -0,0 +1,224 @@
//$file${.::sporadic3.cpp} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
//
// Model: real-time-ms.qm
// File: ${.::sporadic3.cpp}
//
// This code has been generated by QM 5.3.0 <www.state-machine.com/qm>.
// 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:
// <www.state-machine.com/licensing>
// <info@state-machine.com>
//
//$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:
std::uint16_t m_per_rtc;
std::uint16_t m_total;
std::uint16_t m_done;
static Sporadic3 inst;
public:
Sporadic3();
protected:
QM_STATE_DECL( initial);
QM_STATE_DECL( active);
QM_STATE_DECL( busy);
QM_ACTION_DECL(busy_e);
}; // 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);
QS_FUN_DICTIONARY(&Sporadic3::busy);
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();
AO_Periodic4->POST(BSP::getEvtPeriodic4(1U), this);
m_per_rtc = Q_EVT_CAST(SporadicSpecEvt)->rtc_toggles;
m_total = Q_EVT_CAST(SporadicSpecEvt)->toggles;
m_done = 0U;
#ifdef USE_SCHED_DISABLE
QP::QV::schedDisable(3U); // <== disable scheduler up to given prio.
#endif
BSP::d4off();
static struct {
QP::QMState const *target;
QP::QActionHandler act[2];
} const tatbl_ = { // tran-action table
&busy_s, // target state
{
&busy_e, // entry
Q_ACTION_NULL // zero terminator
}
};
status_ = qm_tran(&tatbl_);
break;
}
default: {
status_ = Q_RET_SUPER;
break;
}
}
return status_;
}
//${AOs::Sporadic3::SM::active::busy} ........................................
QP::QMState const Sporadic3::busy_s = {
&Sporadic3::active_s, // superstate
&Sporadic3::busy,
&Sporadic3::busy_e,
Q_ACTION_NULL, // no exit action
Q_ACTION_NULL // no initial tran.
};
//${AOs::Sporadic3::SM::active::busy}
QM_ACTION_DEF(Sporadic3, busy_e) {
BSP::d4on();
static QP::QEvt const reminderEvt(REMINDER_SIG);
postLIFO(&reminderEvt);
BSP::d4off();
return qm_entry(&busy_s);
}
//${AOs::Sporadic3::SM::active::busy}
QM_STATE_DEF(Sporadic3, busy) {
QP::QState status_;
switch (e->sig) {
//${AOs::Sporadic3::SM::active::busy::REMINDER}
case REMINDER_SIG: {
std::uint16_t toggles = m_total - m_done;
if (toggles > m_per_rtc) {
toggles = m_per_rtc;
}
m_done += toggles;
for (; toggles > 0U; --toggles) {
BSP::d4on();
BSP::d4off();
}
#ifdef USE_SCHED_DISABLE
QP::QV::schedDisable(3U); // <== disable scheduler up to given prio.
#endif
//${AOs::Sporadic3::SM::active::busy::REMINDER::[m_done<m_total]}
if (m_done < m_total) {
static struct {
QP::QMState const *target;
QP::QActionHandler act[2];
} const tatbl_ = { // tran-action table
&busy_s, // target state
{
&busy_e, // entry
Q_ACTION_NULL // zero terminator
}
};
status_ = qm_tran(&tatbl_);
}
//${AOs::Sporadic3::SM::active::busy::REMINDER::[else]}
else {
static QP::QMTranActTable const tatbl_ = { // tran-action table
&active_s, // target state
{
Q_ACTION_NULL // zero terminator
}
};
status_ = qm_tran(&tatbl_);
}
break;
}
default: {
status_ = Q_RET_SUPER;
break;
}
}
return status_;
}
} // namespace APP
//$enddef${AOs::Sporadic3} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

View File

@ -0,0 +1,83 @@
[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=1
[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=3
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
[meta_obj0]
type=selection
assoc_view=0
start_time=22 serialization::archive 14 0 0 0 0 571733 33333333 32948122 95122255 81856909 58237950 -8 0 0 6
end_time=22 serialization::archive 14 0 0 0 0 2019200 0 1613820 18859512 75471597 8624548 -8 0 0 6

View File

@ -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 <www.state-machine.com/qm>.
// 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:
// <www.state-machine.com/licensing>
// <info@state-machine.com>
//
//$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_

View File

@ -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)
}
}

File diff suppressed because it is too large Load Diff

Some files were not shown because too many files have changed in this diff Show More