Skip to content

Commit 0f0450f

Browse files
author
QL
committed
6.9.1
1 parent e06bda6 commit 0f0450f

File tree

293 files changed

+75098
-3780
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

293 files changed

+75098
-3780
lines changed

doxygen/Doxyfile

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1-
# Doxyfile 1.8.18
1+
# Doxyfile 1.8.20
22

33
#---------------------------------------------------------------------------
44
# Project related configuration options
55
#---------------------------------------------------------------------------
66
DOXYFILE_ENCODING = UTF-8
77
PROJECT_NAME = "QP/C"
8-
PROJECT_NUMBER = "6.9.0"
8+
PROJECT_NUMBER = "6.9.1"
99
PROJECT_BRIEF =
1010
PROJECT_LOGO = images/header_logo_ql.png
1111
OUTPUT_DIRECTORY =
@@ -26,6 +26,7 @@ JAVADOC_AUTOBRIEF = NO
2626
JAVADOC_BANNER = NO
2727
QT_AUTOBRIEF = YES
2828
MULTILINE_CPP_IS_BRIEF = YES
29+
PYTHON_DOCSTRING = YES
2930
INHERIT_DOCS = YES
3031
SEPARATE_MEMBER_PAGES = NO
3132
TAB_SIZE = 4
@@ -57,6 +58,7 @@ INLINE_GROUPED_CLASSES = YES
5758
INLINE_SIMPLE_STRUCTS = YES
5859
TYPEDEF_HIDES_STRUCT = YES
5960
LOOKUP_CACHE_SIZE = 0
61+
NUM_PROC_THREADS = 1
6062
#---------------------------------------------------------------------------
6163
# Build related configuration options
6264
#---------------------------------------------------------------------------

doxygen/Doxyfile-CHM

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
#---------------------------------------------------------------------------
66
DOXYFILE_ENCODING = UTF-8
77
PROJECT_NAME = "QP/C"
8-
PROJECT_NUMBER = "6.9.0"
8+
PROJECT_NUMBER = "6.9.1"
99
PROJECT_BRIEF =
1010
PROJECT_LOGO = images/header_logo_ql.png
1111
OUTPUT_DIRECTORY =

doxygen/Doxyfile-DOC

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
#---------------------------------------------------------------------------
66
DOXYFILE_ENCODING = UTF-8
77
PROJECT_NAME = "QP/C"
8-
PROJECT_NUMBER = "6.9.0"
8+
PROJECT_NUMBER = "6.9.1"
99
PROJECT_BRIEF =
1010
PROJECT_LOGO = images/header_logo_ql.png
1111
OUTPUT_DIRECTORY =

doxygen/api.dox

Lines changed: 3 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -113,13 +113,8 @@ QS is a software tracing system that enables developers to monitor live event-dr
113113

114114

115115
@subsection api_qs_filter QS Filters
116-
- QS_FILTER_ON()
117-
- QS_FILTER_OFF()
118-
- QS_FILTER_SM_OBJ()
119-
- QS_FILTER_AO_OBJ()
120-
- QS_FILTER_MP_OBJ()
121-
- QS_FILTER_EQ_OBJ()
122-
- QS_FILTER_TE_OBJ()
116+
- QS_GLB_FILTER()
117+
- QS_LOC_FILTER()
123118
- QS_FILTER_AP_OBJ()
124119

125120

@@ -132,7 +127,7 @@ QS is a software tracing system that enables developers to monitor live event-dr
132127

133128
@subsection api_qs_user QS Application-Specific Records
134129
- ::QS_USER enumeration
135-
- QS_BEGIN()
130+
- QS_BEGIN_ID()
136131
- QS_END()
137132
- QS_U8() / QS_I8()
138133
- QS_U16() / QS_I16()
@@ -142,7 +137,6 @@ QS is a software tracing system that enables developers to monitor live event-dr
142137
- QS_MEM()
143138

144139

145-
146140
@section api_qv QV (Cooperative Kernel)
147141
QV is a simple **cooperative** kernel (previously called "Vanilla" kernel). This kernel executes active objects one at a time, with priority-based scheduling performed before 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.
148142

@@ -160,31 +154,25 @@ Given the simplicity, portability, and low-resource consumption, the QV schedule
160154
- <a href="qv_8c.html#a779a1bc9482e2d489dc87751cd100fdb"><b>QF_run()</b></a>
161155
- QV_onIdle()
162156
- QV_CPU_SLEEP()
163-
- QV_getVersion()
164-
165157

166158

167159
@section api_qk QK (Preemptive Run-to-Completion Kernel)
168160
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.
169161

170162

171-
172163
@subsection api_qk_ctrl Kernel Initialization and Control
173164
- QK_INIT()
174165
- <a href="qk_8c.html#a779a1bc9482e2d489dc87751cd100fdb"><b>QF_run()</b></a>
175166
- QK_onIdle()
176167
- QK_schedLock()
177168
- QK_schedUnlock()
178-
- QK_getVersion()
179-
180169

181170

182171
@subsection api_qk_isr Interrupt Management
183172
- QK_ISR_ENTRY()
184173
- QK_ISR_EXIT()
185174

186175

187-
188176
@section api_qxk QXK (Preemptive Dual-Mode RTOS Kernel)
189177
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.
190178

@@ -196,16 +184,13 @@ QXK is a small, preemptive, priority-based, dual-mode **blocking** kernel that e
196184
- QXK_onIdle()
197185
- QXK_schedLock()
198186
- QXK_schedUnlock()
199-
- QXK_getVersion()
200-
201187

202188

203189
@subsection api_qxk_isr Interrupt Management
204190
- QXK_ISR_ENTRY()
205191
- QXK_ISR_EXIT()
206192

207193

208-
209194
@subsection api_qxk_xthr Extended Thread Management
210195
- ::QXThread class
211196
- QXThread_ctor()
@@ -217,7 +202,6 @@ QXK is a small, preemptive, priority-based, dual-mode **blocking** kernel that e
217202
- QXThread_queueGet()
218203

219204

220-
221205
@subsection api_qxk_sema Semaphores
222206
- ::QXSemaphore class (Semaphore Control Block)
223207
- QXSemaphore_init()
@@ -226,7 +210,6 @@ QXK is a small, preemptive, priority-based, dual-mode **blocking** kernel that e
226210
- QXSemaphore_signal()
227211

228212

229-
230213
@subsection api_qxk_mutex Mutexes
231214
- ::QXMutex class (Mutex Control Block)
232215
- QXMutex_init()
@@ -235,7 +218,6 @@ QXK is a small, preemptive, priority-based, dual-mode **blocking** kernel that e
235218
- QXMutex_unlock()
236219

237220

238-
239221
@subsection api_qxk_queue Message Queues
240222
- QXTHREAD_POST_X() - posting messages to blocking threads
241223
- QACTIVE_POST_X() - posting events to Active Objects

doxygen/exa_rtos.dox

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,7 @@ The QP/C examples for FreeRTOS are as follows:
8484
- @subpage freertos_dpp_ek-tm4c123gxl (Cortex-M4F) <a class="preview board" href="bd_EK-TM4C123GXL.jpg" title="EK-TM4C123GXL"></a><br>(ARM-KEIL, GNU-ARM and IAR EWARM toolchains)
8585
- @subpage freertos_dpp_stm32f746g-disco (Cortex-M7) <a class="preview board" href="bd_STM32F746G-Disco.jpg" title="STM32F746G-Discovery"></a><br>(ARM-KEIL, GNU-ARM and IAR EWARM toolchains)
8686
- @subpage freertos_dpp_nucleo-h743zi (Cortex-M7) <a class="preview board" href="bd_NUCLEO-H743ZI.jpg" title="NUCLEO-H743ZI"></a><br>(ARM-KEIL, GNU-ARM and IAR EWARM toolchains)
87+
- @subpage freertos_start-stop_nucleo-h743zi (Cortex-M7) <a class="preview board" href="bd_NUCLEO-H743ZI.jpg" title="NUCLEO-H743ZI"></a><br>(ARM-KEIL, GNU-ARM and IAR EWARM toolchains)
8788

8889
@note
8990
You can hover the mouse cursor over the <span class="board"></span>&nbsp;&nbsp; icon in the list below to see the picture of the board.

doxygen/history.dox

Lines changed: 79 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,83 @@
11
/**
22
@page history Revision History
33

4+
@section qpc_6_9_1 Version 6.9.1, 2020-09-28
5+
The main purpose of this release is a redesign of the [<b>QS Local Filter</b>](https://www.state-machine.com/qtools/qs.html#qs_local) (see also [feature request #127](https://sourceforge.net/p/qpc/feature-requests/127)). This new design supports filtering on __multiple__ active objects (as well as other objects in the Target memory), as opposed to filtering just one such object at a time. The main use case for this redesign of QS Local Filter is an application, where some active objects are very "noisy", and would overwhelm your trace. The new QS Local Filter allows you to selectively silence the "noisy" active objects and let all the others through.
6+
7+
The new QS Local Filter is based on "QS-IDs" associated with various objects in the Target memory. The QS-IDs are small integer numbers, such as the unique priorities assigned to QP Active Objects, but there are more such QS-IDs, which you can assign to various other objects through the macro QS_BEGIN_ID(). Then, you can setup the QS Local Filter to trace only a specific QS-IDs or whole groups of QS-IDs by means of the macro QS_LOC_FILTER() or remotely via the QS-RX channel.
8+
9+
10+
__Source code changes:__
11+
12+
The redesign of the QS Local Filter impacts the QS trace instrumentation in QP/C: both the [<b>pre-defined QS trace records</b>](https://www.state-machine.com/qtools/qs.html#qs_pre) and the [<b>application-specific trace records</b>](https://www.state-machine.com/qtools/qs.html#qs_app). The changes to the pre-defined records are confided to the QP/C source code and are transparent to the application developers. However, the changes to the application-specific trace records require adjusting existing applications as follows:
13+
14+
- use the new macro QS_LOC_FILTER() to set/clear the QS Local Filter
15+
- use the new macro QS_BEGIN_ID() to define [<b>application-specific trace records</b>](https://www.state-machine.com/qtools/qs.html#qs_app).
16+
17+
18+
@note
19+
The macro QS_BEGIN_ID() assigns the specified QS-ID number to the app-specific record, which can be subsequently filtered by the new QS Local Filter. The old macro QS_BEGIN(), with the old Local Filter interface, is still available, but is @ref deprecated "deprecated" and not recommended.
20+
21+
22+
The following macros are __deprecated__:
23+
24+
- macro QS_FILTER_SM_OBJ() does nothing in QP/C 6.9.1
25+
- macro QS_FILTER_AO_OBJ() does nothing in QP/C 6.9.1
26+
- macro QS_FILTER_MP_OBJ() does nothing in QP/C 6.9.1
27+
- macro QS_FILTER_EQ_OBJ() does nothing in QP/C 6.9.1
28+
- macro QS_FILTER_TE_OBJ() does nothing in QP/C 6.9.1
29+
- macro QS_FILTER_AP_OBJ() still works for QS_BEGIN()
30+
- macro QS_FILTER_ON() still works, but uses QS_GLB_FILTER() internally
31+
- macro QS_FILTER_OFF() still works, but uses QS_GLB_FILTER() internally
32+
- macro QS_BEGIN() still works, but uses the old "AP-OBJ" pointer
33+
34+
35+
The following APIs have been __changed__:
36+
37+
- QHSM_INIT() now takes extra `qs_id` parameter
38+
- QHSM_DISPATCH() now takes extra `qs_id` parameter
39+
- QMPool_get() now takes extra `qs_id` parameter
40+
- QMPool_put() now takes extra `qs_id` parameter
41+
- QEQueue_post() now takes extra `qs_id` parameter
42+
- QEQueue_postLIFO() now takes extra `qs_id` parameter
43+
- QEQueue_get() now takes extra `qs_id` parameter
44+
45+
@note
46+
The API changes are __not backwards-compatible__ and require adjusting existing QP/C applications.
47+
48+
49+
Additionally, this release introduces the new pre-defined QS record #QS_QF_NEW_ATTEMPT, which is generated when Q_NEW_X() fails to allocate a dynamic event. Also, this release __reverses the order__ of the pre-defined QS records #QS_QF_NEW and #QS_QF_MPOOL_GET. This was necessary if the dynamic allocation is allowed to fail, because only _after_ attempting to allocate a memory block, the QF_newX_() function can generate either #QS_QF_NEW or #QS_QF_NEW_ATTEMPT.
50+
51+
@note
52+
The reversal of #QS_QF_NEW and #QS_QF_MPOOL_GET trace records has implications for the existing [<b>QUTest test scripts</b>](https://www.state-machine.com/qtools/qutest_script.html), where the order of expectations for "QF-New" and "MP-Get" needs to be reversed as well.
53+
54+
55+
Additionally, this release modifies the @ref qxk "QXK" source code, so that the `QActive.prio` attribute is the fixed priority assigned in QActive_start(), while `QActive.dynPrio` is the "dynamic" priority that can be changed when a @ref qxk_extended "QXK extended thread" acquires a @ref ::QXMutex "mutex".
56+
57+
58+
__Updated Ports:__
59+
60+
- all ARM Cortex-M ports (added workaround for the [<b>ARM Erratum 838869</b>](https://www.state-machine.com/doc/Cortex-M4_Software_Developers_Errata_Notice_v3.pdf))
61+
- all QK ports (because of the changed QMPool_get() / QMPool_put() interface)
62+
- all QXK ports (because of the changed QMPool_get() / QMPool_put() interface)
63+
- embOS port (because of the changed QMPool_get() / QMPool_put() interface)
64+
- FreeRTOS port (because of the changed QMPool_get() / QMPool_put() interface)
65+
- ThreadX port (because of the changed QMPool_get() / QMPool_put() interface)
66+
- uC/OS-II port (because of the changed QMPool_get() / QMPool_put() interface)
67+
- posix, posix-qv (because of the changed QMPool_get() / QMPool_put() interface)
68+
- win32, win32-qv (because of the changed QMPool_get() / QMPool_put() interface)
69+
70+
71+
__Feature Requests:__
72+
73+
- [feature#181 "Use of QS_U64()) on 32 bit machine"](https://sourceforge.net/p/qpc/feature-requests/181)
74+
75+
__Bug Fixes:__
76+
77+
- [bug#279 "Confusing documentation of QF_newX_()"](https://sourceforge.net/p/qpc/bugs/279)
78+
- [bug#280 "QXK_onContextSw() not called at the end of QXK_activate_()"](https://sourceforge.net/p/qpc/bugs/280)
79+
80+
481
@section qpc_6_9_0 Version 6.9.0, 2020-08-21
582
The main purpose of this release is to adjust the QP/C RTEF to the changes and improvements introduced in [QTools 6.9.0](https://www.state-machine.com/qtools/history.html). Specifically, QP/C now includes examples for the new [QView Visualization &amp; Monitoring](https://www.state-machine.com/qtools/qview.html) as well as adjustments for the new version of [QUTest Unit Testing](https://www.state-machine.com/qtools/qutest.html).
683

@@ -36,7 +113,7 @@ The #QS_QF_RUN record is now generated in [QUTest unit testing](https://www.stat
36113
+ ARM Cortex-M examples for STM32 NUCLEO-L053RE (`qpc\examples\arm-cm\dpp_nucleo-l053r8`) and NUCLEO-L152RE (`qpc\examples\arm-cm\dpp_nucleo-l152re`) have been modified to support bi-directional QSPY communication. These examples now include the QView demos.
37114
+ Added examples of new [Sequence Diagram Generation](https://www.state-machine.com/qtools/html/qspy_seq.html) in QSPY 6.9.0
38115

39-
+ The example projects for MSP430 now contain the `ccs-ti` and `ccs-gnu` directories, for the TI-MSP430 and GNU-MSP430 toolchains, respectively.
116+
+ The example projects for MSP430 now contain the `ccs-ti` and `ccs-gnu` directories, for the TI-MSP430 and GNU-MSP430 toolchains, respectively.
40117

41118

42119
__Bug Fixes:__
@@ -661,7 +738,7 @@ permits nesting of critical sections, which was requested by customers.
661738

662739
Additionally, this release changes the selective interrupt disabling for
663740
ARM Cortex-M3/4/7 (with the BASEPRI register) to address the hardware problem
664-
on ARM Cortex-M7 core r0p1 (ARM-EPM-064408, errata 837070). The QP ports to
741+
on ARM Cortex-M7 core r0p1 ([SDEN-1068427, erratum 837070](https://www.state-machine.com/doc/Cortex-M7_Software_Developers_Errata_Notice_v8.pdf)). The QP ports to
665742
ARM Cortex-M3/4/7 now implement the workaround recommended by ARM, which is
666743
to surround MSR BASEPRI with the "CPSID i"/"CPSIE i" pair. This workaround
667744
works also for Cortex-M3/M4 cores.

doxygen/macros.h

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -118,9 +118,10 @@
118118

119119
/*! Platform-dependent macro defining the event pool initialization */
120120
/**
121-
* @note This is a specific implementation for the QK-port of QF.
122-
* In other QF ports you need to define the macro appropriately for
123-
* the underlying kernel/OS you're using.
121+
* @note
122+
* This is an example implementation based on the native ::QMPool class.
123+
* In other QF ports, the port might be using a memory pool from the
124+
* underlying kernel/OS.
124125
*/
125126
#define QF_EPOOL_INIT_(p_, poolSto_, poolSize_, evtSize_) \
126127
(QMPool_init(&(p_), (poolSto_), (poolSize_), (QMPoolSize)(evtSize_)))
@@ -137,20 +138,24 @@
137138
/*! Platform-dependent macro defining how QF should obtain an event
138139
* @a e_ from the event pool @a p_ with the free margin @a m_. */
139140
/**
140-
* @note This is a specific implementation for the QK-port of QF.
141-
* In other QF ports you need to define the macro appropriately for
142-
* the underlying kernel/OS you're using.
141+
* @note
142+
* This is an example implementation based on the native ::QMPool class.
143+
* In other QF ports, the port might be using a memory pool from the
144+
* underlying kernel/OS.
143145
*/
144-
#define QF_EPOOL_GET_(p_, e_, m_) ((e_) = (QEvt *)QMPool_get(&(p_), (m_)))
146+
#define QF_EPOOL_GET_(p_, e_, m_, qs_id_) \
147+
((e_) = (QEvt *)QMPool_get(&(p_), (m_), (qs_id_)))
145148

146149
/*! Platform-dependent macro defining how QF should return an event
147150
* @a e_ to the event pool @a p_ */
148151
/**
149-
* @note This is a specific implementation for the QK-port of QF.
150-
* In other QF ports you need to define the macro appropriately for
151-
* the underlying kernel/OS you're using.
152+
* @note
153+
* This is an example implementation based on the native ::QMPool class.
154+
* In other QF ports, the port might be using a memory pool from the
155+
* underlying kernel/OS.
152156
*/
153-
#define QF_EPOOL_PUT_(p_, e_) (QMPool_put(&(p_), (e_)))
157+
#define QF_EPOOL_PUT_(p_, e_, qs_id_) \
158+
(QMPool_put(&(p_), (e_), (qs_id_)))
154159

155160
/*! Macro defined only for the internal QP implementation. It should
156161
* be not defined for the application-level code

0 commit comments

Comments
 (0)