diff --git a/doxygen/Doxyfile b/doxygen/Doxyfile
index 18e7bcad..536735bf 100644
--- a/doxygen/Doxyfile
+++ b/doxygen/Doxyfile
@@ -7,7 +7,7 @@
#---------------------------------------------------------------------------
DOXYFILE_ENCODING = UTF-8
PROJECT_NAME = QP/C
-PROJECT_NUMBER = 7.2.0
+PROJECT_NUMBER = 7.2.1
PROJECT_BRIEF = "Real-Time Embedded Framework"
PROJECT_LOGO = ../../ql-doxygen/images/logo_ql.png
OUTPUT_DIRECTORY =
diff --git a/doxygen/gen/metrics.txt b/doxygen/gen/metrics.txt
index a3f30552..8955a3e9 100644
--- a/doxygen/gen/metrics.txt
+++ b/doxygen/gen/metrics.txt
@@ -61,7 +61,7 @@
45 5 241 3 74 QMPool_get@119-192@..\src\qf\qf_mem.c
19 3 117 3 28 QMPool_put@195-222@..\src\qf\qf_mem.c
8 1 35 2 13 QActive_psInit@73-85@..\src\qf\qf_ps.c
- 43 6 232 3 75 QActive_publish_@90-164@..\src\qf\qf_ps.c
+ 42 6 231 3 75 QActive_publish_@90-164@..\src\qf\qf_ps.c
18 5 111 2 24 QActive_subscribe@169-192@..\src\qf\qf_ps.c
18 5 111 2 27 QActive_unsubscribe@197-223@..\src\qf\qf_ps.c
19 5 130 1 24 QActive_unsubscribeAll@228-251@..\src\qf\qf_ps.c
@@ -90,7 +90,7 @@
18 6 76 1 33 QF_run@175-207@..\src\qk\qk.c
25 3 156 7 34 QActive_start_@214-247@..\src\qk\qk.c
19 4 78 1 24 QK_sched_@252-275@..\src\qk\qk.c
- 65 17 378 1 112 QK_activate_@278-389@..\src\qk\qk.c
+ 66 17 382 1 113 QK_activate_@278-390@..\src\qk\qk.c
7 3 52 1 13 QF_init@73-85@..\src\qv\qv.c
3 1 10 1 4 QF_stop@88-91@..\src\qv\qv.c
46 15 251 1 97 QF_run@94-190@..\src\qv\qv.c
@@ -102,14 +102,14 @@
20 6 98 1 35 QF_run@176-210@..\src\qxk\qxk.c
29 5 178 7 42 QActive_start_@217-258@..\src\qxk\qxk.c
42 8 220 1 53 QXK_sched_@266-318@..\src\qxk\qxk.c
- 59 16 377 1 98 QXK_activate_@321-418@..\src\qxk\qxk.c
- 12 2 72 1 18 QXK_current@421-438@..\src\qxk\qxk.c
- 19 5 105 1 26 QXK_contextSw@442-467@..\src\qxk\qxk.c
- 13 2 104 1 23 QXK_threadExit_@474-496@..\src\qxk\qxk.c
+ 59 16 377 1 96 QXK_activate_@321-416@..\src\qxk\qxk.c
+ 12 2 72 1 18 QXK_current@419-436@..\src\qxk\qxk.c
+ 19 5 105 1 26 QXK_contextSw@440-465@..\src\qxk\qxk.c
+ 13 2 104 1 23 QXK_threadExit_@472-494@..\src\qxk\qxk.c
10 2 64 2 13 QXMutex_init@74-86@..\src\qxk\qxk_mutex.c
- 81 11 724 2 138 QXMutex_lock@89-226@..\src\qxk\qxk_mutex.c
- 59 9 502 1 97 QXMutex_tryLock@229-325@..\src\qxk\qxk_mutex.c
- 78 12 670 1 135 QXMutex_unlock@328-462@..\src\qxk\qxk_mutex.c
+ 79 11 701 2 136 QXMutex_lock@89-224@..\src\qxk\qxk_mutex.c
+ 57 9 483 1 95 QXMutex_tryLock@227-321@..\src\qxk\qxk_mutex.c
+ 74 12 622 1 129 QXMutex_unlock@324-452@..\src\qxk\qxk_mutex.c
9 1 51 3 11 QXSemaphore_init@73-83@..\src\qxk\qxk_sema.c
57 7 389 2 84 QXSemaphore_wait@86-169@..\src\qxk\qxk_sema.c
28 3 139 1 39 QXSemaphore_tryWait@172-210@..\src\qxk\qxk_sema.c
@@ -153,15 +153,15 @@ NLOC Avg.NLOC AvgCCN Avg.token function_cnt file
69 20.7 2.3 107.0 3 ..\src\qf\qf_defer.c
138 18.4 3.3 111.4 7 ..\src\qf\qf_dyn.c
103 32.0 4.3 197.0 3 ..\src\qf\qf_mem.c
- 115 21.2 4.4 123.8 5 ..\src\qf\qf_ps.c
+ 114 21.0 4.4 123.6 5 ..\src\qf\qf_ps.c
96 17.6 4.6 113.0 5 ..\src\qf\qf_qact.c
152 36.2 4.8 200.8 4 ..\src\qf\qf_qeq.c
18 16.0 2.0 79.0 1 ..\src\qf\qf_qmact.c
218 26.2 4.1 155.6 8 ..\src\qf\qf_time.c
- 190 22.8 5.0 128.6 8 ..\src\qk\qk.c
+ 191 22.9 5.0 129.1 8 ..\src\qk\qk.c
81 18.5 5.0 109.2 4 ..\src\qv\qv.c
260 22.9 5.0 138.5 11 ..\src\qxk\qxk.c
- 235 57.0 8.5 490.0 4 ..\src\qxk\qxk_mutex.c
+ 227 55.0 8.5 467.5 4 ..\src\qxk\qxk_mutex.c
143 34.0 4.5 213.5 4 ..\src\qxk\qxk_sema.c
325 24.4 3.8 156.0 13 ..\src\qxk\qxk_xthr.c
@@ -170,5 +170,5 @@ No thresholds exceeded (cyclomatic_complexity > 20 or length > 500 or nloc > 100
==========================================================================================
Total nloc Avg.NLOC AvgCCN Avg.token Fun Cnt Warning cnt Fun Rt nloc Rt
------------------------------------------------------------------------------------------
- 4057 24.5 4.3 151.2 125 0 0.00 0.00
+ 4049 24.4 4.3 150.5 125 0 0.00 0.00
@endcode
diff --git a/doxygen/history.dox b/doxygen/history.dox
index b4b1bc7a..15530d76 100644
--- a/doxygen/history.dox
+++ b/doxygen/history.dox
@@ -6,6 +6,21 @@
@remark
This document is part of the @webref{products/qp#CERT,QP Certification Pack}, which has been specifically designed to aid companies in **safety certification** of their software based on the QP real-time embedded frameworks.
+@section qpc_7_2_1 Version 7.2.1, 2023-01-15
+__QP/C Source Code:__
+- Changed the design of the ::QXMutex class to include ::QActive by composition rather than inheritance.
+
+__Ports:__
+- Fixed problems in QK ports for ARM Cortex-M: in case a regular IRQ is used for returning to the thread context. The port didn't handle correctly #QK_USE_IRQ_NUM above 32.
+- Fixed problems in QXK ports for ARM Cortex-M: in case a regular IRQ is used for returning to the thread context. The port didn't handle correctly #QK_USE_IRQ_NUM above 32.
+
+__Bug Fixes:__
+- [bug#328 Assertion qxk:720 in QP/C/C++ 7.2.0](https://sourceforge.net/p/qpc/bugs/328)
+
+@attention
+This bug in QXK affects releases QP/C @ref qpc_7_1_0 "7.1.0" through @ref qpc_7_2_0 "7.2.0"
+
+
@section qpc_7_2_0 Version 7.2.0, 2023-01-06
__QP/C Source Code:__
- Added "enumeration dictionaries" for QS software tracing (see QS_ENUM_DICTIONARY())
diff --git a/examples/arm-cm/blinky_ek-tm4c123gxl/blinky.c b/examples/arm-cm/blinky_ek-tm4c123gxl/blinky.c
index 5aab6843..ffcfa781 100644
--- a/examples/arm-cm/blinky_ek-tm4c123gxl/blinky.c
+++ b/examples/arm-cm/blinky_ek-tm4c123gxl/blinky.c
@@ -1,11 +1,11 @@
-/*****************************************************************************
-* Product: Simple Blinky example
-* Last Updated for Version: 5.6.5
-* Date of the Last Update: 2016-06-03
+/*============================================================================
+* Product: "Blinky" example
+* Last updated for version 7.2.0
+* Last updated on 2023-01-08
*
-* Q u a n t u m L e a P s
-* ---------------------------
-* innovating embedded systems
+* Q u a n t u m L e a P s
+* ------------------------
+* Modern Embedded Software
*
* Copyright (C) 2005 Quantum Leaps, LLC. All rights reserved.
*
@@ -28,19 +28,18 @@
* along with this program. If not, see .
*
* Contact information:
-* Web: www.state-machine.com
+*
*
-*****************************************************************************/
+============================================================================*/
#include "qpc.h"
-#include "blinky.h"
#include "bsp.h"
+#include "blinky.h"
//Q_DEFINE_THIS_FILE
/*..........................................................................*/
typedef struct { /* the Blinky active object */
QActive super; /* inherit QActive */
-
QTimeEvt timeEvt; /* private time event generator */
} Blinky;
@@ -49,9 +48,9 @@ static Blinky Blinky_inst; /* the Blinky active object */
QActive * const AO_Blinky = &Blinky_inst.super;
/* hierarchical state machine ... */
-static QState Blinky_initial(Blinky * const me, QEvt const * const e);
-static QState Blinky_off (Blinky * const me, QEvt const * const e);
-static QState Blinky_on (Blinky * const me, QEvt const * const e);
+static QState Blinky_initial(Blinky * const me, void const * const par);
+static QState Blinky_off(Blinky * const me, QEvt const * const e);
+static QState Blinky_on(Blinky * const me, QEvt const * const e);
/*..........................................................................*/
void Blinky_ctor(void) {
@@ -61,8 +60,15 @@ void Blinky_ctor(void) {
}
/* HSM definition ----------------------------------------------------------*/
-QState Blinky_initial(Blinky * const me, QEvt const * const e) {
- (void)e; /* avoid compiler warning about unused parameter */
+QState Blinky_initial(Blinky * const me, void const * const par) {
+ Q_UNUSED_PAR(par);
+
+ QS_OBJ_DICTIONARY(&Blinky_inst);
+ QS_OBJ_DICTIONARY(&Blinky_inst.timeEvt);
+
+ QS_FUN_DICTIONARY(&Blinky_initial);
+ QS_FUN_DICTIONARY(&Blinky_off);
+ QS_FUN_DICTIONARY(&Blinky_on);
/* arm the time event to expire in half a second and every half second */
QTimeEvt_armX(&me->timeEvt, BSP_TICKS_PER_SEC/2U, BSP_TICKS_PER_SEC/2U);
diff --git a/examples/arm-cm/blinky_ek-tm4c123gxl/blinky.h b/examples/arm-cm/blinky_ek-tm4c123gxl/blinky.h
index 5568238a..43c61a72 100644
--- a/examples/arm-cm/blinky_ek-tm4c123gxl/blinky.h
+++ b/examples/arm-cm/blinky_ek-tm4c123gxl/blinky.h
@@ -1,13 +1,13 @@
-/*****************************************************************************
-* Product: simple "Blinky" example
-* Last Updated for Version: 5.4.0
-* Date of the Last Update: 2015-03-07
+/*============================================================================
+* Product: "Blinky" example
+* Last updated for version 7.2.0
+* Last updated on 2023-01-08
*
-* Q u a n t u m L e a P s
-* ---------------------------
-* innovating embedded systems
+* Q u a n t u m L e a P s
+* ------------------------
+* Modern Embedded Software
*
-* Copyright (C) 2005 Quantum Leaps, LLC. state-machine.com.
+* 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
@@ -30,9 +30,9 @@
* Contact information:
*
*
-*****************************************************************************/
-#ifndef BLINKY_H
-#define BLINKY_H
+============================================================================*/
+#ifndef BLINKY_H_
+#define BLINKY_H_
enum BlinkySignals {
DUMMY_SIG = Q_USER_SIG,
@@ -45,4 +45,4 @@ enum BlinkySignals {
void Blinky_ctor(void);
extern QActive * const AO_Blinky; /* opaque pointer */
-#endif /* BLINKY_H */
+#endif /* BLINKY_H_ */
diff --git a/examples/arm-cm/blinky_ek-tm4c123gxl/qube/Makefile b/examples/arm-cm/blinky_ek-tm4c123gxl/qube/Makefile
new file mode 100644
index 00000000..eb12208d
--- /dev/null
+++ b/examples/arm-cm/blinky_ek-tm4c123gxl/qube/Makefile
@@ -0,0 +1,242 @@
+##############################################################################
+# Product: Makefile for Qube for Windows and POSIX *HOSTS*
+# Last updated for version 7.2.0
+# Last updated on 2023-01-08
+#
+# Q u a n t u m L e a P s
+# ------------------------
+# Modern Embedded Software
+#
+# 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
+# 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:
+#
+#
+##############################################################################
+#
+# examples of invoking this Makefile:
+# building configurations: qube
+# make
+# make clean # cleanup the build
+#
+# NOTE:
+# To use this Makefile on Windows, you will need the GNU make utility, which
+# is included in the QTools collection for Windows, see:
+# https://github.com/QuantumLeaps/qtools
+#
+
+#-----------------------------------------------------------------------------
+# project name:
+#
+PROJECT := qube
+
+#-----------------------------------------------------------------------------
+# project directories:
+#
+
+# list of all source directories used by this project
+VPATH := ..
+
+# list of all include directories needed by this project
+INCLUDES := -I..
+
+# location of the QP/C framework (if not provided in an env. variable)
+ifeq ($(QPC),)
+QPC := ../../../..
+endif
+
+QP_PORT_DIR := $(QPC)/ports/qube
+
+# make sure that QTOOLS env. variable is defined...
+ifeq ("$(wildcard $(QTOOLS))","")
+$(error QTOOLS not found. Please install QTools and define QTOOLS env. variable)
+endif
+
+#-----------------------------------------------------------------------------
+# project files:
+#
+
+# C source files...
+C_SRCS := \
+ blinky.c \
+ main.c \
+ bsp_qube.c
+
+# C++ source files...
+CPP_SRCS :=
+
+LIB_DIRS :=
+LIBS :=
+
+# defines...
+# QP_API_VERSION controls the QP API compatibility; 9999 means the latest API
+DEFINES := -DQP_API_VERSION=9999
+
+ifeq (,$(CONF))
+ CONF := dbg
+endif
+
+#-----------------------------------------------------------------------------
+# add QP/C framework, the "Qube" environment:
+#
+C_SRCS += \
+ qep_hsm.c \
+ qep_msm.c \
+ qf_actq.c \
+ qf_defer.c \
+ qf_dyn.c \
+ qf_mem.c \
+ qf_ps.c \
+ qf_qact.c \
+ qf_qeq.c \
+ qf_qmact.c \
+ qf_time.c \
+ qube.c
+
+QS_SRCS := \
+ qs.c \
+ qs_64bit.c \
+ qs_fp.c \
+ qspy.c
+
+#============================================================================
+# Typically you should not need to change anything below this line
+
+#-----------------------------------------------------------------------------
+# GNU toolset:
+#
+# NOTE:
+# GNU toolset (MinGW) is included in the QTools collection for Windows, see:
+# https://github.com/QuantumLeaps/qtools
+# It is assumed that $(QTOOLS)/bin directory is added to the PATH
+#
+CC := gcc
+CPP := g++
+LINK := gcc # for C programs
+#LINK := g++ # for C++ programs
+
+#-----------------------------------------------------------------------------
+# basic utilities (depends on the OS this Makefile runs on):
+#
+ifeq ($(OS),Windows_NT)
+ MKDIR := mkdir
+ RM := rm
+ TARGET_EXT := .exe
+else ifeq ($(OSTYPE),cygwin)
+ MKDIR := mkdir -p
+ RM := rm -f
+ TARGET_EXT := .exe
+else
+ MKDIR := mkdir -p
+ RM := rm -f
+ TARGET_EXT :=
+endif
+
+#-----------------------------------------------------------------------------
+# only Q_SPY build configuration...
+
+BIN_DIR := $(PROJECT)
+
+C_SRCS += $(QS_SRCS)
+INCLUDES += -I$(QPC)/include -I$(QP_PORT_DIR) -I$(QTOOLS)/qspy/include
+VPATH += $(QPC)/src/qf $(QPC)/src/qs $(QP_PORT_DIR) $(QTOOLS)/qspy/source
+
+# gcc options:
+CFLAGS = -c -g -O -fno-pie -std=c11 -pedantic -Wall -Wextra -W \
+ $(INCLUDES) $(DEFINES) -DQ_SPY
+
+CPPFLAGS = -c -g -O -fno-pie -std=c++11 -pedantic -Wall -Wextra \
+ -fno-rtti -fno-exceptions \
+ $(INCLUDES) $(DEFINES) -DQ_SPY
+
+ifndef GCC_OLD
+ LINKFLAGS := -no-pie
+endif
+
+#-----------------------------------------------------------------------------
+C_OBJS := $(patsubst %.c,%.o, $(C_SRCS))
+CPP_OBJS := $(patsubst %.cpp,%.o, $(CPP_SRCS))
+
+TARGET_EXE := $(BIN_DIR)/$(PROJECT)$(TARGET_EXT)
+C_OBJS_EXT := $(addprefix $(BIN_DIR)/, $(C_OBJS))
+C_DEPS_EXT := $(patsubst %.o,%.d, $(C_OBJS_EXT))
+CPP_OBJS_EXT := $(addprefix $(BIN_DIR)/, $(CPP_OBJS))
+CPP_DEPS_EXT := $(patsubst %.o,%.d, $(CPP_OBJS_EXT))
+
+# create $(BIN_DIR) if it does not exist
+ifeq ("$(wildcard $(BIN_DIR))","")
+$(shell $(MKDIR) $(BIN_DIR))
+endif
+
+#-----------------------------------------------------------------------------
+# rules
+#
+
+all: $(TARGET_EXE)
+ $(TARGET_EXE)
+
+$(TARGET_EXE) : $(C_OBJS_EXT) $(CPP_OBJS_EXT)
+ $(CC) $(CFLAGS) $(QPC)/include/qstamp.c -o $(BIN_DIR)/qstamp.o
+ $(LINK) $(LINKFLAGS) $(LIB_DIRS) -o $@ $^ $(BIN_DIR)/qstamp.o $(LIBS)
+
+$(BIN_DIR)/%.d : %.c
+ $(CC) -MM -MT $(@:.d=.o) $(CFLAGS) $< > $@
+
+$(BIN_DIR)/%.d : %.cpp
+ $(CPP) -MM -MT $(@:.d=.o) $(CPPFLAGS) $< > $@
+
+$(BIN_DIR)/%.o : %.c
+ $(CC) $(CFLAGS) $< -o $@
+
+$(BIN_DIR)/%.o : %.cpp
+ $(CPP) $(CPPFLAGS) $< -o $@
+
+.PHONY : clean show
+
+# include dependency files only if our goal depends on their existence
+ifneq ($(MAKECMDGOALS),clean)
+ ifneq ($(MAKECMDGOALS),show)
+-include $(C_DEPS_EXT) $(CPP_DEPS_EXT)
+ endif
+endif
+
+.PHONY : clean show
+
+clean :
+ -$(RM) $(BIN_DIR)/*.o \
+ $(BIN_DIR)/*.d \
+ $(TARGET_EXE)
+
+show :
+ @echo PROJECT = $(PROJECT)
+ @echo TARGET_EXE = $(TARGET_EXE)
+ @echo VPATH = $(VPATH)
+ @echo C_SRCS = $(C_SRCS)
+ @echo CPP_SRCS = $(CPP_SRCS)
+ @echo C_DEPS_EXT = $(C_DEPS_EXT)
+ @echo C_OBJS_EXT = $(C_OBJS_EXT)
+ @echo C_DEPS_EXT = $(C_DEPS_EXT)
+ @echo CPP_DEPS_EXT = $(CPP_DEPS_EXT)
+ @echo CPP_OBJS_EXT = $(CPP_OBJS_EXT)
+ @echo LIB_DIRS = $(LIB_DIRS)
+ @echo LIBS = $(LIBS)
+ @echo DEFINES = $(DEFINES)
+
diff --git a/examples/arm-cm/blinky_ek-tm4c123gxl/qube/bsp_qube.c b/examples/arm-cm/blinky_ek-tm4c123gxl/qube/bsp_qube.c
new file mode 100644
index 00000000..5028d06f
--- /dev/null
+++ b/examples/arm-cm/blinky_ek-tm4c123gxl/qube/bsp_qube.c
@@ -0,0 +1,38 @@
+#include "qpc.h"
+#include "bsp.h"
+#include "blinky.h"
+
+Q_DEFINE_THIS_FILE
+
+/*..........................................................................*/
+void BSP_init(void) {
+ /* QS dictionaries... */
+ QS_SIG_DICTIONARY(TIMEOUT_SIG, (void*)0);
+ /* QS filters... */
+ QS_GLB_FILTER(QS_ALL_RECORDS);
+}
+/*..........................................................................*/
+void BSP_exit(void) {
+ QF_stop();
+}
+/*..........................................................................*/
+void BSP_ledOff(void) {
+ QS_BEGIN_ID(QS_USER, 0U)
+ QS_STR("OFF");
+ QS_END()
+}
+/*..........................................................................*/
+void BSP_ledOn(void) {
+ QS_BEGIN_ID(QS_USER, 0U)
+ QS_STR("ON");
+ QS_END()
+}
+/*..........................................................................*/
+/*! callback function to generate an event for this application */
+QEvt const* Qube_onGenEvt(QSignal sig, char const* params) {
+ Q_UNUSED_PAR(params); /* QHsmTst does not use params */
+
+ static QEvt evt = { 0U, 0U, 0U };
+ evt.sig = sig;
+ return &evt;
+}
diff --git a/examples/arm-cm/blinky_ek-tm4c123gxl/qube/qube_vs.sln b/examples/arm-cm/blinky_ek-tm4c123gxl/qube/qube_vs.sln
new file mode 100644
index 00000000..94798531
--- /dev/null
+++ b/examples/arm-cm/blinky_ek-tm4c123gxl/qube/qube_vs.sln
@@ -0,0 +1,21 @@
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 16
+VisualStudioVersion = 16.0.33130.400
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "qube_vs", "qube_vs.vcxproj", "{8CC465F7-872E-4D03-B93C-1B64858B4E11}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ qube_vs|x86 = qube_vs|x86
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {8CC465F7-872E-4D03-B93C-1B64858B4E11}.qube_vs|x86.ActiveCfg = qube_vs|Win32
+ {8CC465F7-872E-4D03-B93C-1B64858B4E11}.qube_vs|x86.Build.0 = qube_vs|Win32
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {15807264-0CD3-4BEB-9F83-9E0F04F034E7}
+ EndGlobalSection
+EndGlobal
diff --git a/examples/arm-cm/blinky_ek-tm4c123gxl/qube/qube_vs.vcxproj b/examples/arm-cm/blinky_ek-tm4c123gxl/qube/qube_vs.vcxproj
new file mode 100644
index 00000000..de77e033
--- /dev/null
+++ b/examples/arm-cm/blinky_ek-tm4c123gxl/qube/qube_vs.vcxproj
@@ -0,0 +1,92 @@
+
+
+
+
+ qube_vs
+ Win32
+
+
+
+ {8CC465F7-872E-4D03-B93C-1B64858B4E11}
+ qube_vs
+ Win32Proj
+ 10.0
+
+
+
+ Application
+ NotSet
+ v142
+
+
+
+
+
+
+
+
+
+ <_ProjectFileVersion>10.0.40219.1
+ $(SolutionDir)$(Configuration)\
+ $(Configuration)\
+ true
+
+
+
+ Disabled
+ ..;..\..\..\..\include;..\..\..\..\ports\qube;$(QTOOLS)\qspy\include;%(AdditionalIncludeDirectories)
+ Q_SPY;Q_SPY;WIN32;_DEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)
+ false
+
+
+ Default
+ MultiThreaded
+ NotUsing
+ Level4
+ ProgramDatabase
+ 4127
+ stdc11
+
+
+ ws2_32.lib;%(AdditionalDependencies)
+ %(AdditionalLibraryDirectories)
+ true
+ Console
+ MachineX86
+
+
+ cmd /c "del $(OutDir)qstamp.obj"
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/examples/arm-cm/blinky_ek-tm4c123gxl/qube/qube_vs.vcxproj.filters b/examples/arm-cm/blinky_ek-tm4c123gxl/qube/qube_vs.vcxproj.filters
new file mode 100644
index 00000000..d1f23e55
--- /dev/null
+++ b/examples/arm-cm/blinky_ek-tm4c123gxl/qube/qube_vs.vcxproj.filters
@@ -0,0 +1,77 @@
+
+
+
+
+
+ qube_vs
+
+
+
+
+
+ QP
+
+
+ QP
+
+
+ QP
+
+
+ QP
+
+
+ QP
+
+
+ QP
+
+
+ QP
+
+
+ QP
+
+
+ QP
+
+
+ QP
+
+
+ QP
+
+
+ QP
+
+
+ QP
+
+
+ QP
+
+
+ QP
+
+
+
+
+
+ qube_vs
+
+
+ qube_vs
+
+
+ qube_vs
+
+
+
+
+ {8a14cc5f-5520-4870-80c8-16a728dd5b06}
+
+
+ {b3b54046-9fb7-4796-b157-31c169faf065}
+
+
+
\ No newline at end of file
diff --git a/examples/arm-cm/dpp_efm32-slstk3401a/qk/armclang/dpp-qk.uvoptx b/examples/arm-cm/dpp_efm32-slstk3401a/qk/armclang/dpp-qk.uvoptx
index fcf58664..a5f19d9d 100644
--- a/examples/arm-cm/dpp_efm32-slstk3401a/qk/armclang/dpp-qk.uvoptx
+++ b/examples/arm-cm/dpp_efm32-slstk3401a/qk/armclang/dpp-qk.uvoptx
@@ -159,16 +159,16 @@
0
377
1
- 6704
+ 0
0
0
0
0
0
- 1
+ 0
..\bsp.c
- \\dpp_qk\../bsp.c\377
+
1
diff --git a/examples/arm-cm/dpp_efm32-slstk3401a/qk/armclang/dpp-qk.uvprojx b/examples/arm-cm/dpp_efm32-slstk3401a/qk/armclang/dpp-qk.uvprojx
index 28af283f..9c9374b4 100644
--- a/examples/arm-cm/dpp_efm32-slstk3401a/qk/armclang/dpp-qk.uvprojx
+++ b/examples/arm-cm/dpp_efm32-slstk3401a/qk/armclang/dpp-qk.uvprojx
@@ -337,7 +337,7 @@
0
- QK_USE_IRQ_NUM=25 QK_USE_IRQ_HANDLER=CRYPTO_IRQHandler
+ QK_USE_IRQ_NUM=33,QK_USE_IRQ_HANDLER=FPUEH_IRQHandler
..\..;..\..\..\..\..\include;..\..\..\..\..\ports\arm-cm\qk\armclang;..\..\..\..\..\3rd_party\CMSIS\Include;..\..\..\..\..\3rd_party\efm32pg1b
diff --git a/examples/arm-cm/dpp_efm32-slstk3401a/qk/gnu/Makefile b/examples/arm-cm/dpp_efm32-slstk3401a/qk/gnu/Makefile
index 42d8cba6..3d08a149 100644
--- a/examples/arm-cm/dpp_efm32-slstk3401a/qk/gnu/Makefile
+++ b/examples/arm-cm/dpp_efm32-slstk3401a/qk/gnu/Makefile
@@ -1,7 +1,7 @@
##############################################################################
# Product: Makefile for QP/C on EMF32-SLSTK3401A, QK kernel, GNU-ARM
-# Last Updated for Version: 7.0.1
-# Date of the Last Update: 2022-05-23
+# Last Updated for Version: 7.2.1
+# Date of the Last Update: 2023-01-14
#
# Q u a n t u m L e a P s
# ------------------------
@@ -138,8 +138,8 @@ LIBS :=
# defines
DEFINES := -DEFM32PG1B200F256GM48=1 \
- -DQK_USE_IRQ_NUM=25 \
- -DQK_USE_IRQ_HANDLER=CRYPTO_IRQHandler
+ -DQK_USE_IRQ_NUM=33 \
+ -DQK_USE_IRQ_HANDLER=FPUEH_IRQHandler
# ARM CPU, ARCH, FPU, and Float-ABI types...
# ARM_CPU: [cortex-m0 | cortex-m0plus | cortex-m1 | cortex-m3 | cortex-m4]
diff --git a/examples/arm-cm/dpp_efm32-slstk3401a/qk/gnu/qspy_pthre0.txt b/examples/arm-cm/dpp_efm32-slstk3401a/qk/gnu/qspy_pthre0.txt
deleted file mode 100644
index 8580fdb3..00000000
--- a/examples/arm-cm/dpp_efm32-slstk3401a/qk/gnu/qspy_pthre0.txt
+++ /dev/null
@@ -1,79 +0,0 @@
-0045455691 Sch-Idle Pri=1->0
- TE0-ADis Obj=Philo_inst[2].timeEvt,AO=Philo_inst[2]
-0053770644 TE0-Post Obj=Philo_inst[2].timeEvt,Sig=TIMEOUT_SIG,AO=Philo_inst[2]
-0053771337 AO-Post Sdr=l_SysTick_Handler,Obj=Philo_inst[2],Evt,Que
-0053772439 Sch-Next Pri=0->3
-0053772827 AO-GetL Obj=Philo_inst[2],Evt
-0053773411 Disp===> Obj=Philo_inst[2],Sig=TIMEOUT_SIG,State=Philo_eating
-0053774335 MP-Get Obj=EvtPool1,Free=9,Min=8
-0053774896 QF-New Sig=DONE_SIG,Size=6
-0053775356 QF-Pub Sdr=Philo_inst[2],Evt
-0053775958 Sch-Lock Ceil=0->6
-0053776428 AO-Post Sdr=Philo_inst[2],Obj=Table_inst,Evt,Que
-0053777295 Sch-Unlk Ceil=6->0
-0053777749 Sch-Next Pri=3->6
-0053778131 AO-GetL Obj=Table_inst,Evt
-0053778715 Disp===> Obj=Table_inst,Sig=DONE_SIG,State=Table_serving
-0053779422 PHILO_STAT 2 thinking
-0053780152 MP-Get Obj=EvtPool1,Free=8,Min=8
-0053780713 QF-New Sig=EAT_SIG,Size=6
-0053781163 QF-Pub Sdr=Table_inst,Evt
-0053781750 Sch-Lock Ceil=0->6
-0053782202 AO-Post Sdr=Table_inst,Obj=Table_inst,Evt,Que
-0053783101 AO-Post Sdr=Table_inst,Obj=Philo_inst[4],Evt,Que
-0053784001 AO-Post Sdr=Table_inst,Obj=Philo_inst[3],Evt,Que
-0053784901 AO-Post Sdr=Table_inst,Obj=Philo_inst[2],Evt,Que
-0053785801 AO-Post Sdr=Table_inst,Obj=Philo_inst[1],Evt,Que
-0053786701 AO-Post Sdr=Table_inst,Obj=Philo_inst[0],Evt,Que
-0053787560 Sch-Unlk Ceil=6->0
-0053787984 QF-gcA Evt
-0053788466 PHILO_STAT 3 eating
-0053789030 =>Intern Obj=Table_inst,Sig=DONE_SIG,State=Table_serving
-0053789667 QF-gcA Evt
-0053790128 Sch-Next Pri=6->6
-0053790504 AO-GetL Obj=Table_inst,Evt
-0053791087 Disp===> Obj=Table_inst,Sig=EAT_SIG,State=Table_serving
-0053791796 =>Intern Obj=Table_inst,Sig=EAT_SIG,State=Table_active
-0053792427 QF-gcA Evt
-0053792901 Sch-Next Pri=6->5
-0053793273 AO-GetL Obj=Philo_inst[4],Evt
-0053793856 Disp===> Obj=Philo_inst[4],Sig=EAT_SIG,State=Philo_thinking
-0053794533 =>Intern Obj=Philo_inst[4],Sig=EAT_SIG,State=Philo_thinking
-0053795165 QF-gcA Evt
-0053795639 Sch-Next Pri=5->4
-0053796011 AO-GetL Obj=Philo_inst[3],Evt
-0053796594 Disp===> Obj=Philo_inst[3],Sig=EAT_SIG,State=Philo_hungry
-0053797557 Sch-Lock Ceil=0->5
-0053797959 Sch-Unlk Ceil=5->0
-0053798428 TE0-Arm Obj=Philo_inst[3].timeEvt,AO=Philo_inst[3],Tim=197,Int=0
-===RTC===> St-Entry Obj=Philo_inst[3],State=Philo_eating
-0053799586 ===>Tran Obj=Philo_inst[3],Sig=EAT_SIG,State=Philo_hungry->Philo_eating
-0053800328 QF-gcA Evt
-0053800804 Sch-Rsme Prio=4->3
-0053801202 QF-gc Evt
-0053801667 MP-Put Obj=EvtPool1,Free=9
-0053802194 TE0-DisA Obj=Philo_inst[2].timeEvt,AO=Philo_inst[2]
-===RTC===> St-Exit Obj=Philo_inst[2],State=Philo_eating
-0053803294 Sch-Lock Ceil=0->5
-0053803694 Sch-Unlk Ceil=5->0
-0053804165 TE0-Arm Obj=Philo_inst[2].timeEvt,AO=Philo_inst[2],Tim=77,Int=0
-===RTC===> St-Entry Obj=Philo_inst[2],State=Philo_thinking
-0053805318 ===>Tran Obj=Philo_inst[2],Sig=TIMEOUT_SIG,State=Philo_eating->Philo_thinking
-0053806100 Sch-Next Pri=3->3
-0053806487 AO-GetL Obj=Philo_inst[2],Evt
-0053807071 Disp===> Obj=Philo_inst[2],Sig=EAT_SIG,State=Philo_thinking
-0053807760 =>Intern Obj=Philo_inst[2],Sig=EAT_SIG,State=Philo_thinking
-0053808392 QF-gcA Evt
-0053808867 Sch-Next Pri=3->2
-0053809239 AO-GetL Obj=Philo_inst[1],Evt
-0053809822 Disp===> Obj=Philo_inst[1],Sig=EAT_SIG,State=Philo_hungry
-===RTC===> St-Unhnd Obj=Philo_inst[1],Sig=EAT_SIG,State=Philo_hungry
-0053810966 =>Ignore Obj=Philo_inst[1],Sig=EAT_SIG,State=Philo_hungry
-0053811583 QF-gcA Evt
-0053812054 Sch-Next Pri=2->1
-0053812427 AO-GetL Obj=Philo_inst[0],Evt
-0053813010 Disp===> Obj=Philo_inst[0],Sig=EAT_SIG,State=Philo_eating
-0053813685 =>Intern Obj=Philo_inst[0],Sig=EAT_SIG,State=Philo_eating
-0053814318 QF-gc Evt
-0053814781 MP-Put Obj=EvtPool1,Free=10
-0053815312 Sch-Idle Pri=1->0
diff --git a/examples/arm-cm/dpp_efm32-slstk3401a/qk/gnu/qspy_pthre1.txt b/examples/arm-cm/dpp_efm32-slstk3401a/qk/gnu/qspy_pthre1.txt
deleted file mode 100644
index c166059d..00000000
--- a/examples/arm-cm/dpp_efm32-slstk3401a/qk/gnu/qspy_pthre1.txt
+++ /dev/null
@@ -1,79 +0,0 @@
-0045455658 Sch-Idle Pri=1->0
- TE0-ADis Obj=Philo_inst[2].timeEvt,AO=Philo_inst[2]
-0053770644 TE0-Post Obj=Philo_inst[2].timeEvt,Sig=TIMEOUT_SIG,AO=Philo_inst[2]
-0053771338 AO-Post Sdr=l_SysTick_Handler,Obj=Philo_inst[2],Evt,Que
-0053772441 Sch-Next Pri=0->3
-0053772827 AO-GetL Obj=Philo_inst[2],Evt
-0053773412 Disp===> Obj=Philo_inst[2],Sig=TIMEOUT_SIG,State=Philo_eating
-0053774333 MP-Get Obj=EvtPool1,Free=9,Min=8
-0053774896 QF-New Sig=DONE_SIG,Size=6
-0053775356 QF-Pub Sdr=Philo_inst[2],Evt
-0053775957 Sch-Lock Ceil=0->2
-0053776427 AO-Post Sdr=Philo_inst[2],Obj=Table_inst,Evt,Que
-0053777293 Sch-Unlk Ceil=2->0
-0053777742 Sch-Next Pri=3->6
-0053778121 AO-GetL Obj=Table_inst,Evt
-0053778706 Disp===> Obj=Table_inst,Sig=DONE_SIG,State=Table_serving
-0053779419 PHILO_STAT 2 thinking
-0053780149 MP-Get Obj=EvtPool1,Free=8,Min=8
-0053780712 QF-New Sig=EAT_SIG,Size=6
-0053781162 QF-Pub Sdr=Table_inst,Evt
-0053781749 Sch-Lock Ceil=0->2
-0053782201 AO-Post Sdr=Table_inst,Obj=Table_inst,Evt,Que
-0053783100 AO-Post Sdr=Table_inst,Obj=Philo_inst[4],Evt,Que
-0053783993 AO-Post Sdr=Table_inst,Obj=Philo_inst[3],Evt,Que
-0053784886 AO-Post Sdr=Table_inst,Obj=Philo_inst[2],Evt,Que
-0053785779 AO-Post Sdr=Table_inst,Obj=Philo_inst[1],Evt,Que
-0053786672 AO-Post Sdr=Table_inst,Obj=Philo_inst[0],Evt,Que
-0053787523 Sch-Unlk Ceil=2->0
-0053787943 QF-gcA Evt
-0053788426 PHILO_STAT 3 eating
-0053788992 =>Intern Obj=Table_inst,Sig=DONE_SIG,State=Table_serving
-0053789639 QF-gcA Evt
-0053790098 Sch-Next Pri=6->6
-0053790474 AO-GetL Obj=Table_inst,Evt
-0053791059 Disp===> Obj=Table_inst,Sig=EAT_SIG,State=Table_serving
-0053791774 =>Intern Obj=Table_inst,Sig=EAT_SIG,State=Table_active
-0053792405 QF-gcA Evt
-0053792872 Sch-Rsme Prio=6->3
-0053793269 QF-gc Evt
-0053793733 MP-Put Obj=EvtPool1,Free=9
-0053794259 TE0-DisA Obj=Philo_inst[2].timeEvt,AO=Philo_inst[2]
-===RTC===> St-Exit Obj=Philo_inst[2],State=Philo_eating
-0053795376 Sch-Lock Ceil=0->5
-0053795777 Sch-Unlk Ceil=5->0
-0053796248 TE0-Arm Obj=Philo_inst[2].timeEvt,AO=Philo_inst[2],Tim=147,Int=0
-===RTC===> St-Entry Obj=Philo_inst[2],State=Philo_thinking
-0053797402 ===>Tran Obj=Philo_inst[2],Sig=TIMEOUT_SIG,State=Philo_eating->Philo_thinking
-0053798185 Sch-Next Pri=3->5
-0053798573 AO-GetL Obj=Philo_inst[4],Evt
-0053799158 Disp===> Obj=Philo_inst[4],Sig=EAT_SIG,State=Philo_thinking
-0053799844 =>Intern Obj=Philo_inst[4],Sig=EAT_SIG,State=Philo_thinking
-0053800478 QF-gcA Evt
-0053800951 Sch-Next Pri=5->4
-0053801324 AO-GetL Obj=Philo_inst[3],Evt
-0053801906 Disp===> Obj=Philo_inst[3],Sig=EAT_SIG,State=Philo_hungry
-0053802845 Sch-Lock Ceil=0->5
-0053803248 Sch-Unlk Ceil=5->0
-0053803717 TE0-Arm Obj=Philo_inst[3].timeEvt,AO=Philo_inst[3],Tim=127,Int=0
-===RTC===> St-Entry Obj=Philo_inst[3],State=Philo_eating
-0053804870 ===>Tran Obj=Philo_inst[3],Sig=EAT_SIG,State=Philo_hungry->Philo_eating
-0053805615 QF-gcA Evt
-0053806094 Sch-Next Pri=4->3
-0053806470 AO-GetL Obj=Philo_inst[2],Evt
-0053807055 Disp===> Obj=Philo_inst[2],Sig=EAT_SIG,State=Philo_thinking
-0053807741 =>Intern Obj=Philo_inst[2],Sig=EAT_SIG,State=Philo_thinking
-0053808384 QF-gcA Evt
-0053808855 Sch-Next Pri=3->2
-0053809228 AO-GetL Obj=Philo_inst[1],Evt
-0053809810 Disp===> Obj=Philo_inst[1],Sig=EAT_SIG,State=Philo_hungry
-===RTC===> St-Unhnd Obj=Philo_inst[1],Sig=EAT_SIG,State=Philo_hungry
-0053810949 =>Ignore Obj=Philo_inst[1],Sig=EAT_SIG,State=Philo_hungry
-0053811567 QF-gcA Evt
-0053812037 Sch-Next Pri=2->1
-0053812413 AO-GetL Obj=Philo_inst[0],Evt
-0053812998 Disp===> Obj=Philo_inst[0],Sig=EAT_SIG,State=Philo_eating
-0053813671 =>Intern Obj=Philo_inst[0],Sig=EAT_SIG,State=Philo_eating
-0053814305 QF-gc Evt
-0053814766 MP-Put Obj=EvtPool1,Free=10
-0053815296 Sch-Idle Pri=1->0
diff --git a/examples/arm-cm/dpp_efm32-slstk3401a/qk/iar/dpp-qk.ewp b/examples/arm-cm/dpp_efm32-slstk3401a/qk/iar/dpp-qk.ewp
index 0c521380..27f1d68a 100644
--- a/examples/arm-cm/dpp_efm32-slstk3401a/qk/iar/dpp-qk.ewp
+++ b/examples/arm-cm/dpp_efm32-slstk3401a/qk/iar/dpp-qk.ewp
@@ -215,8 +215,8 @@