You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: doxygen/history.dox
+9Lines changed: 9 additions & 0 deletions
Original file line number
Diff line number
Diff line change
@@ -1,6 +1,15 @@
1
1
/*! @page history Revision History
2
2
@nav{ce_qmc,license}
3
3
4
+
@section qm_5_2_3 Version 5.2.3, 2022-11-18
5
+
__Code Generation:__
6
+
- This release changes the licensing policy with respect to @ref sm_class_qmsm "QMsm-style state machines". Starting with this release, @ref ab_license "commercial license certificate" is no longer required to generate code for @ref sm_class_qmsm "QMsm-style state machines".
7
+
8
+
__Fixed Bugs:__
9
+
10
+
- [#318 QM incorrectly generates code for external files](https://sourceforge.net/p/qpc/bugs/318)
11
+
12
+
4
13
@section qm_5_2_2 Version 5.2.2, 2022-09-30
5
14
__Code Generation:__
6
15
- extended the free operation model item to also support function templates in C++
Copy file name to clipboardExpand all lines: doxygen/main.dox
+3-4Lines changed: 3 additions & 4 deletions
Original file line number
Diff line number
Diff line change
@@ -1,6 +1,8 @@
1
1
/*! @mainpage About QM™
2
2
3
-

3
+
@image html qm_3monitors.jpg
4
+
@image latex qm_3monitors.jpg
5
+
4
6
5
7
@ifnot LATEX
6
8
@remark
@@ -109,9 +111,6 @@ By default, the QM code generator assumes that the underlying QP™ framewor
109
111
110
112
However, when the underlying QP framework is licensed commercially, the Licensee receives a @ref ui_license_cert "QM License Certificate file", which can be registered with QM by means of the @ref ui_license-dlg "Code Generation License Dialog Box". After registering a commercial license, QM generates @ref ce_comment-file "top-level file comments" that reflect the commercial license terms.
111
113
112
-
@attention
113
-
Starting from version 4, QM™ requires a @ref ui_license_cert "QM license certificate" to generate the @ref ce_qmsm_strategy "QMsm state machine implementation strategy".
114
-
115
114
116
115
@section ab_help How to get help?
117
116
Please post any **technical questions** to the <a class="extern" target="_blank" href="http://sourceforge.net/p/qpc/discussion/668726">Free Support Forum</a> hosted on SourceForge.net. Posts to this forum benefit the whole community and are typically answered the same day.
Copy file name to clipboardExpand all lines: doxygen/sm.dox
+22-18Lines changed: 22 additions & 18 deletions
Original file line number
Diff line number
Diff line change
@@ -24,7 +24,9 @@ The section @ref bm_diagram describes generic operations applicable to any diagr
24
24
In QM™ a State Machine can be associated only with a @ref bm_class "class" that is a direct or indirect subclass of the @ref bm_qp_item "QP Framework" base class **QHsm**, shown at the top of the <a class="extern" target="_blank" href="http://en.wikipedia.org/wiki/Class_(computer_programming)">class diagram</a> @ref sm_super "below".
25
25
26
26
@anchor sm_super
27
-
@image html "qp_sm.gif" "State Machine Classes in QP 5.8+"
27
+
@image html qp_sm.gif
28
+
@image latex qp_sm.gif
29
+
@caption{State Machine Classes in QP 5.8+}
28
30
29
31
The <span style="background-color:#aaf;"> **QHsm** </span> base class provides the basic interface `init()` and `dispatch()` for initializing a state machine and for dispatching events to it, respectively. The specific implementations of the state machine interface in the `QHsm` base class and its subclasses, such as **QActive**, **QMsm**, and **QMActive**, determine the @ref ce_sm "state machine implementation strategy" that QM™ will apply to generate code.
30
32
@@ -37,42 +39,44 @@ The <span style="background-color:#AAF;"> **QHsm** and **QActive** </span> class
37
39
38
40
The screen shot below shows how to select the **superclass** property of your state-machine/active-object class in the @ref bm_class_prop, so that it uses the `QHsm/QActive`-Style state machine implementation strategy:
39
41
40
-
@image html sm_qhsm-style.png "Selecting QHsm/QActive-Style Superclass"
42
+
@image html sm_qhsm-style.png
43
+
@image latex sm_qhsm-style.png
44
+
@caption{Selecting QHsm/QActive-Style Superclass}
41
45
42
-
The QHsm-style state machine code is highly readable and human-maintainable, but it requires discovering the *transition-sequences* (sequences of exit/entry/initial actions) at run-time as opposed to code-generation time.
46
+
The main advantage of QHsm-style state machine implementation is that the code is **highly readable** and human-maintainable, but it requires discovering the *transition-sequences* (sequences of exit/entry/initial actions) at run-time as opposed to code-generation time. Also, the state nesting in QHsm-style state machines is limited to 5 levels of nesting.
43
47
44
48
@attention
45
49
Apart from changing the superclass property in the class Property Sheet, you also need to call the right superclass' **constructor** in the constructor of your state machine class. For direct subclasses of <span style="background-color:#AAF;"> **QActive** </span>, you need to call `QActive_ctor()` (for the QP/C and QP-nano frameworks) and `QActive::QActive()` (for the QP/C++ framework).
46
50
47
-
@image html sm_qhsm-ctor.png "Calling the QActive_ctor() in the subclass' constructor"
51
+
@image html sm_qhsm-ctor.png
52
+
@image latex sm_qhsm-ctor.png
53
+
@caption{Calling the QActive_ctor() in the subclass' constructor}
48
54
49
-
@note
50
-
You should consider `QHsm/QActive`-style state machines only when you are still interested in **manual coding** or maintaining your state machines. (But then you will be working against the strictly @ref ab_special "forward-engineering nature" of QM™)
55
+
@remark
56
+
You should consider `QHsm/QActive`-style state machines when you are still interested in **manual coding** or maintaining your state machines. (But then you will be working against the strictly @ref ab_special "forward-engineering nature" of QM™)
51
57
52
58
53
59
@subsection sm_class_qmsm QMsm/QMActive-Style State Machines
54
-
The <span style="background-color:#FAA;"> **QMsm** and **QMActive** </span> classes from the @ref sm_class "class diagram above" re-implement the state machine interface and thus provide an alternative @ref ce_qmsm_strategy that is more efficient than the @ref sm_class_qhsm "QHsm-style strategy", but requires the assistance of the QM™ tool (as an advanced "state machine compiler") to generate the complete *transition-sequences* at *code-generation* time. The resulting code is still **highly human-readable**, but is **not** suitable for manual coding or maintaining.
55
-
56
-
@note
57
-
The QMsm/QMActive base classes are __not__ provided in the QP-nano framework, and consequently the `QMsm/QMActive` state machine implementation strategy is __not__ available in QP-nano.
60
+
The <span style="background-color:#FAA;"> **QMsm** and **QMActive** </span> classes from the @ref sm_class "class diagram above" re-implement the state machine interface and thus provide an alternative @ref ce_qmsm_strategy that is more efficient than the @ref sm_class_qhsm "QHsm-style strategy", but requires the assistance of the QM™ tool (as an advanced "state machine compiler") to generate the complete *transition-sequences* at *code-generation* time. The resulting code is still **human-readable**, but is **not** suitable for manual coding or maintaining.
58
61
59
62
60
63
The screen shot below shows how to select the **superclass** property of your state-machine/active-object class in the @ref bm_class_prop, so that it uses the QMsm/QMActive-Style state machine implementation strategy:
61
64
62
-
@image html sm_qmsm-style.png "Selecting QMsm/QMActive-Style Superclass"
The lab tests indicate that the `QMsm/QMActive`-style state machines can be about twice as fast as the `QHsm`-style state machines (see the @ref sm_class_qhsm "next section" below). Additionally, the `QMsm/QMActive`-style state machines require less runtime support (smaller event processor) and use about 70% less stack space for the `dispatch()` operation than `QHsm/QActive`-style state machines.
69
+
The lab tests indicate that the `QMsm/QMActive`-style state machines can be about twice as fast as the `QHsm`-style state machines (see the @ref sm_class_qhsm "next section" below). Additionally, the `QMsm/QMActive`-style state machines require less runtime support (smaller event processor) and use about 70% less stack space for the `dispatch()` operation than `QHsm/QActive`-style state machines. Also, the state nesting in QMsm-style state machines is no longer limited (nesting levels as high as 10 levels have been tested).
65
70
66
71
@attention
67
72
Apart from changing the superclass property in the class Property Sheet, you also need to call the right superclass' **constructor** in the constructor of your state machine class. For direct subclasses of <span style="background-color:#FAA;"> **QMActive** </span>, you need to call `QMActive_ctor()` (for the QP/C framework) and `QMActive::QMActive()` (for the QP/C++ framework).
68
73
69
-
@image html sm_qmsm-ctor.png "Calling the QMActive_ctor() in the subclass' constructor"
74
+
@image html sm_qmsm-ctor.png
75
+
@image latex sm_qmsm-ctor.png
76
+
@caption{Calling the QMActive_ctor() in the subclass' constructor}
70
77
71
-
@note
72
-
The `QMsm/QMActive`-style state machines are generally recommended over the older `QHsm/QActive`-style state machines described @ref sm_class_qhsm "above". You should consider `QHsm/QActive`-style state machines only when you are still interested in **manual** coding or maintaining your state machines. (But then you will be working against the strictly @ref ab_special "forward-engineering nature" of QM™)
73
-
74
-
@attention
75
-
The `QMsm/QMActive`-style implementation strategy requires a @ref ab_license "commercial license certificate" to generate code.
78
+
@remark
79
+
The `QMsm/QMActive`-style state machines are generally recommended over the older `QHsm/QActive`-style state machines described @ref sm_class_qhsm "above".
0 commit comments