diff --git a/.gitignore b/.gitignore
index 417b2727..f2641b2f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -38,7 +38,9 @@ version-*
JLink*.*
html/
+latex/
cert-pack/
+cert-latex/
test_priv/
dbg/
rel/
diff --git a/doxygen/Doxyfile-LATEX b/doxygen/Doxyfile-LATEX
index 483336c9..e22211ce 100644
--- a/doxygen/Doxyfile-LATEX
+++ b/doxygen/Doxyfile-LATEX
@@ -5,3 +5,7 @@
GENERATE_HTML = NO
GENERATE_LATEX = YES
ENABLED_SECTIONS += LATEX
+
+# no source code in latex...
+SOURCE_BROWSER = NO
+VERBATIM_HEADERS = NO
diff --git a/examples/arm-cm/dpp_nucleo-l152re/qk/visualgdb/dpp-qk-Spy.vgdbsettings b/examples/arm-cm/dpp_nucleo-l152re/qk/visualgdb/dpp-qk-Spy.vgdbsettings
deleted file mode 100644
index 7c9fe82c..00000000
--- a/examples/arm-cm/dpp_nucleo-l152re/qk/visualgdb/dpp-qk-Spy.vgdbsettings
+++ /dev/null
@@ -1,134 +0,0 @@
-
-
- Spy
-
-
-
- MinGWUnixSlash
- $(ToolchainDir)
-
- $(ProjectDir)
- false
- stm32.xml
-
-
-
-
- 0
-
-
- dpp-qk.vcxproj
-
-
-
- 1
- true
-
-
-
-
-
-
-
-
-
-
-
-
- Default
-
-
-
- true
-
-
-
-
- Unknown
-
- true
- true
- true
-
-
-
- false
-
-
- VisualGDB\VisualGDBCache
-
-
-
-
-
-
- false
- false
- false
- false
- false
- false
- false
- false
- false
-
- false
- false
- false
- false
- false
- false
- true
- false
- None
- false
- false
- main
- true
- false
- false
- false
- 0
-
-
- com.sysprogs.arm.openocd
- stlink-v2-1
- 066EFF495056805087184715
-
- -f interface/stlink-v2-1.cfg -f target/stm32l1.cfg -c init -c "reset init"
-
-
-
- false
-
- 131072
- Enabled
-
- set remotetimeout 60
- target remote :$$SYS:GDB_PORT$$
- mon halt
- mon reset init
- load
-
- false
- 0
- 0
- false
-
-
-
- true
- Auto
- 0
- false
- false
- true
- false
- false
-
- _estack
- 0
- false
- true
-
-
\ No newline at end of file
diff --git a/examples/arm-cm/dpp_nucleo-l152re/qk/visualgdb/dpp-qk.ld b/examples/arm-cm/dpp_nucleo-l152re/qk/visualgdb/dpp-qk.ld
deleted file mode 100644
index b3a6ec97..00000000
--- a/examples/arm-cm/dpp_nucleo-l152re/qk/visualgdb/dpp-qk.ld
+++ /dev/null
@@ -1,139 +0,0 @@
-/*****************************************************************************
-* Product: Linker script for for STM32L152RET6, GNU-ARM linker
-* Last Updated for Version: 5.9.8
-* Date of the Last Update: 2017-09-13
-*
-* Q u a n t u m L e a P s
-* ---------------------------
-* innovating embedded systems
-*
-* Copyright (C) Quantum Leaps, LLC. All rights reserved.
-*
-* This program is open source software: you can redistribute it and/or
-* modify it under the terms of the GNU General Public License as published
-* by the Free Software Foundation, either version 3 of the License, or
-* (at your option) any later version.
-*
-* Alternatively, this program may be distributed and modified under the
-* terms of Quantum Leaps commercial licenses, which expressly supersede
-* the GNU General Public License and are specifically designed for
-* licensees interested in retaining the proprietary status of their code.
-*
-* This program is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-* GNU General Public License for more details.
-*
-* You should have received a copy of the GNU General Public License
-* along with this program. If not, see .
-*
-* Contact information:
-* https://state-machine.com
-* mailto:info@state-machine.com
-*****************************************************************************/
-OUTPUT_FORMAT("elf32-littlearm", "elf32-bigarm", "elf32-littlearm")
-OUTPUT_ARCH(arm)
-ENTRY(Reset_Handler) /* entry Point */
-
-MEMORY { /* memory map of STM32L152RET6 */
- ROM (rx) : ORIGIN = 0x08000000, LENGTH = 512K
- RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 80K
-}
-
-/* The size of the stack used by the application. NOTE: you need to adjust */
-STACK_SIZE = 2048;
-
-/* The size of the heap used by the application. NOTE: you need to adjust */
-HEAP_SIZE = 0;
-
-SECTIONS {
-
- .isr_vector : { /* the vector table goes FIRST into ROM */
- KEEP(*(.isr_vector)) /* vector table */
- . = ALIGN(4);
- } >ROM
-
- .text : { /* code and constants */
- . = ALIGN(4);
- *(.text) /* .text sections (code) */
- *(.text*) /* .text* sections (code) */
- *(.rodata) /* .rodata sections (constants, strings, etc.) */
- *(.rodata*) /* .rodata* sections (constants, strings, etc.) */
-
- KEEP (*(.init))
- KEEP (*(.fini))
-
- . = ALIGN(4);
- } >ROM
-
- .preinit_array : {
- PROVIDE_HIDDEN (__preinit_array_start = .);
- KEEP (*(.preinit_array*))
- PROVIDE_HIDDEN (__preinit_array_end = .);
- } >ROM
-
- .init_array : {
- PROVIDE_HIDDEN (__init_array_start = .);
- KEEP (*(SORT(.init_array.*)))
- KEEP (*(.init_array*))
- PROVIDE_HIDDEN (__init_array_end = .);
- } >ROM
-
- .fini_array : {
- PROVIDE_HIDDEN (__fini_array_start = .);
- KEEP (*(.fini_array*))
- KEEP (*(SORT(.fini_array.*)))
- PROVIDE_HIDDEN (__fini_array_end = .);
- } >ROM
-
- _etext = .; /* global symbols at end of code */
-
- .stack : {
- __stack_start__ = .;
- . = . + STACK_SIZE;
- . = ALIGN(4);
- __stack_end__ = .;
- } >RAM
-
- .data : AT (_etext) {
- __data_load = LOADADDR (.data);
- __data_start = .;
- *(.data) /* .data sections */
- *(.data*) /* .data* sections */
- . = ALIGN(4);
- __data_end__ = .;
- _edata = __data_end__;
- } >RAM
-
- .bss : {
- __bss_start__ = .;
- *(.bss)
- *(.bss*)
- *(COMMON)
- . = ALIGN(4);
- _ebss = .; /* define a global symbol at bss end */
- __bss_end__ = .;
- } >RAM
-
- __exidx_start = .;
- .ARM.exidx : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) } >RAM
- __exidx_end = .;
-
- PROVIDE ( end = _ebss );
- PROVIDE ( _end = _ebss );
- PROVIDE ( __end__ = _ebss );
-
- .heap : {
- __heap_start__ = .;
- . = . + HEAP_SIZE;
- . = ALIGN(4);
- __heap_end__ = .;
- } >RAM
-
- /* Remove information from the standard libraries */
- /DISCARD/ : {
- libc.a ( * )
- libm.a ( * )
- libgcc.a ( * )
- }
-}
diff --git a/examples/arm-cm/dpp_nucleo-l152re/qk/visualgdb/dpp-qk.sln b/examples/arm-cm/dpp_nucleo-l152re/qk/visualgdb/dpp-qk.sln
deleted file mode 100644
index 065c42fa..00000000
--- a/examples/arm-cm/dpp_nucleo-l152re/qk/visualgdb/dpp-qk.sln
+++ /dev/null
@@ -1,28 +0,0 @@
-
-Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio Version 16
-VisualStudioVersion = 16.0.30517.126
-MinimumVisualStudioVersion = 10.0.40219.1
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "dpp-qk", "dpp-qk.vcxproj", "{33464F24-9B0F-4276-89FF-8D462C1392EE}"
-EndProject
-Global
- GlobalSection(SolutionConfigurationPlatforms) = preSolution
- Debug|VisualGDB = Debug|VisualGDB
- Release|VisualGDB = Release|VisualGDB
- Spy|VisualGDB = Spy|VisualGDB
- EndGlobalSection
- GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {33464F24-9B0F-4276-89FF-8D462C1392EE}.Debug|VisualGDB.ActiveCfg = Debug|VisualGDB
- {33464F24-9B0F-4276-89FF-8D462C1392EE}.Debug|VisualGDB.Build.0 = Debug|VisualGDB
- {33464F24-9B0F-4276-89FF-8D462C1392EE}.Release|VisualGDB.ActiveCfg = Release|VisualGDB
- {33464F24-9B0F-4276-89FF-8D462C1392EE}.Release|VisualGDB.Build.0 = Release|VisualGDB
- {33464F24-9B0F-4276-89FF-8D462C1392EE}.Spy|VisualGDB.ActiveCfg = Spy|VisualGDB
- {33464F24-9B0F-4276-89FF-8D462C1392EE}.Spy|VisualGDB.Build.0 = Spy|VisualGDB
- EndGlobalSection
- GlobalSection(SolutionProperties) = preSolution
- HideSolutionNode = FALSE
- EndGlobalSection
- GlobalSection(ExtensibilityGlobals) = postSolution
- SolutionGuid = {35222B4D-B267-427E-8293-873EDD0720C0}
- EndGlobalSection
-EndGlobal
diff --git a/examples/arm-cm/dpp_nucleo-l152re/qk/visualgdb/dpp-qk.vcxproj b/examples/arm-cm/dpp_nucleo-l152re/qk/visualgdb/dpp-qk.vcxproj
deleted file mode 100644
index 11b7e4fd..00000000
--- a/examples/arm-cm/dpp_nucleo-l152re/qk/visualgdb/dpp-qk.vcxproj
+++ /dev/null
@@ -1,148 +0,0 @@
-
-
-
-
- Debug
- VisualGDB
-
-
- Release
- VisualGDB
-
-
- Spy
- VisualGDB
-
-
-
- 16.0
- {33464F24-9B0F-4276-89FF-8D462C1392EE}
- com.sysprogs.arm.stm32
- 2020.06
-
-
-
- $(ProjectDir)stm32.props
-
-
- $(ProjectDir)stm32.props
-
-
- $(ProjectDir)stm32.props
-
-
-
-
-
-
-
-
- Debug
- d883dc4a-545e-4d48-bba0-41645b13fd69
- 9.3.1/(GNU/r0
-
-
- Debug
- d883dc4a-545e-4d48-bba0-41645b13fd69
- 9.3.1/(GNU/r0
-
-
- d883dc4a-545e-4d48-bba0-41645b13fd69
- 9.3.1/(GNU/r0
-
-
-
- ..;../..;../../../../../include;../../../../../src;../../../../../ports/arm-cm/qk/gnu;../../../../../3rd_party/CMSIS/Include;../../../../../3rd_party/nucleo-l152re;%(ClCompile.AdditionalIncludeDirectories)
- DEBUG=1;%(ClCompile.PreprocessorDefinitions)
-
-
- ;%(Link.AdditionalLinkerInputs)
- ;%(Link.LibrarySearchDirectories)
- ;%(Link.AdditionalLibraryNames)
- dpp-qk.ld
- -specs=nosys.specs -specs=nano.specs %(AdditionalOptions)
-
-
-
-
- ..;../..;../../../../../include;../../../../../src;../../../../../ports/arm-cm/qk/gnu;../../../../../3rd_party/CMSIS/Include;../../../../../3rd_party/nucleo-l152re;%(ClCompile.AdditionalIncludeDirectories)
- DEBUG=1;Q_SPY;%(ClCompile.PreprocessorDefinitions)
- O3
-
-
- ;%(Link.AdditionalLinkerInputs)
- ;%(Link.LibrarySearchDirectories)
- ;%(Link.AdditionalLibraryNames)
- dpp-qk.ld
- -specs=nosys.specs -specs=nano.specs %(AdditionalOptions)
-
-
-
-
- ..;../..;../../../../../include;../../../../../src;../../../../../ports/arm-cm/qk/gnu;../../../../../3rd_party/CMSIS/Include;../../../../../3rd_party/nucleo-l152re;%(ClCompile.AdditionalIncludeDirectories)
- NDEBUG=1;RELEASE=1;%(ClCompile.PreprocessorDefinitions)
-
-
- ;%(Link.AdditionalLinkerInputs)
- ;%(Link.LibrarySearchDirectories)
- ;%(Link.AdditionalLibraryNames)
- dpp-qk.ld
- -specs=nosys.specs -specs=nano.specs %(AdditionalOptions)
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- true
- true
-
-
- true
- true
-
-
- true
- true
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/examples/arm-cm/dpp_nucleo-l152re/qk/visualgdb/dpp-qk.vcxproj.filters b/examples/arm-cm/dpp_nucleo-l152re/qk/visualgdb/dpp-qk.vcxproj.filters
deleted file mode 100644
index e7476e32..00000000
--- a/examples/arm-cm/dpp_nucleo-l152re/qk/visualgdb/dpp-qk.vcxproj.filters
+++ /dev/null
@@ -1,137 +0,0 @@
-
-
-
-
- {c6017ab7-6299-4b81-acee-c1763a48750d}
- cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx
-
-
- {c919b77d-bd4e-42dd-90aa-1ccb1597d180}
-
-
- {d32a0836-a71c-48cd-a0dc-003d1237eae2}
-
-
- {546cf9df-d280-46a0-8461-b51c82a3baa5}
-
-
- {0d86c7f6-a92e-4327-835c-5bbf87534465}
-
-
- {3c579ef5-dace-45b5-8c74-75413c8bb3b6}
-
-
-
-
- nucleo-l152re
-
-
- VisualGDB settings
-
-
- VisualGDB settings
-
-
- VisualGDB settings
-
-
-
-
- nucleo-l152re
-
-
- nucleo-l152re
-
-
- QP
-
-
- QP
-
-
- QP
-
-
- QP
-
-
- QP
-
-
- QP
-
-
- QP
-
-
- QP
-
-
- QP
-
-
- QP
-
-
- QP
-
-
- QP
-
-
- QP-port
-
-
- QS
-
-
- QS
-
-
- QS
-
-
- Source files
-
-
- Source files
-
-
- Source files
-
-
- Source files
-
-
- Source files
-
-
- QP
-
-
-
-
- QP-port
-
-
- QP-port
-
-
- QP-port
-
-
- QP-port
-
-
- Source files
-
-
- Source files
-
-
-
-
- Source files
-
-
-
\ No newline at end of file
diff --git a/examples/arm-cm/dpp_nucleo-l152re/qk/visualgdb/stm32.props b/examples/arm-cm/dpp_nucleo-l152re/qk/visualgdb/stm32.props
deleted file mode 100644
index 80190729..00000000
--- a/examples/arm-cm/dpp_nucleo-l152re/qk/visualgdb/stm32.props
+++ /dev/null
@@ -1,31 +0,0 @@
-
-
-
-
-
-
- ARM_MATH_CM3;flash_layout;STM32L152RE;STM32L152xE;%(ClCompile.PreprocessorDefinitions)
- %(ClCompile.AdditionalIncludeDirectories);$(ProjectDir);$(BSP_ROOT)/STM32L1xxxx/STM32L1xx_HAL_Driver/Inc;$(BSP_ROOT)/STM32L1xxxx/STM32L1xx_HAL_Driver/Inc/Legacy;$(BSP_ROOT)/STM32L1xxxx/CMSIS_HAL/Device/ST/STM32L1xx/Include;$(BSP_ROOT)/STM32L1xxxx/CMSIS_HAL/Core/Include;$(BSP_ROOT)/STM32L1xxxx/CMSIS_HAL/Include
-
-
-
-
- $(BSP_ROOT)/STM32L1xxxx/LinkerScripts/STM32L152RE_flash.lds
-
-
-
- $(BSP_ROOT)/STM32L1xxxx/LinkerScripts/STM32L152RE_flash.lds
-
-
-
-
- cortex-m3
- THUMB
-
-
-
diff --git a/examples/arm-cm/dpp_nucleo-l152re/qk/visualgdb/stm32.xml b/examples/arm-cm/dpp_nucleo-l152re/qk/visualgdb/stm32.xml
deleted file mode 100644
index 63349b32..00000000
--- a/examples/arm-cm/dpp_nucleo-l152re/qk/visualgdb/stm32.xml
+++ /dev/null
@@ -1,39 +0,0 @@
-
-
- d883dc4a-545e-4d48-bba0-41645b13fd69
-
- 9.3.1
- (GNU
- 0
-
- com.sysprogs.arm.stm32
- 2020.06
- STM32L152RE
- STM32L1xxxx/DeviceDefinitions/stm32l152xe.xml
-
-
-
- com.sysprogs.bspoptions.primary_memory
- flash
-
-
- com.sysprogs.mcuoptions.ignore_startup_file
-
-
-
- Device-specific files
- stm32.mak
-
- com.sysprogs.arm.stm32.ll
-
-
-
-
- com.sysprogs.bspoptions.stm32.ll_driver
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/examples/embos/arm-cm/dpp_nucleo-h743zi/iar/SEGGER/SEGGER_RTT.c b/examples/embos/arm-cm/dpp_nucleo-h743zi/iar/SEGGER/SEGGER_RTT.c
index 4e5c329f..0a716196 100644
--- a/examples/embos/arm-cm/dpp_nucleo-h743zi/iar/SEGGER/SEGGER_RTT.c
+++ b/examples/embos/arm-cm/dpp_nucleo-h743zi/iar/SEGGER/SEGGER_RTT.c
@@ -46,7 +46,7 @@ Additional information:
WrOff == (RdOff - 1): Buffer is full
WrOff > RdOff: Free space includes wrap-around
WrOff < RdOff: Used space includes wrap-around
- (WrOff == (SizeOfBuffer - 1)) && (RdOff == 0):
+ (WrOff == (SizeOfBuffer - 1)) && (RdOff == 0):
Buffer full and wrap-around after next byte
@@ -521,7 +521,7 @@ static unsigned _GetAvailWriteSpace(SEGGER_RTT_BUFFER_UP* pRing) {
* Reads characters from SEGGER real-time-terminal control block
* which have been previously stored by the application.
* Do not lock against interrupts and multiple access.
-* Used to do the same operation that J-Link does, to transfer
+* Used to do the same operation that J-Link does, to transfer
* RTT data via other channels, such as TCP/IP or UART.
*
* Parameters
@@ -706,7 +706,7 @@ unsigned SEGGER_RTT_ReadNoLock(unsigned BufferIndex, void* pData, unsigned Buffe
* Function description
* Reads characters from SEGGER real-time-terminal control block
* which have been previously stored by the application.
-* Used to do the same operation that J-Link does, to transfer
+* Used to do the same operation that J-Link does, to transfer
* RTT data via other channels, such as TCP/IP or UART.
*
* Parameters
@@ -721,7 +721,7 @@ unsigned SEGGER_RTT_ReadNoLock(unsigned BufferIndex, void* pData, unsigned Buffe
* This function must not be called when J-Link might also do RTT.
* This function locks against all other RTT operations. I.e. during
* the read operation, writing is also locked.
-* If only one consumer reads from the up buffer,
+* If only one consumer reads from the up buffer,
* call sEGGER_RTT_ReadUpBufferNoLock() instead.
*/
unsigned SEGGER_RTT_ReadUpBuffer(unsigned BufferIndex, void* pBuffer, unsigned BufferSize) {
@@ -779,7 +779,7 @@ unsigned SEGGER_RTT_Read(unsigned BufferIndex, void* pBuffer, unsigned BufferSiz
* Function description
* Stores a specified number of characters in SEGGER RTT
* control block.
-* SEGGER_RTT_WriteWithOverwriteNoLock does not lock the application
+* SEGGER_RTT_WriteWithOverwriteNoLock does not lock the application
* and overwrites data if the data does not fit into the buffer.
*
* Parameters
@@ -792,7 +792,7 @@ unsigned SEGGER_RTT_Read(unsigned BufferIndex, void* pBuffer, unsigned BufferSiz
* (2) For performance reasons this function does not call Init()
* and may only be called after RTT has been initialized.
* Either by calling SEGGER_RTT_Init() or calling another RTT API function first.
-* (3) Do not use SEGGER_RTT_WriteWithOverwriteNoLock if a J-Link
+* (3) Do not use SEGGER_RTT_WriteWithOverwriteNoLock if a J-Link
* connection reads RTT data.
*/
void SEGGER_RTT_WriteWithOverwriteNoLock(unsigned BufferIndex, const void* pBuffer, unsigned NumBytes) {
@@ -966,7 +966,7 @@ CopyStraight:
* Stores a specified number of characters in SEGGER RTT
* control block inside a buffer.
* SEGGER_RTT_WriteDownBufferNoLock does not lock the application.
-* Used to do the same operation that J-Link does, to transfer
+* Used to do the same operation that J-Link does, to transfer
* RTT data from other channels, such as TCP/IP or UART.
*
* Parameters
@@ -1134,7 +1134,7 @@ unsigned SEGGER_RTT_WriteNoLock(unsigned BufferIndex, const void* pBuffer, unsig
* This function must not be called when J-Link might also do RTT.
* This function locks against all other RTT operations. I.e. during
* the write operation, writing from the application is also locked.
-* If only one consumer writes to the down buffer,
+* If only one consumer writes to the down buffer,
* call SEGGER_RTT_WriteDownBufferNoLock() instead.
*/
unsigned SEGGER_RTT_WriteDownBuffer(unsigned BufferIndex, const void* pBuffer, unsigned NumBytes) {
diff --git a/examples/embos/arm-cm/dpp_nucleo-h743zi/iar/SEGGER/SEGGER_RTT.h b/examples/embos/arm-cm/dpp_nucleo-h743zi/iar/SEGGER/SEGGER_RTT.h
index 0afe8c78..5c9f12ee 100644
--- a/examples/embos/arm-cm/dpp_nucleo-h743zi/iar/SEGGER/SEGGER_RTT.h
+++ b/examples/embos/arm-cm/dpp_nucleo-h743zi/iar/SEGGER/SEGGER_RTT.h
@@ -28,7 +28,7 @@
---------------------------END-OF-HEADER------------------------------
File : SEGGER_RTT.h
Purpose : Implementation of SEGGER real-time transfer which allows
- real-time communication on targets which support debugger
+ real-time communication on targets which support debugger
memory accesses while the CPU is running.
Revision: $Rev: 20869 $
----------------------------------------------------------------------
@@ -51,11 +51,11 @@ Revision: $Rev: 20869 $
#elif (defined __CROSSWORKS_ARM) // Rowley Crossworks
#define _CC_HAS_RTT_ASM_SUPPORT 1
#elif (defined __ARMCC_VERSION) // ARM compiler
- #if (__ARMCC_VERSION >= 6000000) // ARM compiler V6.0 and later is clang based
+ #if (__ARMCC_VERSION >= 6000000) // ARM compiler V6.0 and later is clang based
#define _CC_HAS_RTT_ASM_SUPPORT 1
- #else
+ #else
#define _CC_HAS_RTT_ASM_SUPPORT 0
- #endif
+ #endif
#elif (defined __GNUC__) // GCC
#define _CC_HAS_RTT_ASM_SUPPORT 1
#elif (defined __clang__) // Clang compiler
diff --git a/examples/embos/arm-cm/dpp_nucleo-h743zi/iar/SEGGER/SEGGER_RTT_ASM_ARMv7M.S b/examples/embos/arm-cm/dpp_nucleo-h743zi/iar/SEGGER/SEGGER_RTT_ASM_ARMv7M.S
index 8b134723..b2033fd6 100644
--- a/examples/embos/arm-cm/dpp_nucleo-h743zi/iar/SEGGER/SEGGER_RTT_ASM_ARMv7M.S
+++ b/examples/embos/arm-cm/dpp_nucleo-h743zi/iar/SEGGER/SEGGER_RTT_ASM_ARMv7M.S
@@ -58,9 +58,9 @@ Additional information:
#define _THUMB_CODE .code 16
#define _WORD .word
#define _SECTION(Sect, Type, AlignExp) .section Sect ##, "ax"
- #define _ALIGN(Exp) .align Exp
+ #define _ALIGN(Exp) .align Exp
#define _PLACE_LITS .ltorg
- #define _DATA_SECT_START
+ #define _DATA_SECT_START
#define _C_STARTUP _start
#define _STACK_END __stack_end__
#define _RAMFUNC
@@ -80,7 +80,7 @@ Additional information:
#define _THUMB_CODE THUMB
#define _WORD DCD
#define _SECTION(Sect, Type, AlignExp) SECTION Sect ## : ## Type ## :REORDER:NOROOT ## (AlignExp)
- #define _ALIGN(Exp) alignrom Exp
+ #define _ALIGN(Exp) alignrom Exp
#define _PLACE_LITS
#define _DATA_SECT_START DATA
#define _C_STARTUP __iar_program_start
diff --git a/examples/embos/arm-cm/dpp_nucleo-h743zi/iar/SEGGER/SEGGER_SYSVIEW.c b/examples/embos/arm-cm/dpp_nucleo-h743zi/iar/SEGGER/SEGGER_SYSVIEW.c
index 2a994f69..337112ff 100644
--- a/examples/embos/arm-cm/dpp_nucleo-h743zi/iar/SEGGER/SEGGER_SYSVIEW.c
+++ b/examples/embos/arm-cm/dpp_nucleo-h743zi/iar/SEGGER/SEGGER_SYSVIEW.c
@@ -40,7 +40,7 @@ Additional information:
Packets with IDs 24..31 are standard packets with extendible
structure and contain a length field.
-
+
Packet ID 31 is used for SystemView extended events.
@@ -491,7 +491,7 @@ static U8 *_EncodeStr(U8 *pPayload, const char *pText, unsigned int Limit) {
// Write Len
//
if (Len < 255) {
- *pPayload++ = Len;
+ *pPayload++ = Len;
} else {
*pPayload++ = 255;
*pPayload++ = (Len & 255);
@@ -648,7 +648,7 @@ static int _TrySendOverflowPacket(void) {
* _SendSyncInfo()
*
* Function description
-* Send SystemView sync packet and system information in
+* Send SystemView sync packet and system information in
* post mortem mode.
*
* Additional information
@@ -866,9 +866,9 @@ static int _VPrintHost(const char* s, U32 Options, va_list* pParamList) {
U8* pPayloadStart;
#if SEGGER_SYSVIEW_PRINTF_IMPLICIT_FORMAT
U8 HasNonScalar;
-
+
HasNonScalar = 0;
-#endif
+#endif
//
// Count number of arguments by counting '%' characters in string.
// If enabled, check for non-scalar modifier flags to format string on the target.
@@ -968,7 +968,7 @@ static void _StoreChar(SEGGER_SYSVIEW_PRINTF_DESC * p, char c) {
* _PrintUnsigned()
*
* Function description
-* Print an unsigned integer with the given formatting into the
+* Print an unsigned integer with the given formatting into the
* formatted string.
*
* Parameters
@@ -1059,7 +1059,7 @@ static void _PrintUnsigned(SEGGER_SYSVIEW_PRINTF_DESC * pBufferDesc, unsigned in
* _PrintInt()
*
* Function description
-* Print a signed integer with the given formatting into the
+* Print a signed integer with the given formatting into the
* formatted string.
*
* Parameters
@@ -1302,7 +1302,7 @@ static void _VPrintTarget(const char* sFormat, U32 Options, va_list* pParamList)
*
* Function description
* Initializes the SYSVIEW module.
-* Must be called before the Systemview Application connects to
+* Must be called before the Systemview Application connects to
* the system.
*
* Parameters
@@ -1312,9 +1312,9 @@ static void _VPrintTarget(const char* sFormat, U32 Options, va_list* pParamList)
* pfSendSysDesc - Pointer to record system description callback function.
*
* Additional information
-* This function initializes the RTT channel used to transport
-* SEGGER SystemView packets.
-* The channel is assigned the label "SysView" for client software
+* This function initializes the RTT channel used to transport
+* SEGGER SystemView packets.
+* The channel is assigned the label "SysView" for client software
* to identify the SystemView channel.
*
* The channel is configured with the macro SEGGER_SYSVIEW_RTT_CHANNEL.
@@ -1911,7 +1911,7 @@ void SEGGER_SYSVIEW_SendTaskList(void) {
*
* The system description is usually called by the system description
* callback, to ensure it is only sent when the SystemView Application
-* is connected.
+* is connected.
*
* Parameters
* sSysDesc - Pointer to the 0-terminated system description string.
@@ -2029,7 +2029,7 @@ void SEGGER_SYSVIEW_RecordExitISRToScheduler(void) {
*
* Function description
* Format and send a Timer entry event.
-*
+*
* Parameters
* TimerId - Id of the timer which starts.
*/
@@ -2065,7 +2065,7 @@ void SEGGER_SYSVIEW_RecordExitTimer(void) {
*
* Function description
* Format and send an End API Call event without return value.
-*
+*
* Parameters
* EventID - Id of API function which ends.
*/
@@ -2086,7 +2086,7 @@ void SEGGER_SYSVIEW_RecordEndCall(unsigned int EventID) {
*
* Function description
* Format and send an End API Call event with return value.
-*
+*
* Parameters
* EventID - Id of API function which ends.
* Para0 - Return value which will be returned by the API function.
@@ -2146,9 +2146,9 @@ void SEGGER_SYSVIEW_OnTaskCreate(U32 TaskId) {
* SEGGER_SYSVIEW_OnTaskTerminate()
*
* Function description
-* Record a Task termination event.
-* The Task termination event corresponds to terminating a task in
-* the OS. If the TaskId is the currently active task,
+* Record a Task termination event.
+* The Task termination event corresponds to terminating a task in
+* the OS. If the TaskId is the currently active task,
* SEGGER_SYSVIEW_OnTaskStopExec may be used, either.
*
* Parameters
@@ -2325,7 +2325,7 @@ void SEGGER_SYSVIEW_Mark(unsigned int MarkerId) {
*
* Marker names are usually set in the system description
* callback, to ensure it is only sent when the SystemView Application
-* is connected.
+* is connected.
*
* Parameters
* MarkerId - User defined ID for the marker.
@@ -2353,7 +2353,7 @@ void SEGGER_SYSVIEW_NameMarker(unsigned int MarkerId, const char* sName) {
*
* Marker names are usually set in the system description
* callback, to ensure it is only sent when the SystemView Application
-* is connected.
+* is connected.
*
* Parameters
* ResourceId - Id of the resource to be named. i.e. its address.
@@ -2775,7 +2775,7 @@ void SEGGER_SYSVIEW_PrintfHost(const char* s, ...) {
* SEGGER_SYSVIEW_WarnfHost()
*
* Function description
-* Print a warnin string which is formatted on the host by
+* Print a warnin string which is formatted on the host by
* the SystemView Application.
*
* Parameters
@@ -2810,7 +2810,7 @@ void SEGGER_SYSVIEW_WarnfHost(const char* s, ...) {
* SEGGER_SYSVIEW_ErrorfHost()
*
* Function description
-* Print an error string which is formatted on the host by
+* Print an error string which is formatted on the host by
* the SystemView Application.
*
* Parameters
@@ -2845,7 +2845,7 @@ void SEGGER_SYSVIEW_ErrorfHost(const char* s, ...) {
* SEGGER_SYSVIEW_PrintfTargetEx()
*
* Function description
-* Print a string which is formatted on the target before sent to
+* Print a string which is formatted on the target before sent to
* the host with Additional information.
*
* Parameters
@@ -2865,7 +2865,7 @@ void SEGGER_SYSVIEW_PrintfTargetEx(const char* s, U32 Options, ...) {
* SEGGER_SYSVIEW_PrintfTarget()
*
* Function description
-* Print a string which is formatted on the target before sent to
+* Print a string which is formatted on the target before sent to
* the host.
*
* Parameters
diff --git a/examples/embos/arm-cm/dpp_nucleo-h743zi/iar/SEGGER/SEGGER_SYSVIEW_ConfDefaults.h b/examples/embos/arm-cm/dpp_nucleo-h743zi/iar/SEGGER/SEGGER_SYSVIEW_ConfDefaults.h
index ebf687ff..0c650e8d 100644
--- a/examples/embos/arm-cm/dpp_nucleo-h743zi/iar/SEGGER/SEGGER_SYSVIEW_ConfDefaults.h
+++ b/examples/embos/arm-cm/dpp_nucleo-h743zi/iar/SEGGER/SEGGER_SYSVIEW_ConfDefaults.h
@@ -151,7 +151,7 @@ extern "C" {
* Default
* Call user-supplied function SEGGER_SYSVIEW_X_GetInterruptId().
* Notes
-* For some known compilers and cores, a ready-to-use, core-specific
+* For some known compilers and cores, a ready-to-use, core-specific
* default is set.
* ARMv7M: Read ICSR[8:0] (active vector)
* ARMv6M: Read ICSR[5:0] (active vector)
@@ -183,7 +183,7 @@ extern "C" {
* Default
* Call user-supplied function SEGGER_SYSVIEW_X_GetTimestamp().
* Notes
-* For some known compilers and cores, a ready-to-use, core-specific
+* For some known compilers and cores, a ready-to-use, core-specific
* default is set.
* ARMv7M: Read Cortex-M Cycle Count register.
*
@@ -257,7 +257,7 @@ extern "C" {
* Default
* undefined: Do not place into a specific section.
* Notes
-* If SEGGER_RTT_SECTION is defined, the default changes to use
+* If SEGGER_RTT_SECTION is defined, the default changes to use
* this section for the SystemView RTT Buffer, too.
*/
#if !(defined SEGGER_SYSVIEW_SECTION) && (defined SEGGER_RTT_SECTION)
@@ -289,11 +289,11 @@ extern "C" {
* Default
* 0
* Notes
-* Value is usually subtracted from mailboxes, semaphores, tasks,
+* Value is usually subtracted from mailboxes, semaphores, tasks,
* .... addresses, to compress event parameters.
* Should be the lowest RAM address of the system.
*/
-#ifndef SEGGER_SYSVIEW_ID_BASE
+#ifndef SEGGER_SYSVIEW_ID_BASE
#define SEGGER_SYSVIEW_ID_BASE 0
#endif
@@ -348,8 +348,8 @@ extern "C" {
* Define: SEGGER_SYSVIEW_PRINTF_IMPLICIT_FORMAT
*
* Description
-* If enabled, on SEGGER_SYSVIEW_PrintHost, check the format string
-* and if it includes unsupported formatters, use formatting on the
+* If enabled, on SEGGER_SYSVIEW_PrintHost, check the format string
+* and if it includes unsupported formatters, use formatting on the
* target instead.
* Default
* 0: Disabled.
@@ -416,10 +416,10 @@ extern "C" {
* 1: Enabled.
* Notes
* If enabled, the static memory use by SystemView is increased by
-* the maximum packet size. SystemView is locked on entry of a
+* the maximum packet size. SystemView is locked on entry of a
* recording function.
-* If disabled, the stack usage by SystemView recording functions
-* might be increased by up to the maximum packet size. SystemView
+* If disabled, the stack usage by SystemView recording functions
+* might be increased by up to the maximum packet size. SystemView
* is locked when writing the packet to the RTT buffer.
*/
#ifndef SEGGER_SYSVIEW_USE_STATIC_BUFFER
@@ -435,7 +435,7 @@ extern "C" {
* Default
* Automatically calculated.
* Notes
-* The maximum packet size is mainly defined by the maximum string
+* The maximum packet size is mainly defined by the maximum string
* length and the maximum number of arguments.
*/
#ifndef SEGGER_SYSVIEW_MAX_PACKET_SIZE
@@ -447,12 +447,12 @@ extern "C" {
* Define: SEGGER_SYSVIEW_POST_MORTEM_MODE
*
* Description
-* If enabled, SystemView records for post-mortem analysis instead
+* If enabled, SystemView records for post-mortem analysis instead
* of real-time analysis.
* Default
* 0: Disabled.
* Notes
-* For more information refer to
+* For more information refer to
* https://www.segger.com/products/development-tools/systemview/technology/post-mortem-mode
*/
#ifndef SEGGER_SYSVIEW_POST_MORTEM_MODE
@@ -464,14 +464,14 @@ extern "C" {
* Define: SEGGER_SYSVIEW_SYNC_PERIOD_SHIFT
*
* Description
-* Configure how frequently syncronization is sent in post-mortem
+* Configure how frequently syncronization is sent in post-mortem
* mode.
* Default
* 8: (1 << 8) = Every 256 Events.
* Notes
* In post-mortem mode, at least one sync has to be in the RTT buffer.
* Recommended sync frequency: Buffer Size / 16
-* For more information refer to
+* For more information refer to
* https://www.segger.com/products/development-tools/systemview/technology/post-mortem-mode
*/
#ifndef SEGGER_SYSVIEW_SYNC_PERIOD_SHIFT
@@ -503,8 +503,8 @@ extern "C" {
* Default
* Use RTT Locking mechanism (defined by SEGGER_RTT_LOCK()).
* Notes
-* If SystemView recording is not locked, recording events from
-* interrupts and tasks may lead to unpredictable, undefined, event
+* If SystemView recording is not locked, recording events from
+* interrupts and tasks may lead to unpredictable, undefined, event
* data.
*/
#ifndef SEGGER_SYSVIEW_LOCK
diff --git a/examples/lwip/arm-cm/lwip_ek-lm3s6965/website/ssi_demo.shtm b/examples/lwip/arm-cm/lwip_ek-lm3s6965/website/ssi_demo.shtm
index 84111ded..b53c81a6 100644
--- a/examples/lwip/arm-cm/lwip_ek-lm3s6965/website/ssi_demo.shtm
+++ b/examples/lwip/arm-cm/lwip_ek-lm3s6965/website/ssi_demo.shtm
@@ -11,10 +11,10 @@
-
@@ -33,7 +33,7 @@
-
+
About SSI Support
@@ -43,17 +43,17 @@
The HTTP server that comes with lwIP has been extended to support rudimentary Server Side Include (SSI) facility. To enable the SSI support in the lwIP-HTTP server, you need to define the macro INCLUDE_HTTPD_SSI in the lwipopts.h header file.
-
+
You must also provide your SSI callback function and register it by calling the http_set_ssi_handler() function. The HTTP server will then scan each file with extension .shtml, .shtm or .ssi for the SSI tags of the form <!--#tag--> and will replace on-the-fly every recognized SSI tag with the string composed by your SSI callback function. See the HTML source code for this web page (ssi_demo.shtm) and the SSI callback function definition in lwipmgr.c.
-
While designing your own SSI tags, remember that the tag names are limited to 8 characters and the length of the replacement strings cannot exceed 192 characters. You can re-define these limits by changing the macros MAX_TAG_NAME_LEN and MAX_TAG_INSERT_LEN, respectively, in the http.h header file.
+
While designing your own SSI tags, remember that the tag names are limited to 8 characters and the length of the replacement strings cannot exceed 192 characters. You can re-define these limits by changing the macros MAX_TAG_NAME_LEN and MAX_TAG_INSERT_LEN, respectively, in the http.h header file.
Please refer to the Quantum Leaps Application Note: "QP and lwIP TCP/IP Stack" for more information. The Application Note is included in the QP-lwIP example code download.
SSI Example
-
The following table contains SSI tags embedded in the HTML of this web page. Client browsers never see these tags, as the lwIP-HTTP server replaces them on-the-fly while serving this page. These particular SSI tags cause the target to generate various lwIP link statistics. Please click the Refresh button on your browser to cause re-loading of this page and updating the statistics:
+
The following table contains SSI tags embedded in the HTML of this web page. Client browsers never see these tags, as the lwIP-HTTP server replaces them on-the-fly while serving this page. These particular SSI tags cause the target to generate various lwIP link statistics. Please click the Refresh button on your browser to cause re-loading of this page and updating the statistics:
@@ -85,7 +85,7 @@ You must also provide your SSI callback function and register it by calling the
-
NOTE: the webpage loads much slower than the others, because it contains 12 SSI tags, and each tag is sent is a separate TCP/IP packet.
+
NOTE: the webpage loads much slower than the others, because it contains 12 SSI tags, and each tag is sent is a separate TCP/IP packet.
-
+
+
\ No newline at end of file
diff --git a/examples/msp430/dpp_msp-exp430f5529lp/qk/ccs-ti/.project b/examples/msp430/dpp_msp-exp430f5529lp/qk/ccs-ti/.project
index e4c2eb9b..ec24d76a 100644
--- a/examples/msp430/dpp_msp-exp430f5529lp/qk/ccs-ti/.project
+++ b/examples/msp430/dpp_msp-exp430f5529lp/qk/ccs-ti/.project
@@ -30,11 +30,6 @@
2PARENT-5-PROJECT_LOC/src/qf
-
- QP_include
- 2
- PARENT-5-PROJECT_LOC/include
-
QP_port2
@@ -45,26 +40,6 @@
2PARENT-5-PROJECT_LOC/src/qs
-
- qk
- 2
- PARENT-5-PROJECT_LOC/src/qk
-
-
- dpp.h
- 1
- PARENT-2-PROJECT_LOC/dpp.h
-
-
- philo.cpp
- 1
- PARENT-2-PROJECT_LOC/philo.cpp
-
-
- table.cpp
- 1
- PARENT-2-PROJECT_LOC/table.cpp
-
bsp.cpp1
@@ -75,10 +50,30 @@
1PARENT-2-PROJECT_LOC/bsp.h
+
+ dpp.h
+ 1
+ PARENT-2-PROJECT_LOC/dpp.h
+
main.cpp1PARENT-2-PROJECT_LOC/main.cpp
+
+ philo.cpp
+ 1
+ PARENT-2-PROJECT_LOC/philo.cpp
+
+
+ qk
+ 2
+ PARENT-5-PROJECT_LOC/src/qk
+
+
+ table.cpp
+ 1
+ PARENT-2-PROJECT_LOC/table.cpp
+
diff --git a/examples/msp430/dpp_msp-exp430f5529lp/qv/ccs-gnu/.project b/examples/msp430/dpp_msp-exp430f5529lp/qv/ccs-gnu/.project
index 621f5d69..36d988e6 100644
--- a/examples/msp430/dpp_msp-exp430f5529lp/qv/ccs-gnu/.project
+++ b/examples/msp430/dpp_msp-exp430f5529lp/qv/ccs-gnu/.project
@@ -30,11 +30,6 @@
2PARENT-5-PROJECT_LOC/src/qf
-
- QP_include
- 2
- PARENT-5-PROJECT_LOC/include
-
QP_port2
@@ -45,26 +40,6 @@
2PARENT-5-PROJECT_LOC/src/qs
-
- qv
- 2
- PARENT-5-PROJECT_LOC/src/qv
-
-
- dpp.h
- 1
- PARENT-2-PROJECT_LOC/dpp.h
-
-
- philo.cpp
- 1
- PARENT-2-PROJECT_LOC/philo.cpp
-
-
- table.cpp
- 1
- PARENT-2-PROJECT_LOC/table.cpp
-
bsp.cpp1
@@ -75,10 +50,30 @@
1PARENT-2-PROJECT_LOC/bsp.h
+
+ dpp.h
+ 1
+ PARENT-2-PROJECT_LOC/dpp.h
+
main.cpp1PARENT-2-PROJECT_LOC/main.cpp
+
+ philo.cpp
+ 1
+ PARENT-2-PROJECT_LOC/philo.cpp
+
+
+ qv
+ 2
+ PARENT-5-PROJECT_LOC/src/qv
+
+
+ table.cpp
+ 1
+ PARENT-2-PROJECT_LOC/table.cpp
+
diff --git a/examples/msp430/dpp_msp-exp430f5529lp/qv/ccs-ti/.project b/examples/msp430/dpp_msp-exp430f5529lp/qv/ccs-ti/.project
index 1a9d8a1f..3cdb09a4 100644
--- a/examples/msp430/dpp_msp-exp430f5529lp/qv/ccs-ti/.project
+++ b/examples/msp430/dpp_msp-exp430f5529lp/qv/ccs-ti/.project
@@ -30,11 +30,6 @@
2PARENT-5-PROJECT_LOC/src/qf
-
- QP_include
- 2
- PARENT-5-PROJECT_LOC/include
-
QP_port2
@@ -50,11 +45,26 @@
2PARENT-5-PROJECT_LOC/src/qv
+
+ bsp.cpp
+ 1
+ PARENT-1-PROJECT_LOC/bsp.cpp
+
+
+ bsp.h
+ 1
+ PARENT-2-PROJECT_LOC/bsp.h
+
dpp.h1PARENT-2-PROJECT_LOC/dpp.h
+
+ main.cpp
+ 1
+ PARENT-2-PROJECT_LOC/main.cpp
+
philo.cpp1
@@ -65,20 +75,5 @@
1PARENT-2-PROJECT_LOC/table.cpp
-
- bsp.cpp
- 1
- PARENT-1-PROJECT_LOC/bsp.cpp
-
-
- bsp.h
- 1
- PARENT-2-PROJECT_LOC/bsp.h
-
-
- main.cpp
- 1
- PARENT-2-PROJECT_LOC/main.cpp
-
diff --git a/include/qep.hpp b/include/qep.hpp
index 3a911b1a..26ed24c2 100644
--- a/include/qep.hpp
+++ b/include/qep.hpp
@@ -52,7 +52,7 @@
// major version number, Y is a 1-digit minor version number, and Z is
// a 1-digit release number.
//
-#define QP_VERSION 712U
+#define QP_VERSION 713U
//! The current QP version as a zero terminated string literal.
//
@@ -61,10 +61,10 @@
// major version number, Y is a 1-digit minor version number, and Z is
// a 1-digit release number.
//
-#define QP_VERSION_STR "7.1.2"
+#define QP_VERSION_STR "7.1.3"
-//! Encrypted current QP release (7.1.2) and date (2022-10-07)
-#define QP_RELEASE 0x7C44FF47U
+//! Encrypted current QP release (7.1.3) and date (2022-11-11)
+#define QP_RELEASE 0x7C3520C6U
//============================================================================
// Global namespace...
diff --git a/include/qf.hpp b/include/qf.hpp
index a863ac2e..55a667c6 100644
--- a/include/qf.hpp
+++ b/include/qf.hpp
@@ -1252,9 +1252,13 @@ public:
namespace QP {
namespace QF {
+//${QF::QF-base::intLock_} ...................................................
+//! Interrupt lock up-down counter (used in some QF ports)
+extern std::uint_fast8_t volatile intLock_;
+
//${QF::QF-base::intNest_} ...................................................
//! Interrupt nesting up-down counter (used in some QF ports)
-extern std::uint_fast8_t intNest_;
+extern std::uint_fast8_t volatile intNest_;
//${QF::QF-base::init} .......................................................
//! QF initialization
diff --git a/ports/arm-cm/qutest/qf_port.hpp b/ports/arm-cm/qutest/qf_port.hpp
index 15ef3866..64f55192 100644
--- a/ports/arm-cm/qutest/qf_port.hpp
+++ b/ports/arm-cm/qutest/qf_port.hpp
@@ -1,39 +1,32 @@
+//============================================================================
+// QP/C++ Real-Time Embedded Framework (RTEF)
+// Copyright (C) 2005 Quantum Leaps, LLC. All rights reserved.
+//
+// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-QL-commercial
+//
+// This software is dual-licensed under the terms of the open source GNU
+// General Public License version 3 (or any later version), or alternatively,
+// under the terms of one of the closed source Quantum Leaps commercial
+// licenses.
+//
+// The terms of the open source GNU General Public License version 3
+// can be found at:
+//
+// The terms of the closed source Quantum Leaps commercial licenses
+// can be found at:
+//
+// Redistributions in source code must retain this top-level comment block.
+// Plagiarizing this software to sidestep the license obligations is illegal.
+//
+// Contact information:
+//
+//
+//============================================================================
+//! @date Last updated on: 2022-11-11
+//! @version Last updated for: @ref qpcpp_7_1_3
+//!
//! @file
-//! @brief QF/C++ port for QUTEST Unit Test, ARM Cortex-M with GNU or Visual C++
-//! @cond
-//============================================================================
-//! Last updated for version 7.0.1
-//! Last updated on 2022-06-30
-//!
-//! Q u a n t u m L e a P s
-//! ------------------------
-//! Modern Embedded Software
-//!
-//! Copyright (C) 2005 Quantum Leaps. All rights reserved.
-//!
-//! This program is open source software: you can redistribute it and/or
-//! modify it under the terms of the GNU General Public License as published
-//! by the Free Software Foundation, either version 3 of the License, or
-//! (at your option) any later version.
-//!
-//! Alternatively, this program may be distributed and modified under the
-//! terms of Quantum Leaps commercial licenses, which expressly supersede
-//! the GNU General Public License and are specifically designed for
-//! licensees interested in retaining the proprietary status of their code.
-//!
-//! This program is distributed in the hope that it will be useful,
-//! but WITHOUT ANY WARRANTY; without even the implied warranty of
-//! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-//! GNU General Public License for more details.
-//!
-//! You should have received a copy of the GNU General Public License
-//! along with this program. If not, see .
-//!
-//! Contact information:
-//!
-//!
-//============================================================================
-//! @endcond
+//! @brief QF/C++ port for QUTEST Unit Test, ARM Cortex-M, GNU or Visual C++
#ifndef QF_PORT_HPP
#define QF_PORT_HPP
@@ -50,8 +43,8 @@
#define QF_MAX_TICK_RATE 2U
// QF interrupt disable/enable
-#define QF_INT_DISABLE() (++QP::QF::intNest_)
-#define QF_INT_ENABLE() (--QP::QF::intNest_)
+#define QF_INT_DISABLE() (++QP::QF::intLock_)
+#define QF_INT_ENABLE() (--QP::QF::intLock_)
// QF critical section
// QF_CRIT_STAT_TYPE not defined
diff --git a/ports/msp430/qk/qf_port.hpp b/ports/msp430/qk/qf_port.hpp
index f4cbc7e9..e5a30da6 100644
--- a/ports/msp430/qk/qf_port.hpp
+++ b/ports/msp430/qk/qf_port.hpp
@@ -60,7 +60,7 @@
#endif
#include "qep_port.hpp" // QEP port
-#include "qk_port.hpp" // QK preemptive kernel port
+#include "qk_port.hpp" // QK preemptive kernel port
//============================================================================
// NOTE01:
diff --git a/ports/msp430/qutest/qf_port.hpp b/ports/msp430/qutest/qf_port.hpp
index 54331bf2..57065473 100644
--- a/ports/msp430/qutest/qf_port.hpp
+++ b/ports/msp430/qutest/qf_port.hpp
@@ -1,39 +1,32 @@
+//============================================================================
+// QP/C++ Real-Time Embedded Framework (RTEF)
+// Copyright (C) 2005 Quantum Leaps, LLC. All rights reserved.
+//
+// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-QL-commercial
+//
+// This software is dual-licensed under the terms of the open source GNU
+// General Public License version 3 (or any later version), or alternatively,
+// under the terms of one of the closed source Quantum Leaps commercial
+// licenses.
+//
+// The terms of the open source GNU General Public License version 3
+// can be found at:
+//
+// The terms of the closed source Quantum Leaps commercial licenses
+// can be found at:
+//
+// Redistributions in source code must retain this top-level comment block.
+// Plagiarizing this software to sidestep the license obligations is illegal.
+//
+// Contact information:
+//
+//
+//============================================================================
+//! @date Last updated on: 2022-11-11
+//! @version Last updated for: @ref qpcpp_7_1_3
+//!
//! @file
//! @brief QF/C++ to MSP40, QUTEST unit test harness, generic C99 compiler
-//! @cond
-//============================================================================
-//! Last updated for version 7.0.1
-//! Last updated on 2022-06-30
-//!
-//! Q u a n t u m L e a P s
-//! ------------------------
-//! Modern Embedded Software
-//!
-//! Copyright (C) 2005 Quantum Leaps. All rights reserved.
-//!
-//! This program is open source software: you can redistribute it and/or
-//! modify it under the terms of the GNU General Public License as published
-//! by the Free Software Foundation, either version 3 of the License, or
-//! (at your option) any later version.
-//!
-//! Alternatively, this program may be distributed and modified under the
-//! terms of Quantum Leaps commercial licenses, which expressly supersede
-//! the GNU General Public License and are specifically designed for
-//! licensees interested in retaining the proprietary status of their code.
-//!
-//! This program is distributed in the hope that it will be useful,
-//! but WITHOUT ANY WARRANTY; without even the implied warranty of
-//! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-//! GNU General Public License for more details.
-//!
-//! You should have received a copy of the GNU General Public License
-//! along with this program. If not, see .
-//!
-//! Contact information:
-//!
-//!
-//============================================================================
-//! @endcond
#ifndef QF_PORT_HPP
#define QF_PORT_HPP
@@ -53,8 +46,8 @@
#define QF_TIMEEVT_CTR_SIZE 2U
// QF interrupt disable/enable
-#define QF_INT_DISABLE() (++QP::QF::intNest_)
-#define QF_INT_ENABLE() (--QP::QF::intNest_)
+#define QF_INT_DISABLE() (++QP::QF::intLock_)
+#define QF_INT_ENABLE() (--QP::QF::intLock_)
// QF critical section
// QF_CRIT_STAT_TYPE not defined
diff --git a/ports/pic32/qutest/xc32/qf_port.hpp b/ports/pic32/qutest/xc32/qf_port.hpp
index c7eab74f..9641fcfb 100644
--- a/ports/pic32/qutest/xc32/qf_port.hpp
+++ b/ports/pic32/qutest/xc32/qf_port.hpp
@@ -1,39 +1,32 @@
+//============================================================================
+// QP/C++ Real-Time Embedded Framework (RTEF)
+// Copyright (C) 2005 Quantum Leaps, LLC. All rights reserved.
+//
+// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-QL-commercial
+//
+// This software is dual-licensed under the terms of the open source GNU
+// General Public License version 3 (or any later version), or alternatively,
+// under the terms of one of the closed source Quantum Leaps commercial
+// licenses.
+//
+// The terms of the open source GNU General Public License version 3
+// can be found at:
+//
+// The terms of the closed source Quantum Leaps commercial licenses
+// can be found at:
+//
+// Redistributions in source code must retain this top-level comment block.
+// Plagiarizing this software to sidestep the license obligations is illegal.
+//
+// Contact information:
+//
+//
+//============================================================================
+//! @date Last updated on: 2022-11-11
+//! @version Last updated for: @ref qpcpp_7_1_3
+//!
//! @file
//! @brief QF/C++ port for QUTEST Unit Test, PIC32
-//! @cond
-//============================================================================
-//! Last updated for version 7.0.1
-//! Last updated on 2022-06-30
-//!
-//! Q u a n t u m L e a P s
-//! ------------------------
-//! Modern Embedded Software
-//!
-//! Copyright (C) 2005 Quantum Leaps. All rights reserved.
-//!
-//! This program is open source software: you can redistribute it and/or
-//! modify it under the terms of the GNU General Public License as published
-//! by the Free Software Foundation, either version 3 of the License, or
-//! (at your option) any later version.
-//!
-//! Alternatively, this program may be distributed and modified under the
-//! terms of Quantum Leaps commercial licenses, which expressly supersede
-//! the GNU General Public License and are specifically designed for
-//! licensees interested in retaining the proprietary status of their code.
-//!
-//! This program is distributed in the hope that it will be useful,
-//! but WITHOUT ANY WARRANTY; without even the implied warranty of
-//! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-//! GNU General Public License for more details.
-//!
-//! You should have received a copy of the GNU General Public License
-//! along with this program. If not, see .
-//!
-//! Contact information:
-//!
-//!
-//============================================================================
-//! @endcond
#ifndef QF_PORT_HPP
#define QF_PORT_HPP
@@ -50,8 +43,8 @@
#define QF_MAX_TICK_RATE 2U
// QF interrupt disable/enable
-#define QF_INT_DISABLE() (++QP::QF::intNest_)
-#define QF_INT_ENABLE() (--QP::QF::intNest_)
+#define QF_INT_DISABLE() (++QP::QF::intLock_)
+#define QF_INT_ENABLE() (--QP::QF::intLock_)
// QF critical section
// QF_CRIT_STAT_TYPE not defined
diff --git a/ports/posix-qutest/qf_port.hpp b/ports/posix-qutest/qf_port.hpp
index bb999be1..880f302e 100644
--- a/ports/posix-qutest/qf_port.hpp
+++ b/ports/posix-qutest/qf_port.hpp
@@ -21,8 +21,8 @@
//
//
//============================================================================
-//! @date Last updated on: 2022-06-30
-//! @version Last updated for: @ref qpcpp_7_0_1
+//! @date Last updated on: 2022-11-11
+//! @version Last updated for: @ref qpcpp_7_1_3
//!
//! @file
//! @brief QF/C++ port for QUTEST Windows/Linux/macOS, GNU or Visual C++
@@ -45,8 +45,8 @@
#define QF_ACTIVE_STOP 1
// QF interrupt disable/enable
-#define QF_INT_DISABLE() (++QP::QF::intNest_)
-#define QF_INT_ENABLE() (--QP::QF::intNest_)
+#define QF_INT_DISABLE() (++QP::QF::intLock_)
+#define QF_INT_ENABLE() (--QP::QF::intLock_)
// QF critical section
// QF_CRIT_STAT_TYPE not defined
diff --git a/ports/win32-quit/qf_port.hpp b/ports/win32-quit/qf_port.hpp
index 7d025f7d..ac8c9de8 100644
--- a/ports/win32-quit/qf_port.hpp
+++ b/ports/win32-quit/qf_port.hpp
@@ -22,8 +22,8 @@
//
//
//============================================================================
-//! @date Last updated on: 2022-06-30
-//! @version Last updated for: @ref qpcpp_7_0_1
+//! @date Last updated on: 2022-11-11
+//! @version Last updated for: @ref qpcpp_7_1_3
//!
//! @file
//! @brief QF/C++ port for QUIT unit internal test, Win32 with GNU/VisualC++
@@ -46,8 +46,8 @@
#define QF_ACTIVE_STOP 1
// QF interrupt disable/enable
-#define QF_INT_DISABLE() (++QP::QF::intNest_)
-#define QF_INT_ENABLE() (--QP::QF::intNest_)
+#define QF_INT_DISABLE() (++QP::QF::intLock_)
+#define QF_INT_ENABLE() (--QP::QF::intLock_)
// QUIT critical section
// QF_CRIT_STAT_TYPE not defined
diff --git a/ports/win32-qutest/qf_port.hpp b/ports/win32-qutest/qf_port.hpp
index fc80533e..457810e9 100644
--- a/ports/win32-qutest/qf_port.hpp
+++ b/ports/win32-qutest/qf_port.hpp
@@ -21,8 +21,8 @@
//
//
//============================================================================
-//! @date Last updated on: 2022-06-30
-//! @version Last updated for: @ref qpcpp_7_0_1
+//! @date Last updated on: 2022-11-11
+//! @version Last updated for: @ref qpcpp_7_1_3
//!
//! @file
//! @brief QF/C++ port for QUTEST Windows/Linux/macOS, GNU or Visual C++
@@ -45,8 +45,8 @@
#define QF_ACTIVE_STOP 1
// QF interrupt disable/enable
-#define QF_INT_DISABLE() (++QP::QF::intNest_)
-#define QF_INT_ENABLE() (--QP::QF::intNest_)
+#define QF_INT_DISABLE() (++QP::QF::intLock_)
+#define QF_INT_ENABLE() (--QP::QF::intLock_)
// QF critical section
// QF_CRIT_STAT_TYPE not defined
diff --git a/qpcpp.qm b/qpcpp.qm
index 9fbc4a81..27d87691 100644
--- a/qpcpp.qm
+++ b/qpcpp.qm
@@ -5228,8 +5228,12 @@ return true; // the event is always posted correctly
+
+
+ //! Interrupt lock up-down counter (used in some QF ports)
+
-
+ //! Interrupt nesting up-down counter (used in some QF ports)
@@ -8887,6 +8891,7 @@ while (QF::readySet_.notEmpty()) {
//! data (as is required by the C++ Standard).
QActive::subscrList_ = nullptr;
QActive::maxPubSignal_ = 0;
+QF::intLock_ = 0U;
QF::intNest_ = 0U;
QF::maxPool_ = 0U;
@@ -9671,6 +9676,13 @@ bzero(&QK_attr_, sizeof(QK_attr_));
// setup the QK scheduler as initially locked and not running
QK_attr_.lockCeil = (QF_MAX_ACTIVE + 1U); // scheduler locked
+// QK idle AO object (const in ROM)
+static void * const idle_ao[(sizeof(QActive)/sizeof(void*)) + 1U]
+ = { nullptr };
+// register the idle AO object (cast 'const' away)
+QActive::registry_[0] = QF_CONST_CAST_(QActive*,
+ reinterpret_cast<QActive const*>(&idle_ao[0]));
+
#ifdef QK_INIT
QK_INIT(); // port-specific initialization of the QK kernel
#endif
@@ -11683,11 +11695,11 @@ bzero(&QXK_attr_, sizeof(QXK_attr_));
QXK_attr_.lockCeil = (QF_MAX_ACTIVE + 1U); // scheduler locked
// QXK idle AO object (const in ROM)
-static QActive * const idle_ao[(sizeof(QActive)/sizeof(QActive*)) + 1U]
+static void * const idle_ao[(sizeof(QActive)/sizeof(void*)) + 1U]
= { nullptr };
// register the idle AO object (cast 'const' away)
QActive::registry_[0] = QF_CONST_CAST_(QActive*,
- QXK_PTR_CAST_(QActive const*, &idle_ao[0]));
+ reinterpret_cast<QActive const*>(&idle_ao[0]));
#ifdef QXK_INIT
QXK_INIT(); // port-specific initialization of the QXK kernel
@@ -12251,7 +12263,7 @@ QF_CRIT_X_();
// major version number, Y is a 1-digit minor version number, and Z is
// a 1-digit release number.
//
-#define QP_VERSION 712U
+#define QP_VERSION 713U
//! The current QP version as a zero terminated string literal.
//
@@ -12260,10 +12272,10 @@ QF_CRIT_X_();
// major version number, Y is a 1-digit minor version number, and Z is
// a 1-digit release number.
//
-#define QP_VERSION_STR "7.1.2"
+#define QP_VERSION_STR "7.1.3"
-//! Encrypted current QP release (7.1.2) and date (2022-10-07)
-#define QP_RELEASE 0x7C44FF47U
+//! Encrypted current QP release (7.1.3) and date (2022-11-11)
+#define QP_RELEASE 0x7C3520C6U
//============================================================================
// Global namespace...
@@ -13646,6 +13658,7 @@ Q_DEFINE_THIS_MODULE("qf_qact")
//============================================================================
$define ${QF::QActive::registry_[QF_MAX_ACTIVE + 1U]}
+$define ${QF::QF-base::intLock_}
$define ${QF::QF-base::intNest_}
$define ${QF::QF-pkg::readySet_}
$define ${QF::QF-pkg::bzero}
diff --git a/src/qf/qf_qact.cpp b/src/qf/qf_qact.cpp
index 6590a255..3199d56e 100644
--- a/src/qf/qf_qact.cpp
+++ b/src/qf/qf_qact.cpp
@@ -69,12 +69,22 @@ QActive * QActive::registry_[QF_MAX_ACTIVE + 1U];
} // namespace QP
//$enddef${QF::QActive::registry_[QF_MAX_ACTIVE + 1U]} ^^^^^^^^^^^^^^^^^^^^^^^
+//$define${QF::QF-base::intLock_} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
+namespace QP {
+namespace QF {
+
+//${QF::QF-base::intLock_} ...................................................
+std::uint_fast8_t volatile intLock_;
+
+} // namespace QF
+} // namespace QP
+//$enddef${QF::QF-base::intLock_} ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//$define${QF::QF-base::intNest_} vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
namespace QP {
namespace QF {
//${QF::QF-base::intNest_} ...................................................
-std::uint_fast8_t intNest_;
+std::uint_fast8_t volatile intNest_;
} // namespace QF
} // namespace QP
diff --git a/src/qk/qk.cpp b/src/qk/qk.cpp
index ca136bd9..20f0592b 100644
--- a/src/qk/qk.cpp
+++ b/src/qk/qk.cpp
@@ -161,6 +161,13 @@ void init() {
// setup the QK scheduler as initially locked and not running
QK_attr_.lockCeil = (QF_MAX_ACTIVE + 1U); // scheduler locked
+ // QK idle AO object (const in ROM)
+ static void * const idle_ao[(sizeof(QActive)/sizeof(void*)) + 1U]
+ = { nullptr };
+ // register the idle AO object (cast 'const' away)
+ QActive::registry_[0] = QF_CONST_CAST_(QActive*,
+ reinterpret_cast(&idle_ao[0]));
+
#ifdef QK_INIT
QK_INIT(); // port-specific initialization of the QK kernel
#endif
diff --git a/src/qs/qutest.cpp b/src/qs/qutest.cpp
index 94114894..9a23c00f 100644
--- a/src/qs/qutest.cpp
+++ b/src/qs/qutest.cpp
@@ -188,6 +188,7 @@ void init() {
//! data (as is required by the C++ Standard).
QActive::subscrList_ = nullptr;
QActive::maxPubSignal_ = 0;
+ QF::intLock_ = 0U;
QF::intNest_ = 0U;
QF::maxPool_ = 0U;
diff --git a/src/qxk/qxk.cpp b/src/qxk/qxk.cpp
index 8f9bf193..6d25f96f 100644
--- a/src/qxk/qxk.cpp
+++ b/src/qxk/qxk.cpp
@@ -166,11 +166,11 @@ void init() {
QXK_attr_.lockCeil = (QF_MAX_ACTIVE + 1U); // scheduler locked
// QXK idle AO object (const in ROM)
- static QActive * const idle_ao[(sizeof(QActive)/sizeof(QActive*)) + 1U]
+ static void * const idle_ao[(sizeof(QActive)/sizeof(void*)) + 1U]
= { nullptr };
// register the idle AO object (cast 'const' away)
QActive::registry_[0] = QF_CONST_CAST_(QActive*,
- QXK_PTR_CAST_(QActive const*, &idle_ao[0]));
+ reinterpret_cast(&idle_ao[0]));
#ifdef QXK_INIT
QXK_INIT(); // port-specific initialization of the QXK kernel