mirror of
https://github.com/QuantumLeaps/qpcpp.git
synced 2025-01-28 06:02:56 +08:00
parent
80d9bcd6fb
commit
32399054b8
@ -1 +1 @@
|
||||
Subproject commit de077b869b8980d124d9df3e5f7327500e28f178
|
||||
Subproject commit 90b36151b30c5e4b1cf8fa2ab7862568a75806e9
|
19
LICENSES/License.txt
Normal file
19
LICENSES/License.txt
Normal 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.
|
@ -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
|
||||
|
@ -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>
|
||||
|
@ -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>
|
@ -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>
|
||||
|
@ -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>
|
||||
|
271
examples/arm-cm/dpp_ek-tm4c123gxl/qp_config.hpp
Normal file
271
examples/arm-cm/dpp_ek-tm4c123gxl/qp_config.hpp
Normal 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_
|
@ -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>
|
||||
|
@ -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>
|
||||
|
@ -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>
|
||||
|
@ -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>
|
||||
|
@ -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>
|
||||
|
@ -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];
|
||||
|
@ -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>
|
||||
|
@ -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>
|
||||
|
@ -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>
|
||||
|
984
examples/arm-cm/dpp_nucleo-c031c6/qv/gnu/dpp-qv.uvoptx
Normal file
984
examples/arm-cm/dpp_nucleo-c031c6/qv/gnu/dpp-qv.uvoptx
Normal 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>
|
1473
examples/arm-cm/dpp_nucleo-c031c6/qv/gnu/dpp-qv.uvprojx
Normal file
1473
examples/arm-cm/dpp_nucleo-c031c6/qv/gnu/dpp-qv.uvprojx
Normal file
File diff suppressed because it is too large
Load Diff
@ -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>
|
||||
|
@ -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 */
|
@ -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 */
|
23
examples/arm-cm/dpp_nucleo-c031c6/qxk/arm-pack/dpp-qxk.sct
Normal file
23
examples/arm-cm/dpp_nucleo-c031c6/qxk/arm-pack/dpp-qxk.sct
Normal 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)
|
||||
}
|
||||
}
|
||||
|
792
examples/arm-cm/dpp_nucleo-c031c6/qxk/arm-pack/dpp-qxk.uvoptx
Normal file
792
examples/arm-cm/dpp_nucleo-c031c6/qxk/arm-pack/dpp-qxk.uvoptx
Normal 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>
|
1415
examples/arm-cm/dpp_nucleo-c031c6/qxk/arm-pack/dpp-qxk.uvprojx
Normal file
1415
examples/arm-cm/dpp_nucleo-c031c6/qxk/arm-pack/dpp-qxk.uvprojx
Normal file
File diff suppressed because it is too large
Load Diff
@ -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
|
||||
|
@ -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>
|
||||
|
@ -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
|
||||
}
|
||||
|
@ -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>
|
||||
|
@ -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>
|
||||
|
@ -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>
|
||||
|
@ -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>
|
||||
|
@ -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
|
||||
}
|
||||
|
||||
|
@ -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>
|
||||
|
@ -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>
|
||||
|
@ -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>
|
||||
|
@ -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.
|
||||
|
@ -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.
|
||||
//
|
||||
|
@ -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>
|
||||
|
@ -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>
|
||||
|
@ -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]
|
||||
|
@ -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>
|
||||
|
@ -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>
|
||||
|
@ -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>
|
||||
|
@ -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]
|
||||
|
@ -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>
|
||||
|
@ -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...
|
||||
|
@ -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>
|
||||
|
@ -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>
|
||||
|
@ -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>
|
||||
|
@ -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>
|
||||
|
64
examples/arm-cm/real-time_nucleo-l053r8/README.md
Normal file
64
examples/arm-cm/real-time_nucleo-l053r8/README.md
Normal 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%
|
96
examples/arm-cm/real-time_nucleo-l053r8/qk/app.hpp
Normal file
96
examples/arm-cm/real-time_nucleo-l053r8/qk/app.hpp
Normal 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_
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
1048
examples/arm-cm/real-time_nucleo-l053r8/qk/armclang/rt-qk.uvoptx
Normal file
1048
examples/arm-cm/real-time_nucleo-l053r8/qk/armclang/rt-qk.uvoptx
Normal file
File diff suppressed because it is too large
Load Diff
1841
examples/arm-cm/real-time_nucleo-l053r8/qk/armclang/rt-qk.uvprojx
Normal file
1841
examples/arm-cm/real-time_nucleo-l053r8/qk/armclang/rt-qk.uvprojx
Normal file
File diff suppressed because it is too large
Load Diff
294
examples/arm-cm/real-time_nucleo-l053r8/qk/bsp.cpp
Normal file
294
examples/arm-cm/real-time_nucleo-l053r8/qk/bsp.cpp
Normal 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
|
69
examples/arm-cm/real-time_nucleo-l053r8/qk/bsp.hpp
Normal file
69
examples/arm-cm/real-time_nucleo-l053r8/qk/bsp.hpp
Normal 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_
|
44
examples/arm-cm/real-time_nucleo-l053r8/qk/main.cpp
Normal file
44
examples/arm-cm/real-time_nucleo-l053r8/qk/main.cpp
Normal 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
|
||||
}
|
150
examples/arm-cm/real-time_nucleo-l053r8/qk/periodic1.cpp
Normal file
150
examples/arm-cm/real-time_nucleo-l053r8/qk/periodic1.cpp
Normal 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} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
150
examples/arm-cm/real-time_nucleo-l053r8/qk/periodic4.cpp
Normal file
150
examples/arm-cm/real-time_nucleo-l053r8/qk/periodic4.cpp
Normal 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} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
287
examples/arm-cm/real-time_nucleo-l053r8/qk/real-time.qm
Normal file
287
examples/arm-cm/real-time_nucleo-l053r8/qk/real-time.qm
Normal 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>{&Periodic1::inst};</code>
|
||||
</attribute>
|
||||
<attribute name="AO_Periodic4" type="QP::QActive * const" visibility="0x00" properties="0x00">
|
||||
<code>{&Periodic4::inst};</code>
|
||||
</attribute>
|
||||
<attribute name="AO_Sporadic2" type="QP::QActive * const" visibility="0x00" properties="0x00">
|
||||
<code>{&Sporadic2::inst};</code>
|
||||
</attribute>
|
||||
<attribute name="AO_Sporadic3" type="QP::QActive * const" visibility="0x00" properties="0x00">
|
||||
<code>{&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(&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))
|
||||
&& (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;</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 > 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)->ticks,
|
||||
Q_EVT_CAST(PeriodicSpecEvt)->ticks);
|
||||
m_toggles = Q_EVT_CAST(PeriodicSpecEvt)->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(&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)
|
||||
&& (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;</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 > 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)->ticks,
|
||||
Q_EVT_CAST(PeriodicSpecEvt)->ticks);
|
||||
m_toggles = Q_EVT_CAST(PeriodicSpecEvt)->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(&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->POST(e, this); // Sporadic2 --> 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->POST(BSP::getEvtPeriodic1(1U), this);
|
||||
BSP::d5off();
|
||||
|
||||
for (std::uint16_t i = Q_EVT_CAST(SporadicSpecEvt)->toggles;
|
||||
i > 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(&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 --> 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();
|
||||
}</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 "qpcpp.hpp" // QP/C++ real-time embedded framework
|
||||
#include "bsp.hpp" // Board Support Package
|
||||
#include "app.hpp" // Application interface
|
||||
|
||||
namespace {
|
||||
Q_DEFINE_THIS_MODULE("periodic1")
|
||||
}
|
||||
|
||||
$declare ${AOs::Periodic1}
|
||||
|
||||
$define ${Shared::AO_Periodic1}
|
||||
$define ${AOs::Periodic1}</text>
|
||||
</file>
|
||||
<file name="periodic4.cpp">
|
||||
<text>#include "qpcpp.hpp" // QP/C++ real-time embedded framework
|
||||
#include "bsp.hpp" // Board Support Package
|
||||
#include "app.hpp" // Application interface
|
||||
|
||||
namespace {
|
||||
Q_DEFINE_THIS_MODULE("periodic4")
|
||||
}
|
||||
|
||||
$declare ${AOs::Periodic4}
|
||||
|
||||
$define ${Shared::AO_Periodic4}
|
||||
$define ${AOs::Periodic4}</text>
|
||||
</file>
|
||||
<file name="sporadic2.cpp">
|
||||
<text>#include "qpcpp.hpp" // QP/C++ real-time embedded framework
|
||||
#include "bsp.hpp" // Board Support Package
|
||||
#include "app.hpp" // Application interface
|
||||
|
||||
namespace {
|
||||
Q_DEFINE_THIS_MODULE("sporadic2")
|
||||
}
|
||||
|
||||
$declare ${AOs::Sporadic2}
|
||||
|
||||
$define ${Shared::AO_Sporadic2}
|
||||
$define ${AOs::Sporadic2}</text>
|
||||
</file>
|
||||
<file name="sporadic3.cpp">
|
||||
<text>#include "qpcpp.hpp" // QP/C++ real-time embedded framework
|
||||
#include "bsp.hpp" // Board Support Package
|
||||
#include "app.hpp" // Application interface
|
||||
|
||||
namespace {
|
||||
Q_DEFINE_THIS_MODULE("sporadic3")
|
||||
}
|
||||
|
||||
$declare ${AOs::Sporadic3}
|
||||
|
||||
$define ${Shared::AO_Sporadic3}
|
||||
$define ${AOs::Sporadic3}</text>
|
||||
</file>
|
||||
</directory>
|
||||
</model>
|
143
examples/arm-cm/real-time_nucleo-l053r8/qk/sporadic2.cpp
Normal file
143
examples/arm-cm/real-time_nucleo-l053r8/qk/sporadic2.cpp
Normal 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} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
136
examples/arm-cm/real-time_nucleo-l053r8/qk/sporadic3.cpp
Normal file
136
examples/arm-cm/real-time_nucleo-l053r8/qk/sporadic3.cpp
Normal 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} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
BIN
examples/arm-cm/real-time_nucleo-l053r8/qk/traces/rt-qk.png
Normal file
BIN
examples/arm-cm/real-time_nucleo-l053r8/qk/traces/rt-qk.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 16 KiB |
77
examples/arm-cm/real-time_nucleo-l053r8/qk/traces/rt-qk.pvs
Normal file
77
examples/arm-cm/real-time_nucleo-l053r8/qk/traces/rt-qk.pvs
Normal 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
|
BIN
examples/arm-cm/real-time_nucleo-l053r8/qk/traces/rt-qk.sr
Normal file
BIN
examples/arm-cm/real-time_nucleo-l053r8/qk/traces/rt-qk.sr
Normal file
Binary file not shown.
106
examples/arm-cm/real-time_nucleo-l053r8/qv-ms-tt/app.hpp
Normal file
106
examples/arm-cm/real-time_nucleo-l053r8/qv-ms-tt/app.hpp
Normal 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_
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
@ -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>
|
@ -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>
|
296
examples/arm-cm/real-time_nucleo-l053r8/qv-ms-tt/bsp.cpp
Normal file
296
examples/arm-cm/real-time_nucleo-l053r8/qv-ms-tt/bsp.cpp
Normal 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
|
69
examples/arm-cm/real-time_nucleo-l053r8/qv-ms-tt/bsp.hpp
Normal file
69
examples/arm-cm/real-time_nucleo-l053r8/qv-ms-tt/bsp.hpp
Normal 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_
|
44
examples/arm-cm/real-time_nucleo-l053r8/qv-ms-tt/main.cpp
Normal file
44
examples/arm-cm/real-time_nucleo-l053r8/qv-ms-tt/main.cpp
Normal 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
|
||||
}
|
143
examples/arm-cm/real-time_nucleo-l053r8/qv-ms-tt/periodic1.cpp
Normal file
143
examples/arm-cm/real-time_nucleo-l053r8/qv-ms-tt/periodic1.cpp
Normal 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} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
143
examples/arm-cm/real-time_nucleo-l053r8/qv-ms-tt/periodic4.cpp
Normal file
143
examples/arm-cm/real-time_nucleo-l053r8/qv-ms-tt/periodic4.cpp
Normal 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} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
@ -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>{&Periodic1::inst};</code>
|
||||
</attribute>
|
||||
<attribute name="AO_Periodic4" type="QP::QActive * const" visibility="0x00" properties="0x00">
|
||||
<code>{&Periodic4::inst};</code>
|
||||
</attribute>
|
||||
<attribute name="AO_Sporadic2" type="QP::QActive * const" visibility="0x00" properties="0x00">
|
||||
<code>{&Sporadic2::inst};</code>
|
||||
</attribute>
|
||||
<attribute name="AO_Sporadic3" type="QP::QActive * const" visibility="0x00" properties="0x00">
|
||||
<code>{&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(&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(&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(&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->POST(&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->POST(&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->POST(&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->POST(&runEvt, 0U);
|
||||
AO_Sporadic3->POST(&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->POST(&runEvt, 0U);
|
||||
AO_Sporadic3->POST(&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->POST(&runEvt, 0U);
|
||||
AO_Sporadic2->POST(&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->POST(&runEvt, 0U);
|
||||
AO_Sporadic3->POST(&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->POST(&runEvt, 0U);
|
||||
AO_Periodic1->POST(&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->POST(&runEvt, 0U);
|
||||
AO_Sporadic3->POST(&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(&Periodic1::initial))</code>
|
||||
</operation>
|
||||
<statechart properties="0x02">
|
||||
<initial target="../1">
|
||||
<action>Q_REQUIRE_ID(300, (QP::QEvt::verify_(e))
|
||||
&& (e->sig == PERIODIC_SPEC_SIG));
|
||||
|
||||
m_toggles = Q_EVT_CAST(PeriodicSpecEvt)->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 > 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)->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(&Periodic4::initial))</code>
|
||||
</operation>
|
||||
<statechart properties="0x02">
|
||||
<initial target="../1">
|
||||
<action>Q_REQUIRE_ID(300, QP::QEvt::verify_(e)
|
||||
&& (e->sig == PERIODIC_SPEC_SIG));
|
||||
|
||||
m_toggles = Q_EVT_CAST(PeriodicSpecEvt)->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 > 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)->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(&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->POST(e, this); // Sporadic2 --> 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->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();</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 > m_per_rtc) {
|
||||
toggles = m_per_rtc;
|
||||
}
|
||||
m_done += toggles;
|
||||
for (; toggles > 0U; --toggles) {
|
||||
BSP::d5on();
|
||||
BSP::d5off();
|
||||
}</entry>
|
||||
<tran trig="RUN">
|
||||
<choice target="../..">
|
||||
<guard>m_done < 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(&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->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();</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 > m_per_rtc) {
|
||||
toggles = m_per_rtc;
|
||||
}
|
||||
m_done += toggles;
|
||||
for (; toggles > 0U; --toggles) {
|
||||
BSP::d4on();
|
||||
BSP::d4off();
|
||||
}</entry>
|
||||
<tran trig="RUN">
|
||||
<choice target="../..">
|
||||
<guard>m_done < 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 "qpcpp.hpp" // QP/C++ real-time embedded framework
|
||||
#include "bsp.hpp" // Board Support Package
|
||||
#include "app.hpp" // Application interface
|
||||
|
||||
$declare ${Components::TTSched}
|
||||
|
||||
Q_DEFINE_THIS_MODULE("ttsched")
|
||||
|
||||
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 "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}
|
||||
|
||||
$define ${Shared::AO_Periodic1}
|
||||
$define ${Components::Periodic1}</text>
|
||||
</file>
|
||||
<file name="periodic4.cpp">
|
||||
<text>#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}
|
||||
|
||||
$define ${Shared::AO_Periodic4}
|
||||
$define ${Components::Periodic4}</text>
|
||||
</file>
|
||||
<file name="sporadic2.cpp">
|
||||
<text>#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}
|
||||
|
||||
$define ${Shared::AO_Sporadic2}
|
||||
$define ${Components::Sporadic2}</text>
|
||||
</file>
|
||||
<file name="sporadic3.cpp">
|
||||
<text>#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}
|
||||
|
||||
$define ${Shared::AO_Sporadic3}
|
||||
$define ${Components::Sporadic3}</text>
|
||||
</file>
|
||||
</directory>
|
||||
</model>
|
228
examples/arm-cm/real-time_nucleo-l053r8/qv-ms-tt/sporadic2.cpp
Normal file
228
examples/arm-cm/real-time_nucleo-l053r8/qv-ms-tt/sporadic2.cpp
Normal 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} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
220
examples/arm-cm/real-time_nucleo-l053r8/qv-ms-tt/sporadic3.cpp
Normal file
220
examples/arm-cm/real-time_nucleo-l053r8/qv-ms-tt/sporadic3.cpp
Normal 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 |
Binary file not shown.
493
examples/arm-cm/real-time_nucleo-l053r8/qv-ms-tt/ttsched.cpp
Normal file
493
examples/arm-cm/real-time_nucleo-l053r8/qv-ms-tt/ttsched.cpp
Normal 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} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
97
examples/arm-cm/real-time_nucleo-l053r8/qv-ms/app.hpp
Normal file
97
examples/arm-cm/real-time_nucleo-l053r8/qv-ms/app.hpp
Normal 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_
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
1048
examples/arm-cm/real-time_nucleo-l053r8/qv-ms/armclang/rt-qv.uvoptx
Normal file
1048
examples/arm-cm/real-time_nucleo-l053r8/qv-ms/armclang/rt-qv.uvoptx
Normal file
File diff suppressed because it is too large
Load Diff
1841
examples/arm-cm/real-time_nucleo-l053r8/qv-ms/armclang/rt-qv.uvprojx
Normal file
1841
examples/arm-cm/real-time_nucleo-l053r8/qv-ms/armclang/rt-qv.uvprojx
Normal file
File diff suppressed because it is too large
Load Diff
297
examples/arm-cm/real-time_nucleo-l053r8/qv-ms/bsp.cpp
Normal file
297
examples/arm-cm/real-time_nucleo-l053r8/qv-ms/bsp.cpp
Normal 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
|
69
examples/arm-cm/real-time_nucleo-l053r8/qv-ms/bsp.hpp
Normal file
69
examples/arm-cm/real-time_nucleo-l053r8/qv-ms/bsp.hpp
Normal 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_
|
44
examples/arm-cm/real-time_nucleo-l053r8/qv-ms/main.cpp
Normal file
44
examples/arm-cm/real-time_nucleo-l053r8/qv-ms/main.cpp
Normal 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
|
||||
}
|
154
examples/arm-cm/real-time_nucleo-l053r8/qv-ms/periodic1.cpp
Normal file
154
examples/arm-cm/real-time_nucleo-l053r8/qv-ms/periodic1.cpp
Normal 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} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
150
examples/arm-cm/real-time_nucleo-l053r8/qv-ms/periodic4.cpp
Normal file
150
examples/arm-cm/real-time_nucleo-l053r8/qv-ms/periodic4.cpp
Normal 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} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
379
examples/arm-cm/real-time_nucleo-l053r8/qv-ms/real-time-ms.qm
Normal file
379
examples/arm-cm/real-time_nucleo-l053r8/qv-ms/real-time-ms.qm
Normal 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>{&Periodic1::inst};</code>
|
||||
</attribute>
|
||||
<attribute name="AO_Periodic4" type="QP::QActive * const" visibility="0x00" properties="0x00">
|
||||
<code>{&Periodic4::inst};</code>
|
||||
</attribute>
|
||||
<attribute name="AO_Sporadic2" type="QP::QActive * const" visibility="0x00" properties="0x00">
|
||||
<code>{&Sporadic2::inst};</code>
|
||||
</attribute>
|
||||
<attribute name="AO_Sporadic3" type="QP::QActive * const" visibility="0x00" properties="0x00">
|
||||
<code>{&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(&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))
|
||||
&& (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;</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 > 0U; --i) {
|
||||
BSP::d6on();
|
||||
BSP::d6off();
|
||||
}
|
||||
|
||||
#ifdef USE_SCHED_DISABLE
|
||||
QP::QV::schedDisable(1U); // <== 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)->ticks,
|
||||
Q_EVT_CAST(PeriodicSpecEvt)->ticks);
|
||||
m_toggles = Q_EVT_CAST(PeriodicSpecEvt)->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(&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)
|
||||
&& (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;</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 > 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)->ticks,
|
||||
Q_EVT_CAST(PeriodicSpecEvt)->ticks);
|
||||
m_toggles = Q_EVT_CAST(PeriodicSpecEvt)->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(&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->POST(e, this); // Sporadic2 --> 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->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();</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(&reminderEvt);
|
||||
BSP::d5off();</entry>
|
||||
<tran trig="REMINDER">
|
||||
<action>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</action>
|
||||
<choice target="../..">
|
||||
<guard>m_done < 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(&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->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();</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(&reminderEvt);
|
||||
BSP::d4off();</entry>
|
||||
<tran trig="REMINDER">
|
||||
<action>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</action>
|
||||
<choice target="../..">
|
||||
<guard>m_done < 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 "qpcpp.hpp" // QP/C++ real-time embedded framework
|
||||
#include "bsp.hpp" // Board Support Package
|
||||
#include "app.hpp" // Application interface
|
||||
|
||||
namespace {
|
||||
Q_DEFINE_THIS_MODULE("periodic1")
|
||||
}
|
||||
|
||||
$declare ${AOs::Periodic1}
|
||||
|
||||
$define ${Shared::AO_Periodic1}
|
||||
$define ${AOs::Periodic1}</text>
|
||||
</file>
|
||||
<file name="periodic4.cpp">
|
||||
<text>#include "qpcpp.hpp" // QP/C++ real-time embedded framework
|
||||
#include "bsp.hpp" // Board Support Package
|
||||
#include "app.hpp" // Application interface
|
||||
|
||||
namespace {
|
||||
Q_DEFINE_THIS_MODULE("periodic4")
|
||||
}
|
||||
|
||||
$declare ${AOs::Periodic4}
|
||||
|
||||
$define ${Shared::AO_Periodic4}
|
||||
$define ${AOs::Periodic4}</text>
|
||||
</file>
|
||||
<file name="sporadic2.cpp">
|
||||
<text>#include "qpcpp.hpp" // QP/C++ real-time embedded framework
|
||||
#include "bsp.hpp" // Board Support Package
|
||||
#include "app.hpp" // Application interface
|
||||
|
||||
namespace {
|
||||
Q_DEFINE_THIS_MODULE("sporadic2")
|
||||
}
|
||||
|
||||
$declare ${AOs::Sporadic2}
|
||||
|
||||
$define ${Shared::AO_Sporadic2}
|
||||
$define ${AOs::Sporadic2}</text>
|
||||
</file>
|
||||
<file name="sporadic3.cpp">
|
||||
<text>#include "qpcpp.hpp" // QP/C++ real-time embedded framework
|
||||
#include "bsp.hpp" // Board Support Package
|
||||
#include "app.hpp" // Application interface
|
||||
|
||||
namespace {
|
||||
Q_DEFINE_THIS_MODULE("sporadic3")
|
||||
}
|
||||
|
||||
$declare ${AOs::Sporadic3}
|
||||
|
||||
$define ${Shared::AO_Sporadic3}
|
||||
$define ${AOs::Sporadic3}</text>
|
||||
</file>
|
||||
</directory>
|
||||
</model>
|
232
examples/arm-cm/real-time_nucleo-l053r8/qv-ms/sporadic2.cpp
Normal file
232
examples/arm-cm/real-time_nucleo-l053r8/qv-ms/sporadic2.cpp
Normal 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} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
224
examples/arm-cm/real-time_nucleo-l053r8/qv-ms/sporadic3.cpp
Normal file
224
examples/arm-cm/real-time_nucleo-l053r8/qv-ms/sporadic3.cpp
Normal 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 |
@ -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
|
BIN
examples/arm-cm/real-time_nucleo-l053r8/qv-ms/traces/rt-qv-ms.sr
Normal file
BIN
examples/arm-cm/real-time_nucleo-l053r8/qv-ms/traces/rt-qv-ms.sr
Normal file
Binary file not shown.
96
examples/arm-cm/real-time_nucleo-l053r8/qv/app.hpp
Normal file
96
examples/arm-cm/real-time_nucleo-l053r8/qv/app.hpp
Normal 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_
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
1048
examples/arm-cm/real-time_nucleo-l053r8/qv/armclang/rt-qv.uvoptx
Normal file
1048
examples/arm-cm/real-time_nucleo-l053r8/qv/armclang/rt-qv.uvoptx
Normal file
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
Loading…
x
Reference in New Issue
Block a user