From fb5a6033c13f4cedfa897b373f02e8cdb3305bd1 Mon Sep 17 00:00:00 2001 From: Quantum Leaps Date: Thu, 6 Jul 2017 13:30:17 -0400 Subject: [PATCH] 5.9.4 --- README.txt | 15 +- doxygen/Doxyfile | 8 +- doxygen/Doxyfile-CHM | 8 +- doxygen/Doxyfile-DOC | 8 +- doxygen/history.dox | 18 +- doxygen/images/arm-cm_int3bit.png | Bin 0 -> 49657 bytes doxygen/images/arm-cm_int4bit.png | Bin 0 -> 64128 bytes doxygen/images/arm-cm_qk_test-ccs.png | Bin 0 -> 98927 bytes doxygen/images/qk_arm-cm.gif | Bin 0 -> 24863 bytes doxygen/images/qk_asynch.gif | Bin 0 -> 18918 bytes doxygen/images/qk_preempt.gif | Bin 0 -> 22420 bytes doxygen/images/qk_stack-detail.gif | Bin 0 -> 34787 bytes doxygen/images/qk_synch.gif | Bin 0 -> 15513 bytes doxygen/make.bat | 6 +- doxygen/metrics.dox | 103 +- doxygen/modules.dox | 134 +- doxygen/ports_arm-cm.dox | 1586 +++++++++++++++++ doxygen/ports_native.dox | 56 +- doxygen/struct.dox | 71 +- examples/arm-cm/dpp_efm32-slstk3401a/qv/bsp.c | 16 +- .../dpp_efm32-slstk3401a/qv/gnu/Makefile | 10 +- .../arm-cm/dpp_efm32-slstk3401a/qv/main.c | 5 +- .../dpp_efm32-slstk3401a/qxk/gnu/Makefile | 10 +- .../dpp_efm32-slstk3401a/qxk/iar/dpp-qxk.ewp | 58 +- .../arm-cm/dpp_efm32-slstk3401a/qxk/test.c | 28 +- include/qep.h | 12 +- include/qf.h | 7 +- include/qpc.lnt | 5 +- include/qxk.h | 28 +- ports/arm-cm/qk/gnu/qk_port.s | 5 +- ports/arm-cm/qxk/arm/qxk_port.s | 32 +- ports/arm-cm/qxk/gnu/qxk_port.s | 32 +- ports/arm-cm/qxk/iar/qxk_port.s | 32 +- ports/arm-cm/qxk/ti/qxk_port.s | 32 +- ports/lint/qxk/qf_port.h | 12 +- source/qf_actq.c | 2 +- source/qutest.c | 12 +- source/qxk.c | 39 +- source/qxk_mutex.c | 21 +- source/qxk_sema.c | 6 +- source/qxk_xthr.c | 6 +- src/qf/qf_actq.c | 2 +- src/qxk/qxk.c | 39 +- src/qxk/qxk_mutex.c | 21 +- src/qxk/qxk_sema.c | 6 +- src/qxk/qxk_xthr.c | 6 +- version-5.9.3 | 2 - version-5.9.4 | 2 + 48 files changed, 2111 insertions(+), 390 deletions(-) create mode 100644 doxygen/images/arm-cm_int3bit.png create mode 100644 doxygen/images/arm-cm_int4bit.png create mode 100644 doxygen/images/arm-cm_qk_test-ccs.png create mode 100644 doxygen/images/qk_arm-cm.gif create mode 100644 doxygen/images/qk_asynch.gif create mode 100644 doxygen/images/qk_preempt.gif create mode 100644 doxygen/images/qk_stack-detail.gif create mode 100644 doxygen/images/qk_synch.gif create mode 100644 doxygen/ports_arm-cm.dox delete mode 100644 version-5.9.3 create mode 100644 version-5.9.4 diff --git a/README.txt b/README.txt index 003f509b..dd05d6e6 100644 --- a/README.txt +++ b/README.txt @@ -42,6 +42,11 @@ mailto:info@state-machine.com ####################################################################### ##################### QP/C Revision History ########################### +QP/C Version 5.9.4 (07-Jul-2017) +-------------------------------- +This release adds Thread-Local Storage (TLS) feature for the dual-mode +QXK kernel (https://state-machine.com/qpc/group__qxk.html#qxk_tls). + QP/C Version 5.9.3 (19-Jun-2017) -------------------------------- This release implements the feature request #126 "Allow non-asserting @@ -96,11 +101,11 @@ qpc\ +-source\ - exitsting source directory with "flat" structure | (for backwards-compatibility) +-src\ - new source directory grouped by functionality - +-qf\ - core framework (QEP + QF) - +-qk\ - QK kernel - +-qv\ - QV kernel (only one file qv.c) - +-qxk\ - QXK kernel - +-qs\ - QS software tracing + +-qf\ - core framework (QEP + QF) + +-qk\ - QK kernel + +-qv\ - QV kernel (only one file qv.c) + +-qxk\ - QXK kernel + +-qs\ - QS software tracing +-qf_pkg.h +-qs_pkg.h +-qxk_pkg.h diff --git a/doxygen/Doxyfile b/doxygen/Doxyfile index c24e98d5..0aa26f0e 100644 --- a/doxygen/Doxyfile +++ b/doxygen/Doxyfile @@ -5,7 +5,7 @@ #--------------------------------------------------------------------------- DOXYFILE_ENCODING = UTF-8 PROJECT_NAME = "QP/C" -PROJECT_NUMBER = "5.9.3" +PROJECT_NUMBER = "5.9.4" PROJECT_BRIEF = PROJECT_LOGO = images/header_logo_ql.png OUTPUT_DIRECTORY = @@ -121,6 +121,7 @@ INPUT = \ exa_mware.dox \ ports.dox \ ports_native.dox \ + ports_arm-cm.dox \ ports_rtos.dox \ ports_os.dox \ history.dox \ @@ -129,10 +130,7 @@ INPUT = \ modules.dox \ ../include \ ../src \ - ../ports/lint \ - ../ports/lint/qk \ - ../ports/lint/qv \ - ../ports/lint/qxk + ../ports/lint INPUT_ENCODING = UTF-8 FILE_PATTERNS = \ diff --git a/doxygen/Doxyfile-CHM b/doxygen/Doxyfile-CHM index 05259714..019f9d80 100644 --- a/doxygen/Doxyfile-CHM +++ b/doxygen/Doxyfile-CHM @@ -5,7 +5,7 @@ #--------------------------------------------------------------------------- DOXYFILE_ENCODING = UTF-8 PROJECT_NAME = "QP/C" -PROJECT_NUMBER = "5.9.3" +PROJECT_NUMBER = "5.9.4" PROJECT_BRIEF = PROJECT_LOGO = images/header_logo_ql.png OUTPUT_DIRECTORY = @@ -121,6 +121,7 @@ INPUT = \ exa_mware.dox \ ports.dox \ ports_native.dox \ + ports_arm-cm.dox \ ports_rtos.dox \ ports_os.dox \ history.dox \ @@ -129,10 +130,7 @@ INPUT = \ modules.dox \ ../include \ ../src \ - ../ports/lint \ - ../ports/lint/qk \ - ../ports/lint/qv \ - ../ports/lint/qxk + ../ports/lint INPUT_ENCODING = UTF-8 FILE_PATTERNS = \ diff --git a/doxygen/Doxyfile-DOC b/doxygen/Doxyfile-DOC index 646b84fe..3bce3fd0 100644 --- a/doxygen/Doxyfile-DOC +++ b/doxygen/Doxyfile-DOC @@ -5,7 +5,7 @@ #--------------------------------------------------------------------------- DOXYFILE_ENCODING = UTF-8 PROJECT_NAME = "QP/C" -PROJECT_NUMBER = "5.9.3" +PROJECT_NUMBER = "5.9.4" PROJECT_BRIEF = PROJECT_LOGO = images/header_logo_ql.png OUTPUT_DIRECTORY = @@ -125,6 +125,7 @@ INPUT = \ exa_mware.dox \ ports.dox \ ports_native.dox \ + ports_arm-cm.dox \ ports_rtos.dox \ ports_os.dox \ history.dox \ @@ -133,10 +134,7 @@ INPUT = \ modules.dox \ ../include \ ../src \ - ../ports/lint \ - ../ports/lint/qk \ - ../ports/lint/qv \ - ../ports/lint/qxk + ../ports/lint INPUT_ENCODING = UTF-8 FILE_PATTERNS = \ diff --git a/doxygen/history.dox b/doxygen/history.dox index f2ee95bc..8eb99599 100644 --- a/doxygen/history.dox +++ b/doxygen/history.dox @@ -1,15 +1,21 @@ /** @page history Revision History +@section qpc_5_9_4 Version 5.9.4, 2017-07-07 +This release adds Thread-Local Storage (TLS) feature for the dual-mode +QXK kernel (see @ref qxk_tls). + + +----------------------------------------------------------------------------- @section qpc_5_9_3 Version 5.9.3, 2017-06-19 -This release implements the feature request -#126 "Allow non-asserting -event allocation for zero-margin allocations". Specifically, calling -Q_NEW_X() or QACTIVE_POST_X() with the margin argument of zero will no -longer assert if the allocation/posting fails. +This release implements the feature request +#126 "Allow non-asserting +event allocation for zero-margin allocations". Specifically, calling +Q_NEW_X() or QACTIVE_POST_X() with the margin argument of zero will no +longer assert if the allocation/posting fails. ------------------------------------------------------------------------------ +----------------------------------------------------------------------------- @section qpc_5_9_2 Version 5.9.2, 2017-06-05 This release adapts the Makefiles for GNU-ARM to the new location of the GNU-ARM toolset, which is now included in the QTools Collection (v 5.9.1) diff --git a/doxygen/images/arm-cm_int3bit.png b/doxygen/images/arm-cm_int3bit.png new file mode 100644 index 0000000000000000000000000000000000000000..592c6ce670ddbd7de7dd2389c5f4a387c4ae3999 GIT binary patch literal 49657 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 BrBDC> literal 0 HcmV?d00001 diff --git a/doxygen/images/arm-cm_int4bit.png b/doxygen/images/arm-cm_int4bit.png new file mode 100644 index 0000000000000000000000000000000000000000..303e7d29d7e0ef72c81e7a4abae79e751bc8b3af GIT binary patch literal 64128 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

up)o#$Ky#3;1Y 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

7prT6J0O#AnoN1PQfW~!fmNco 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 EJCcP2(EtDd literal 0 HcmV?d00001 diff --git a/doxygen/images/qk_synch.gif b/doxygen/images/qk_synch.gif new file mode 100644 index 0000000000000000000000000000000000000000..2f6f52fb5ed38618f7dd9be53a117f265b5c4ac0 GIT binary patch literal 15513 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 a|LTX7lFQiYN6C+mIn_@ZAH@NH_x}f+|JQS Manual inside the QTools collection for more information. */ -/*###########################################################################*/ +/*##########################################################################*/ /*! @defgroup qv QV @brief @@ -47,13 +47,13 @@ Given the simplicity, portability, and low-resource consumption, the QV schedule */ -/*###########################################################################*/ +/*##########################################################################*/ /*! @defgroup qk QK @brief -Preemptive Non-Blocking Kernel +Preemptive Run-to-Completion Kernel -QK is a tiny **preemptive**, priority-based, non-blocking kernel designed specifically for executing active objects. QK runs active objects in the same way as prioritized interrupt controller (such as NVIC in ARM Cortex-M) runs interrupts using the single stack (MSP in Cortex-M). Active objects process their events in run-to-completion fashion and remove themselves from the call stack, the same way as nested interrupts. At the same time high-priority active objects can preempt lower-priority active objects, in the same way as interrupts can preempt each other under a prioritized interrupt controller. QK meets all the requirement of the Rate Monotonic Scheduling (a.k.a. Rate Monotonic Analysis RMA) and can be used in hard real-time systems. +QK is a tiny **preemptive**, priority-based, non-blocking kernel designed specifically for executing active objects. QK runs active objects in the same way as prioritized interrupt controller (such as NVIC in ARM Cortex-M) runs interrupts using the single stack. Active objects process their events in run-to-completion (RTC) fashion and remove themselves from the call stack, the same way as nested interrupts remove themselves from the stack upon completion. At the same time high-priority active objects can preempt lower-priority active objects, just like interrupts can preempt each other under a prioritized interrupt controller. QK meets all the requirement of the Rate Monotonic Scheduling (a.k.a. Rate Monotonic Analysis RMA) and can be used in hard real-time systems. ------------------------------------------------------------------------------ @@ -63,10 +63,11 @@ Sometimes it is not practical to break up long RTC steps, and consequently the t */ -/*###########################################################################*//*! @defgroup qxk QXK +/*##########################################################################*/ +/*! @defgroup qxk QXK @brief -Preemptive Dual-Mode Blocking RTOS Kernel +Preemptive Dual-Mode (Run-to-Completion/Blocking) RTOS Kernel QXK is a small, preemptive, priority-based, dual-mode **blocking** kernel that executes active objects like the @ref qk "QK kernel", but can also execute traditional __blocking__ threads (extended threads). In this respect, QXK behaves exactly as a conventional __RTOS__ (Real-Time Operating System). QXK has been designed specifically for mixing event-driven active objects with traditional blocking code, such as commercial middleware (TCP/IP stacks, UDP stacks, embedded file systems, etc.) or legacy software. @@ -77,13 +78,13 @@ Supported toolchains include: ARM-KEIL MDK, IAR-ARM, GNU-ARM, TI-ARM. Currently, the QXK kernel is illustrated by the following examples: -- @ref arm-cm_dpp_efm32-slstk3401a@n +- @ref arm-cm_dpp_efm32-slstk3401a (ARM Cortex-M4F)@n Example illustrates: 6 active objects plus two extended threads, QXK blocking delay, QXK semaphore, QXK mutex, QXK blocking message queue. -- @ref arm-cm_dpp_ek-tm4c123gxl@n +- @ref arm-cm_dpp_ek-tm4c123gxl (ARM Cortex-M4F)@n Example illustrates: 6 active objects plus two extended threads, QXK blocking delay, QXK semaphore, QXK mutex, QXK blocking message queue. -- @ref arm-cm_dpp_nucleo-l053r8@n +- @ref arm-cm_dpp_nucleo-l053r8 (ARM Cortex-M0+)@n Example illustrates: 6 active objects plus two extended threads, QXK blocking delay, QXK semaphore, QXK mutex, QXK blocking message queue. @@ -96,13 +97,13 @@ QXK distinguishes two kinds of threads: **basic**-threads (non-blocking, run-to- @subsection qxk_classes Classes in QXK The figure below shows the main classes introduced in the QXK kernel and their relation to the classes of the QP framework. -@image html qxk_classes.gif "Classes of the QXK blocking kernel" +@image html qxk_classes.gif "Classes of the QXK dual-mode kernel"

  • 0 The abstract ::QActive class represents active objects in QP. This class contains the @c thread object of the underlying kernel (QXK thread-control-block in this case) as well as the event queue and the unique priority of the active object.
  • -
  • 1 The ::QXThread class represents the "naked" blocking threads of the QXK kernel. It inherits ::QActive, so that extended-threads can be treated as active objects internally in the framework. However, the extended-threads do not implement state machines. Instead, the data fields used for storing the current state in active objects are re-used to store the private stack of the extended-thread. The ::QXThread class also contains the @c timeEvt object (see ::QTimeEvt) for generating timeouts when the extended-thread is blocked. +
  • 1 The ::QXThread class represents the extended (blocking) threads of the QXK kernel. It inherits ::QActive, so that extended-threads can be treated as active objects internally in the framework. However, the extended-threads do not implement state machines. Instead, the data fields used for storing the current state in active objects are re-used to store the private stack of the extended-thread. The ::QXThread class also contains the @c timeEvt object (see ::QTimeEvt) for generating timeouts when the extended-thread is blocked.
  • 2 The ::QXMutex class represents the @ref qxk_mutex "priority-ceiling mutex" of the QXK kernel. The mutex can be used by both the extended-threads and active object threads (in case they share resources that need to be protected). However, using any blocking mechanism inside active objects is not recommended, because it delays run-to-completion event processing. @@ -113,16 +114,16 @@ The figure below shows the main classes introduced in the QXK kernel and their r
@note -The main takeaway from the QXK class diagram is QXK's **optimal, tight integration** with the QP/C framework. The QXK kernel reuses all mechanisms already provided in QP, thus avoiding any code duplication, inefficient layers of indirection, and additional licensing costs, which are inevitable when using @ref ports_rtos "3rd-party RTOS kernels" to run QP/C applications. +The main takeaway from the QXK class diagram is QXK's **optimal, tight integration** with the QP framework. The QXK kernel reuses all mechanisms already provided in QP, thus avoiding any code duplication, inefficient layers of indirection, and additional licensing costs, which are inevitable when using @ref ports_rtos "3rd-party RTOS kernels" to run QP applications. ------------------------------------------------------------------------------ @section qxk_features QXK Features -As you can see in the list below, QXK provides most features you might expect of a traditional blocking **RTOS** kernel and is recommended as the preferred RTOS kernel for QP/C applications that need to mix active objects with traditional blocking code. +As you can see in the list below, QXK provides most features you might expect of a traditional blocking **RTOS** kernel and is recommended as the preferred RTOS kernel for QP applications that need to mix active objects with traditional blocking code.
    -
  • >Preemptive, priority-based scheduling of up to 64 threads. Each thread must be provided with its own private stack space and must be assigned its own unique priority (1..::QF_MAX_ACTIVE); +
  • >Preemptive, priority-based scheduling of up to 64 threads. Each thread must be assigned its own unique priority (1 .. #QF_MAX_ACTIVE);
  • > NOTE: QXK always executes the highest-priority thread that is ready to run (is not blocked). The scheduling algorithm used in QXK meets all the requirement of the Rate Monotonic Scheduling (a.k.a. Rate Monotonic Analysis — RMA) and can be used in hard real-time systems. @@ -130,16 +131,16 @@ As you can see in the list below, QXK provides most feat
  • >All threads in QXK are capable of **blocking**. However, QXK distinguishes between two types of threads:
  • -- active object threads that can block only while waiting on events from the private event queue and should not block otherwise (e.g., inside state machines). QXK asserts when an active object thread attempts to use a timed-delay or attempts to block on a semaphore. This is because active objects have non-blocking alternatives for these operations (time-events and event posting, respectively). +- **basic threads** of active objects that are made ready-to-run by events posted to the active objects. Such basic threads are non-blocking, run-to-completion activations that cannot block in the middle of the RTC step. QXK asserts when a basic thread attempts to use a blocking mechanism, such as a time-delay or a semaphore-wait. All basic threads share the common stack. -- extended-threads, that can block anywhere in their thread-handler function, whereas QXK provides a typical assortments of blocking primitives for extended-threads, such as time-delay, message queue, semaphore, or a mutex; +- **extended threads** that can block anywhere in their thread-handler function, whereas QXK provides a typical assortments of blocking primitives for extended-threads, such as time-delay, blocking message queue, counting semaphore, or a mutex. Each extended thread must be provided with its own private stack. -
  • >Tightly integrated mechanisms for communication between event-driven active objects and "naked" blocking threads: +
  • >Tightly integrated mechanisms for communication between event-driven active objects and extended blocking threads:
  • -- Active objects can signal semaphores and send messages to extended-threads. +- Basic threads (Active Objects) can signal semaphores and send messages to extended threads. -- "Naked" threads can post or publish events to active objects; +- Extended threads can post or publish events to active objects;
  • >Priority-Ceiling Mutexes with optional timeout;
  • @@ -158,13 +159,18 @@ As you can see in the list below, QXK provides most feat
  • >Interrupt management, including "zero-latency", kernel-unaware interrupts that are never disabled;
  • -> NOTE: This feature is only supported on CPUs that allow selective interrupt disabling, such as ARM Cortex-M3/M4 (but not ARM Cortex-M0). +> NOTE: This feature is only supported on CPUs that allow selective interrupt disabling, such as ARM Cortex-M3/M4 (but not ARM Cortex-M0); + +
  • > @ref qxk_tls "Thread-Local Storage" for all threads (basic threads and extended threads). +
@subsection qxk_kernel Kernel Initialization and Control + +@sa - QXK_init() - QF_run() - QXK_onIdle() @@ -172,6 +178,8 @@ As you can see in the list below, QXK provides most feat
@subsection qxk_thread Thread Management + +@sa - ::QXThread structure (Thread Control Block) - QXThread_ctor() - QXTHREAD_START() @@ -180,11 +188,15 @@ As you can see in the list below, QXK provides most feat
@subsection qxk_isr Interrupt Management + +@sa - QXK_ISR_ENTRY() - QXK_ISR_EXIT()
@subsection qxk_mutex Mutexes + +@sa - ::QXMutex structure (Mutex Control Block) - QXMutex_init() - QXMutex_lock() @@ -192,12 +204,16 @@ As you can see in the list below, QXK provides most feat
@subsection qxk_queue Message Queues + +@sa - QXTHREAD_POST_X() - posting messages to blocking threads - QACTIVE_POST_X() - posting events to Active Objects - QXThread_queueGet() - waiting (blocking) on message queue
@subsection qxk_sema Semaphores + +@sa - ::QXSemaphore structure (Semaphore Control Block) - QXSemaphore_init() - QXSemaphore_wait() @@ -205,31 +221,59 @@ As you can see in the list below, QXK provides most feat
@subsection qxk_mem Memory Pools + +@sa - ::QMPool structure - QMPool_init() - QMPool_get() - QMPool_put() +
+@subsection qxk_tls Thread Local Storage +Thread-local storage (TLS) is a programming method that uses static or global memory local to a thread. TLS is specifically useful for writing library-type code, which is used in a multithreaded environment and needs to access per-thread data in an independent way. + +TLS is used in some places where ordinary, single-threaded programs would use static or global variables, but where this would be inappropriate in multithreaded cases. An example of such situations is where library-type functions use a global variable to set an error condition (for example the global variable errno used by many functions of the C library). If errno were simply a global variable, a call of a system function on one thread may overwrite the value previously set by a call of a system function on a different thread, possibly before following code on that different thread could check for the error condition. The solution is to have errno be a variable that looks like it is global, but in fact exists once per thread—i.e., it lives in *thread-local storage*. A second use case would be multiple threads accumulating information into a global variable. To avoid a race condition, every access to this global variable would have to be protected by a mutual-exclusion mechanism. Alternatively, each thread might accumulate into a thread-local variable (that, by definition, cannot be read from or written to from other threads, implying that there can be no race conditions). Threads then only have to synchronize a final accumulation from their own thread-local variable into a single, truly global variable. + +The TLS implementations vary, but many systems, including QXK, implement TLS by providing a pointer-sized variable thread-local. This pointer can be set to arbitrarily sized memory blocks in a thread-local manner, by allocating such a memory block (statically or dynamically) and storing the memory address of that block in the thread-local variable. + +Typical usage of TLS in QXK is illustrated in the example qpc/examples/arm-cm/dpp_efm32-slstk3401a/qxk/, test.c, and consists: + +- define the TLS structure +@code{c} +typedef struct { + uint32_t foo; + uint8_t bar[10]; +} TLS_test; +@endcode + +- allocate the TLS storage for all participating threads (extended or basic threads) +@code{c} +static TLS_test l_tls1; +static TLS_test l_tls2; +@endcode + +- initialize the TLS per-thread pointer in each thread routine (for extended threads) or the top-most initial transition (for basic threads of active objects): +@code{c} +static void Thread1_run(QXThread * const me) { + me->super.thread = &l_tls1; /* initialize the TLS for Thread1 */ + . . . +} +. . . +static void Thread2_run(QXThread * const me) { + me->super.thread = &l_tls2; /* initialize the TLS for Thread2 */ + . . . +} +@endcode + +- access the TLS from your code: +@code{c} +void lib_fun(uint32_t x) { + QXK_TLS(TLS_test *)->foo = x; +} +@endcode + +@sa +- QXK_current() +- QXK_TLS() + */ - -/*###########################################################################*//*! @dir ../include - -Platform-independent QP/C API - -@note -The QP/C include directory needs to be added to the compiler's include path in the applications using QP/C. -*/ - -/*###########################################################################*//*! @dir ../source - -Platform-independent QP/C implementation - -Files from this directory need to be added to the project, to build the QP/C framework from source code. - -@attention -Not all QP/C source files should be added to every project. For example, native QP/C ports to the preemptive QK kernel should **not** contain the file qv.c and conversely, QP/C ports to the cooperative QV kernel should not contain the files qk.c and qk_mutex.c. - -@note -The QP/C source directory needs to be added to the compiler's include path in the applications using QP/C, because QP/C is built from sources. - -*/ \ No newline at end of file diff --git a/doxygen/ports_arm-cm.dox b/doxygen/ports_arm-cm.dox new file mode 100644 index 00000000..9b4ad5fd --- /dev/null +++ b/doxygen/ports_arm-cm.dox @@ -0,0 +1,1586 @@ +/*##########################################################################*/ +/*! @page arm-cm ARM Cortex-M + +@tableofcontents + +

This section describes the QP™ port to the ARM Cortex-M processor family (Cortex M0/M0+/M3/M4/M7). Three main implementation options are covered: the @subpage arm-cm_qv "cooperative, priority-based QV kernel", the @subpage arm-cm_qk "preemptive, run-to-completion QK kernel", and the @subpage arm-cm_qxk "preemptive, "dual-mode" blocking QXK kernel". Additionally, the use of the VFP (floating point coprocessor) in the M4F/M7 processors is explained as well. This document assumes QP version 5.9.x or higher. +

+ +@note +To focus the discussion, this section references the **GNU-ARM toolset** and the Eclipse-based IDE (CCS from Texas Instruments). However, the general implementation strategy applies equally to all toolsets for ARM Cortex-M, such as **ARM-KEIL**, **IAR EWARM**, **GNU-ARM** and **TI-ARM**, which are all provided as well. The QP code downloads contain also examples for other boards, such as STM32 Nucleo, NXP mbed-1768, SilLabs Gecko and others. + + +------------------------------------------------------------------------------ +@section arm-cm_files Directories and Files +The QP ports to ARM Cortex-M are available in the standard QP distribution. Specifically, the ARM Cortex-M ports are placed in the following directories: + +
    +
  • /pors/arm-cm/ +
  • +
      +
    • qv/ — QV ports +
    • +
        +
      • arm/ — ARM-KEIL toolset +
      • +
      • gnu/ — GNU-ARM toolset +
          +
        • qep_port.h — QEP port header +
        • +
        • qf_port.h — QF port header +
        • +
        • qv_port.h — QV port header +
        • +
        • qv_port.c — QV port implementation +
        • +
        +
      • +
      • iar/ — IAR-EWARM toolset +
      • +
      • ti/ — TI-ARM toolset +
      • +
      +
    • qk/ — QK ports +
    • +
        +
      • arm/ — ARM-KEIL toolset +
      • +
      • gnu/ — GNU-ARM toolset +
      • +
      • iar/ — IAR-EWARM toolset +
      • +
      • ti/ — TI-ARM toolset +
      • +
      +
    • qxk/ — QXK ports" +
    • +
        +
      • arm/ — ARM-KEIL toolset +
      • +
      • gnu/ — GNU-ARM toolset +
      • +
      • iar/ — IAR-EWARM toolset +
      • +
      • ti/ — TI-ARM toolset +
      • +
      +
    • qutest/QUTest Unit Testing port to Cortex-M" +
    • +
    +
+ + +------------------------------------------------------------------------------ +@section arm-cm_int Interrupts in the QP Ports to ARM Cortex-M +The QP framework, like any real-time kernel, needs to disable interrupts in order to access critical sections of code and re-enable interrupts when done. This section describes the general policy that in the ARM Cortex-M ports of all built-in real time kernels in QP, such as QV, QK, and QXK. + + +
+@subsection arm-cm_kernel-aware "Kernel-Aware" and "Kernel-Unaware" Interrupts +The QP ports to ARM Cortex-M3/M4/M7 **never completely disables interrupts**, even inside the critical sections. On Cortex-M3/M4/M7 (ARMv7-M architectures), the QP port disables interrupts **selectively** using the BASEPRI register. This policy divides interrupts into "kernel-unaware" interrupts, which are never disabled, and “kernel-aware” interrupts, which are disabled in the QP critical sections. + +@note +The BASEPRI register is not implemented in the ARMv6-M architecture (Cortex-M0/M0+), so Cortex-M0/M0+ need to use the PRIMASK register to disable interrupts globally. In other words, in Cortex-M0/M0+ ports, all interrupts are "kernel-aware". + + +@attention +Only "kernel-aware" interrupts are allowed to call QP services. "Kernel-unaware" interrupts are not allowed to call any QP services and they can communicate with QP only by triggering a "kernel-aware" interrupt (which can post or publish events). + + +As illustrated in the figures below, the number of interrupt priority bits actually available is implementation dependent, meaning that the various ARM Cortex-M silicon vendors can provide different number of priority bits, varying from just 3 bits (which is the minimum for ARMv7-M architecture) up to 8 bits. For example, the TI Tiva-C microcontrollers implement only 3 priority bits (see figure above). + +@image html arm-cm_int3bit.png "Kernel-aware and Kernel-unaware interrupts with 3 priority bits + +On the other hand, the STM32 MCUs implement 4 priority bits (see figure below). The CMSIS standard provides the macro __NVIC_PRIO_BITS, which specifies the number of NVIC priority bits defined in a given ARM Cortex-M implementation. + +@image html arm-cm_int4bit.png "Kernel-aware and Kernel-unaware interrupts with 4 priority bits + +Another important fact to note is that the ARM Cortex-M core stores the interrupt priority values in the most significant bits of its eight bit interrupt priority registers inside the NVIC (Nested Vectored Interrupt Controller). For example, if an implementation of a ARM Cortex-M microcontroller only implements three priority bits, then these three bits are shifted up to be bits five, six and seven respectively. The unimplemented bits can be written as zero or one and always read as zero. + +And finally, the NVIC uses an inverted priority numbering scheme for interrupts, in which priority zero (0) is the highest possible priority (highest urgency) and larger priority numbers denote actually lower-priority interrupts. So for example, interrupt of priority 2 can preempt an interrupt with priority 3, but interrupt of priority 3 cannot preempt interrupt of priority 3. The default value of priority of all interrupts out of reset is zero (0). + + +@note +Starting with QP 5.9.x, the QF_init() call sets interrupt priority of all IRQs to the "kernel aware" value QF_BASEPRI. Still, it is highly recommended to set the priority of all interrupts used by an application **explicitly**. + + +The CMSIS provides the function @c NVIC_SetPriority() which you should use to set priority of every interrupt. + +@note +The priority scheme passed to @c NVIC_SetPriority() is different again than the values stored in the NVIC registers, as shown in the figures above as "CMSIS priorities" + + +
+@subsection arm-cm_int-assign Assigning Interrupt Priorities +The @ref exa_arm-cm "example projects" included in the QP distribution the recommended way of assigning interrupt priorities in your applications. The initialization consist of two steps: (1) you enumerate the "kernel-unaware" and "kernel-aware" interrupt priorities, and (2) you assign the priorities by calling the @c NVIC_SetPriority() CMSIS function. The following snippet of code illustrates these steps with the explanation section following immediately after the code. + +@anchor arm-cm_int-assign-code +Listing: Assigning the interrupt priorities (see file bsp.c in the example projects) +@code{c} + /*!!!!!!!!!!!!!!!!!!!!!!!!!!!!! CAUTION !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + * Assign a priority to EVERY ISR explicitly by calling NVIC_SetPriority(). + * DO NOT LEAVE THE ISR PRIORITIES AT THE DEFAULT VALUE! + */ +[1] enum KernelUnawareISRs { /* see NOTE0 */ + /* ... */ +[2] MAX_KERNEL_UNAWARE_CMSIS_PRI /* keep always last */ + }; + /* "kernel-unaware" interrupts can't overlap "kernel-aware" interrupts */ +[3] Q_ASSERT_COMPILE(MAX_KERNEL_UNAWARE_CMSIS_PRI <= QF_AWARE_ISR_CMSIS_PRI); + +[4] enum KernelAwareISRs { +[5] GPIOPORTA_PRI = QF_AWARE_ISR_CMSIS_PRI, /* see NOTE00 */ + SYSTICK_PRIO, + /* ... */ +[6] MAX_KERNEL_AWARE_CMSIS_PRI /* keep always last */ + }; + /* "kernel-aware" interrupts should not overlap the PendSV priority */ +[7] Q_ASSERT_COMPILE(MAX_KERNEL_AWARE_CMSIS_PRI <= (0xFF>>(8-__NVIC_PRIO_BITS))); + + ~ ~ ~ + +[8] void QF_onStartup(void) { + /* set up the SysTick timer to fire at BSP_TICKS_PER_SEC rate */ + SysTick_Config(ROM_SysCtlClockGet() / BSP_TICKS_PER_SEC); + + /* assing all priority bits for preemption-prio. and none to sub-prio. */ +[9] NVIC_SetPriorityGrouping(0U); + + /* set priorities of ALL ISRs used in the system, see NOTE00 + * + * !!!!!!!!!!!!!!!!!!!!!!!!!!!! CAUTION !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + * Assign a priority to EVERY ISR explicitly by calling NVIC_SetPriority(). + * DO NOT LEAVE THE ISR PRIORITIES AT THE DEFAULT VALUE! + */ +[10] NVIC_SetPriority(SysTick_IRQn, SYSTICK_PRIO); +[11] NVIC_SetPriority(GPIOPortA_IRQn, GPIOPORTA_PRIO); + ~ ~ ~ + /* enable IRQs... */ +[12] NVIC_EnableIRQ(GPIOPortA_IRQn); + } +@endcode + +
    +
  • 1 +The enumeration @c KernelUnawareISRs lists the priority numbers for the “kernel-unaware” interrupts. These priorities start with zero (highest possible). The priorities are suitable as the argument for the @c NVC_SetPriority() CMSIS function. + +> NOTE: The NVIC allows you to assign the same priority level to multiple interrupts, so you can have more ISRs than priority levels running as “kernel-unaware” or “kernel-aware” interrupts. + +
  • +
  • 2 +The last value in the enumeration MAX_KERNEL_UNAWARE_CMSIS_PRI keeps track of the maximum priority used for a “kernel-unaware” interrupt. +
  • +
  • 3 +The compile-time assertion ensures that the “kernel-unaware” interrupt priorities do not overlap the “kernel-aware” interrupts, which start at QF_AWARE_ISR_CMSIS_PRI. +
  • +
  • 4 +The enumeration KernelAwareISRs lists the priority numbers for the “kernel-aware” interrupts. +
  • +
  • 5 +The “kernel-aware” interrupt priorities start with the QF_AWARE_ISR_CMSIS_PRI offset, which is provided in the qf_port.h header file. +
  • +
  • 6 +The last value in the enumeration MAX_KERNEL_AWARE_CMSIS_PRI keeps track of the maximum priority used for a “kernel-aware” interrupt. +
  • +
  • 7 +The compile-time assertion ensures that the “kernel-aware” interrupt priorities do not overlap the lowest priority level reserved for the PendSV exception. +
  • +
  • 8 +The QF_onStartup() callback function is where you set up the interrupts. +
  • +
  • 9 +This call to the CMIS function @c NVIC_SetPriorityGrouping() assigns all the priority bits to be preempt priority bits, leaving no priority bits as subpriority bits to preserve the direct relationship between the interrupt priorities and the ISR preemption rules. This is the default configuration out of reset for the ARM Cortex-M3/M4 cores, but it can be changed by some vendor-supplied startup code. To avoid any surprises, the call to NVIC_SetPriorityGrouping(0U) is recommended. +
  • +
  • 10-11 +The interrupt priories fall all interrupts (“kernel-unaware” and “kernel-aware” alike) are set explicitly by calls to the CMSIS function @c NVIC_SetPriority(). +
  • +
  • 12 +All used IRQ interrupts need to be explicitly enabled by calling the CMSIS function. +
  • +
+ +
+@subsection arm-cm_int-fpu Interrupts and the FPU (Cortex-M4F/M7) +The QP ports described in this section support also the ARM Cortex-M4F/M7. Compared to all other members of the Cortex-M family, these cores includes the single precision variant of the ARMv7-M Floating-Point Unit (Fpv4-SP). The hardware FPU implementation adds an extra floating-point register bank consisting of S0–S31 and some other FPU registers. This FPU register set represents additional context that need to be preserved across interrupts and thread switching (e.g., in the preemptive QK kernel). + +The ARM VFP has a very interesting feature called **lazy stacking** [@ref ARM-AN298]. This feature avoids an increase of interrupt latency by skipping the stacking of floating-point registers, if not required, that is: + +- if the interrupt handler does not use the FPU, or +- if the interrupted program does not use the FPU. + +If the interrupt handler has to use the FPU and the interrupted context has also previously used by the FPU, then the stacking of floating-point registers takes place at the point in the program where the interrupt handler first uses the FPU. The lazy stacking feature is programmable and by default it is turned ON. + +@note +All built-in kernels in QP are designed to take advantage of the lazy stacking feature [@ref ARM-AN298]. + + +------------------------------------------------------------------------------ +@section arm-cm_ref References + +@anchor ARM-AN298 +- **[ARM AN298]** ARM Application Note 298 "Cortex-M4(F) Lazy Stacking and Context Switching", ARM 2012 + +@anchor ARM-EPM-064408 +- **[ARM-EPM-064408]** "ARM Processor Cortex-M7 (AT610) and Cortex-M7 with FPU (AT611) Software Developers Errata Notice" + +@anchor Reminder +- **[Reminder]** "Reminder State Pattern" + +@next{arm-cm_qv} +*/ +/*##########################################################################*/ +/*! @page arm-cm_qv Cooperative QV Kernel + +@tableofcontents + +

The non-preemptive, cooperative QV kernel executes active objects one at a time, with priority-based scheduling performed after run-to-completion (RTC) processing of each event. Due to naturally short duration of event processing in state machines, the simple QV kernel is often adequate for many real-time systems. +

+ +@ref +Long RTC steps can be often broken into shorter pieces by means of the "Reminder" state pattern [@ref Reminder]. + + +In the QV port, the only components requiring platform-specific porting are QF and QV itself. The other two components: QEP and QS require merely recompilation and will not be discussed here. With the QV port you’re not using the QK or QXK kernels. The QV port to ARM Cortex-M is located in the folder /ports/arm-cm/qv/. + + +------------------------------------------------------------------------------ +@section arm-cm_qv-synopsis Synopsis of the QV Port on ARM Cortex-M +The cooperative QV kernel works essentially as the traditional foreground-background system (a.k.a. “superloop”) in that all active objects are executed in the main loop and interrupts always return back to the point of preemption. To avoid race conditions between the main loop and the interrupts, QV briefly disables interrupts. + +1. The ARM Cortex-M processor executes application code (the main loop) in the Privileged Thread mode, which is exactly the mode entered out of reset. + +2. The exceptions (including all interrupts) are always processed in the Privileged Handler mode. + +3. QV uses only the Main Stack Pointer. The Process Stack Pointer is not used and is not initialized. + +4. ARM Cortex-M enters interrupt context without disabling interrupts (without setting the PRIMASK bit or the BASEPRI register). Generally, you should not disable interrupts inside your ISRs. In particular, the QP services QF_PUBLISH(), QF_TICK_X(), and QACTIVE_POST() should be called with interrupts enabled, to avoid nesting of critical sections. +> NOTE: If you don’t wish an interrupt to be preempted by another interrupt, you can always prioritize that interrupt in the NVIC to a higher level – use a lower numerical value of priority. + +5. The QF_init() function calls the function QV_init() to set the interrupt priority of all IRQs available in the MCU to the safe value of QF_BASEPRI (for ARM-v7 architecture). + + +------------------------------------------------------------------------------ +@section arm-cm_qv-qep_port The qep_port.h Header File +The QEP header file for the ARM Cortex-M port is located in /ports/arm-cm/qv/gnu/qep_port.h/. The following shows the @c qep_port.h header file for ARM Cortex-M/GNU. The GNU-ARM compiler is a standard C99 compiler, so it simply includes the @c header file that defines the platform-specific exact-with integer types. + +@anchor arm-cm_qv_qep_port-code +Listing: The qep_port.h header file for ARM Cortex-M +@code{c} + #include /* Exact-width types. WG14/N843 C99 Standard */ + #include /* Boolean type. WG14/N843 C99 Standard */ + #include "qep.h" /* QEP platform-independent public interface */ +@endcode + +@note +If you use a pre-C99 compiler (e.g., a C89 compiler), you can provide the @c stdint.h and @c stdbool.h header files yourself, or you can define the standard integer types and Boolean types directly in the @c qep_port.h header file. + + +------------------------------------------------------------------------------ +@section arm-cm_qv-qf_port The qf_port.h Header File +The QF header file for the ARM Cortex-M port is located in /ports/arm-cm/qv/gnu/qf_port.h. This file specifies the interrupt disabling policy (QF critical section) as well as the configuration constants for QF (see Chapter 8 in [PSiCC2]). + +The ARM Cortex-M allows you to use the simplest “unconditional interrupt disabling” policy (see Section 7.3.2 in [PSiCC2]), because ARM Cortex-M is equipped with the standard nested vectored interrupt controller (NVIC) and generally runs ISRs with interrupts enabled (so the body of an ISR is not a critical section). The following listing shows the qf_port.h header file for ARM Cortex-M with the GNU-ARM toolset. Other toolsets use slightly different conditional compilation macros to select the Cortex-M variants, but implement the same policies. + +@anchor arm-cm_qf_port_h-code +Listing: The qf_port.h header file for ARM Cortex-M +@code{c} + /* The maximum number of active objects in the application, see NOTE1 */ + [1] #define QF_MAX_ACTIVE 32 + + /* The maximum number of system clock tick rates */ + [2] #define QF_MAX_TICK_RATE 2 + + /* QF interrupt disable/enable and log2()... */ + [3] #if (__ARM_ARCH == 6) /* Cortex-M0/M0+/M1(v6-M, v6S-M)? */ + + /* Cortex-M0/M0+/M1(v6-M, v6S-M) interrupt disabling policy, see NOTE2 */ + [4] #define QF_INT_DISABLE() __asm volatile ("cpsid i") + [5] #define QF_INT_ENABLE() __asm volatile ("cpsie i") + + /* QF critical section entry/exit (save and restore interrupt status) */ + [6] #define QF_CRIT_STAT_TYPE uint32_t + [7] #define QF_CRIT_ENTRY(primask_) do { \ + [8] QF_GET_PRIMASK((primask_)); \ + [9] QF_INT_DISABLE(); \ + } while (0) +[10] #define QF_CRIT_EXIT(primask_) QF_SET_PRIMASK((primask_)) + + /* CMSIS threshold for "QF-aware" interrupts, see NOTE2 and NOTE5 */ +[11] #define QF_AWARE_ISR_CMSIS_PRI 0 + + /* macro for getting the PRIMASK register */ +[12] #define QF_GET_PRIMASK(primask_) __asm volatile (\ + "mrs %0,PRIMASK" : "=r" (primask_) :: ) + + /* macro for setting the PRIMASK register */ +[13] #define QF_SET_PRIMASK(primask_) __asm volatile (\ + "msr PRIMASK,%0" :: "r" (primask_) : ) + +[14] #else /* Cortex-M3/M4/M4F */ + + /* Cortex-M3/M4/M7 alternative interrupt disabling with PRIMASK */ +[15] #define QF_PRIMASK_DISABLE() __asm volatile ("cpsid i") +[16] #define QF_PRIMASK_ENABLE() __asm volatile ("cpsie i") + + /* Cortex-M3/M4/M7 interrupt disabling policy, see NOTE3 and NOTE4 */ +[17] #define QF_INT_DISABLE() do { \ +[18] QF_PRIMASK_DISABLE(); \ +[19] QF_SET_BASEPRI(QF_BASEPRI); \ +[20] QF_PRIMASK_ENABLE(); \ + } while (0) +[21] #define QF_INT_ENABLE() QF_SET_BASEPRI(0U) + + /* QF critical section entry/exit (save and restore interrupt status) */ +[22] #define QF_CRIT_STAT_TYPE unsigned long +[23] #define QF_CRIT_ENTRY(basepri_) do {\ +[24] QF_GET_BASEPRI((basepri_)); \ +[25] QF_INT_DISABLE(); \ + } while (0) +[26] #define QF_CRIT_EXIT(basepri_) QF_SET_BASEPRI((basepri_)) + + /* BASEPRI threshold for "QF-aware" interrupts, see NOTE3. + * CAUTION: keep in synch with the value defined in "qk_port.s" + */ +[27] #define QF_BASEPRI (0xFFU >> 2) + + /* CMSIS threshold for "QF-aware" interrupts, see NOTE5 */ +[28] #define QF_AWARE_ISR_CMSIS_PRI (QF_BASEPRI >> (8 - __NVIC_PRIO_BITS)) + + /* Cortex-M3/M4/M7 provide the CLZ instruction for fast LOG2 */ +[29] #define QF_LOG2(n_) ((uint_fast8_t)(32U - __builtin_clz(n_))) + + /* macro for getting the BASEPRI register */ +[30] #define QF_GET_BASEPRI(basepri_) __asm volatile (\ + "mrs %0,BASEPRI" : "=r" (basepri_) :: ) + + #endif + +[31] #define QF_CRIT_EXIT_NOP() __asm volatile ("isb") + + #include "qep_port.h" /* QEP port */ + #include "qv_port.h" /* QV port cooperative kernel port */ + #include "qf.h" /* QF platform-independent public interface */ +@endcode + +
    +
  • 1 +The #QF_MAX_ACTIVE specifies the maximum number of active object priorities in the application. You always need to provide this constant. Here, #QF_MAX_ACTIVE is set to 32, but it can be increased up to the maximum limit of 63 active object priorities in the system. + +> NOTE: The @c qf_port.h header file does not change the default settings for all the rest of various object sizes inside QF. Please refer to Chapter 8 of [PSiCC2] for discussion of all configurable QF parameters. +
  • +
  • 2 +The #QF_MAX_TICK_RATE specifies the maximum number of clock tick rates for QP time events. If you don't need to specify this limit, in which case the default of a single clock rate will be chosen. +
  • +
  • 3 +As described in the previous @ref arm-cm_int "Section", the interrupt disabling policy for the ARMv6-M architecture (Cortex-M0/M0+) is different than the policy for the ARMv7-M. The macro __ARM_ARCH is defined as 6 for the ARMv6-M architecture (Cortex-M0/M0+), and 7 for ARMv7-M (Cortex-M3/M4/M4F). +
  • +
  • 4-5 +For the ARMv6-M architecture, the interrupt disabling policy uses the PRIMASK register to disable interrupts globally. The @c QF_INT_DISABLE() macro resolves in this case to the inline assembly instruction “CPSD i”, which sets the PRIMASK. The @c QF_INT_ENABLE() macro resolves to the inline assembly instruction “CPSE i”, which clears the PRIMASK. +
  • +
  • 6 +The #QF_CRIT_STAT_TYPE is defined, meaning that the critical section uses the policy of “saving and restoring interrupt status” policy. +
  • +
  • 7 +The QF_CRIT_ENTRY() enters a critical section. +
  • +
  • 8 +The value of Cortex-M PRIMASK register is retrieved and stored in the @c primask_ argument. +
  • +
  • 9 +Interrupts are disabled by setting the PRIMASK register. +
  • +
  • 10 +The QF_CRIT_EXIT() macro restores the PRIMASK register value for the @c primask_ argument. +
  • +
  • 11 +For the ARMv6-M architecture, the QF_AWARE_ISR_CMSIS_PRI priority level is defined as zero, meaning that all interrupts are "kernel-aware", because all interrupt priorities are disabled by the kernel. +
  • +
  • 12 +The @c QF_GET_PRIMASK() macro uses the inline assembly to get the PRIMASK register. +
  • +
  • 13 +The @c QF_SET_PRIMASK() macro uses the inline assembly to set the PRIMASK register. +
  • +
  • 14 +For the ARMv7-M (Cortex-M3/M4/M4F) architecture... +
  • +
  • 15 +The @c QF_PRIMASK_DISABLE() macro resolves to the inline assembly instruction “CPSD i”, which sets the PRIMASK. +
  • +
  • 16 +The @c QF_PRIMASK_ENABLE() macro resolves to the inline assembly instruction “CPSE i”, which clears the PRIMASK. +
  • +
  • 17 +As described in previous @ref arm-cm_int "Section", the @c QF_INT_DISABLE() macro for the ARMv7-M architecture (Cortex-M3/M4/M4F) uses the BASEPRI register. +
  • +
  • 18 +Before setting the BASEPRI register, interrupts are disabled with the PRIMASK register, which is the recommended workaround for the Cortex-M7 r0p1 hardware bug, as described in the ARM Ltd. [@ref ARM-EPM-064408], Erratum 837070. +
  • +
  • 19 +The QF_SET_BASEPRI() macro sets the BASEPRI register to the value QF_BASEPRI, which selectively disables the “kernel aware” interrupts. (NOTE: this method can never disable interrupt of priority 0 (highest)). +
  • +
  • 20 +After setting the BASEPRI register, interrupts are re-anabed with the PRIMASK register, which is the recommended workaround for the Cortex-M7 r0p1 hardware bug, as described in the ARM Ltd. [@ref ARM-EPM-064408], Erratum 837070. +
  • +
  • 21 +The QF_INT_ENABLE() macro sets the BASEPRI register to zero, which disables BASEPRI interrupt masking. +
  • +
  • 22 +The QF_CRIT_STAT_TYPE is defined, meaning that the critical section uses the policy of “saving and restoring interrupt status” policy (see also step (6) for the ARMv7-M architecture). +
  • +
  • 23 +The QF_CRIT_ENTRY() enters a critical section. +
  • +
  • 24 +The value of the BASEPRI register is retrieved and stored in the @c basepri_ argument. +
  • +
  • 25 +Interrupts are disabled by setting the BASEPRI register. +
  • +
  • 26 +The QF_CRIT_EXIT() macro restores the BASEPRI register value for the @c basepri_ argument. +
  • +
  • 27 +The @c QF_BASEPRI value is defined such that it is the lowest priority for the minimum number of 3 priority-bits that the ARM7-M architecture must provide. This partitions the interrupts as “kernel-unaware” and “kernel-aware” interrupts, as shown in section @ref arm-cm_int-assign. +
  • +
  • 28 +For the ARMv7-M architecture, the @c QF_AWARE_ISR_CMSIS_PRI priority level suitable for the CMSIS function @c NVIC_SetPriority() is determined by the @c QF_BASEPRI value. +
  • +
  • 29 +The macro @c QF_LOG2() is defined to take advantage of the CLZ instruction (Count Leading Zeroes), which is available in the ARMv7-M architecture. + +> NOTE: The CLZ instruction is not implemented in the ARMv6M architecture. If the @c QF_LOG2() macro is not defined, the QP framework will use the log2 implementation based on a lookup table. +
  • +
  • 30 +The @c QF_GET_BASEPRI() macro is defined in using in-line assembly +
  • +
  • 31 +The macro @c QF_CRIT_EXIT_NOP() provides the protection against merging two critical sections occurring back-to-back in the QP code. +
  • +
+ + +------------------------------------------------------------------------------ +@section arm-cm_qv_port_h The qv_port.h Header File +The QV header file for the ARM Cortex-M port is located in /ports/arm-cm/qv/gnu/qv_port.h. This file provides the macro QV_CPU_SLEEP(), which specifies how to enter the CPU sleep mode safely in the cooperative QV kernel (see also Section 4.7) and [Samek 07]). + +@note +To avoid race conditions between interrupts waking up active objects and going to sleep, the cooperative QV kernel calls the QV_CPU_SLEEP() callback with interrupts disabled. + + +@anchor arm-cm_qv_port_h-code +Listing: The qv_port.h header file for ARM Cortex-M +@code{c} + #ifdef ARM_ARCH_V6M /* Cortex-M0/M0+/M1 ? */ + + [1] #define QV_CPU_SLEEP() do { \ + __asm volatile ("wfi"); \ + QF_INT_ENABLE(); \ + } while (0) + + #else /* Cortex-M3/M4/M4F */ + + [2] #define QV_CPU_SLEEP() do { \ + QF_PRIMASK_DISABLE(); \ + QF_INT_ENABLE(); \ + __asm volatile ("wfi"); \ + QF_RIMASK_ENABLE(); \ + } while (0) + + #endif + + [3] #define QV_INIT() QV_init() + void QV_init(); + + #include "qv.h" /* QV platform-independent public interface */ + +@endcode + +
    +
  • 1 +For the ARMv6-M architecture, the macro QV_CPU_SLEEP() only stops the CPU with the WFI instruction (Wait For Interrupt). After the CPU is woken up by an interrupt, interrupts are re-enabled with the PRIMASK. +
  • +
  • 2 +For the ARMv7-M architecture, the macro QV_CPU_SLEEP() first disables interrupts by setting the PRIMASK, then clears the BASEPRI to enable all “kernel-aware” interrupts and only then stops the CPU with the WFI instruction (Wait For Interrupt). After the CPU is woken up by an interrupt, interrupts are re-enabled with the PRIMASK. This sequence is necessary, because the ARM Cortex-M3/M4 cores cannot be woken up by any interrupt blocked by the BASEPRI register. +
  • +
  • 2 +The macro QV_INIT() is defined as a call to the QV_init() function, which means that this function will be called from QF_init(). The QV_init() function initializes all available IRQ priorities in the MCU to the safe value of QF_BASEPRI. +
  • +
+ + +------------------------------------------------------------------------------ +@section arm-cm_qv_port_c The qv_port.c Implementation File +The QV implementation file for the ARM Cortex-M port is located in /ports/arm-cm/qv/gnu/qf_port.c. This file defines the function @c QV_init(), which for the ARMv7-M architecture sets the interrupt priorities of all IRQs to the safe value `QF_BASEPRI`. + +@anchor arm-cm_qv_port_c-code +Listing: The qv_port.c header file for ARM Cortex-M +@code{c} + #include "qf_port.h" + + [1] #if (__ARM_ARCH != 6) /* NOT Cortex-M0/M0+/M1 ? */ + + #define SCnSCB_ICTR ((uint32_t volatile *)0xE000E004) + #define SCB_SYSPRI ((uint32_t volatile *)0xE000ED14) + #define NVIC_IP ((uint32_t volatile *)0xE000E400) + + void QV_init(void) { + uint32_t n; + + /* set exception priorities to QF_BASEPRI... + * SCB_SYSPRI1: Usage-fault, Bus-fault, Memory-fault + */ + [2] SCB_SYSPRI[1] |= (QF_BASEPRI << 16) | (QF_BASEPRI << 8) | QF_BASEPRI; + + /* SCB_SYSPRI2: SVCall */ + [3] SCB_SYSPRI[2] |= (QF_BASEPRI << 24); + + /* SCB_SYSPRI3: SysTick, PendSV, Debug */ + [4] SCB_SYSPRI[3] |= (QF_BASEPRI << 24) | (QF_BASEPRI << 16) | QF_BASEPRI; + + /* set all implemented IRQ priories to QF_BASEPRI... */ + [5] n = 8 + (*SCnSCB_ICTR << 3); /* # interrupt priority registers */ + do { + --n; + [6] NVIC_IP[n] = (QF_BASEPRI << 24) | (QF_BASEPRI << 16) + | (QF_BASEPRI << 8) | QF_BASEPRI; + } while (n != 0); + } + + #endif /* NOT Cortex-M0/M0+/M1 */ +@endcode + +
    +
  • 1 +For the ARMv7-M architecture (Cortex-M3/M4/M7)... +
  • +
  • 2 +The exception priorities for User-Fault, Bus-Fault, and Mem-Fault are set to the value QF_BASEPRI. +
  • +
  • 3 +The exception priority for SVCCall is set to the value QF_BASEPRI. +
  • +
  • 4 +The exception priority for SysTick, PendSV, and Debug is set to the value QF_BASEPRI. +
  • +
  • 5 +The number of implemented IRQs is read from the @c SCnSCB_ICTR register +
  • +
  • 6 +The interrupt priority of all implemented IRQs is set to the safe value QF_BASEPRI in a loop. +
  • +
+ + +------------------------------------------------------------------------------ +@section arm-cm_qv-isr Writing ISRs for QV +The ARM Cortex-M CPU is designed to use regular C functions as exception and interrupt service routines (ISRs). + +@note +The ARM EABI (Embedded Application Binary Interface) requires the stack be 8-byte aligned, whereas some compilers guarantee only 4-byte alignment. For that reason, some compilers (e.g., GNU-ARM) provide a way to designate ISR functions as interrupts. For example, the GNU-ARM compiler provides the __attribute__((__interrupt__)) designation that will guarantee the 8-byte stack alignment. + + +Typically, ISRs are application-specific (with the main purpose to produce events for active objects). Therefore, ISRs are not part of the generic QP port, but rather part of the BSP (Board Support Package). + +The following listing shows an example of the SysTick_Handler() ISR (from the DPP example application). This ISR calls the QF_TICK_X() macro to perform QF time-event management. + +@anchor arm-cm_qv-isr-code +Listing: An ISR header for QV +@code{c} + void SysTick_Handler(void) __attribute__((__interrupt__)); + void SysTick_Handler(void) { + ~ ~ ~ + QF_TICK_X(0U, &l_SysTick_Handler); /* process all armed time events */ + } +@endcode + +@note +The QP port to ARM Cortex-M complies with the CMSIS standard, which dictates the names of all exception handlers and IRQ handlers. + + +------------------------------------------------------------------------------ +@section arm-cm_qv-fpu Using the FPU in the QV Port (Cortex-M4F/M7) +If you have the Cortex-M4F CPU and your application uses the hardware FPU, it should be enabled because it is turned off out of reset. The CMSIS-compliant way of turning the FPU on looks as follows: + +@verbatim + SCB->CPACR |= (0xFU << 20); +@endverbatim + +@note +The FPU must be enabled before executing any floating point instruction. An attempt to execute a floating point instruction will fault if the FPU is not enabled. + +Depending on wheter or not you use the FPU in your ISRs, the “Vanilla” QP port allows you to configure the FPU in various ways, as described in the following sub-sections. + + +
+@subsection arm-cm_qv-fpu_noisr FPU NOT used in the ISRs +If you use the FPU only at the thread-level (inside active objects) and none of your ISRs use the FPU, you can setup the FPU not to use the automatic state preservation and not to use the lazy stacking feature as follows: + +@verbatim + FPU->FPCCR &= ~((1U << FPU_FPCCR_ASPEN_Pos) | (1U << FPU_FPCCR_LSPEN_Pos)); +@endverbatim + +With this setting, the Cortex-M4F processor handles the ISRs in the exact-same way as Cortex-M0-M3, that is, only the standard interrupt frame with R0-R3,R12,LR,PC,xPSR is used. This scheme is the fastest and incurs no additional CPU cycles to save and restore the FPU registers. + +@note +This FPU setting will lead to FPU errors, if any of the ISRs indeed starts to use the FPU + + +
+@subsection arm-cm_qv-fpu_isr FPU used in the ISRs +If you use the FPU both at the thread-level (inside active objects) and in any of your ISRs as well, you should setup the FPU to use the automatic state preservation and the lazy stacking feature as follows: + +@verbatim + FPU->FPCCR |= (1U << FPU_FPCCR_ASPEN_Pos) | (1U << FPU_FPCCR_LSPEN_Pos); +@endverbatim + +This will enable the lazy stacking feature of the Cortex-M4F/M7 processor [@ref ARM-AN298]. The the "automatic state saving" and "lazy stacking" are enabled by default, so you typically don't need to change these settings. + +@note +As described in the ARM Application Note “Cortex-M4(F) Lazy Stacking and Context Switching” [@ref ARM-AN298], the FPU automatic state saving requires more stack plus additional CPU time to save the FPU registers, but only when the FPU is actually used. + + +------------------------------------------------------------------------------ +@section arm-cm_qv-idle QV Idle Processing Customization in QV_onIdle() +When no events are available, the non-preemptive QV kernel invokes the platform-specific callback function QV_onIdle(), which you can use to save CPU power, or perform any other “idle” processing (such as Quantum Spy software trace output). + +@note +The idle callback QV_onIdle() must be invoked with interrupts disabled, because the idle condition can be changed by any interrupt that posts events to event queues. QV_onIdle() must internally enable interrupts, ideally atomically with putting the CPU to the power-saving mode (see also [Samek 07] and Chapter 7 in [PSiCC2]). + + +Because QV_onIdle() must enable interrupts internally, the signature of the function depends on the interrupt locking policy. In case of the simple “unconditional interrupt locking and unlocking” policy, which is used in this ARM Cortex-M port, the QV_onIdle() takes no parameters. Listing 6 shows an example implementation of QV_onIdle() for the TM4C MCU. Other ARM Cortex-M embedded microcontrollers (e.g., NXP’s LPC1114/1343) handle the power-saving mode very similarly. + +@anchor arm-cm_qv_onidle-code +Listing: QV_onIdle() for ARM Cortex-M +@code{c} + + [1] void QV_onIdle(void) { /* entered with interrupts DISABLED, see NOTE01 */ + ~ ~ ~ + [2] #if defined NDEBUG + /* Put the CPU and peripherals to the low-power mode */ + [3] QV_CPU_SLEEP(); /* atomically go to sleep and enable interrupts */ + #else + [4] QF_INT_ENABLE(); /* just enable interrupts */ + #endif + } + +@endcode + +
    +
  • 1 +The cooperative QV kernel calls the QV_onIdle() callback with interrupts disabled, to avoid race condition with interrupts that can post events to active objects and thus invalidate the idle condition. +
  • +
  • 2 +The sleep mode is used only in the non-debug configuration, because sleep mode stops CPU clock, which can interfere with debugging. +
  • +
  • 3 +The macro QV_CPU_SLEEP() is used to put the CPU to the low-power sleep mode safely. The macro QV_CPU_SLEEP() is defined in the qv_port.h header file for the QV kernel and depends on the interrupt disabling policy used. +
  • +
  • 4 +When a sleep mode is not used, the QV_onIdle() callback simply re-enables interrupts. +
  • +
+ +@next{arm-cm_qk} +*/ +/*##########################################################################*/ +/*! @page arm-cm_qk Preemptive Run-to-Completion QK Kernel + +@tableofcontents + +

The preemptive, run-to-completion (RTC) QK kernel breaks entirely with the endless-loop structure of the thread routines and instead uses threads structured as one-shot, discrete, run-to-completion functions, very much like ISRs [PSiCC2, Chapter 10]. In fact, the QK kernel views interrupts very much like threads of a “super-high” priority, except that interrupts are prioritized in hardware by the interrupt controller, whereas threads are prioritized in software by the RTC kernel. +

+ +@note +The preemptive QK kernel uses only one stack for all threads (see the next section), but the stack must be bigger than in the non-preemptive QV kernel. You need to adjust the size of this stack to be large enough for your application. + + +As a fully preemptive multithreading kernel, QK must ensure that at all times the CPU executes the highest-priority thread (active object) that is ready to run. Fortunately, only two scenarios can lead to readying a higher-priority thread: + +
    +
  • 1 +When a lower-priority thread posts an event to a higher-priority thread, the kernel must immediately suspend the execution of the lower-priority thread and start the higher-priority thread. This type of preemption is called synchronous preemption because it happens synchronously with posting an event to the thread's event queue. +> NOTE: The stack usage shown in the bottom panel displays stack growing down (towards lower addresses), as it is the case in ARM Cortex-M. +
  • +
+ +@anchor arm-cm_qk-synch-fig +@image html qk_synch.gif "Synchronous Preemption in QK" + +
    +
  • 2 +When an interrupt posts an event to a higher-priority thread than the interrupted thread, upon completion of the ISR the kernel must start execution of the higher-priority thread instead of resuming the lower-priority thread. This type of preemption is called asynchronous preemption because it can happen asynchronously, any time interrupts are not explicitly disabled. +> NOTE: The stack usage during asynchronous preemption on ARM Cortex-M is slightly simplified in the diagram below. A more detailed stack usage diagram is discussed later in the section explaining the @ref "Detailed stack allocation in QK for ARM Cortex-M". +
  • +
+ +@anchor arm-cm_qk-asynch-fig +@image html qk_asynch.gif "Synchronous Preemption in QK" + + +@note +A traditional RTOS kernel does not distinguish between the synchronous and asynchronous preemptions and makes all preemptions look like the more stack-intensive asynchronous preemptions. In contrast, a RTC kernel can implement synchronous preemption as a simple function call (to QK_activate_()), which is much more efficient than a full context-switch. + + +------------------------------------------------------------------------------ +@section arm-cm_qk-synopsis Synopsis of the QK Port on ARM Cortex-M +The ARM Cortex-M architecture is designed primarily for the traditional real-time kernels that use multiple per-thread stacks. This section explains how the run-to-completion preemptive QK kernel works on ARM Cortex-M. + +1. The ARM Cortex-M processor executes the QK application code (active objects) in the Privileged Thread mode, which is exactly the mode entered out of reset. The exceptions (including all interrupts) are always processed in the Privileged Handler mode. + +2. QK uses only the Main Stack Pointer (QK is a single stack kernel). The Process Stack Pointer is not used and is not initialized. + +3. ARM Cortex-M enters interrupt context without disabling interrupts (without setting the PRIMASK bit or the BASEPRI register). Generally, you should not disable interrupts inside your ISRs. In particular, the QP services QF_PUBLISH(), QF_TICK_X(), and QACTIVE_POST() should be called with interrupts enabled, to avoid nesting of critical sections. (NOTE: If you don’t wish an interrupt to be preempted by another interrupt, you can always prioritize that interrupt in the NVIC to a higher level -- use a lower numerical value of priority). + + +4. The QK port uses the PendSV exception (number 14) and the NMI exception (number 2) to perform asynchronous preemption and return to the preempted thread, respectively (see Chapter 10 in [PSiCC2]). The startup code must initialize the Interrupt Vector Table with the addresses of @c PendSV_Handler() and @c NMI_Handler() exception handlers. + +5. The QF_init() function calls the function QK_init() to set the priority of the PendSV exception to the lowest level in the whole system (0xFF). The function QK_init() additionally sets the interrupt priority of all IRQs available in the MCU to the safe value of @c QF_BASEPRI (for ARM-v7 architecture). + +6. It is strongly recommended that you do not assign the lowest priority (0xFF) to any interrupt in your application. With 3 MSB-bits of priority, this leaves the following 7 priority levels for you (listed from the lowest to the highest urgency): 0xC0, 0xA0, 0x80, 0x60, 0x40, 0x20, and 0x00 (the highest priority). + +7. Before returning, every “kernel aware” ISR must check whether an active object has been activated that has a higher priority than the currently running active object. If this is the case, the ISR must set the PensSV pending flag in the NVIC. All this is accomplished in the macro QK_ISR_EXIT(), which must be called just before exiting every ISRs. + +8. In ARM Cortex-M the whole prioritization of interrupts, including the PendSV exception, is performed entirely by the NVIC. Because the PendSV has the lowest priority in the system, the NVIC tail-chains to the PendSV exception only after exiting the last nested interrupt. + +9. The pushing of the 8 registers comprising the ARM Cortex-M interrupt stack frame upon entry to NMI exception is wasteful in a single-stack kernel, but is necessary to perform full interrupt return to the preempted context through the NMI's return. + + +
+@subsection arm-cm_qk-preempt Preemption Scenarios in QK on ARM Cortex-M + +@anchor arm-cm_qk-arm-cm-fig +@image html qk_arm-cm.gif "Several preemption scenarios in QK" + +
    +
  • 0 +The timeline begins with the QK executing the idle loop. +
  • +
  • 1 +At some point an interrupt occurs and the CPU immediately suspends the idle loop, pushes the interrupt stack frame to the Main Stack and starts executing the ISR. +
  • +
  • 2 +The ISR performs its work, and in QK always must call the QK_ISR_EXIT() macro, which calls the QK scheduler to determine if there is a higher-priority AO to run. If so, the macro sets the pending flag for the PendSV exception in the NVIC. The priority of the PendSV exception is configured to be the lowest of all exceptions, so the ISR continues executing and PendSV exception remains pending. At the ISR return, the ARM Cortex-M CPU performs tail-chaining to the pending PendSV exception. +
  • +
  • 3 +The PendSV exception discovers whether there is a higher-priority thread to run then the preempted one (by calling QK_schedPrio_()) and if so, to to synthesize an exception stack frame to return to the QK scheduler (QK_sched_()) to run this new thread. +> NOTE: The QK scheduler must run in the thread context, while PendSV executes in the exception context. The change of the context is accomplished by returning from the PendSV exception directly to the QK scheduler. + +To return directly to the QK scheduler, PendSV synthesizes an exception stack frame, which contains the exception return address set to QK_sched_(). The QK scheduler discovers that the Low-priority thread is ready to run (the ISR has posted event to this thread). The QK scheduler enables interrupts and launches the Low-priority thread, which is simply a C-function call in QK. The Low-priority thread (active object) starts running. +
  • +
  • 4 +Some time later a low-priority interrupt occurs. The Low-priority thread is suspended and the CPU pushes the interrupt stack frame to the Main Stack and starts executing the ISR. +
  • +
  • 5 +Before the Low-priority ISR completes, it too gets preempted by a High-priority ISR. The CPU pushes another interrupt stack frame and starts executing the High-priority ISR. +
  • +
  • 6 +The High-priority ISR sets the pending flag for the PendSV exception by means of the QK_ISR_EXIT() macro. When the High-priority ISR returns, the NVIC does not tail-chain to the PendSV exception, because a higher-priority ISR than PendSV is still active. The NVIC performs an exception return to the preempted Low-priority interrupt, which finally completes. +
  • +
  • 7 +Upon the exit from the Low-priority ISR, it too sets the pending flag for the PendSV exception by means of the QK_ISR_EXIT() macro. The PendSV is already pended from the High-priority interrupt, so pending is again is redundant, but it is not an error. At the ISR return, the ARM Cortex-M CPU performs tail-chaining to the pending PendSV exception. +
  • +
  • 8 +The PendSV exception synthesizes an interrupt stack frame to return to the QK scheduler. The QK scheduler detects that the High-priority thread is ready to run and launches the High-priority thread (normal C-function call). The High-priority thread runs to completion and returns to the scheduler. +
  • +
  • 9 +The QK scheduler does not find any more higher-priority threads to execute and needs to return to the preempted thread. The only way to restore the interrupted context in ARM Cortex-M is through the interrupt return, but the thread is executing outside of the interrupt context (in fact, threads are executing in the Privileged Thread mode). The thread enters the Handler mode by pending the NMI exception. +> NOTE: The NMI exception is pended while interrupts are still disabled. This is not a problem, because NMI cannot be masked by disabling interrupts, so runs without any problems. +
  • +
  • 10 +The only job of the NMI exception is to discard its own interrupt stack frame, re-enable interrupts, and return using the interrupt stack frame that has been on the stack from the moment of thread preemption. +
  • +
  • 11 +The Low-priority thread, which has been preempted all that time, resumes and finally runs to completion and returns to the QK scheduler. The QK scheduler does not find any more threads to launch and causes the NMI exception to return to the preempted thread. +
  • +
  • 12 +The NMI exception discards its own interrupt stack frame and returns using the interrupt stack frame from the preempted thread context +
  • +
+ + +------------------------------------------------------------------------------ +@section arm-cm_qk-qf_port The qf_port.h Header File +The QF header file for the ARM Cortex-M port is located in /ports/arm-cm/qk/gnu/qf_port.h. This file is almost identical to the @ref arm-cm_qv-qf_port "QV port", except the header file in the QK port includes `qk_port.h` header file instead of `qv_porth`. + + +------------------------------------------------------------------------------ +@section arm-cm_qk-qk_port The qk_port.h Header File +You configure and customize QK through the header file qk_port.h, which is located in the QP ports directory /ports/arm-cm/qk/gnu/. The most important function of qk_port.h is specifying interrupt entry and exit. + +@note +As any preemptive kernel, QK needs to be notified about entering the interrupt context and about exiting an interrupt context in order to perform a context switch, if necessary. + + +@anchor arm-cm_qk_port-code +Listing: qk_port.h header file for ARM Cortex-M +@code{c} + /* determination if the code executes in the ISR context */ + [1] #define QK_ISR_CONTEXT_() (QK_get_IPSR() != (uint32_t)0) + + __attribute__((always_inline)) + [2] static inline uint32_t QK_get_IPSR(void) { + uint32_t regIPSR; + __asm volatile ("mrs %0,ipsr" : "=r" (regIPSR)); + return regIPSR; + } + + /* QK interrupt entry and exit */ + [3] #define QK_ISR_ENTRY() ((void)0) + + [4] #define QK_ISR_EXIT() do { \ + [5] QF_INT_DISABLE(); \ + [6] if (QK_sched_() != (uint_fast8_t)0) { \ + [7] (*Q_UINT2PTR_CAST(uint32_t, 0xE000ED04U) = (uint32_t)(1U << 28)); \ + } \ + [8] QF_INT_ENABLE(); \ + } while (0) + + /* initialization of the QK kernel */ + [9] #define QK_INIT() QK_init() + void QK_init(void); + + #include "qk.h" /* QK platform-independent public interface */ +@endcode + +
    +
  • 1 +The macro @c QK_ISR_CONTEXT() returns true when the code executes in the ISR context and false otherwise. The macro takes advantage of the ARM Cortex-M register IPSR, which is non-zero when the CPU executes an exception (or interrupt) and is zero when the CPU is executing thread code. +> NOTE: QK needs to distinguish between ISR and thread contexts, because threads need to perform synchronous context switch (when a higher-priority thread becomes ready to run), while ISRs should not do that. +
  • +
  • 2 +The inline function @c QK_get_IPSR() obtains the IPSR register and returns it to the caller. This function is defined explicitly for the GNU-ARM toolset, but many other toolsets provide this function as an intrinsic, built-in facility. +
  • +
  • 3 +The @c QK_ISR_ENTRY() macro notifies QK about entering an ISR. The macro is empty, because the determination of the ISR vs thread context is performed independently in the @c QK_ISR_CONTEXT() macro (see above). +
  • +
  • 4 +The @c QK_ISR_EXIT() macro notifies QK about exiting an ISR. +
  • +
  • 5 +Interrupts are disabled before calling QK scheduler. +
  • +
  • 6 +The QK scheduler is called to find out whether an active object of a higher priority than the current one needs activation. The @c QK_sched_() function returns non zero value if this is the case. +
  • +
  • 7 +If asynchronous preemption becomes necessary, the code sets the PENDSV Pend bit(28) in the ICSR register (Interrupt Control and State Register). The register is mapped at address 0xE000ED04 in all ARM Cortex-M cores. +
  • +
  • 8 +The interrupts are re-enabled after they have been disabled in step [5]. +> NOTE: Because the priority of the PendSV exception is the lowest of all interrupts, it is actually triggered only after all nested interrupts exit. The PendSV exception is then entered through the efficient **tail-chaining** process, which eliminates the restoring and re-entering the interrupt context. +
  • +
+ + +------------------------------------------------------------------------------ +@section arm-cm_qk-qk_asm QK Assembly Code for ARM Cortex-M +The QK port to ARM Cortex-M requires coding the PendSV and NMI exceptions in assembly. This ARM Cortex-M-specific code, as well as QK initialization (@c QK_init()) is located in the file ­ports/arm-cm/­qk/­gnu/qk_port.s + +@note +The single assembly module `qk_port.s` contains common code for all Cortex-M variants (Architecture v6M and v7M) as well as options with and without the VFP. The CPU variants are distinguished by conditional compilation, when necessary. + + +
+@subsection arm-cm_qk_port-asm_init QK_init() Implementation + +Listing: QK_init function in qk_port.s assembly file +@code{c} + /***************************************************************************** + * The QK_init() function sets the priority of PendSV to 0xFF (lowest urgency). + * For Cortex-M3/4/7, it also sets priorities of all other exceptions and IRQs + * to the safe value. All this is performed in a nestable critical section. + *****************************************************************************/ + .section .text.QK_init + .global QK_init + .type QK_init, %function + + [1] QK_init: + + [2] MRS r0,PRIMASK /* store the state of the PRIMASK in r0 */ + [3] MOV r12,r0 /* r12 := PRIMASK */ + [4] CPSID i /* PRIMASK := 1 */ + + [5] .if __ARM_ARCH == 6 /* Cortex-M0/M0+/M1 (v6-M, v6S-M)? */ + + [6] LDR r3,=0xE000ED18 /* System Handler Priority Register */ + [7] LDR r2,[r3,#8] /* r2 := SYSPRI3 */ + [8] MOVS r0,#0xFF + [9] LSLS r0,r0,#16 +[10] ORRS r2,r1 +[11] STR r2,[r3,#8] /* SYSPRI3 := r2, PendSV <- 0xFF */ + +[12] .else /* M3/M4/M7 */ + /* NOTE: + * On Cortex-M3/M4/.., this QK port disables interrupts by means of the + * BASEPRI register. However, this method cannot disable interrupt + * priority zero, which is the default for all interrupts out of reset. + * The following code changes the SysTick priority and all IRQ priorities + * to the safe value QF_BASEPRI, wich the QF critical section can disable. + * This avoids breaching of the QF critical sections in case the + * application programmer forgets to explicitly set priorities of all + * "kernel aware" interrupts. + */ + + /* set all priority bytes to QF_BASEPRI in r1 */ +[13] MOVS r1,#QF_BASEPRI + LSLS r1,r1,#8 + ORRS r1,r1,#QF_BASEPRI + LSLS r1,r1,#8 + ORRS r1,r1,#QF_BASEPRI + LSLS r1,r1,#8 + ORRS r1,r1,#QF_BASEPRI + + LDR r3,=0xE000ED18 /* System Handler Priority Register */ + LDR r2,[r3] /* r2 := SYSPRI1 */ + ORRS r2,r1 /* r2 |= "all values to QF_BASEPRI" */ +[14] STR r2,[r3] /* SYSPRI1 |= r2, Use-fault/Bus-fault/Mem-fault*/ + + LDR r2,[r3,#4] /* r2 := SYSPRI2 */ + ORRS r2,r1 /* r2 |= "all values to QF_BASEPRI" */ +[16] STR r2,[r3,#4] /* SYSPRI2 := r2, SVCall */ + + LDR r2,[r3,#8] /* r2 := SYSPRI3 */ + ORRS r1,r1,#(0xFF << 16) /* r1 |= 0xFF for PendSV */ + ORRS r2,r1 +[17] STR r2,[r3,#8] /* SYSPRI3 |= r2, SysTick/PendSV/Debug */ + + /* set again all prioriy bytes to QF_BASEPRI in r1 */ +[18] MOVS r1,#QF_BASEPRI + LSLS r1,r1,#8 + ORRS r1,r1,#QF_BASEPRI + LSLS r1,r1,#8 + ORRS r1,r1,#QF_BASEPRI + LSLS r1,r1,#8 + ORRS r1,r1,#QF_BASEPRI + +[19] LDR r3,=0xE000E004 /* Interrupt Controller Type Register */ + LDR r3,[r3] /* r3 := INTLINESUM */ + LSLS r3,r3,#3 +[20] ADDS r3,r3,#8 /* r3 == number of NVIC_PRIO registers */ + + /* loop over all implemented NVIC_PRIO registers for IRQs... */ + QK_init_irq: + SUBS r3,r3,#1 + LDR r2,=0xE000E400 /* NVIC_PRI0 register */ +[21] STR r1,[r2,r3,LSL #2] /* NVIC_PRI0[r3] := r1 */ + CMP r3,#0 + BNE QK_init_irq + + .endif /* M3/M4/M7 */ + +[22] MOV r0,r12 /* r0 := original PRIMASK */ +[23] MSR PRIMASK,r0 /* PRIMASK := r0 */ +[24] BX lr + .size QK_init, . - QK_init +@endcode + +
    +
  • 1 +The QK_init() function initializes the exception priorities of PendSV and NMI as well as interrupt priorities of all IRQs available in a given MCU (for Cortex-M3/4/7). +
  • +
  • 2 +The PRIMASK register is retreived into r0. +
  • +
  • 3 +The PRIMASK value is stored in the high-register r12. +
  • +
  • 4 +Interrupts are disabled by setting the PRIMASK. +
  • + +
  • 5 +For the ARMv6-M architecture... +
  • +
  • 6 +The address of the NVIC System Handler Priority Register 0 is loaded into r3 +
  • +
  • 7 +The contents of the NVIC System Handler Priority Register 2 (note the offset of 8) is loaded into r2. +
  • +
  • 8-9 +The mask value of 0xFF0000 is synthesized in r2. +
  • +
  • 10 +The mask is then applied to set the priority byte PRI_14 to 0xFF without changing other priority bytes in this register. +
  • +
  • 11 +The contents of r2 is stored in the NVIC System Handler Priority Register 2 (note the offset of 8). +
  • + +
  • 12 +For the ARMv7-M architecture... +
  • +
  • 13 +The priority value QF_BASEPRI is all bytes of the register r1. +
  • +
  • 14 +The exception priorities for User-Fault, Bus-Fault, and Mem-Fault are set to the value QF_BASEPRI. +
  • +
  • 16 +The exception priority for SVCCall is set to the value QF_BASEPRI. +
  • +
  • 17 +The exception priority for SysTick, PendSV, and Debug is set to the value QF_BASEPRI. +
  • +
  • 18 +The priority value QF_BASEPRI is all bytes of the register r1 again. +
  • +
  • 19 +The value of Interrupt Controller Type Register is loaded into r3 +
  • +
  • 20 +The number of implemented IRQs is loaded into r3 +
  • +
  • 21 +The interrupt priority of all implemented IRQs is set to the safe value QF_BASEPRI in a loop. +
  • + +
  • 22 +The original value of PRIMASK is restored form the high-register r12 +
  • +
  • 23 +The PRIMASK register is restored to its original value +
  • +
  • 14 +The function QK_init returns to the caller. +
  • +
+ + +
+@subsection arm-cm_qk_port-asm_pendsv PendSV_Handler() Implementation + +Listing: PendSV_Handler function in qk_port.s assembly file +@code{c} + .section .text.PendSV_Handler + .global PendSV_Handler /* CMSIS-compliant exception name */ + .type PendSV_Handler, %function + + [1] PendSV_Handler: + /* Prepare some constants in registers before entering critical section */ + [2] LDR r3,=0xE000ED04 /* Interrupt Control and State Register */ + [3] MOVS r1,#1 + [4] LSLS r1,r1,#27 /* r0 := (1 << 27) (UNPENDSVSET bit) */ + + + /* <<<<<<<<<<<<<<<<<<<<<<< CRITICAL SECTION BEGIN <<<<<<<<<<<<<<<<<<<<< */ + .if __ARM_ARCH == 6 /* Cortex-M0/M0+/M1 (v6-M, v6S-M)? */ + [6] CPSID i /* disable interrupts (set PRIMASK) */ + .else /* M3/M4/M7 */ + .ifdef __FPU_PRESENT /* if VFP available... */ + [7] PUSH {r0,lr} /* ... push EXC_RETURN plus stack-aligner */ + .endif /* VFP */ + [8] MOVS r0,#QF_BASEPRI + [9] CPSID i /* selectively disable interrutps with BASEPRI */ +[10] MSR BASEPRI,r0 /* apply the workaround the Cortex-M7 erraturm */ +[11] CPSIE i /* 837070, see ARM-EPM-064408. */ + .endif /* M3/M4/M7 */ + + /* The PendSV exception handler can be preempted by an interrupt, + * which might pend PendSV exception again. The following write to + * ICSR[27] un-pends any such spurious instance of PendSV. + */ +[12] STR r1,[r3] /* ICSR[27] := 1 (unpend PendSV) */ + + /* The QK activator must be called in a Thread mode, while this code + * executes in the Handler mode of the PendSV exception. The switch + * to the Thread mode is accomplished by returning from PendSV using + * a fabricated exception stack frame, where the return address is + * QK_activate_(). + * + * NOTE: the QK activator is called with interrupts DISABLED and also + * returns with interrupts DISABLED. + */ +[13] LSRS r3,r1,#3 /* r3 := (r1 >> 3), set the T bit (new xpsr) */ +[14] LDR r2,=QK_activate_ /* address of QK_activate_ */ +[15] SUBS r2,r2,#1 /* align Thumb-address at halfword (new pc) */ +[16] LDR r1,=Thread_ret /* return address after the call (new lr) */ + +[17] SUB sp,sp,#8*4 /* reserve space for exception stack frame */ +[18] ADD r0,sp,#5*4 /* r0 := 5 registers below the top of stack */ +[19] STM r0!,{r1-r3} /* save xpsr,pc,lr */ + +[20] MOVS r0,#6 +[21] MVNS r0,r0 /* r0 := ~6 == 0xFFFFFFF9 */ +[22] BX r0 /* exception-return to the QK activator */ + .size PendSV_Handler, . - PendSV_Handler + + /* + * Thread_ret is a helper function executed when the QXK activator returns. + * + * NOTE: Thread_ret does not execute in the PendSV context! + * NOTE: Thread_ret executes entirely with interrupts DISABLED. + */ + .section .text.Thread_ret + .type Thread_ret, %function + +[23] Thread_ret: + /* After the QK activator returns, we need to resume the preempted + * thread. However, this must be accomplished by a return-from-exception, + * while we are still in the thread context. The switch to the exception + * context is accomplished by triggering the NMI exception. + */ + + /* before triggering the NMI exception, make sure that the + * VFP stack frame will NOT be used... + */ + .ifdef __FPU_PRESENT /* if VFP available... */ +[24] MRS r0,CONTROL /* r0 := CONTROL */ +[25] BICS r0,r0,#4 /* r0 := r0 & ~4 (FPCA bit) */ +[26] MSR CONTROL,r0 /* CONTROL := r0 (clear CONTROL[2] FPCA bit) */ +[27] ISB /* ISB after MSR CONTROL (ARM AN321,Sect.4.16)*/ + .endif /* VFP available */ + + /* trigger NMI to return to preempted thread... + * NOTE: The NMI exception is triggered with nterrupts DISABLED + */ +[28] LDR r0,=0xE000ED04 /* Interrupt Control and State Register */ +[29] LSLS r1,r1,#31 /* r1 := (1 << 31) (NMI bit) */ +[30] MOVS r1,#1 +[31] STR r1,[r0] /* ICSR[31] := 1 (pend NMI) */ +[32] B . /* wait for preemption by NMI */ + .size Thread_ret, . - Thread_ret +@endcode + +
    +
  • 1 +`PendSV_Handler` is a CMSIS-complinat name of the PendSV exception handler. The `PendSV_Handler` exception is always entered via tail-chaining from the last nested interrupt. +
  • +
  • 2-4 +Before interrupts are disabled, the following constants are loaded into registers: address of ICSR into r3 and (1<<27) into r1. +
  • +
  • For the ARMv6-M architecture (Cortex-M0/M0+)... +
  • +
  • 6 +Interrupts are globally disabled by setting PRIMASK (see Section 3) +
  • +
  • Otherwise, for the ARMv7-M architecture (Cortex-M3/4/7) and when the `_FPU_PRESENT` macro is defined... +> NOTE: The symbol `__FPU_PRESENT` must be defined on the command-line to the GNU-ARM assembler if you intend to use the FPU on the Cortex-M4F/M7 cores. +
  • +
  • 7 +The lr register (EXC_RETURN) is pushed to the stack along with r0, to keep the stack aligned at 8-byte boundary. +> NOTE: In the presence of the FPU (Cortex-M4F/M7), the EXC_RETURN[4] bit carries the information about the stack frame format used, whereas EXC_RETURN[4] ==0 means that the stack contains room for the S0-S15 and FPSCR registers in addition to the usual R0-R3,R12,LR,PC,xPSR registers. This information must be preserved, in order to properly return from the exception at the end. +
  • +
  • 8 +For the ARMv7-M architecture (Cortex-M3/M4), interrupts are selectively disabled by setting the BASEPRI register. +> NOTE: The value moved to BASEPRI must be identical to the QF_BASEPRI macro defined in `qf_port.h`. +
  • +
  • 9 +Before setting the BASEPRI register, interrupts are disabled with the PRIMASK register, which is the recommended workaround for the Cortex-M7 r0p1 hardware bug, as described in the ARM Ltd. [@ref ARM-EPM-064408], Erratum 837070. +
  • +
  • 10 +The BASEPRI register is set to the @c QF_BASEPRI value. +
  • +
  • 11 +After setting the BASEPRI register, interrupts are re-anabed with the PRIMASK register, which is the recommended workaround for the Cortex-M7 r0p1 hardware bug, as described in the ARM Ltd. [@ref ARM-EPM-064408], Erratum 837070. +
  • +
  • 12 +The PendSV exception is **explicitly** un-pended. +> NOTE: The PendSV exception handler can be preempted by an interrupt, which might pend PendSV exception again. This would trigger PendSV incorrectly again immediately after calling QK activator. +
  • + +
  • The following code [13-22] fabricates an exception stack frame, to perform an exception-return to the QK activator without destroying the original exception stack frame of the PendSV exception. This is necessary to preserve the context of the preempted code. +
  • +
  • 13 +The value (1 << 24) is synthesized in r3 from the value (1 << 27) already available in r1. This value is going to be stacked and later restored to xPSR register (only the T bit set). +
  • +
  • 14 +The address of the QK activator function @c QK_activate_ is loaded into r2. This will be pushed to the stack as the PC register value. +
  • +
  • 15 +The address of the QK activator function @c QK_activate_ in r2 is adjusted to be half-word aligned instead of being an odd THUMB address. +> NOTE: This is necessary, because the value will be loaded directly to the PC, which cannot accept odd values. +
  • +
  • 16 +The address of the Thread_ret function is loaded into r1. This will be pushed to the stack as the lr register value. +> NOTE: The address of the @c Thread_ret label must be a THUMB address, that is, the least-significant bit of this address must be set (this address must be odd number). This is essential for the correct return of the QK scheduler with setting the THUMB bit in the PSR. Without the LS-bit set, the ARM Cortex-M CPU will clear the T bit in the PSR and cause the Hard Fault. The GNU-ARM assembler/linker will synthesize the correct THUMB address of the svc_ret label only if this label is declared with the `.type Thread_ret , %function` attribute (see step [23]). +
  • +
  • 16 +The stack pointer is adjusted to leave room for 8 registers. +
  • +
  • 18 +The top of stack, adjusted by 5 registers, (r0, r1, r2, r3, and r12) is stored to r0. +
  • +
  • 19 +The values of xpsr, pc, and lr prepared in r3, r2, and r1, respectively, are pushed on the top of stack (now in r0). This operation completes the synthesis of the exception stack frame. After this step the stack looks as follows: +
    +Hi memory
    +           (optionally S0-S15, FPSCR), if EXC_RETURN[4]==0
    +           xPSR
    +           pc (interrupt return address)
    +           lr
    +           r12
    +           r3
    +           r2
    +           r1
    +           r0
    +           EXC_RETURN (pushed in step [7] if FPU is present)
    +old SP --> "aligner"  (pushed in step [7] if FPU is present)
    +           xPSR == 0x01000000
    +           PC == QK_activate_
    +           lr == Thread_ret
    +           r12  don't care
    +           r3   don't care
    +           r2   don't care
    +           r1   don't care
    +    SP --> r0   don't care
    +Low memory
    +
    +
  • +
  • 20-21 +The special exception-return value 0xFFFFFFF9 is synthesized in r0 (two instructions are used to make the code compatible with Cortex-M0, which has no barrel shifter). +> NOTE: the r0 register is used instead of lr because the Cortex-M0 instruction set cannot manipulate the higher-registers (r9-r15). +> NOTE: The exception-return value is consistent with the synthesized stack-frame with the lr[4] bit set to 1, which means that the FPU registers are not included in this stack frame. +
  • + +
  • 22 +PendSV exception returns using the special value of the r0 register of 0xFFFFFFF9 (return to Privileged Thread mode using the Main Stack pointer). The synthesized stack frame causes actually a function call to QK_sched_ function in C. +> NOTE: The return from the PendSV exception just executed switches the ARM Cortex-M core to the Privileged Thread mode. The QK_sched_ function internally re-enables interrupts before launching any thread, so the threads always run in the Thread mode with interrupts enabled and can be preempted by interrupts of any priority. +> NOTE: In the presence of the FPU, the exception-return to the QK scheduler does not change any of the FPU status bit, such as CONTROL.FPCA or LSPACT. +
  • + +
  • 23 +The @c Thread_ret function is the place, where the QK activator `QK_activate_()` returns to, because this return address is pushed to the stack in step [16]. Please note that the address of the @c Thread_ret label must be a THUMB address. +
  • +
  • 24-27 +If the FPU is present, the read-modify-write code clears the CONTROL[2] bit [2]. This bit, called CONTROL.FPCA (Floating Point Active), would cause generating the FPU-type stack frame, which you want to avoid in this case (because the NMI exception will certainly not use the FPU). +> NOTE: Clearing the CONTROL.FPCA bit occurs with interrupts disabled, so it is protected from a context switch. +
  • +
  • 28-31 +The asynchronous NMI exception is triggered by setting ICSR[31]. The job of this exception is to put the CPU into the exception mode and correctly return to the thread level. +
  • +
  • 32 +This endless loop should not be reached, because the NMI exception should preempt the code immediately after step [31] +
  • +
+ + +
+@subsection arm-cm_qk_port-asm_nmi NMI_Handler() Implementation + +Listing: NMI_Handler function in qk_port.s assembly file +@code{c} + .section .text.NMI_Handler + .global NMI_Handler + .type NMI_Handler, %function + + [1] NMI_Handler: + [2] ADD sp,sp,#(8*4) /* remove one 8-register exception frame */ + + .if __ARM_ARCH == 6 /* Cortex-M0/M0+/M1 (v6-M, v6S-M)? */ + [3] CPSIE i /* enable interrupts (clear PRIMASK) */ + [4] BX lr /* return to the preempted thread */ + .else /* M3/M4/M7 */ + [5] MOVS r0,#0 + [6] MSR BASEPRI,r0 /* enable interrupts (clear BASEPRI) */ + .ifdef __FPU_PRESENT /* if VFP available... */ + [7] POP {r0,pc} /* pop stack "aligner" and EXC_RETURN to PC */ + .else /* no VFP */ + [8] BX lr /* return to the preempted thread */ + .endif /* VFP available */ + .endif /* M3/M4/M7 */ + .size NMI_Handler, . - NMI_Handler +@endcode + +
    +
  • 1 +The @c NMI_Handler is the CMSIS-compliant name of the NMI exception handler. This exception is triggered after returning from the QK activator in step [31] of the previous listing. The job of NMI is to discard its own stack frame and cause the exception-return to the original preempted thread context. The stack contents just after entering NMI is shown below: +
    +Hi memory
    +           (optionally S0-S15, FPSCR), if EXC_RETURN[4]==0
    +           xPSR
    +           pc (interrupt return address)
    +           lr
    +           r12
    +           r3
    +           r2
    +           r1
    +           r0
    +old SP --> EXC_RETURN (pushed in PendSV [7] if FPU is present)
    +           "aligner"  (pushed in PendSV [7] if FPU is present)
    +           xPSR don't care
    +           PC   don't care
    +           lr   don't care
    +           r12  don't care
    +           r3   don't care
    +           r2   don't care
    +           r1   don't care
    +    SP --> r0   don't care
    +Low memory
    +
    +
  • +
  • 2 +The stack pointer is adjusted to un-stack the 8 registers of the interrupt stack frame corresponding to the NMI exception itself. This moves the stack pointer from the “old SP” to “SP” in the picture above, which "uncovers" the original exception stack frame left by the PendSV exception. +
  • +
  • 3 +For ARMv6-M, interrupts are enabled by clearing the PRIMASK. +
  • +
  • 4 +For ARMv6-M, The NMI exception returns to the preempted thread using the standard EXC_RETURN, which is in lr. +
  • +
  • 5-6 +For the ARMv7-M, interrupts are enabled by writing 0 into the BASEPRI register. +
  • +
  • 7 +If the FPU is used, the EXC_RETURN and the “stack aligner” saved in PendSV step [7] are popped from the stack into r0 and pc, respectively. Updating the pc causes the return from PendSV. +
  • +
  • 8 +Otherwise, NMI returns to the preempted thread using the standard EXC_RETURN, which is in lr. +
  • +
+ +@anchor qk_stack-detail +@image html qk_stack-detail.gif "Detailed stack allocation in QK for ARM Cortex-M" + + + +------------------------------------------------------------------------------ +@section arm-cm_qk-isr Writing ISRs for QK +The ARM Cortex-M CPU is designed to use regular C functions as exception and interrupt service routines (ISRs). + +@note +The ARM EABI (Embedded Application Binary Interface) requires the stack be 8-byte aligned, whereas some compilers guarantee only 4-byte alignment. For that reason, some compilers (e.g., GNU-ARM) provide a way to designate ISR functions as interrupts. For example, the GNU-ARM compiler provides the `__attribute__((__interrupt__))` designation that will guarantee the 8-byte stack alignment. + + +Typically, ISRs are application-specific (with the main purpose to produce events for active objects). Therefore, ISRs are not part of the generic QP port, but rather part of the BSP (Board Support Package). + +The following listing shows an example of the SysTick_Handler() ISR (from the DPP example application). This ISR calls the QF_TICK_X() macro to perform QF time-event management. + +@anchor arm-cm_qk-isr-code +Listing: An ISR header for QK +@code{c} + void SysTick_Handler(void) __attribute__((__interrupt__)); + void SysTick_Handler(void) { + ~ ~ ~ + [1] QK_ISR_ENTRY(); /* inform QK about entering an ISR */ + ~ ~ ~ + QF_TICK_X(0U, &l_SysTick_Handler); /* process all armed time events */ + ~ ~ ~ + [2] QK_ISR_EXIT(); /* inform QK about exiting an ISR */ + } +@endcode + +
    +
  • 1 +Every ISR for QK must call @c QK_ISR_ENTRY() before calling any QP API +
  • +
  • 2 +Every ISR for QK must call @c QK_ISR_EXIT() right before exiting to let the QK kernel schedule an asynchronous preemption, if necessary. +
  • +
+ +@note +The QK port to ARM Cortex-M complies with the requirement of the ARM-EABI to preserve stack pointer alignment at **8-byte boundary**. Also, all QP examples for ARM Cortex-M comply with the CMSIS naming convention for all exception handlers and IRQ handlers. + + +------------------------------------------------------------------------------ +@section arm-cm_qk-fpu Using the FPU in the QK Port (Cortex-M4F/M7) +If you have the Cortex-M4F CPU and your application uses the hardware FPU, it should be enabled because it is turned off out of reset. The CMSIS-compliant way of turning the FPU on looks as follows: + +@verbatim + SCB->CPACR |= (0xFU << 20); +@endverbatim + +@note +The FPU must be enabled before executing any floating point instruction. An attempt to execute a floating point instruction will fault if the FPU is not enabled. + +Depending on wheter or not you use the FPU in your ISRs, the “Vanilla” QP port allows you to configure the FPU in various ways, as described in the following sub-sections. + + +
+@subsection arm-cm_qk-fpu_1thread FPU used in ONE thread only and not in any ISR +If you use the FPU only at a single thread (active object) and none of your ISRs use the FPU, you can setup the FPU not to use the automatic state preservation and not to use the lazy stacking feature as follows: + +@verbatim + FPU->FPCCR &= ~((1U << FPU_FPCCR_ASPEN_Pos) | (1U << FPU_FPCCR_LSPEN_Pos)); +@endverbatim + +With this setting, the Cortex-M4F processor handles the ISRs in the exact-same way as Cortex-M0-M3, that is, only the standard interrupt frame with R0-R3,R12,LR,PC,xPSR is used. This scheme is the fastest and incurs no additional CPU cycles to save and restore the FPU registers. + +@note +This FPU setting will lead to FPU errors, if more than one thread or any of the ISRs indeed start to use the FPU + + +
+@subsection arm-cm_qk-fpu_nthreadd FPU used in more than one thread only or the ISR +If you use the FPU in more than one of the threads (active objects) or in any of your ISRs, you should setup the FPU to use the automatic state preservation and the lazy stacking feature as follows: + + FPU->FPCCR |= (1U << FPU_FPCCR_ASPEN_Pos) | (1U << FPU_FPCCR_LSPEN_Pos); + +This is actually the default setting of the hardware FPU and is recommended for the QK port, because it is safer in view of code evolution. Future changes to the application can easily introduce FPU use in multiple active objects, which would be unsafe if the FPU context was not preserved automatically. + +@note +As described in the ARM Application Note "Cortex-M4(F) Lazy Stacking and Context Switching" [@ref ARM-AN298], the FPU automatic state saving requires more stack plus additional CPU time to save the FPU registers, but only when the FPU is actually used. + + +------------------------------------------------------------------------------ +@section arm-cm_qk-idle QK Idle Processing Customization in QK_onIdle() +QK can very easily detect the situation when no events are available, in which case QK calls the `QK_onIdle()` callback. You can use `QK_onIdle()` to suspended the CPU to save power, if your CPU supports such a power-saving mode. Please note that `QK_onIdle()` is called repetitively from an endless loop, which is the QK idle-thread. The `QK_onIdle()` callback is called with interrupts **enabled** (which is in contrast to the @ref arm-cm_qv-idle "QV_onIdle() callback" used in the non-preemptive configuration). + +The THUMB-2 instruction set used exclusively in ARM Cortex-M provides a special instruction WFI (Wait-for-Interrupt) for stopping the CPU clock, as described in the “ARMv7-M Reference Manual” [ARM 06a]. The following listing shows the `QK_onIdle()` callback that puts ARM Cortex-M into a low-power mode. + +@anchor arm-cm_qk_onidle-code +Listing: QV_onIdle() for ARM Cortex-M +@code{c} + + [1] void QK_onIdle(void) { + ~ ~ ~ + [2] #if defined 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-M3 MCU. + */ + [3] __WFI(); /* Wait-For-Interrupt */ + #endif + } +@endcode + +
    +
  • 1 +The preemptive QK kernel calls the `QK_onIdle()` callback with interrupts enabled. +
  • +
  • 2 +The sleep mode is used only in the non-debug configuration, because sleep mode stops CPU clock, which can interfere with debugging. +
  • +
  • 3 +The `WFI` instruction is generated using inline assembly. +
  • +
+ + +------------------------------------------------------------------------------ +@section arm-cm_qk-testing Testing QK Preemption Scenarios +The `bsp.c` file included in the examples/arm-cm/dpp_ek-tm4c123gxl/qk directory contains special instrumentation (an ISR designed for testing) for convenient testing of @ref arm-cm_qk-arm-cm-fig "various preemption scenarios in QK". + +The technique described in this section will allow you to trigger an interrupt at any machine instruction and observe the preemption it causes. The interrupt used for the testing purposes is the GPIOA interrupt (INTID == 0). The ISR for this interrupt is shown below: + +@code{c} +void GPIOPortA_IRQHandler(void) { + QK_ISR_ENTRY(); /* inform QK about entering an ISR */ + QACTIVE_POST(AO_Table, Q_NEW(QEvt, MAX_PUB_SIG), /* for testing... */ + &l_GPIOPortA_IRQHandler); + QK_ISR_EXIT(); /* inform QK about exiting an ISR */ +} +@endcode + + +`GPIOPortA_IRQHandler()`, as all interrupts in the system, invokes the macros QK_ISR_ENTRY() and QK_ISR_EXIT(), and also posts an event to the Table active object, which has higher priority than any of the Philo active object. + +The figure below hows how to trigger the GPIOA interrupt from the CCS debugger. From the debugger you need to first open the register window and select NVIC registers from the drop-down list (see right-bottom corner of Figure 6).You scroll to the NVIC_SW_TRIG register, which denotes the Software Trigger Interrupt Register in the NVIC. This write-only register is useful for software-triggering various interrupts by writing various masks to it. To trigger the GPIOA interrupt you need to write 0x00 to the NVIC_SW_TRIG by clicking on this field, entering the value, and pressing the Enter key. + +@image html arm-cm_qk_test-ccs.png "Triggering the GPIOA interrupt from Eclipse debugger" + +The general testing strategy is to break into the application at an interesting place for preemption, set breakpoints to verify which path through the code is taken, and trigger the GPIO interrupt. Next, you need to free-run the code (don’t use single stepping) so that the NVIC can perform prioritization. You observe the order in which the breakpoints are hit. This procedure will become clearer after a few examples. + + +
+@subsection arm-cm_qk-test-isr Interrupt Nesting Test +The first interesting test is verifying the correct tail-chaining to the PendSV exception after the interrupt nesting occurs, as shown in @ref arm-cm_qk-synch-fig "Synchronous Preemption in QK". To test this scenario, you place a breakpoint inside the `GPIOPortA_IRQHandler()` and also inside the `SysTick_Handler()` ISR. When the breakpoint is hit, you remove the original breakpoint and place another breakpoint at the very next machine instruction (use the Disassembly window) and also another breakpoint on the first instruction of the `QK_PendSV` handler. Next you trigger the PIOINT0 interrupt per the instructions given in the previous section. You hit the Run button. + +The pass criteria of this test are as follows: + +1. The first breakpoint hit is the one inside the `GPIOPortA_IRQHandler()` function, which means that GPIO ISR preempted the SysTick ISR. + +2. The second breakpoint hit is the one in the `SysTick_Handler()`, which means that the SysTick ISR continues after the PIOINT0 ISR completes. + +3. The last breakpoint hit is the one in `PendSV_Handler()` exception handler, which means that the PendSV exception is tail-chained only after all interrupts are processed. You need to remove all breakpoints before proceeding to the next test. + + +
+@subsection arm-cm_qk-test-thread Thread Preemption Test +The next interesting test is verifying that threads can preempt each other. You set a breakpoint anywhere in the Philosopher state machine code. You run the application until the breakpoint is hit. After this happens, you remove the original breakpoint and place another breakpoint at the very next machine instruction (use the Disassembly window). You also place a breakpoint inside the `GPIOPortA_IRQHandler()` interrupt handler and on the first instruction of the `PendSV_Handler()` handler. Next you trigger the GPIOA interrupt per the instructions given in the previous section. You hit the Run button. + +The pass criteria of this test are as follows: + +1. The first breakpoint hit is the one inside the `GPIOPortA_IRQHandler()` function, which means that GPIO ISR preempted the Philo thread. + +2. The second breakpoint hit is the one in `PendSV_Handler()` exception handler, which means that the PendSV exception is activated before the control returns to the preempted Philosopher thread. + +3. After hitting the breakpoint in `PendSV_Handler()`, you single step into `QK_activate_()`. You verify that the activator invokes a state handler from the Table state machine. This proves that the Table thread preempts the Philo thread. + +4. After this you free-run the application and verify that the next breakpoint hit is the one inside the Philosopher state machine. This validates that the preempted thread continues executing only after the preempting thread (the Table state machine) completes. + + +
+@subsection arm-cm_qk-test-fpu Testing the FPU (Cortex-M4F/M7) +In order to test the FPU, the Board Support Package (BSP) for the Cortex-M4F EK-TM4C123GXL board uses the FPU in the following contexts: + +- In the idle loop via the `QK_onIdle()` callback (QP priority 0) + +- In the thread level via the `BSP_random()` function called from all five Philo active objects (QP priorities 1-5). + +- In the thread level via the `BSP_displayPhiloStat()` function called from the Table active object (QP priorty 6) + +- In the ISR level via the `SysTick_Handler()` ISR (priority above all threads) + +To test the FPU, you could step through the code in the debugger and verify that the expected FPU-type exception stack frame is used and that the FPU registers are saved and restored by the “lazy stacking feature” when the FPU is actually used. + +Next, you can selectively comment out the FPU code at various levels of priority and verify that the QK context switching works as expected with both types of exception stak frames (with and without the FPU). + + +
+@subsection arm-cm_qk-test-other Other Tests +Other interesting tests that you can perform include changing priority of the GPIOA interrupt to be lower than the priority of SysTick to verify that the PendSV is still activated only after all interrupts complete. + +In yet another test you could post an event to Philosopher active object rather than Table active object from the `GPIOPortA_IRQHandler()` function to verify that the QK activator will not preempt the Philosopher thread by itself. Rather the next event will be queued and the Philosopher thread will process the queued event only after completing the current event processing. + + +@next{arm-cm_qxk} +*/ +/*##########################################################################*/ +/*! @page arm-cm_qxk Preemptive "Dual-Mode" QXK Kernel + +@tableofcontents + +

This section describes how to use QP on ARM Cortex-M with the preemptive, blocking QXK real-time kernel, which combines the lightweight non-blocking ("basic") threads of QK with traditional blocking ("extended") threads found in conventional RTOS kernels. QXK provides also typical services of a conventional blocking RTOS, such as blocking time-delays and semaphores. +

+ +QXK has been designed specifically for mixing event-driven active objects with traditional blocking code, such as commercial middleware (TCP/IP stacks, UDP stacks, embedded file systems, etc.) or legacy software. + +@note +If you are currently using QP on top of a conventional 3rd-party RTOS, consider moving your application to the QXK kernel. QXK provides traditional blocking threads and services, such as semaphores, so you can use traditional blocking code. But QXK is much more tightly integrated with QP than any third-party RTOS, which saves you code space and additional licensing fees. + + +------------------------------------------------------------------------------ +@section arm-cm_qxk-synopsis Synopsis of the QXK Port on ARM Cortex-M + +

The preemptive, blocking QXK kernel works on ARM Cortex-M as follows: +

+ +1. The ARM Cortex-M processor executes application code in the Privileged Thread mode, which is exactly the mode entered out of reset. The exceptions (including all interrupts) are always processed in the Privileged Handler mode. + +2. QXK uses the Process Stack Pointer (PSP) for handling threads (both active object threads and "naked" blocking-threads) and the Main Stack Pointer (MSP) for handling interrupts and exceptions (such as the PendSV exception). + +3. The QXK port uses the @c PendSV (exception number 14) to perform thread-to-thread context switch. The application code (your code) must initialize the Interrupt Vector Table with the addresses of the @c PendSV_Handler exception handler. Additionally, the interrupt table must be initialized with the @c SysTick_Handler exception handler. +@n +> NOTE: QXK uses only the CMSIS-compliant exception and interrupt names, such as @c PendSV_Handler, @c SysTick_Handler, etc.@n +> NOTE: The QXK port specifically does **not** use the SVC exception (Supervisor Call). This makes the QXK ports compatible with various "hypervisors" (such as mbed uVisor or Nordic SoftDevice), which use the SVC exception. + +4. The application code (your code) must call the function QXK_init() to set up the stack of the *idle thread* of the QXK kernel before calling QF_run(). +@n +> NOTE: Right before starting multithreading, the QXK kernel re-uses the main C-stack as the Main Stack (for interrupts and exceptions), and assigns the provided idle stack to the internal idle thread. + +5. You need to explicitly **assign priorities of the all interrupts** used in your application, as described in @ref arm-cm_int. + +6. It is strongly recommended that you do not assign the lowest NVIC priority (0xFF) to any interrupt in your application, because it is used by the PendSV handler. For example, with 3 bits of priority implemented in the NVIC, this leaves the following 7 priority levels for you (listed from the lowest to the highest urgency): 0xC0, 0xA0, 0x80, 0x60, 0x40, 0x20, and 0x00 (the highest priority). +@n +> NOTE: The prioritization of interrupts, including the PendSV exception, is performed entirely by the NVIC. Because the PendSV has the lowest priority in the system, the NVIC tail-chains to the PendSV exception only after exiting the last nested interrupt. + +7. ISRs are written as regular C functions, but they need to call QXK_ISR_ENTRY() before using any QF services, and they must call QXK_ISR_EXIT() after using any of the QF services. + +8. ARM Cortex-M enters interrupt context without disabling interrupts. Generally, you should not disable interrupts inside your ISRs. In particular, the QF services (such as QF_PUBLISH(), QF_TICK_X(), and QACTIVE_POST()) should be called with interrupts enabled, to avoid nesting of critical sections. +@n +> NOTE: If you don't wish an interrupt to be preempted by another interrupt, you can always prioritize that interrupt in the NVIC to a higher or equal level as other interrupts (use a lower numerical value of priority). + +9. In compliance with the ARM Application Procedure Call Standard (AAPCS), the QXK kernel always preserves the 8-byte alignment of the stack. + + +
+@subsection arm-com_qxk_vfp Using the VFP +If you have the Cortex-M4F/M7 CPU and your application is compiled with the VFP present, the QXK kernel will enable the VFP along with the VFP automatic state preservation and lazy stacking features. This will case any thread that uses the VFP, to automatically use the Cortex-M exception stack frame with VFP (with 18 VFP registers S0-S15 plus VFP status and stack "aligner"). Also, the QXK context switch will add to this the rest of the VFP registers (S16-S31). + +@note +A QXK thread (both an active object thread and a "naked" blocking thread) that uses the VFP will use 136 more bytes of its private stack space than a thread that does not use the VFP. Also, a thread that uses the VFP will take longer to perform the context switch. + +*/ diff --git a/doxygen/ports_native.dox b/doxygen/ports_native.dox index 1dc28236..9c5916ab 100644 --- a/doxygen/ports_native.dox +++ b/doxygen/ports_native.dox @@ -22,60 +22,6 @@ @image html under_construction.jpg -*/ -/*##########################################################################*/ -/*! @page arm-cm ARM Cortex-M - ------------------------------------------------------------------------------- -@section arm-cm_qv Cooperative QV Kernel -The QV port to ARM Cortex-M has been described in detail in Section 3 of the Quantum Leaps Application Note: QP and ARM Cortex-M with ARM-KEIL. The Application Note focuses on the ARM-KEIL toolset, but the general principles apply to all supported toolsets, such as IAR-ARM, GNU-ARM, and TI-ARM. - - ------------------------------------------------------------------------------- -@section arm-cm_qk Preemptive Non-Blocking QK Kernel -The QK port to ARM Cortex-M has been described in detail in Section 4 of the Quantum Leaps Application Note: QP and ARM Cortex-M with ARM-KEIL. The Application Note focuses on the ARM-KEIL toolset, but the general principles apply to all supported toolsets, such as IAR-ARM, GNU-ARM, and TI-ARM. - - ------------------------------------------------------------------------------- -@section arm-cm_qxk Preemptive Blocking QXK Kernel - -The preemptive, blocking QXK kernel works on ARM Cortex-M as follows: - -1. The ARM Cortex-M processor executes application code in the Privileged Thread mode, which is exactly the mode entered out of reset. The exceptions (including all interrupts) are always processed in the Privileged Handler mode. - -2. QXK uses the Process Stack Pointer (PSP) for handling threads (both active object threads and "naked" blocking-threads) and the Main Stack Pointer (MSP) for handling interrupts and exceptions (such as the PendSV exception). - -3. The QXK port uses the @c PendSV (exception number 14) to perform thread-to-thread context switch. The application code (your code) must initialize the Interrupt Vector Table with the addresses of the @c PendSV_Handler exception handler. Additionally, the interrupt table must be initialized with the @c SysTick_Handler exception handler. -@n -> NOTE: QXK uses only the CMSIS-compliant exception and interrupt names, such as @c PendSV_Handler, @c SysTick_Handler, etc.@n -> NOTE: The QXK port specifically does **not** use the SVC exception (Supervisor Call). This makes the QXK ports compatible with various "hypervisors" (such as mbed uVisor or Nordic SoftDevice), which use the SVC exception. - -4. The application code (your code) must call the function QXK_init() to set up the stack of the *idle thread* of the QXK kernel before calling QF_run(). -@n -> NOTE: Right before starting multitasking, the QXK kernel re-uses the main C-stack as the Main Stack (for interrupts and exceptions), and assigns the provided idle stack to the internal idle thread. - -5. You need to explicitly **assign priorities of the all interrupts** used in your application, according to the Application Note: Setting ARM Cortex-M Interrupt Priorities in QP 5.1 and Higher. - -6. It is strongly recommended that you do not assign the lowest NVIC priority (0xFF) to any interrupt in your application, because it is used by the PendSV handler. For example, with 3 bits of priority implemented in the NVIC, this leaves the following 7 priority levels for you (listed from the lowest to the highest urgency): 0xC0, 0xA0, 0x80, 0x60, 0x40, 0x20, and 0x00 (the highest priority). -@n -> NOTE: The prioritization of interrupts, including the PendSV exception, is performed entirely by the NVIC. Because the PendSV has the lowest priority in the system, the NVIC tail-chains to the PendSV exception only after exiting the last nested interrupt. - -7. ISRs are written as regular C functions, but they need to call QXK_ISR_ENTRY() before using any QF services, and they must call QXK_ISR_EXIT() after using any of the QF services. - -8. ARM Cortex-M enters interrupt context without disabling interrupts. Generally, you should not disable interrupts inside your ISRs. In particular, the QF services (such as QF_PUBLISH(), QF_TICK_X(), and QACTIVE_POST()) should be called with interrupts enabled, to avoid nesting of critical sections. -@n -> NOTE: If you don't wish an interrupt to be preempted by another interrupt, you can always prioritize that interrupt in the NVIC to a higher or equal level as other interrupts (use a lower numerical value of priority). - -9. In compliance with the ARM Application Procedure Call Standard (AAPCS), the QXK kernel always preserves the 8-byte alignment of the stack. - - -
-@subsection arm-com_qxk_vfp Using the VFP -If you have the Cortex-M4F/M7 CPU and your application is compiled with the VFP present, the QXK kernel will enable the VFP along with the VFP automatic state preservation and lazy stacking features. This will case any thread that uses the VFP, to automatically use the Cortex-M exception stack frame with VFP (with 18 VFP registers S0-S15 plus VFP status and stack "aligner"). Also, the QXK context switch will add to this the rest of the VFP registers (S16-S31). - -@note -A QXK thread (both an active object thread and a "naked" blocking thread) that uses the VFP will use 136 more bytes of its private stack space than a thread that does not use the VFP. Also, a thread that uses the VFP will take longer to perform the context switch. - */ /*##########################################################################*/ /*! @page arm-cr ARM Cortex-R @@ -96,7 +42,7 @@ A QXK thread (both an active object thread and a "naked" blocking thread) that u @section arm7-9_qk Preemptive QK Kernel -\includelineno ports/arm7-9/qk/iar/qk_port.s +@includelineno ports/arm7-9/qk/iar/qk_port.s @section arm7-9_qv Cooperative QV Kernel diff --git a/doxygen/struct.dox b/doxygen/struct.dox index 932d93ad..f455dfbb 100644 --- a/doxygen/struct.dox +++ b/doxygen/struct.dox @@ -18,7 +18,9 @@ The following annotated directory tree lists the top-level directories provided
  • include/ — Platform-independent QP/C API (see include)
  • -
  • source/ — Platform-independent QP/C source code (see @ref source) +
  • src/ — Platform-independent QP/C source code (see @ref src) +
  • +
  • source/ — Platform-independent QP/C source code for backwards compatibility (will be phased out in the future).
  • @@ -171,3 +173,70 @@ The QP/C framework comes with extensive support for automatic rule checking by m @next{exa} */ +/*##########################################################################*/ +/*! @dir ../include + +Platform-independent QP/C API + +@note +The QP/C include directory needs to be added to the compiler's include path in the applications using QP/C. +*/ + +/*##########################################################################*/ +/*! @dir ../src + +Platform-independent QP/C source code + +Files from this directory need to be added to the project, to build the QP/C framework from source code. + +@note +The QP/C src directory needs to be added to the compiler's include path in the applications that build QP/C framework from sources (as opposed to using QP as a pre-built library). + +*/ + +/*##########################################################################*/ +/*! @dir ../src/qf + +Platform-independent implementation of the @ref qep and @ref qf components. + +@note +Typically, files in this directory need to be added to the application build, but some QP ports might not need all the files in this directory. For example, a QP port to a 3rd-party RTOS kernel might be using a message queue of the RTOS instead of the native QP event queue, in which case the file qf_actq.c would not be needed and should be excluded from the build. + +*/ + +/*##########################################################################*/ +/*! @dir ../src/qv + +Platform-independent implementation of the @ref qv built-in kernel. + +@attention +Files in this directory need to be included in the QP application build only if the application uses the @ref qv kernel. +*/ + + +/*##########################################################################*/ +/*! @dir ../src/qk + +Platform-independent implementation of the @ref qk built-in kernel. + +@attention +Files in this directory need to be included in the QP application build only if the application uses the @ref qk kernel. +*/ + + +/*##########################################################################*/ +/*! @dir ../src/qxk + +Platform-independent implementation of the @ref qxk built-in kernel. + +@attention +Files in this directory need to be included in the QP application build only if the application uses the @ref qxk kernel. +*/ + + +/*##########################################################################*/ +/*! @dir ../src/qs + +Platform-independent implementation of the @ref qs component (software tracing). +*/ + diff --git a/examples/arm-cm/dpp_efm32-slstk3401a/qv/bsp.c b/examples/arm-cm/dpp_efm32-slstk3401a/qv/bsp.c index 578bffb5..ab4cbf53 100644 --- a/examples/arm-cm/dpp_efm32-slstk3401a/qv/bsp.c +++ b/examples/arm-cm/dpp_efm32-slstk3401a/qv/bsp.c @@ -1,7 +1,7 @@ /***************************************************************************** * Product: DPP example, EFM32-SLSTK3401A board, cooperative QV kernel -* Last Updated for Version: 5.9.0 -* Date of the Last Update: 2017-04-14 +* Last Updated for Version: 5.9.3 +* Date of the Last Update: 2017-06-30 * * Q u a n t u m L e a P s * --------------------------- @@ -414,15 +414,9 @@ uint8_t QS_onStartup(void const *arg) { QS_tickTime_ = QS_tickPeriod_; /* to start the timestamp at zero */ /* setup the QS filters... */ - QS_FILTER_ON(QS_QEP_STATE_ENTRY); - QS_FILTER_ON(QS_QEP_STATE_EXIT); - QS_FILTER_ON(QS_QEP_STATE_INIT); - QS_FILTER_ON(QS_QEP_INIT_TRAN); - QS_FILTER_ON(QS_QEP_INTERN_TRAN); - QS_FILTER_ON(QS_QEP_TRAN); - QS_FILTER_ON(QS_QEP_IGNORED); - QS_FILTER_ON(QS_QEP_DISPATCH); - QS_FILTER_ON(QS_QEP_UNHANDLED); + QS_FILTER_ON(QS_SM_RECORDS); + QS_FILTER_ON(QS_AO_RECORDS); + QS_FILTER_ON(QS_UA_RECORDS); QS_FILTER_ON(PHILO_STAT); QS_FILTER_ON(COMMAND_STAT); diff --git a/examples/arm-cm/dpp_efm32-slstk3401a/qv/gnu/Makefile b/examples/arm-cm/dpp_efm32-slstk3401a/qv/gnu/Makefile index 6593e52e..751404ca 100644 --- a/examples/arm-cm/dpp_efm32-slstk3401a/qv/gnu/Makefile +++ b/examples/arm-cm/dpp_efm32-slstk3401a/qv/gnu/Makefile @@ -1,7 +1,7 @@ ############################################################################## # Product: Makefile for DPP on EMF32-SLSTK3401A, QV kernel, GNU-ARM -# Last Updated for Version: 5.9.2 -# Date of the Last Update: 2017-06-03 +# Last Updated for Version: 5.9.3 +# Date of the Last Update: 2017-06-30 # # Q u a n t u m L e a P s # --------------------------- @@ -69,7 +69,9 @@ QP_PORT_DIR := $(QPC)/ports/arm-cm/qv/gnu VPATH = \ .. \ ../.. \ - $(QPC)/source \ + $(QPC)/src/qf \ + $(QPC)/src/qv \ + $(QPC)/src/qs \ $(QP_PORT_DIR) \ $(QPC)/3rd_party/efm32pg1b \ $(QPC)/3rd_party/efm32pg1b/gnu @@ -78,7 +80,7 @@ VPATH = \ INCLUDES = \ -I../.. \ -I$(QPC)/include \ - -I$(QPC)/source \ + -I$(QPC)/src \ -I$(QP_PORT_DIR) \ -I$(QPC)/3rd_party/CMSIS/Include \ -I$(QPC)/3rd_party/efm32pg1b diff --git a/examples/arm-cm/dpp_efm32-slstk3401a/qv/main.c b/examples/arm-cm/dpp_efm32-slstk3401a/qv/main.c index 72469f34..0c5f5045 100644 --- a/examples/arm-cm/dpp_efm32-slstk3401a/qv/main.c +++ b/examples/arm-cm/dpp_efm32-slstk3401a/qv/main.c @@ -1,7 +1,7 @@ /***************************************************************************** * Product: DPP example -* Last Updated for Version: 5.9.0 -* Date of the Last Update: 2017-03-13 +* Last Updated for Version: 5.9.3 +* Date of the Last Update: 2017-06-30 * * Q u a n t u m L e a P s * --------------------------- @@ -54,6 +54,7 @@ int main() { BSP_init(); /* initialize the Board Support Package */ /* object dictionaries... */ + QS_OBJ_DICTIONARY(&l_ticker0); QS_OBJ_DICTIONARY(smlPoolSto); QS_OBJ_DICTIONARY(tableQueueSto); QS_OBJ_DICTIONARY(philoQueueSto[0]); diff --git a/examples/arm-cm/dpp_efm32-slstk3401a/qxk/gnu/Makefile b/examples/arm-cm/dpp_efm32-slstk3401a/qxk/gnu/Makefile index b42d11d8..89374ab8 100644 --- a/examples/arm-cm/dpp_efm32-slstk3401a/qxk/gnu/Makefile +++ b/examples/arm-cm/dpp_efm32-slstk3401a/qxk/gnu/Makefile @@ -1,7 +1,7 @@ ############################################################################## # Product: Makefile for DPP on EMF32-SLSTK3401A, QXK kernel, GNU-ARM -# Last Updated for Version: 5.9.2 -# Date of the Last Update: 2017-06-03 +# Last Updated for Version: 5.9.4 +# Date of the Last Update: 2017-07-05 # # Q u a n t u m L e a P s # --------------------------- @@ -69,7 +69,9 @@ QP_PORT_DIR := $(QPC)/ports/arm-cm/qxk/gnu VPATH = \ .. \ ../.. \ - $(QPC)/source \ + $(QPC)/src/qf \ + $(QPC)/src/qxk \ + $(QPC)/src/qs \ $(QP_PORT_DIR) \ $(QPC)/3rd_party/efm32pg1b \ $(QPC)/3rd_party/efm32pg1b/gnu @@ -78,7 +80,7 @@ VPATH = \ INCLUDES = \ -I../.. \ -I$(QPC)/include \ - -I$(QPC)/source \ + -I$(QPC)/src \ -I$(QP_PORT_DIR) \ -I$(QPC)/3rd_party/CMSIS/Include \ -I$(QPC)/3rd_party/efm32pg1b diff --git a/examples/arm-cm/dpp_efm32-slstk3401a/qxk/iar/dpp-qxk.ewp b/examples/arm-cm/dpp_efm32-slstk3401a/qxk/iar/dpp-qxk.ewp index d33ea7a1..a3711219 100644 --- a/examples/arm-cm/dpp_efm32-slstk3401a/qxk/iar/dpp-qxk.ewp +++ b/examples/arm-cm/dpp_efm32-slstk3401a/qxk/iar/dpp-qxk.ewp @@ -32,11 +32,11 @@