|
1 | 1 | /** |
2 | 2 | @page history Revision History |
3 | 3 |
|
| 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 | + |
4 | 81 | @section qpc_6_9_0 Version 6.9.0, 2020-08-21 |
5 | 82 | 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 & 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). |
6 | 83 |
|
@@ -36,7 +113,7 @@ The #QS_QF_RUN record is now generated in [QUTest unit testing](https://www.stat |
36 | 113 | + 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. |
37 | 114 | + Added examples of new [Sequence Diagram Generation](https://www.state-machine.com/qtools/html/qspy_seq.html) in QSPY 6.9.0 |
38 | 115 |
|
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. |
40 | 117 |
|
41 | 118 |
|
42 | 119 | __Bug Fixes:__ |
@@ -661,7 +738,7 @@ permits nesting of critical sections, which was requested by customers. |
661 | 738 |
|
662 | 739 | Additionally, this release changes the selective interrupt disabling for |
663 | 740 | 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 |
665 | 742 | ARM Cortex-M3/4/7 now implement the workaround recommended by ARM, which is |
666 | 743 | to surround MSR BASEPRI with the "CPSID i"/"CPSIE i" pair. This workaround |
667 | 744 | works also for Cortex-M3/M4 cores. |
|
0 commit comments