Skip to content

Commit 0726fd7

Browse files
committed
8.0.5
1 parent 6cbb42c commit 0726fd7

File tree

14 files changed

+119
-85
lines changed

14 files changed

+119
-85
lines changed

LICENSE

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
QP/C Real-Time Event Framework (RTEF)
2+
3+
Copyright (C) 2005-2025 Quantum Leaps, LLC. All rights reserved.
4+
5+
Q u a n t u m L e a P s
6+
------------------------
7+
Modern Embedded Software
8+
9+
SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-QL-commercial
10+
11+
This software is dual-licensed under the terms of the open-source GNU
12+
General Public License (GPLv3) or under the terms of one of the closed-
13+
source Quantum Leaps commercial licenses.
14+
15+
Redistributions in source code must retain this top-level comment block.
16+
Plagiarizing this software to sidestep the license obligations is illegal.
17+
18+
NOTE:
19+
The GPL does NOT permit the incorporation of this code into proprietary
20+
programs. Please contact Quantum Leaps for commercial licensing options,
21+
which expressly supersede the GPL and are designed explicitly for
22+
closed-source distribution.
23+
24+
Quantum Leaps contact information:
25+
<www.state-machine.com/licensing>
26+

examples

Submodule examples updated 37 files

include/qp.h

Lines changed: 12 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,10 @@
3030
#define QP_H_
3131

3232
//============================================================================
33-
#define QP_VERSION_STR "8.0.4"
34-
#define QP_VERSION 804U
35-
// <VER>=804 <DATE>=250611
36-
#define QP_RELEASE 0x6A9FC8ABU
33+
#define QP_VERSION_STR "8.0.5"
34+
#define QP_VERSION 805U
35+
// <VER>=805 <DATE>=250811
36+
#define QP_RELEASE 0x6A81442A
3737

3838
//============================================================================
3939
// default configuration settings
@@ -182,28 +182,25 @@ typedef struct {
182182
union QAsmAttr temp; //!< @protected @memberof QAsm
183183
} QAsm;
184184

185-
// All possible values returned from state/action handlers
185+
// All possible values returned from state/action handlers...
186186
// NOTE: The ordering is important for algorithmic correctness.
187+
188+
// unhandled and needs to "bubble up"
187189
#define Q_RET_SUPER ((QState)0U)
188190
#define Q_RET_UNHANDLED ((QState)1U)
189191

190-
// handled and do not need to "bubble up"
192+
// handled and does not need to "bubble up"
191193
#define Q_RET_HANDLED ((QState)2U)
192194
#define Q_RET_IGNORED ((QState)3U)
193195

194-
// entry/exit
196+
// entry/exit/initial
195197
#define Q_RET_ENTRY ((QState)4U)
196198
#define Q_RET_EXIT ((QState)5U)
199+
#define Q_RET_TRAN_INIT ((QState)6U)
197200

198-
// no side effects
199-
#define Q_RET_NULL ((QState)6U)
200-
201-
// transitions need to execute transition-action table in ::QMsm
201+
// regular tran./tran.-to-history
202202
#define Q_RET_TRAN ((QState)7U)
203-
#define Q_RET_TRAN_INIT ((QState)8U)
204-
205-
// transitions that additionally clobber me->state
206-
#define Q_RET_TRAN_HIST ((QState)9U)
203+
#define Q_RET_TRAN_HIST ((QState)8U)
207204

208205
// Reserved signals by the QP-framework.
209206
#define Q_EMPTY_SIG ((QSignal)0U)

include/qp_pkg.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@
3939
typedef struct {
4040
#if (QF_MAX_EPOOL > 0U)
4141
QF_EPOOL_TYPE_ ePool_[QF_MAX_EPOOL]; //!< @private @memberof QF_Attr
42-
uint_fast8_t maxPool_; //!< @private @memberof QF_Attr
42+
uint8_t maxPool_; //!< @private @memberof QF_Attr
4343
#else
4444
uint8_t dummy; //!< @private @memberof QF_Attr
4545
#endif // (QF_MAX_EPOOL == 0U)

ports/freertos/qf_port.c

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ static void task_function(void *pvParameters); // FreeRTOS task signature
6969
// xQUEUE.uxLength == StaticQueue_t.uxDummy4[1];
7070
//
7171
#define FREERTOS_QUEUE_GET_FREE(me_) \
72-
((me_)->osObject.uxDummy4[1] - (me_)->osObject.uxDummy4[0])
72+
((me_)->osObject.queue.uxDummy4[1] - (me_)->osObject.queue.uxDummy4[0])
7373

7474
//============================================================================
7575
void QF_init(void) {
@@ -150,7 +150,7 @@ void QActive_start(QActive * const me,
150150
(UBaseType_t)qLen, // length of the queue
151151
(UBaseType_t)sizeof(QEvtPtr), // item size
152152
(uint8_t *)qSto, // storage buffer
153-
&me->osObject); // static queue buffer
153+
&me->osObject.queue); // static queue buffer
154154
QF_CRIT_ENTRY();
155155
Q_ASSERT_INCRIT(110, me->eQueue != (QueueHandle_t)0);
156156
QF_CRIT_EXIT();
@@ -164,8 +164,8 @@ void QActive_start(QActive * const me,
164164
QS_FLUSH(); // flush the trace buffer to the host
165165

166166
// task name provided by the user in QActive_setAttr() or default name
167-
char const *taskName = (me->thread.pxDummy1 != (void *)0)
168-
? (char const *)me->thread.pxDummy1
167+
char const *taskName = (me->osObject.task.pxDummy1 != (void *)0)
168+
? (char const *)me->osObject.task.pxDummy1
169169
: (char const *)"AO";
170170

171171
// The FreeRTOS priority of the AO thread can be specified in two ways:
@@ -193,17 +193,17 @@ void QActive_start(QActive * const me,
193193
}
194194

195195
// statically create the FreeRTOS task for the AO
196-
TaskHandle_t task = xTaskCreateStatic(
196+
me->thread = xTaskCreateStatic(
197197
&task_function, // the task function
198198
taskName , // the name of the task
199199
stkSize/sizeof(portSTACK_TYPE), // stack length
200200
(void *)me, // the 'pvParameters' parameter
201201
freertos_prio, // FreeRTOS priority
202-
(StackType_t *)stkSto, // stack storage
203-
&me->thread); // task buffer
202+
(StackType_t *)stkSto, // stack storage
203+
&me->osObject.task); // task buffer
204204

205205
QF_CRIT_ENTRY();
206-
Q_ASSERT_INCRIT(120, task != (TaskHandle_t)0);
206+
Q_ASSERT_INCRIT(120, me->thread != (TaskHandle_t)0);
207207
QF_CRIT_EXIT();
208208

209209
#ifdef Q_UNSAFE
@@ -223,11 +223,11 @@ void QActive_setAttr(QActive *const me, uint32_t attr1, void const *attr2) {
223223
QF_CRIT_ENTRY();
224224
// this function must be called before QActive_start(),
225225
// which implies that me->thread.pxDummy1 must not be used yet;
226-
Q_REQUIRE_INCRIT(150, me->thread.pxDummy1 == (void *)0);
226+
Q_REQUIRE_INCRIT(150, me->osObject.task.pxDummy1 == (void *)0);
227227
switch (attr1) {
228228
case TASK_NAME_ATTR:
229229
// temporarily store the name, cast 'const' away
230-
me->thread.pxDummy1 = (void *)attr2;
230+
me->osObject.task.pxDummy1 = (void *)attr2;
231231
break;
232232
// ...
233233
default:

ports/freertos/qp_port.h

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,8 @@
3838

3939
// QActive event queue and thread types for FreeRTOS
4040
#define QACTIVE_EQUEUE_TYPE QueueHandle_t
41-
#define QACTIVE_OS_OBJ_TYPE StaticQueue_t
42-
#define QACTIVE_THREAD_TYPE StaticTask_t
41+
#define QACTIVE_OS_OBJ_TYPE OsObject
42+
#define QACTIVE_THREAD_TYPE TaskHandle_t
4343

4444
// FreeRTOS requires the "FromISR" API in QP/C
4545
#define QF_ISR_API 1
@@ -59,6 +59,11 @@
5959
#include "task.h" // FreeRTOS task management
6060
#include "queue.h" // FreeRTOS queue management
6161

62+
typedef struct {
63+
StaticQueue_t queue;
64+
StaticTask_t task;
65+
} OsObject;
66+
6267
#include "qequeue.h" // QP event queue (for deferring events)
6368
#include "qmpool.h" // QP memory pool (for event pools)
6469
#include "qp.h" // QP platform-independent public interface

qpc_8.0.4.sha1 renamed to qpc_8.0.5.sha1

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,25 @@
11
8cc1cf50aef9624decf8cd1545e9734b5c1d8191 *include/qequeue.h
22
3559dc235f4fe3f16015a26dbdcced1dba7beebc *include/qk.h
33
5fa3ee98371fd6d0c3aad09a9b121a3063143a65 *include/qmpool.h
4-
5e47d0bcfc90220162ab31c9d4732f0a9bc049cd *include/qp.h
5-
f7e678241666f5dd4533e2af3a217baea1a3a519 *include/qp_pkg.h
4+
7abdb18b633f14df58f0f2f7a4716d1d0a4e9027 *include/qp.h
5+
86b509e3719a7867bbcaa62ff0cc3dee57ecf814 *include/qp_pkg.h
66
5e8038024653d7355b6e6c01bde8f156ef675faf *include/qpc.h
7-
23ac6520b61a0b22f7d2976075bee495e3aacbf7 *include/qs.h
7+
d1667edfd10b01fe04d57aa1384107279ce27b7d *include/qs.h
88
62ef68e67df263501a19f6154718218e74927d86 *include/qs_dummy.h
9-
480276a966e505867bbf0395fb5275ea52d6ab31 *include/qs_pkg.h
9+
ce8e07b7cdb8286fdd0d276bc609566d1f149772 *include/qs_pkg.h
1010
fa866cf8f14f6c481e9f64a1cf48bcdcf7e81240 *include/qsafe.h
1111
014aad797f8b633a2bc0e2e35efd5b3e3b2eb318 *include/qstamp.h
1212
a29f98c426a0e1526f39c370bffb905cf6556830 *include/qv.h
1313
c8442376dd70f1b3eff18eca46a5d3bc7d0f56a9 *include/qxk.h
1414
5886c3a0831996cfbf7141255efb4e9f5b4d8254 *include/README.md
1515
7f54a0933a9dc2fcaca475919fa0067667ed99ed *src/qf/CMakeLists.txt
16-
678157a9a16bd44a41e3719f83979d99920710a3 *src/qf/qep_hsm.c
17-
3b12b11cb25d5bf58fa7f52ddf50b940596c17cc *src/qf/qep_msm.c
16+
aeb22a94b9ad3e5958a474456f9760a205e463bb *src/qf/qep_hsm.c
17+
917a47a6575c7c8c2747f9c4acf2094112585f41 *src/qf/qep_msm.c
1818
2616fcd5f5abe8bc94ca3ec397d34c72de5fa4e9 *src/qf/qf_act.c
1919
92b829f22c7bda19f98ba7c7fbaf6a1431e5e8ce *src/qf/qf_actq.c
2020
1fa8ef33b4645f58d146c714389f60177b1d83bf *src/qf/qf_defer.c
21-
14a0ec10ec03d1188ff167aa07de7b7cd30f7582 *src/qf/qf_dyn.c
22-
e7f8b6282917decf07b96f0b6e41133c75aab8ae *src/qf/qf_mem.c
21+
d35d5f001e68d8f8dd63e9aa8c10d58272a674fc *src/qf/qf_dyn.c
22+
c70f2ef1c892f3fb2e9a6781a98cdf0c7e96e989 *src/qf/qf_mem.c
2323
16616f6f8e3ad03333ae37b8614eeb96274dd116 *src/qf/qf_ps.c
2424
16cf334c566b1653135ef881ec3a2817ef36560b *src/qf/qf_qact.c
2525
6fa6a664678d7bdf0f8d3df6184d79537e209177 *src/qf/qf_qeq.c
@@ -28,15 +28,15 @@ e7f8b6282917decf07b96f0b6e41133c75aab8ae *src/qf/qf_mem.c
2828
878a737efe234f40dc8c9374acc351e510b4da1e *src/qk/CMakeLists.txt
2929
9306097e83a7b09a23b7c9aa43db82f4fcc8dd7f *src/qk/qk.c
3030
68c99a2991d25df7486e57edadaa955b2bda396d *src/qs/CMakeLists.txt
31-
b2f1c531dae8c8e2854c3d56371683d5cce4ebe2 *src/qs/qs.c
31+
fb9f15f6e5c714d3bbb594c42b60ae7c2d25c7c4 *src/qs/qs.c
3232
fcf5873f819d8f05d12ea119de13a34f89aa78d8 *src/qs/qs_64bit.c
3333
0560472d61afcfaf166568350b2038d4a01152ad *src/qs/qs_fp.c
3434
f3e44eaa2c9c6f61410123b97950035907f80524 *src/qs/qs_rx.c
3535
8c73b815861bf560fdd0497c30924d31a2b2219f *src/qs/qstamp.c
3636
9f1b983e0b8802390cec04f02b06e01a92ca05d2 *src/qs/qutest.c
3737
b1d2def9b8f6cde464170af7682ab0f01f4f40f6 *src/qv/CMakeLists.txt
3838
8f2c260f9844d7462b64d8a2d271ff050b27c6fa *src/qv/qv.c
39-
e7d916f568277368855ee62e09781be0e0c2fbd1 *src/qxk/qxk.c
39+
df2ddd5f32b8d108b650dda6adb200c8dd38535d *src/qxk/qxk.c
4040
e4a82244233a24905c292c1a4760498dfa09f3ba *src/qxk/qxk_mutex.c
4141
e0c7eb35f685f1d456b570218580784d18722af6 *src/qxk/qxk_sema.c
4242
321fce23618670efcc8426d3a2ba0061c7c74f4e *src/qxk/qxk_xthr.c
@@ -99,8 +99,8 @@ dec344db269481b0244d9e2a845d9a4d86cf6c06 *ports/embos/qp_port.h
9999
4efebcfb83036649c8e7c6feb5a98cda01877ae9 *ports/embos/qs_port.h
100100
4e86718c62fd78bc866ffdf855aa1e5a186916b2 *ports/embos/syscalls.c
101101
e65838e1764bd6b4eb73025be1e8116ac28247b2 *ports/freertos/CMakeLists.txt
102-
9e32d26c78a4b9f7c64ae1dfe186cdda0ef7c99c *ports/freertos/qf_port.c
103-
a50faf80400e462acd61b4cca6955d62deb87502 *ports/freertos/qp_port.h
102+
0c3778f06097da4f0458b584c2fd2ec2232b760f *ports/freertos/qf_port.c
103+
b2d541fb7bb1721b7e1225862620e63680adf24a *ports/freertos/qp_port.h
104104
4efebcfb83036649c8e7c6feb5a98cda01877ae9 *ports/freertos/qs_port.h
105105
4e86718c62fd78bc866ffdf855aa1e5a186916b2 *ports/freertos/syscalls.c
106106
a01e1f6d49ce056ac4e130d54ae4724fda2ebf32 *ports/threadx/CMakeLists.txt
@@ -162,7 +162,7 @@ c3d90fffd08d165b106292f500f0af13b7fb2d8f *ports/win32-qutest/qutest_port.c
162162
848a30efa3274ff30fb72059f926fe7963ab2321 *zephyr/CMakeLists.txt
163163
10764710e545dd4d2ce0ddf032711df7f9191937 *zephyr/Kconfig
164164
2eb2a922e18b4760a68151ebee1b6282d20b4692 *zephyr/module.yml
165-
e52e0be250a968576aeba0b894f3af01b488b984 *zephyr/qf_port.c
165+
a3b6860c93400cd3a91cd68a29cbdafbe80c2af0 *zephyr/qf_port.c
166166
109c291df50110f185adc17bcdf8becc0a79346c *zephyr/qp-zephyr.jpg
167167
05c2b569d54153d4093171ad48755a4a83266598 *zephyr/qp_port.h
168168
4efebcfb83036649c8e7c6feb5a98cda01877ae9 *zephyr/qs_port.h

sha1.bat

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
@setlocal
22

3-
set VERSION=8.0.4
3+
set VERSION=8.0.5
44

55
:: usage
66
@echo Usage: qpc_sha1 [gen]

src/qf/qep_hsm.c

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,13 +42,18 @@ Q_DEFINE_THIS_MODULE("qep_hsm")
4242
// must be >= 3
4343
#define QHSM_MAX_NEST_DEPTH_ 6
4444

45+
//! @cond INTERNAL
46+
47+
// immutable events corresponding to the reserved signals.
4548
static QEvt const l_reservedEvt_[4] = {
4649
QEVT_INITIALIZER(Q_EMPTY_SIG),
4750
QEVT_INITIALIZER(Q_ENTRY_SIG),
4851
QEVT_INITIALIZER(Q_EXIT_SIG),
4952
QEVT_INITIALIZER(Q_INIT_SIG)
5053
};
5154

55+
//! @endcond
56+
5257
//============================================================================
5358
//! @cond INTERNAL
5459

@@ -310,14 +315,15 @@ void QHsm_dispatch_(
310315
QHsm_enter_target_(me, &path[0], ip, qsId);
311316
QS_TRAN_END_(QS_QEP_TRAN, s, path[0]);
312317
}
313-
#ifdef Q_SPY
314318
else if (r == Q_RET_HANDLED) {
315319
QS_TRAN0_(QS_QEP_INTERN_TRAN, s);
316320
}
317-
else {
321+
else if (r == Q_RET_IGNORED) {
318322
QS_TRAN0_(QS_QEP_IGNORED, me->state.fun);
319323
}
320-
#endif // Q_SPY
324+
else {
325+
Q_ERROR_LOCAL(360);
326+
}
321327

322328
me->state.fun = path[0]; // change the current active state
323329
#ifndef Q_UNSAFE

0 commit comments

Comments
 (0)