<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="FeedCreator 1.8" -->
<?xml-stylesheet href="https://sinelabore.com/lib/exe/css.php?s=feed" type="text/css"?>
<rss version="2.0">
    <channel xmlns:g="http://base.google.com/ns/1.0">
        <title>SinelaboreRT</title>
        <description>Productivity for embedded software development</description>
        <link>https://sinelabore.com/</link>
        <lastBuildDate>Tue, 07 Apr 2026 20:24:59 +0000</lastBuildDate>
        <generator>FeedCreator 1.8</generator>
        <image>
            <url>https://sinelabore.com/lib/exe/fetch.php/favicon.ico</url>
            <title>SinelaboreRT</title>
            <link>https://sinelabore.com/</link>
        </image>
        <item>
            <title>Latest News</title>
            <link>https://sinelabore.com/doku.php/latest_news</link>
            <description>


&lt;h1 class=&quot;sectionedit1&quot; id=&quot;latest_news&quot;&gt;Latest News&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;/div&gt;

&lt;h4 id=&quot;march_2026_new_version_71&quot;&gt;March 2026 | New version 7.1&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;

&lt;p&gt;
&lt;img src=&quot;https://sinelabore.com/lib/exe/fetch.php/pix_mouse.png&quot; class=&quot;medialeft&quot; align=&quot;left&quot; loading=&quot;lazy&quot; alt=&quot;&quot; /&gt; Update for SysMLV2. This version improves the code generation and adds more supported SysMLV2 features. E.g. actions are SysMLV2  first hand features and as such represented as structs in the generated code and not as methods anymore. Checkout the GitHub examples for more details.
&lt;/p&gt;

&lt;/div&gt;

&lt;h4 id=&quot;november_2025_new_version_70&quot;&gt;November 2025 | New version 7.0&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;

&lt;p&gt;
&lt;img src=&quot;https://sinelabore.com/lib/exe/fetch.php/pix_mouse.png&quot; class=&quot;medialeft&quot; align=&quot;left&quot; loading=&quot;lazy&quot; alt=&quot;&quot; /&gt; SysML v2 is here — and it’s announced as major leap forward in systems modeling. I&amp;#039;ve taken a first deep dive into the new modelling language, exploring its strengths, potential, and some early tooling support. The latest version 7.0 supports the generation of CPPX code from a SysML v2 textual model. With the help of a small framework the generated parts and state-machine code can be easily be executed and tested.
&lt;/p&gt;

&lt;/div&gt;

&lt;h4 id=&quot;july_2025_sysml_v20_-_first_experiments&quot;&gt;July 2025 | SysML v2.0 - First Experiments&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;

&lt;p&gt;
&lt;img src=&quot;https://sinelabore.com/lib/exe/fetch.php/pix_paper.png&quot; class=&quot;medialeft&quot; align=&quot;left&quot; loading=&quot;lazy&quot; alt=&quot;&quot; /&gt; We explored the current status of SysML v2. Read more in this &lt;a href=&quot;https://sinelabore.com/doku.php/wiki/sysml2/first_experience&quot; class=&quot;wikilink1&quot; title=&quot;wiki:sysml2:first_experience&quot; data-wiki-id=&quot;wiki:sysml2:first_experience&quot;&gt;article&lt;/a&gt;. 
&lt;/p&gt;

&lt;/div&gt;

&lt;h4 id=&quot;february_2025_new_version_652&quot;&gt;February 2025 | New version 6.5.2&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;

&lt;p&gt;
&lt;img src=&quot;https://sinelabore.com/lib/exe/fetch.php/pix_mouse.png&quot; class=&quot;medialeft&quot; align=&quot;left&quot; loading=&quot;lazy&quot; alt=&quot;&quot; /&gt; This new version is recommended to all users. Core modules were refactored  for better maintainability and consistency and improved test coverage. Improved CPPX code generation to eliminate unnecessary dynamic memory allocations.
&lt;/p&gt;

&lt;/div&gt;

&lt;h4 id=&quot;february_2025_new_version_651&quot;&gt;February 2025 | New version 6.5.1&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;

&lt;p&gt;
&lt;img src=&quot;https://sinelabore.com/lib/exe/fetch.php/pix_mouse.png&quot; class=&quot;medialeft&quot; align=&quot;left&quot; loading=&quot;lazy&quot; alt=&quot;&quot; /&gt; Beside several improvements support for additional command-line parameters when using ’-l cppx’ was added. You can now optionally specify &lt;code&gt;-std&lt;/code&gt; with additional information to enable all necessary parameters for the corresponding language features either for either version 11 or 14. This simplifies configuration for new users. For more details, see section “Generating &lt;code&gt;CPP&lt;/code&gt; Code”. 
&lt;/p&gt;

&lt;/div&gt;

&lt;h4 id=&quot;september_2024_new_version_64&quot;&gt;September 2024 | New version 6.4&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;

&lt;p&gt;
&lt;img src=&quot;https://sinelabore.com/lib/exe/fetch.php/pix_mouse.png&quot; class=&quot;medialeft&quot; align=&quot;left&quot; loading=&quot;lazy&quot; alt=&quot;&quot; /&gt; Since version 6.4 the handling of history states has been changed. It is now possible to end a transition in a history state. Only if a transition ends in a history state will the previous history be taken into account when entering the state set. Otherwise the default entry chain is used. The new parameter &lt;code&gt;TransitionsCanEndInHistoryStates&lt;/code&gt; has been added to enable this feature. This new feature makes history state handling more powerful and the designer&amp;#039;s intent clearer than before. An example of the new possibilities is shown in the following figure.
&lt;a href=&quot;https://sinelabore.com/lib/exe/detail.php/wiki/news/sm.png?id=latest_news&quot; class=&quot;media&quot; title=&quot;wiki:news:sm.png&quot;&gt;&lt;img src=&quot;https://sinelabore.com/lib/exe/fetch.php/wiki/news/sm.png&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; title=&quot; State machine with the new history state option&quot; alt=&quot; State machine with the new history state option&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;/div&gt;

&lt;h4 id=&quot;august_2024_new_version_634&quot;&gt;August 2024 | New version 6.3.4&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;

&lt;p&gt;
&lt;img src=&quot;https://sinelabore.com/lib/exe/fetch.php/pix_mouse.png&quot; class=&quot;medialeft&quot; align=&quot;left&quot; loading=&quot;lazy&quot; alt=&quot;&quot; /&gt; This release adds another way to influence the signature of the processEvent() method in C++.
&lt;/p&gt;

&lt;/div&gt;

&lt;h4 id=&quot;june_2024_new_version_633&quot;&gt;June 2024 | New version 6.3.3&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;

&lt;p&gt;
&lt;img src=&quot;https://sinelabore.com/lib/exe/fetch.php/pix_mouse.png&quot; class=&quot;medialeft&quot; align=&quot;left&quot; loading=&quot;lazy&quot; alt=&quot;&quot; /&gt; This version provides some small updates for the Python backend and fixes an issue with the C Sharp backend.
&lt;/p&gt;

&lt;/div&gt;

&lt;h4 id=&quot;feb_2024_new_version_6321&quot;&gt;18. Feb. 2024 | New version 6.3.2.1&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;

&lt;p&gt;
&lt;img src=&quot;https://sinelabore.com/lib/exe/fetch.php/pix_mouse.png&quot; class=&quot;medialeft&quot; align=&quot;left&quot; loading=&quot;lazy&quot; alt=&quot;&quot; /&gt; Bugfix in the C++ backend. Relevant for users who have state machines with regions and do not want event handler parameters. With previous version a msg parameter of the region code was generated. In the previous version, a msg parameter was incorrectly generated for the region handler code. This has now been corrected.
&lt;/p&gt;

&lt;/div&gt;

&lt;h4 id=&quot;feb_2024_new_version_632&quot;&gt;18. Feb. 2024 | New version 6.3.2&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;

&lt;p&gt;
&lt;img src=&quot;https://sinelabore.com/lib/exe/fetch.php/pix_mouse.png&quot; class=&quot;medialeft&quot; align=&quot;left&quot; loading=&quot;lazy&quot; alt=&quot;&quot; /&gt; A state machine with regions can be in more than one state at a time. Previously the getInnermostActiveState() function only returned the topmost state the state machine was in. With this release, some backends can return more states to reflect the real situation.
&lt;/p&gt;
&lt;ol&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Improvements in the JS backend. IsIn() and getInnermostActiveStates() works now with regions.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Improvements in the C++11 backend. IsIn() and getInnermostActiveStates() works now with regions (cpp-11 only).&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;
In the case of C++11, the generated function has this signature:
&lt;/p&gt;
&lt;pre class=&quot;code c&quot;&gt;&lt;span class=&quot;kw4&quot;&gt;auto&lt;/span&gt; oven&lt;span class=&quot;sy0&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;me2&quot;&gt;getInnermostActiveStates&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;kw4&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt; std&lt;span class=&quot;sy0&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;me2&quot;&gt;forward_list&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;&amp;lt;&lt;/span&gt;oven&lt;span class=&quot;sy0&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;me2&quot;&gt;States&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
  std&lt;span class=&quot;sy0&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;me2&quot;&gt;forward_list&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;&amp;lt;&lt;/span&gt;oven&lt;span class=&quot;sy0&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;me2&quot;&gt;States&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;&amp;gt;&lt;/span&gt; stateList&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
  ...
  &lt;span class=&quot;kw1&quot;&gt;return&lt;/span&gt; stateList&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h4 id=&quot;jan_2024_new_version_63&quot;&gt;22. Jan. 2024 | New version 6.3&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;

&lt;p&gt;
&lt;img src=&quot;https://sinelabore.com/lib/exe/fetch.php/pix_mouse.png&quot; class=&quot;medialeft&quot; align=&quot;left&quot; loading=&quot;lazy&quot; alt=&quot;&quot; /&gt; JavaScript is now supported as new target language for the code generator
&lt;/p&gt;

&lt;/div&gt;

&lt;h4 id=&quot;nov_2023_new_version_62&quot;&gt;20. Nov. 2023 | New version 6.2&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;

&lt;p&gt;
Go is now supported as new target language for the code generator
&lt;/p&gt;

&lt;/div&gt;

&lt;h4 id=&quot;sep_2023_new_version_61&quot;&gt;26. Sep. 2023 | New version 6.1&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;

&lt;p&gt;
Changes:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Bugfixes and improvements in the built in state-diagram editor&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Use of a project specific configuration file in the graphical editor&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; New C-backend related parameters to generate code following the opaque object pattern (&lt;a href=&quot;https://en.wikipedia.org/wiki/Opaque_pointer&quot; class=&quot;urlextern&quot; title=&quot;https://en.wikipedia.org/wiki/Opaque_pointer&quot; rel=&quot;ugc nofollow&quot;&gt;https://en.wikipedia.org/wiki/Opaque_pointer&lt;/a&gt;) to hide the state machine implementation from other user code and thereof reduce dependencies.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Improvements in the section about the c-backend and reorganization of the examples folder in the download.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
New features:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Experimental parsing for the DrawIO Editor added&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Events marked external are now exported in a separate file to allow further external processing. This allows to generate one file containing all state machine events (only with events as defines possible). Designs with a global event bus where all machines always receive all events could benefit from this feature.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;

&lt;h4 id=&quot;aug_2023_new_version_605&quot;&gt;12. Aug. 2023 | New version 6.0.5&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;

&lt;p&gt;
Experimental support for DrawIO added
&lt;/p&gt;

&lt;/div&gt;

&lt;h4 id=&quot;july_2023_new_version_604&quot;&gt;29. July 2023 | New version 6.0.4&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;

&lt;p&gt;
Small bug-fixes and several improvements in the built-in graphical state diagram editor.
&lt;/p&gt;

&lt;/div&gt;

&lt;h4 id=&quot;july_2023_new_version_603&quot;&gt;5. July 2023 | New version 6.0.3&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;

&lt;p&gt;
Only available as jar download. Small bug-fixes in the built-in graphical state diagram editor as well as small improvements in the C-backend. It is better taking care of C89 only compilers.
&lt;/p&gt;

&lt;/div&gt;

&lt;h4 id=&quot;june_2023_new_version_602&quot;&gt;3. June 2023 | New version 6.0.2&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;

&lt;p&gt;
&lt;img src=&quot;https://sinelabore.com/lib/exe/fetch.php/pix_mouse.png&quot; class=&quot;medialeft&quot; align=&quot;left&quot; loading=&quot;lazy&quot; alt=&quot;&quot; /&gt; Several minor improvements especially for the c&lt;a class=&quot;folder&quot; href=&quot;#folded_295c7ef99df159a5ef89048fad094fa9_1&quot;&gt;backend. With some new configuration parameters, the generated code now passes the clang-tidy checks for c++11 with &amp;#039;&amp;#039;modernise-&amp;#039;&amp;#039; checks enabled. A new example has been added to the examples folder to show how to set the parameters in a sensible way.

=== 1. March 2023 &lt;/a&gt;&lt;span class=&quot;folded hidden&quot; id=&quot;folded_295c7ef99df159a5ef89048fad094fa9_1&quot;&gt; New version 6.0 ===
&lt;img src=&quot;https://sinelabore.com/lib/exe/fetch.php/pix_mouse.png&quot; class=&quot;medialeft&quot; align=&quot;left&quot; loading=&quot;lazy&quot; alt=&quot;&quot; /&gt; This major release fixes many small issues and adds support for generating code from &lt;a href=&quot;https://www.eclipse.org/papyrus/&quot; class=&quot;urlextern&quot; title=&quot;https://www.eclipse.org/papyrus/&quot; rel=&quot;ugc nofollow&quot;&gt; Eclipse Papyrus™&lt;/a&gt;. There is a &lt;a href=&quot;https://youtu.be/F6vUxv-z-os&quot; class=&quot;urlextern&quot; title=&quot;https://youtu.be/F6vUxv-z-os&quot; rel=&quot;ugc nofollow&quot;&gt;step by step introduction video&lt;/a&gt; available.
&lt;a href=&quot;https://sinelabore.com/lib/exe/detail.php/papyrus-logo.png?id=latest_news&quot; class=&quot;media&quot; title=&quot;papyrus-logo.png&quot;&gt;&lt;img src=&quot;https://sinelabore.com/lib/exe/fetch.php/papyrus-logo.png?w=70&amp;amp;tok=70f7ba&quot; class=&quot;media&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;70&quot; /&gt;&lt;/a&gt;


=== 27. Jan 2023 | New version 5.5.6.3515 ===
This version fixes a bug in handling config files. Recommended for all users.

=== 21. Jan 2023 | New version 5.5.6.3490 ===
&lt;img src=&quot;https://sinelabore.com/lib/exe/fetch.php/pix_mouse.png&quot; class=&quot;medialeft&quot; align=&quot;left&quot; loading=&quot;lazy&quot; alt=&quot;&quot; /&gt; This version adds many small improvements to the integrated state diagram editor. 
  * Code editor window is not always on top
  * A larger font in the state diagram used by default. The size can be configured in the configuration file.
  * Improved layout (larger distance between states) to increase readably of transition texts
  * The configuration file is now searched locally and then in the users home directory. If the location was given as command line it has always priority.
  * Display of an error symbol in correct line of the output window in the case when the model check returns an error. &lt;a href=&quot;https://sinelabore.com/lib/exe/detail.php/wiki/news/error_in_output_window.jpg?id=latest_news&quot; class=&quot;media&quot; title=&quot;wiki:news:error_in_output_window.jpg&quot;&gt;&lt;img src=&quot;https://sinelabore.com/lib/exe/fetch.php/wiki/news/error_in_output_window.jpg&quot; class=&quot;mediaright&quot; align=&quot;right&quot; loading=&quot;lazy&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
  * Some IDEs do treat files ending in &lt;code&gt;cfg&lt;/code&gt; in a special way. Therefore the codegen configuration file can also be named &lt;code&gt;codegen.cf&lt;/code&gt; optionally.
  * Many more …

=== Dec 2022 | New version 5.5.5.5 ===
&lt;img src=&quot;https://sinelabore.com/lib/exe/fetch.php/pix_mouse.png&quot; class=&quot;medialeft&quot; align=&quot;left&quot; loading=&quot;lazy&quot; alt=&quot;&quot; /&gt; This new version adds Rust as a language backend.

=== June 2022 | New version 5.5.5.1 ===
&lt;img src=&quot;https://sinelabore.com/lib/exe/fetch.php/pix_mouse.png&quot; class=&quot;medialeft&quot; align=&quot;left&quot; loading=&quot;lazy&quot; alt=&quot;&quot; /&gt; This new version fixed several issues related to misra 2012 rules. As a result also some recommended parameter settings are published &lt;a href=&quot;https://sinelabore.com/doku.php/wiki/howto/static_code_checkers&quot; class=&quot;wikilink1&quot; title=&quot;wiki:howto:static_code_checkers&quot; data-wiki-id=&quot;wiki:howto:static_code_checkers&quot;&gt;here&lt;/a&gt; to get you started. Recommended for all C/C&lt;/span&gt; users.
&lt;/p&gt;

&lt;/div&gt;

&lt;h4 id=&quot;may_2022_new_version_555&quot;&gt;May 2022 | New version 5.5.5&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;

&lt;p&gt;
&lt;img src=&quot;https://sinelabore.com/lib/exe/fetch.php/pix_mouse.png&quot; class=&quot;medialeft&quot; align=&quot;left&quot; loading=&quot;lazy&quot; alt=&quot;&quot; /&gt; This new version improved region handling for own instance data types. Recommended update for all C backend users. Additionally it improves XMI parsing of attributes and methods for the various supported &lt;abbr title=&quot;Unified Modeling Language&quot;&gt;UML&lt;/abbr&gt; tools.
&lt;/p&gt;

&lt;/div&gt;

&lt;h4 id=&quot;january_2022_new_version_554&quot;&gt;January 2022 | New version 5.5.4&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;

&lt;p&gt;
&lt;img src=&quot;https://sinelabore.com/lib/exe/fetch.php/pix_mouse.png&quot; class=&quot;medialeft&quot; align=&quot;left&quot; loading=&quot;lazy&quot; alt=&quot;&quot; /&gt; This new version brings C&lt;a class=&quot;folder&quot; href=&quot;#folded_295c7ef99df159a5ef89048fad094fa9_2&quot;&gt;template parameters to the event handler method. As well as the option to hand over a user defined parameter to the event handler method in C#. Both increases flexibility to hand over data together with the event to the state machine.


=== January 2022 &lt;/a&gt;&lt;span class=&quot;folded hidden&quot; id=&quot;folded_295c7ef99df159a5ef89048fad094fa9_2&quot;&gt; New version 5.5.2 ===
&lt;img src=&quot;https://sinelabore.com/lib/exe/fetch.php/pix_mouse.png&quot; class=&quot;medialeft&quot; align=&quot;left&quot; loading=&quot;lazy&quot; alt=&quot;&quot; /&gt; This new version allows to add attributes and operations to EA/UModel class diagrams. They are added to the generated code. An example about the &lt;a href=&quot;https://sinelabore.com/doku.php/wiki/examples/function_blocks_desing&quot; class=&quot;wikilink1&quot; title=&quot;wiki:examples:function_blocks_desing&quot; data-wiki-id=&quot;wiki:examples:function_blocks_desing&quot;&gt;creation of signal forming function blocks&lt;/a&gt; shows the new possibilities in detail. 

For users of the built-in state machine editor and the C-backend a new dialog shows all the configuration parameters and how they influence the signature of the generated state machine handler.

&lt;a href=&quot;https://sinelabore.com/lib/exe/detail.php/wiki/news/handler_signature.png?id=latest_news&quot; class=&quot;media&quot; title=&quot;wiki:news:handler_signature.png&quot;&gt;&lt;img src=&quot;https://sinelabore.com/lib/exe/fetch.php/wiki/news/handler_signature.png&quot; class=&quot;media&quot; loading=&quot;lazy&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;

=== October 2021 | New version 5.4.1 ===
&lt;img src=&quot;https://sinelabore.com/lib/exe/fetch.php/pix_mouse.png&quot; class=&quot;medialeft&quot; align=&quot;left&quot; loading=&quot;lazy&quot; alt=&quot;&quot; /&gt; New Windows/Mac installer (thanks to Java 17) makes life easier for users who are not at ease with the command line. C&lt;/span&gt; backend now supports the &lt;code&gt;ValidationCall&lt;/code&gt; parameter.
&lt;/p&gt;

&lt;/div&gt;

&lt;h4 id=&quot;august_2021_new_version_53&quot;&gt;August 2021 | New version 5.3&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;

&lt;p&gt;
&lt;img src=&quot;https://sinelabore.com/lib/exe/fetch.php/pix_mouse.png&quot; class=&quot;medialeft&quot; align=&quot;left&quot; loading=&quot;lazy&quot; alt=&quot;&quot; /&gt; Several usability improvements, bug fixes and new functions esp. in the built-in editor. Recommended for all users. A detailed change log is available in the &lt;a href=&quot;https://sinelabore.com/lib/exe/fetch.php/wiki/downloads/sinelaborert.pdf&quot; class=&quot;media mediafile mf_pdf&quot; title=&quot;wiki:downloads:sinelaborert.pdf (6.9 MB)&quot;&gt;Codegen Manual&lt;/a&gt;.
&lt;/p&gt;

&lt;/div&gt;

&lt;h4 id=&quot;jan2021_new_version_52&quot;&gt;Jan.2021 | New version 5.2&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;

&lt;p&gt;
&lt;img src=&quot;https://sinelabore.com/lib/exe/fetch.php/pix_mouse.png&quot; class=&quot;medialeft&quot; align=&quot;left&quot; loading=&quot;lazy&quot; alt=&quot;&quot; /&gt; &lt;a href=&quot;https://sinelabore.com/lib/exe/detail.php/wiki/manual/initial_diagram_with_choice.png?id=latest_news&quot; class=&quot;media&quot; title=&quot;wiki:manual:initial_diagram_with_choice.png&quot;&gt;&lt;img src=&quot;https://sinelabore.com/lib/exe/fetch.php/wiki/manual/initial_diagram_with_choice.png?w=200&amp;amp;tok=812084&quot; class=&quot;medialeft&quot; align=&quot;left&quot; loading=&quot;lazy&quot; title=&quot;| The first diagram with an init state, a normal state, a final state and a choice.&quot; alt=&quot;| The first diagram with an init state, a normal state, a final state and a choice.&quot; width=&quot;200&quot; /&gt;&lt;/a&gt;. Complete rewritten built-in editor. Generate state diagram within minutes. Editor has full support for regions. 
&lt;/p&gt;

&lt;/div&gt;

&lt;h4 id=&quot;new_version_41&quot;&gt;15.02.2020 | New version 4.1&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;

&lt;p&gt;
&lt;img src=&quot;https://sinelabore.com/lib/exe/fetch.php/pix_mouse.png&quot; class=&quot;medialeft&quot; align=&quot;left&quot; loading=&quot;lazy&quot; alt=&quot;&quot; /&gt; This new version provides a backend for Lua. It is the first state machine code generator from &lt;abbr title=&quot;Unified Modeling Language&quot;&gt;UML&lt;/abbr&gt; state diagrams/machines to Lua. Lua is a lightweight, embeddable scripting language. It follows the approach described &lt;a href=&quot;https://www.lua.org/pil/16.html&quot; class=&quot;urlextern&quot; title=&quot;https://www.lua.org/pil/16.html&quot; rel=&quot;ugc nofollow&quot;&gt; by Roberto Ierusalimschy&lt;/a&gt; in his book. More information is available &lt;a href=&quot;https://sinelabore.com/doku.php/wiki/news/14feb2020&quot; class=&quot;wikilink1&quot; title=&quot;wiki:news:14feb2020&quot; data-wiki-id=&quot;wiki:news:14feb2020&quot;&gt;here&lt;/a&gt;.
&lt;/p&gt;

&lt;/div&gt;

&lt;h4 id=&quot;new_version_374&quot;&gt;17.6.2019 | New version 3.7.4&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;

&lt;p&gt;
&lt;img src=&quot;https://sinelabore.com/lib/exe/fetch.php/pix_mouse.png&quot; class=&quot;medialeft&quot; align=&quot;left&quot; loading=&quot;lazy&quot; alt=&quot;&quot; /&gt;This is a bug-fix version and recommended for all users. For users of the Cadifra tool connection points were added to keep oversight in complex diagrams more easy. Connection points are a well known concept in circuit diagram drawing tools. More details can be found in the sinelabore manual (Cadifra part).
&lt;/p&gt;

&lt;/div&gt;

&lt;h4 id=&quot;new_example_for_pic_users&quot;&gt;2.5.2019 | New example for PIC users&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;

&lt;p&gt;
&lt;img src=&quot;https://sinelabore.com/lib/exe/fetch.php/pix_paper.png&quot; class=&quot;medialeft&quot; align=&quot;left&quot; loading=&quot;lazy&quot; alt=&quot;&quot; /&gt;This tutorial explains the use of state machines with the PIC16F18446 Curiosity Nano board. &lt;a href=&quot;https://sinelabore.com/doku.php/wiki/examples/pic_tutorial&quot; class=&quot;wikilink1&quot; title=&quot;wiki:examples:pic_tutorial&quot; data-wiki-id=&quot;wiki:examples:pic_tutorial&quot;&gt;Go on reading ...&lt;/a&gt;
&lt;/p&gt;

&lt;/div&gt;

&lt;h4 id=&quot;sparx_new_ea_version&quot;&gt;29.12.2017 | Sparx new EA Version&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;

&lt;p&gt;
&lt;img src=&quot;https://sinelabore.com/lib/exe/fetch.php/pix_paper.png&quot; class=&quot;medialeft&quot; align=&quot;left&quot; loading=&quot;lazy&quot; alt=&quot;&quot; /&gt; Tests of new EA version 13 were successful. If you find any flaws using the codegen with the new version send a bug report please.
&lt;/p&gt;

&lt;/div&gt;

&lt;h4 id=&quot;quickstart_tutorial_on_how_to_use_the_code_generator_with_energia_on_github&quot;&gt;20.9.2017 | QuickStart tutorial on how to use the code generator with Energia on GitHub&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;

&lt;p&gt;
&lt;a href=&quot;https://sinelabore.com/lib/exe/detail.php/wiki/news/launchpads-msp430-msp-exp430fr5969.png?id=latest_news&quot; class=&quot;media&quot; title=&quot;wiki:news:launchpads-msp430-msp-exp430fr5969.png&quot;&gt;&lt;img src=&quot;https://sinelabore.com/lib/exe/fetch.php/wiki/news/launchpads-msp430-msp-exp430fr5969.png?w=200&amp;amp;tok=00108f&quot; class=&quot;mediaright&quot; align=&quot;right&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;200&quot; /&gt;&lt;/a&gt;
&lt;img src=&quot;https://sinelabore.com/lib/exe/fetch.php/pix_mouse.png&quot; class=&quot;medialeft&quot; align=&quot;left&quot; loading=&quot;lazy&quot; alt=&quot;&quot; /&gt; &lt;a href=&quot;http://energia.nu&quot; class=&quot;urlextern&quot; title=&quot;http://energia.nu&quot; rel=&quot;ugc nofollow&quot;&gt;Energia&lt;/a&gt; is based on the Arduino IDE and is a great IDE for processors form Texas Instruments. The new example on GitHub shows the integration of code generated from the sinelabore code generator into the Energia IDE. What does the demo do: The flash frequency of the green LED on the MSP430FR5969 LaunchPad can be controlled. A minimal timer and queueing lib is used as basis to be prepared for much more challenging tasks. You will see the benefit of state machine modeling over direct coding. Take a &lt;a href=&quot;https://github.com/sinelabore/examples&quot; class=&quot;urlextern&quot; title=&quot;https://github.com/sinelabore/examples&quot; rel=&quot;ugc nofollow&quot;&gt;look at the state diagrams and the generated code here&lt;/a&gt;! Or download the example and try it out yourself.
&lt;/p&gt;

&lt;/div&gt;

&lt;h4 id=&quot;new_version_371_with_some_small_improvements&quot;&gt;9.4.2017 | New version 3.7.1 with some small improvements&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;

&lt;p&gt;
&lt;img src=&quot;https://sinelabore.com/lib/exe/fetch.php/pix_mouse.png&quot; class=&quot;medialeft&quot; align=&quot;left&quot; loading=&quot;lazy&quot; alt=&quot;&quot; /&gt; Recommended for all C# users and those who use the built in editor/simulator.
&lt;/p&gt;

&lt;/div&gt;

&lt;h4 id=&quot;code_generator_features_for_high-availability_and_safety_systems&quot;&gt;6.11.2016 | Code Generator Features for High-Availability and Safety Systems&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;

&lt;p&gt;
&lt;img src=&quot;https://sinelabore.com/lib/exe/fetch.php/pix_paper.png&quot; class=&quot;medialeft&quot; align=&quot;left&quot; loading=&quot;lazy&quot; alt=&quot;&quot; /&gt; There is a new article in the “&lt;a href=&quot;https://sinelabore.com/doku.php/wiki/toolbox/features_for_high-availability_and_safety_systems&quot; class=&quot;wikilink1&quot; title=&quot;wiki:toolbox:features_for_high-availability_and_safety_systems&quot; data-wiki-id=&quot;wiki:toolbox:features_for_high-availability_and_safety_systems&quot;&gt;Designers Toolbox&lt;/a&gt;” explaining the special features for for High-Availability and Safety Systems offered from the C-backend.
&lt;/p&gt;

&lt;/div&gt;

&lt;h4 id=&quot;generate_python_code_from_state_diagrams&quot;&gt;16.10.2016 | Generate Python Code from State Diagrams&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;

&lt;p&gt;
&lt;img src=&quot;https://sinelabore.com/lib/exe/fetch.php/pix_mouse.png&quot; class=&quot;medialeft&quot; align=&quot;left&quot; loading=&quot;lazy&quot; alt=&quot;&quot; /&gt; With version 3.7 is is now possible to generate Python code. The state machine code is generated as a Python class. All relevant state machine features are available. Look into the manual for details. The fully working microwave oven code is available in the examples folder. It contains a TKinter &lt;abbr title=&quot;Graphical User Interface&quot;&gt;GUI&lt;/abbr&gt; wich makes simulation and testing of the generated state machine even simpler. 
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Latest News&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;latest_news&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;13-&amp;quot;} --&gt;</description>
            <author>webmin@undisclosed.example.com (webmin)</author>
            <pubDate>Sun, 15 Mar 2026 19:22:24 +0000</pubDate>
        </item>
        <item>
            <title>Generating CPP Code from SysML V2 textual models</title>
            <link>https://sinelabore.com/doku.php/wiki/landing_pages/sysml/sysml_v2</link>
            <description>


&lt;h2 class=&quot;sectionedit1&quot; id=&quot;generating_cpp_code_from_sysml_v2_textual_models&quot;&gt;Generating CPP Code from SysML V2 textual models&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
&lt;img src=&quot;https://sinelabore.com/lib/exe/fetch.php/wiki/landing_pages/sysml/sysml2-logo-tight.png&quot; class=&quot;medialeft&quot; align=&quot;left&quot; loading=&quot;lazy&quot; title=&quot;Sysml Logo&quot; alt=&quot;Sysml Logo&quot; /&gt;
SysML V2 is a newer version of SysML that is more flexible and powerful. 
An important aspect is that it now allows to write textual models.
This lowers the entry barrier to the model based system development a lot
becasue no special tools are needed to write the models. E.g. a
Visual Studio Code plugin is available to write SysML V2 models.
The Sinelabore Code Generator supports code generation from SysML V2 models.
In opposite to the current Sinelabore capabilites, the 
code generation also supports the generation of structural code and 
not just the generation of state machine code.
&lt;/p&gt;

&lt;p&gt;
This means that also code for parts, interactions between parts and so
forth is generated. This can be used to quickly generate mockups and
simulations of an intended system.
&lt;/p&gt;

&lt;p&gt;
To generate &lt;code&gt;CPP&lt;/code&gt; code from a sysml model call the code generator with the 
command line flag &lt;code&gt;-l Sysml2Text&lt;/code&gt;.
&lt;/p&gt;

&lt;p&gt;
&lt;img src=&quot;https://sinelabore.com/lib/exe/fetch.php/wiki/landing_pages/sysml/vscode_sysml.png&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; title=&quot; Visual Studio Code with SysML plugin&quot; alt=&quot; Visual Studio Code with SysML plugin&quot; /&gt;
&lt;/p&gt;

&lt;p&gt;
A fully functional example is available on our &lt;a href=&quot;https://github.com/sinelabore/examples/tree/master/SysML_V2_TextualNotation&quot; class=&quot;urlextern&quot; title=&quot;https://github.com/sinelabore/examples/tree/master/SysML_V2_TextualNotation&quot; rel=&quot;ugc nofollow&quot;&gt;github&lt;/a&gt; site.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Generating CPP Code from SysML V2 textual models&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;generating_cpp_code_from_sysml_v2_textual_models&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;187-1441&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit2&quot; id=&quot;introduction&quot;&gt;Introduction&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
The present version only supports a small subset of the powerful SysML V2 feature set. 
Over time more features might be added. Main goal of this first version 
of the SysML V2 backend is to support a relevant set of
features to generate code for state machines and the interaction of statemachines between parts.
&lt;/p&gt;

&lt;p&gt;
To execute the generated code a small header only runtime environment is provided.
It contains some base classes and implements inter-part communication via
ports and timeout handling. So just the minimum to execute a model.
&lt;/p&gt;

&lt;p&gt;
In case a part contains a state machine the code generatior also generates additional files
for the state machine. This code follows the structure that is already used by 
the &lt;code&gt;cppx&lt;/code&gt; backend.
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;strong&gt;Parts&lt;/strong&gt;: Parts are the main building blocks of a system. They can contain other parts, attributes, a state machine, actions, enums, connections and ports. Parts are realized as CPP classes in the generated code. If a part contains other parts you are responsible to create them in the init method. Create a subclass of the part class and override the init method. Then call the base class init method. Example: &lt;pre class=&quot;code&quot;&gt; part def P1{part p2:P3;} &lt;/pre&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;strong&gt;Attributes&lt;/strong&gt; Parts can have attributes. Attributes can have a base type and a default value. Attributes can contain other attributes. Attributes are translated to CPP member variables. Depending on the type of the attribute it is realized as a basic data type or a class. Example: &lt;pre class=&quot;code&quot;&gt;attribute a:bool;&lt;/pre&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;strong&gt;Enums&lt;/strong&gt;: Basic enums with their enum values can be defined. Enums are directly translated to CPP enums in the generated code. Example: &lt;pre class=&quot;code&quot;&gt;enum def Color{RED; GREEN; BLUE;}&lt;/pre&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;strong&gt;Ports&lt;/strong&gt;: Ports are the way to communication points between parts. The framework has some helper classes to realize ports. A port marked as “&lt;code&gt;in&lt;/code&gt;” has a &lt;em&gt;receive&lt;/em&gt; method, a port marked as “&lt;code&gt;out&lt;/code&gt;” has a &lt;em&gt;send&lt;/em&gt; method in the generated CPP code. Example: &lt;pre class=&quot;code&quot;&gt;port def p {attribute x : Integer;}&lt;/pre&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;strong&gt;Connections&lt;/strong&gt;: Connections are the way to connect ports of  parts in order to share data. Connections are realized as queues in the generated code. Only ports of the same type can be connected. One part must be marked as “&lt;code&gt;in&lt;/code&gt;”, one as “&lt;code&gt;out&lt;/code&gt;”. If you need bidirectional communication you can add two other ports in opposite direction. All attributes in a port share the same direction. Example: &lt;pre class=&quot;code&quot;&gt;connect p1.sendPort to p2.recvPort;} &lt;/pre&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;strong&gt;State Machines&lt;/strong&gt;: A part can have a state machine. State machines are not as expressive as in &lt;abbr title=&quot;Unified Modeling Language&quot;&gt;UML&lt;/abbr&gt; so far, but still powerful. With the help of a TimerManager class in the framework, timed transitions can be realized. Exampel:&lt;pre class=&quot;code&quot;&gt;{state def sm { ... }}&lt;/pre&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
The following listing shows an example for a small traffic light control system model. It consists of three parts with some attributes and actions. The &lt;code&gt;TrafficManagementCenter&lt;/code&gt; part represents a central control system that can control  &lt;code&gt;TrafficLightController&lt;/code&gt; parts connected via ports.
&lt;/p&gt;

&lt;p&gt;
In this simple model the &lt;code&gt;TrafficManagementCenter&lt;/code&gt; just enables a traffic light controllers to operate by sending a start event. The &lt;code&gt;TrafficLightController&lt;/code&gt; then changes state from &lt;code&gt;OutOfService&lt;/code&gt; to &lt;code&gt;Operational&lt;/code&gt; and performs expected traffic light operations. In a real system this simulation is for sure much more complex. But the example is rich enough to show  the available possibilities. The &lt;code&gt;TrafficLightSystem&lt;/code&gt; part weaves together the &lt;code&gt;TrafficManagementCenter&lt;/code&gt; and the &lt;code&gt;TrafficLightController&lt;/code&gt; parts.
&lt;/p&gt;
&lt;pre class=&quot;code c&quot;&gt;private import ScalarValues&lt;span class=&quot;sy0&quot;&gt;::*;&lt;/span&gt;
&amp;nbsp;
package TrafficLight &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
&amp;nbsp;
&amp;nbsp;
    &lt;span class=&quot;co1&quot;&gt;// definition of events to control motor&lt;/span&gt;
    &lt;span class=&quot;kw2&quot;&gt;enum&lt;/span&gt; def TRAFFICLIGHTCONTROLLERSM_EVENT_T &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
        &lt;span class=&quot;co1&quot;&gt;//@TrafficLightController&lt;/span&gt;
        evOperational&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
        evError&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;co1&quot;&gt;//@TrafficManagementCenter&lt;/span&gt;
    &lt;span class=&quot;kw2&quot;&gt;enum&lt;/span&gt; def TRAFFICMANAGEMENTCENTERSM_EVENT_T &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
    &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
    port def ControlPortData &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
        attribute msg &lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt; TRAFFICLIGHTCONTROLLERSM_EVENT_T&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
        attribute test&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt;Integer&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
    part def Test&lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;co1&quot;&gt;// traffic management center&lt;/span&gt;
    part def TrafficManagementCenter&lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
        out port sendPort &lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt; ControlPortData&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
        part test1 &lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt; Test&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
        state def tmcStateMachine &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
            entry&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt; then PreOperational&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
            state PreOperational&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
            accept after &lt;span class=&quot;nu0&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;SI&lt;span class=&quot;sy0&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;me2&quot;&gt;second&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;do&lt;/span&gt; send new ControlPortData&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;TRAFFICLIGHTCONTROLLERSM_EVENT_T&lt;span class=&quot;sy0&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;me2&quot;&gt;evOperational&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; via sendPort then Operational&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
            state Operational &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
&amp;nbsp;
            &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
        &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
    &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
    part def TrafficLightController&lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
&amp;nbsp;
        in port recvPort &lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt; ~ControlPortData&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
        part test1 &lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt; Test&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
        action def setRedLED&lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
        action def resetRedLED&lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
        action def setYellowLED&lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
        action def resetYellowLED&lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
        action def setGreenLED&lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
        action def resetGreenLED&lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
        action def setRedAndYellowLED&lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
        action def resetRedAndYellowLED&lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
        state def tlcStateMachine &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
            ...
        &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
    &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
    &lt;span class=&quot;co1&quot;&gt;// Main system composition&lt;/span&gt;
    part def TrafficLightSystem &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
        doc &lt;span class=&quot;coMULTI&quot;&gt;/*
        * Main system that contains the parts
        */&lt;/span&gt;
        part tmc &lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt; TrafficManagementCenter&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
        part tlc &lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt; TrafficLightController&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
        &lt;span class=&quot;co1&quot;&gt;// Connect the parts&lt;/span&gt;
        connect tmc.&lt;span class=&quot;me1&quot;&gt;sendPort&lt;/span&gt; to tlc.&lt;span class=&quot;me1&quot;&gt;recvPort&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Introduction&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;introduction&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;1442-6784&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit3&quot; id=&quot;adding_a_state_machine_to_a_part&quot;&gt;Adding a State Machine to a Part&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
A state machine can be added to a part. The following listing shows an example
of a state machine definition. Presently the following features are supported which 
are demonstrated in the following listing.
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; State machine definition: &lt;code&gt;state def sm { … }&lt;/code&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Default state: &lt;code&gt;entry; then statename;&lt;/code&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Default state setting extended form: This allows to select the default state based on conditions.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; States long form: They can have $entry$, $exit$ and $do$ actions. See state  &lt;code&gt;OperationalRed { entry; … }&lt;/code&gt; as example.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; States short form without details. Just a name must be given.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Transitions short form. This transition can only directly follow a state and allows a short form.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Transitions long form: This transition must have the extended form. An example for this is &lt;code&gt;transition t1&lt;/code&gt; shown in the listing.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;code c&quot;&gt;&lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt; definition of events
&lt;span class=&quot;kw2&quot;&gt;enum&lt;/span&gt; def TRAFFICLIGHTCONTROLLERSM_EVENT_T &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
    &lt;span class=&quot;co1&quot;&gt;//@TrafficLightController&lt;/span&gt;
    evOperational&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
    evError&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
state def tlcStateMachine &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
    entry&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt; then OutOfService&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
    state  OutOfService &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
        entry&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt; then OutOfServiceYellowOn&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
        state OutOfServiceYellowOn&lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
            entry action setYellowLED&lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
        &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
        accept after &lt;span class=&quot;nu16&quot;&gt;0.5&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;SI&lt;span class=&quot;sy0&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;me2&quot;&gt;second&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt; then OutOfServiceYellowOff&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
        state OutOfServiceYellowOff &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
            entry action resetYellowLED&lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
        &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
        accept after &lt;span class=&quot;nu16&quot;&gt;0.5&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;SI&lt;span class=&quot;sy0&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;me2&quot;&gt;second&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt; then OutOfServiceYellowOn&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
        transition t1 first OutOfService 
            accept TRAFFICLIGHTCONTROLLERSM_EVENT_T&lt;span class=&quot;sy0&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;me2&quot;&gt;evOperational&lt;/span&gt; then Operational&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
    state Operational &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
        entry&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt; then OperationalRed&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
        state OperationalRed &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
            entry action setRedLED&lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
            &lt;a href=&quot;http://www.opengroup.org/onlinepubs/009695399/functions/exit.html&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;exit&lt;/span&gt;&lt;/a&gt; action resetRedLED&lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
        &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
        state OperationalRedYellow &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
            entry action setRedAndYellowLED&lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
            &lt;a href=&quot;http://www.opengroup.org/onlinepubs/009695399/functions/exit.html&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;exit&lt;/span&gt;&lt;/a&gt; action resetRedAndYellowLED&lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
        &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
        state OperationalGreen &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
            entry action setGreenLED&lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
            &lt;a href=&quot;http://www.opengroup.org/onlinepubs/009695399/functions/exit.html&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;exit&lt;/span&gt;&lt;/a&gt; action resetGreenLED&lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
        &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
        state OperationalYellow &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
            entry action setYellowLED&lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
            &lt;a href=&quot;http://www.opengroup.org/onlinepubs/009695399/functions/exit.html&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;exit&lt;/span&gt;&lt;/a&gt; action resetYellowLED&lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
        &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;				
&amp;nbsp;
        transition t1 first OperationalRed  accept after &lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;SI&lt;span class=&quot;sy0&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;me2&quot;&gt;second&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt; 
            then OperationalRedYellow&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
        transition t2 first OperationalRedYellow  accept after &lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;SI&lt;span class=&quot;sy0&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;me2&quot;&gt;second&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt; 
            then OperationalGreen&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
        transition t3 first OperationalGreen  accept after &lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;SI&lt;span class=&quot;sy0&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;me2&quot;&gt;second&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt; 
            then OperationalYellow&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
        transition t4 first OperationalYellow  accept after &lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;SI&lt;span class=&quot;sy0&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;me2&quot;&gt;second&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt; 
            then OperationalRed&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
        transition t5 first Operational 
            accept TRAFFICLIGHTCONTROLLERSM_EVENT_T&lt;span class=&quot;sy0&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;me2&quot;&gt;evError&lt;/span&gt; then OutOfService&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
The system including the state machines are then fully generated following the well known Sinelabore&lt;em&gt;RT&lt;/em&gt; state machine  structure.
&lt;/p&gt;

&lt;/div&gt;

&lt;h4 id=&quot;defining_events&quot;&gt;Defining Events&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;

&lt;p&gt;
It is required to use enums to define events to be processed by the state machine.
&lt;/p&gt;

&lt;p&gt;
It is necessary to add a comment in the enum that starts with 
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;//@. --&amp;gt; example see above&lt;/pre&gt;

&lt;p&gt;
 plus the name of the part containing the state machine processing the events. 
&lt;/p&gt;

&lt;/div&gt;

&lt;h4 id=&quot;transition_triggered_by_timeouts&quot;&gt;Transition triggered by Timeouts&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;

&lt;p&gt;
A great new feature with SysML V2 is the ability to trigger transitions by timeouts.
In &lt;abbr title=&quot;Unified Modeling Language&quot;&gt;UML&lt;/abbr&gt; this was also possible but in much more limited way.
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;transition t1 first start state  accept after 0.1[SI::second] then next state;&lt;/pre&gt;

&lt;p&gt;
At present the time can only be specified in seconds. If other units are needed you can write e.g. &lt;code&gt;0.001[SI::second]&lt;/code&gt; for 1 millisecond. Each part has by default a TimerManager class that is used to manage the timeouts. The code generator generates the needed entry code to start the timer if the state is entered. Also the exit code is generated to stop the timer when the state is left.  A timeout event is added to the event list.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Adding a State Machine to a Part&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;adding_a_state_machine_to_a_part&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:7,&amp;quot;secid&amp;quot;:3,&amp;quot;range&amp;quot;:&amp;quot;6785-10697&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit4&quot; id=&quot;basic_executing_a_model&quot;&gt;Basic executing a model&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
It is possible to directly execute the model in a CPP main function. But in most cases you you might want to add own CPP behaviour. Then it is necessary to subclass the generated &lt;code&gt;Part&lt;/code&gt; classes and implement the
intended business logic and handlers (i.e. methods of the generated part classes).  By default a &lt;code&gt;process()&lt;/code&gt; and &lt;code&gt;init()&lt;/code&gt; method is generated per part.
&lt;/p&gt;

&lt;p&gt;
If needed overwrite these two methods and add your own code. Then call the baseclass method to ensure
that the part is initialized correctly. Parts used in a part (i.e. sub-parts) must be created
in the init method.
&lt;/p&gt;

&lt;p&gt;
Here is an example for a simple main program:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;MyTrafficLightSystem tls;

tls.init();

// Start process thread
for(int i = 0; i &amp;lt; 80; i++) {
   tls.process();
   std::this_thread::sleep_for(std::chrono::milliseconds(100));
}
&lt;/pre&gt;

&lt;/div&gt;

&lt;h4 id=&quot;executing_model_with_state_machines&quot;&gt;Executing Model with State Machines&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;

&lt;p&gt;
For each state machine, state handling classes are generated (details see section &amp;#039;3.4. Generating C++ Code&amp;#039; in the manual). Set the following parameters in the config file – &lt;code&gt;codegen.cfg&lt;/code&gt; otherwise the compiler will fail:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; UseEnumBaseTypes=yes&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; UseStdLibrary = yes&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; CallInitializeInCtor = no&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; EnumBaseTypeForEvents = std::int16_t&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
A state handling method named like the topmost state def of the part is generated.
&lt;/p&gt;

&lt;p&gt;
For ports and timeouts a handler method is added into the generated part class. Overwrite this handler in your derived class and forward the timeout event or the event received in the port to the state machine. Examples for such handlers are as follows:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;    void onTimeout(const TLCEvent&amp;amp; e) override{
        std::cout &amp;lt;&amp;lt; &amp;quot;[MyTrafficLightController] Timeout fired with id=&amp;quot;
            &amp;lt;&amp;lt; getNameByEvent(e)&amp;lt;&amp;lt; std::endl;
        // put event to input queue to be able to handle it via sysml code
        recvPort.receive(ControlPortDataDef{e});
        tlcStateMachine();
}&lt;/pre&gt;

&lt;/div&gt;

&lt;h4 id=&quot;missing_features&quot;&gt;Missing Features&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;

&lt;p&gt;
Sysml V2 is a very rich model language. There are many features that are not yet supported by the code generator.  The following list is not exhaustive but list some of the not supported features. Take a look at the code on github to see what is used in the  code generator and therefore supported.
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Regions in state machines&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Inner transitions&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Attributes can&amp;#039;t be qualified by additional keywords like $ordered$ or $unique$&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Attributes can&amp;#039;t have multiplicity&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Referencing, Subsetting, …&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Additions features in enums beside basic definition&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Other inter part communication features than ports and connections as shown above&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; The complete model must reside in a single file. It is not supported to split the model into multiple files.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Sysml imports are ignored and no code is generated for them. But it still useful just to satisfy sysmlv2 editors and get rid of error messages.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Many other features not shown in the example code.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Basic executing a model&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;basic_executing_a_model&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:10,&amp;quot;secid&amp;quot;:4,&amp;quot;range&amp;quot;:&amp;quot;10698-&amp;quot;} --&gt;</description>
            <author>webmin@undisclosed.example.com (webmin)</author>
            <pubDate>Sun, 15 Mar 2026 19:16:03 +0000</pubDate>
        </item>
        <item>
            <title>Navigation</title>
            <link>https://sinelabore.com/doku.php/sidebar</link>
            <description>
&lt;h3 class=&quot;sectionedit1&quot; id=&quot;navigation&quot;&gt;Navigation&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://sinelabore.com/doku.php/wiki/accepted_download&quot; class=&quot;wikilink1&quot; title=&quot;wiki:accepted_download&quot; data-wiki-id=&quot;wiki:accepted_download&quot;&gt; ⬇️ Download (Latest is 7.1 / March 2026)&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://sinelabore.com/doku.php/wiki/features&quot; class=&quot;wikilink1&quot; title=&quot;wiki:features&quot; data-wiki-id=&quot;wiki:features&quot;&gt;⭐ Features&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://sinelabore.com/doku.php/wiki/purchaseusd&quot; class=&quot;wikilink1&quot; title=&quot;wiki:purchaseusd&quot; data-wiki-id=&quot;wiki:purchaseusd&quot;&gt;🛒 Purchase&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://sinelabore.com/lib/exe/fetch.php/wiki/downloads/sinelaborert.pdf&quot; class=&quot;media mediafile mf_pdf&quot; title=&quot;wiki:downloads:sinelaborert.pdf (6.9 MB)&quot;&gt;PDF Codegen Manual&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://sinelabore.com/doku.php/wiki/manual/editor_general&quot; class=&quot;wikilink1&quot; title=&quot;wiki:manual:editor_general&quot; data-wiki-id=&quot;wiki:manual:editor_general&quot;&gt; 📖 HTML Codegen Manual&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://sinelabore.com/doku.php/wiki/manual/state_machine_intro&quot; class=&quot;wikilink1&quot; title=&quot;wiki:manual:state_machine_intro&quot; data-wiki-id=&quot;wiki:manual:state_machine_intro&quot;&gt; 📖 What are state machines?&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://sinelabore.com/doku.php/wiki/manual/state_machine_generate&quot; class=&quot;wikilink1&quot; title=&quot;wiki:manual:state_machine_generate&quot; data-wiki-id=&quot;wiki:manual:state_machine_generate&quot;&gt; 🔍 How to generate state machine code from UML?&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://sinelabore.com/doku.php/wiki/tools/supported_uml_tools&quot; class=&quot;wikilink1&quot; title=&quot;wiki:tools:supported_uml_tools&quot; data-wiki-id=&quot;wiki:tools:supported_uml_tools&quot;&gt;🛠️ Supported UML Tools&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://github.com/sinelabore/examples&quot; class=&quot;urlextern&quot; title=&quot;https://github.com/sinelabore/examples&quot; rel=&quot;ugc nofollow&quot;&gt;Examples on GitHub&lt;/a&gt; &lt;a href=&quot;https://github.com/sinelabore/examples&quot; class=&quot;media&quot; title=&quot;https://github.com/sinelabore/examples&quot; rel=&quot;ugc nofollow&quot;&gt;&lt;img src=&quot;https://sinelabore.com/lib/exe/fetch.php/github-mark.png?w=15&amp;amp;tok=62b214&quot; class=&quot;media&quot; loading=&quot;lazy&quot; title=&quot;Examples on Github&quot; alt=&quot;Examples on Github&quot; width=&quot;15&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://sinelabore.com/doku.php/latest_news&quot; class=&quot;wikilink1&quot; title=&quot;latest_news&quot; data-wiki-id=&quot;latest_news&quot;&gt;🗞️ News&lt;/a&gt; / &lt;a href=&quot;https://sinelabore.com/doku.php/history&quot; class=&quot;wikilink1&quot; title=&quot;history&quot; data-wiki-id=&quot;history&quot;&gt;News History&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://sinelabore.com/doku.php/wiki/contact&quot; class=&quot;wikilink1&quot; title=&quot;wiki:contact&quot; data-wiki-id=&quot;wiki:contact&quot;&gt;Imprint/Impressum&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://sinelabore.com/doku.php/wiki/terms_of_use&quot; class=&quot;wikilink1&quot; title=&quot;wiki:terms_of_use&quot; data-wiki-id=&quot;wiki:terms_of_use&quot;&gt;Trademarks and Terms of use&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://sinelabore.com/doku.php/wiki/privacy_statement&quot; class=&quot;wikilink1&quot; title=&quot;wiki:privacy_statement&quot; data-wiki-id=&quot;wiki:privacy_statement&quot;&gt;Privacy Statement&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Navigation&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;navigation&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;1-880&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit2&quot; id=&quot;modelling-tool_specific_intro&quot;&gt;Modelling-Tool specific Intro&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;img src=&quot;https://sinelabore.com/lib/exe/fetch.php/wiki/landing_pages/sysml/sysml2-logo-tight.png?w=30&amp;amp;tok=0d3a72&quot; class=&quot;medialeft&quot; align=&quot;left&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;30&quot; /&gt;&lt;a href=&quot;https://sinelabore.com/doku.php/wiki/landing_pages/sysml/sysml_v2&quot; class=&quot;wikilink1&quot; title=&quot;wiki:landing_pages:sysml:sysml_v2&quot; data-wiki-id=&quot;wiki:landing_pages:sysml:sysml_v2&quot;&gt;Generating CPP Code from SysML V2 textual models&lt;/a&gt; &lt;span class=&quot;wrap_hi &quot;&gt;  New!&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://sinelabore.com/doku.php/wiki/landing_pages/ea&quot; class=&quot;wikilink1&quot; title=&quot;wiki:landing_pages:ea&quot; data-wiki-id=&quot;wiki:landing_pages:ea&quot;&gt;Enterprise Architect&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://sinelabore.com/doku.php/wiki/landing_pages/md&quot; class=&quot;wikilink1&quot; title=&quot;wiki:landing_pages:md&quot; data-wiki-id=&quot;wiki:landing_pages:md&quot;&gt;Magic Draw&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://sinelabore.com/doku.php/wiki/landing_pages/modelio&quot; class=&quot;wikilink1&quot; title=&quot;wiki:landing_pages:modelio&quot; data-wiki-id=&quot;wiki:landing_pages:modelio&quot;&gt;Modelio&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://sinelabore.com/doku.php/wiki/landing_pages/papyrus&quot; class=&quot;wikilink1&quot; title=&quot;wiki:landing_pages:papyrus&quot; data-wiki-id=&quot;wiki:landing_pages:papyrus&quot;&gt; Papyrus&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://sinelabore.com/doku.php/wiki/getting_started/astah_mac_clang&quot; class=&quot;wikilink1&quot; title=&quot;wiki:getting_started:astah_mac_clang&quot; data-wiki-id=&quot;wiki:getting_started:astah_mac_clang&quot;&gt; Astah (macOS, Clang)&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://sinelabore.com/doku.php/wiki/getting_started/astah_windows_visualstudio&quot; class=&quot;wikilink1&quot; title=&quot;wiki:getting_started:astah_windows_visualstudio&quot; data-wiki-id=&quot;wiki:getting_started:astah_windows_visualstudio&quot;&gt; Astah (Windows, Visual Studio)&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://sinelabore.com/doku.php/wiki/landing_pages/cadifra&quot; class=&quot;wikilink1&quot; title=&quot;wiki:landing_pages:cadifra&quot; data-wiki-id=&quot;wiki:landing_pages:cadifra&quot;&gt;Cadifra (MingGW, Windows)&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://sinelabore.com/doku.php/wiki/getting_started/umodel_windows_mingw&quot; class=&quot;wikilink1&quot; title=&quot;wiki:getting_started:umodel_windows_mingw&quot; data-wiki-id=&quot;wiki:getting_started:umodel_windows_mingw&quot;&gt;UModel (MingGW,Windows)&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://sinelabore.com/doku.php/wiki/getting_started/staruml&quot; class=&quot;wikilink1&quot; title=&quot;wiki:getting_started:staruml&quot; data-wiki-id=&quot;wiki:getting_started:staruml&quot;&gt;StarUML (Experimental)&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://sinelabore.com/doku.php/wiki/getting_started/drawio&quot; class=&quot;wikilink1&quot; title=&quot;wiki:getting_started:drawio&quot; data-wiki-id=&quot;wiki:getting_started:drawio&quot;&gt;DrawIO (Experimental)&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://sinelabore.com/doku.php/wiki/manual/editor&quot; class=&quot;wikilink1&quot; title=&quot;wiki:manual:editor&quot; data-wiki-id=&quot;wiki:manual:editor&quot;&gt;Built-in Visual Editor Manual - Part I&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://sinelabore.com/doku.php/wiki/manual/editorii&quot; class=&quot;wikilink1&quot; title=&quot;wiki:manual:editorii&quot; data-wiki-id=&quot;wiki:manual:editorii&quot;&gt;Built-in Visual Editor Manual - Part II&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://sinelabore.com/doku.php/wiki/manual/editoriii&quot; class=&quot;wikilink1&quot; title=&quot;wiki:manual:editoriii&quot; data-wiki-id=&quot;wiki:manual:editoriii&quot;&gt;Built-in Visual Editor Manual - Part III&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://sinelabore.com/doku.php/wiki/manual/msp430_tl_tutorial&quot; class=&quot;wikilink1&quot; title=&quot;wiki:manual:msp430_tl_tutorial&quot; data-wiki-id=&quot;wiki:manual:msp430_tl_tutorial&quot;&gt;Built-in Visual Editor Manual - Part IV&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Modelling-Tool specific Intro&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;modelling-tool_specific_intro&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;881-1925&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit3&quot; id=&quot;language_backends&quot;&gt;Language Backends&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;&lt;a href=&quot;https://sinelabore.com/doku.php/wiki/backends/c_lang&quot; class=&quot;wikilink1&quot; title=&quot;wiki:backends:c_lang&quot; data-wiki-id=&quot;wiki:backends:c_lang&quot;&gt;C&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;&lt;a href=&quot;https://sinelabore.com/doku.php/wiki/backends/cpp_lang&quot; class=&quot;wikilink1&quot; title=&quot;wiki:backends:cpp_lang&quot; data-wiki-id=&quot;wiki:backends:cpp_lang&quot;&gt;C++&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;&lt;a href=&quot;https://sinelabore.com/doku.php/wiki/backends/java_lang&quot; class=&quot;wikilink1&quot; title=&quot;wiki:backends:java_lang&quot; data-wiki-id=&quot;wiki:backends:java_lang&quot;&gt;Java&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;&lt;a href=&quot;https://sinelabore.com/doku.php/wiki/news/16aug2013&quot; class=&quot;wikilink1&quot; title=&quot;wiki:news:16aug2013&quot; data-wiki-id=&quot;wiki:news:16aug2013&quot;&gt;C#&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;&lt;a href=&quot;https://sinelabore.com/doku.php/wiki/news/14feb2020&quot; class=&quot;wikilink1&quot; title=&quot;wiki:news:14feb2020&quot; data-wiki-id=&quot;wiki:news:14feb2020&quot;&gt;Lua&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;&lt;a href=&quot;https://sinelabore.com/doku.php/wiki/news/5sep2014&quot; class=&quot;wikilink1&quot; title=&quot;wiki:news:5sep2014&quot; data-wiki-id=&quot;wiki:news:5sep2014&quot;&gt;Swift&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;&lt;a href=&quot;https://sinelabore.com/doku.php/wiki/backends/python_lang&quot; class=&quot;wikilink1&quot; title=&quot;wiki:backends:python_lang&quot; data-wiki-id=&quot;wiki:backends:python_lang&quot;&gt;Python&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;&lt;a href=&quot;https://sinelabore.com/doku.php/wiki/backends/rust_lang&quot; class=&quot;wikilink1&quot; title=&quot;wiki:backends:rust_lang&quot; data-wiki-id=&quot;wiki:backends:rust_lang&quot;&gt;Rust&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;&lt;a href=&quot;https://sinelabore.com/doku.php/wike/backends/go_lang&quot; class=&quot;wikilink1&quot; title=&quot;wike:backends:go_lang&quot; data-wiki-id=&quot;wike:backends:go_lang&quot;&gt;GO&lt;/a&gt; &lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;&lt;a href=&quot;https://sinelabore.com/doku.php/wiki/backends/javascript&quot; class=&quot;wikilink1&quot; title=&quot;wiki:backends:javascript&quot; data-wiki-id=&quot;wiki:backends:javascript&quot;&gt;JavaScript&lt;/a&gt; &lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Language Backends&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;language_backends&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:3,&amp;quot;range&amp;quot;:&amp;quot;1926-2300&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit4&quot; id=&quot;rtosbare_metal&quot;&gt;RTOS/Bare Metal&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://sinelabore.com/doku.php/wiki/howto/cubemx&quot; class=&quot;wikilink1&quot; title=&quot;wiki:howto:cubemx&quot; data-wiki-id=&quot;wiki:howto:cubemx&quot;&gt;Using State-Machines with STM32F101C8T and the CubeMX Tool from STM&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://sinelabore.com/doku.php/wiki/howto/rtos&quot; class=&quot;wikilink1&quot; title=&quot;wiki:howto:rtos&quot; data-wiki-id=&quot;wiki:howto:rtos&quot;&gt;Using State-Machines with FreeRTOS&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://sinelabore.com/doku.php/wiki/howto/vxworks&quot; class=&quot;wikilink1&quot; title=&quot;wiki:howto:vxworks&quot; data-wiki-id=&quot;wiki:howto:vxworks&quot;&gt;Using State-Machines with VxWorks&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://sinelabore.com/doku.php/wiki/toolbox/using_state-machines_with_a_real-time_operating_system_rtos&quot; class=&quot;wikilink1&quot; title=&quot;wiki:toolbox:using_state-machines_with_a_real-time_operating_system_rtos&quot; data-wiki-id=&quot;wiki:toolbox:using_state-machines_with_a_real-time_operating_system_rtos&quot;&gt;Using State-Machines with embOS&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://sinelabore.com/doku.php/wiki/news/02jan2015&quot; class=&quot;wikilink1&quot; title=&quot;wiki:news:02jan2015&quot; data-wiki-id=&quot;wiki:news:02jan2015&quot;&gt;Using State-Machines in a main-loop system (without RTOS)&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://sinelabore.com/doku.php/wiki/toolbox/event-based_versus_polling&quot; class=&quot;wikilink1&quot; title=&quot;wiki:toolbox:event-based_versus_polling&quot; data-wiki-id=&quot;wiki:toolbox:event-based_versus_polling&quot;&gt;Event-based versus polling&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://sinelabore.com/doku.php/wiki/toolbox/using_state_machines_in_low-power_embedded_systems&quot; class=&quot;wikilink1&quot; title=&quot;wiki:toolbox:using_state_machines_in_low-power_embedded_systems&quot; data-wiki-id=&quot;wiki:toolbox:using_state_machines_in_low-power_embedded_systems&quot;&gt;Using State Machines in Low-Power Embedded Systems - I&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://sinelabore.com/doku.php/wiki/toolbox/using_state_machines_in_low-power_embedded_systems_part_ii&quot; class=&quot;wikilink1&quot; title=&quot;wiki:toolbox:using_state_machines_in_low-power_embedded_systems_part_ii&quot; data-wiki-id=&quot;wiki:toolbox:using_state_machines_in_low-power_embedded_systems_part_ii&quot;&gt;Using State Machines in Low-Power Embedded Systems - II&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;RTOS\/Bare Metal&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;rtosbare_metal&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:4,&amp;quot;range&amp;quot;:&amp;quot;2301-3080&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit5&quot; id=&quot;how-to&quot;&gt;How-To&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://sinelabore.com/doku.php/wiki/howto/javaproblems&quot; class=&quot;wikilink1&quot; title=&quot;wiki:howto:javaproblems&quot; data-wiki-id=&quot;wiki:howto:javaproblems&quot;&gt;Q&amp;amp;A related to Java issues&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;img src=&quot;https://sinelabore.com/lib/exe/fetch.php/pix_paper.png&quot; class=&quot;medialeft&quot; align=&quot;left&quot; loading=&quot;lazy&quot; alt=&quot;&quot; /&gt;&lt;a href=&quot;https://sinelabore.com/doku.php/other_resources&quot; class=&quot;wikilink1&quot; title=&quot;other_resources&quot; data-wiki-id=&quot;other_resources&quot;&gt;Interesting readings&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://sinelabore.com/doku.php/wiki/howto/static_code_checkers&quot; class=&quot;wikilink1&quot; title=&quot;wiki:howto:static_code_checkers&quot; data-wiki-id=&quot;wiki:howto:static_code_checkers&quot;&gt;Static Code Checkers&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://sinelabore.com/doku.php/wiki/issues/known_issues&quot; class=&quot;wikilink1&quot; title=&quot;wiki:issues:known_issues&quot; data-wiki-id=&quot;wiki:issues:known_issues&quot;&gt;Known Issues&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://sinelabore.com/doku.php/wiki/getting_started/operating_systems&quot; class=&quot;wikilink1&quot; title=&quot;wiki:getting_started:operating_systems&quot; data-wiki-id=&quot;wiki:getting_started:operating_systems&quot;&gt;Noteworthy per operating system&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;How-To&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;how-to&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:5,&amp;quot;range&amp;quot;:&amp;quot;3081-3416&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit6&quot; id=&quot;designers_toolbox&quot;&gt;Designers Toolbox&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://sinelabore.com/doku.php/wiki/toolbox/time_events_in_state_machines&quot; class=&quot;wikilink1&quot; title=&quot;wiki:toolbox:time_events_in_state_machines&quot; data-wiki-id=&quot;wiki:toolbox:time_events_in_state_machines&quot;&gt; Using time triggered events&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://sinelabore.com/doku.php/wiki/toolbox/regions_or_no_regions&quot; class=&quot;wikilink1&quot; title=&quot;wiki:toolbox:regions_or_no_regions&quot; data-wiki-id=&quot;wiki:toolbox:regions_or_no_regions&quot;&gt; Using regions or not&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://sinelabore.com/doku.php/wiki/toolbox/features_for_high-availability_and_safety_systems&quot; class=&quot;wikilink1&quot; title=&quot;wiki:toolbox:features_for_high-availability_and_safety_systems&quot; data-wiki-id=&quot;wiki:toolbox:features_for_high-availability_and_safety_systems&quot;&gt;High-Availability and Safety Systems&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://sinelabore.com/doku.php/wiki/toolbox/model-based_testing_of_state_machines_i&quot; class=&quot;wikilink1&quot; title=&quot;wiki:toolbox:model-based_testing_of_state_machines_i&quot; data-wiki-id=&quot;wiki:toolbox:model-based_testing_of_state_machines_i&quot;&gt;Model-based testing of state machines I&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://sinelabore.com/doku.php/wiki/toolbox/model-based_testing_of_state_machines_ii&quot; class=&quot;wikilink1&quot; title=&quot;wiki:toolbox:model-based_testing_of_state_machines_ii&quot; data-wiki-id=&quot;wiki:toolbox:model-based_testing_of_state_machines_ii&quot;&gt;Model-based testing of state machines II&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://sinelabore.com/doku.php/wiki/toolbox/trace-the-event-flow&quot; class=&quot;wikilink1&quot; title=&quot;wiki:toolbox:trace-the-event-flow&quot; data-wiki-id=&quot;wiki:toolbox:trace-the-event-flow&quot;&gt;Create nice looking state flow diagrams using Mscgen&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;http://www.embedded.com/design/prototyping-and-development/4008341/State-charts-can-provide-you-with-software-quality-insurance&quot; class=&quot;urlextern&quot; title=&quot;http://www.embedded.com/design/prototyping-and-development/4008341/State-charts-can-provide-you-with-software-quality-insurance&quot; rel=&quot;ugc nofollow&quot;&gt; Article on www.embedded.com&lt;/a&gt; State charts can provide you with software quality insurance. &lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;img src=&quot;https://sinelabore.com/lib/exe/fetch.php/header-logo.png?w=40&amp;amp;tok=7bde33&quot; class=&quot;media&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;40&quot; /&gt;&lt;a href=&quot;https://sinelabore.com/doku.php/wiki/toolbox/bela&quot; class=&quot;wikilink1&quot; title=&quot;wiki:toolbox:bela&quot; data-wiki-id=&quot;wiki:toolbox:bela&quot;&gt; Tutorial about state machines@bela.io&lt;/a&gt;&lt;span class=&quot;wrap_hi &quot;&gt;  New!&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Designers Toolbox&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;designers_toolbox&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:6,&amp;quot;range&amp;quot;:&amp;quot;3417-4344&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit7&quot; id=&quot;examples&quot;&gt;Examples&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://sinelabore.com/doku.php/wiki/examples/function_blocks_desing&quot; class=&quot;wikilink1&quot; title=&quot;wiki:examples:function_blocks_desing&quot; data-wiki-id=&quot;wiki:examples:function_blocks_desing&quot;&gt;Designing signal forming function blocks&lt;/a&gt; &lt;span class=&quot;wrap_hi &quot;&gt;  New!&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://sinelabore.com/doku.php/wiki/examples/userinterfacedesign&quot; class=&quot;wikilink1&quot; title=&quot;wiki:examples:userinterfacedesign&quot; data-wiki-id=&quot;wiki:examples:userinterfacedesign&quot;&gt;State machines for GUI design&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://sinelabore.com/doku.php/wiki/examples/pic_tutorial&quot; class=&quot;wikilink1&quot; title=&quot;wiki:examples:pic_tutorial&quot; data-wiki-id=&quot;wiki:examples:pic_tutorial&quot;&gt;Getting started with the PIC16F18446 and State Machines&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://sinelabore.com/doku.php/wiki/news/11aug2015&quot; class=&quot;wikilink1&quot; title=&quot;wiki:news:11aug2015&quot; data-wiki-id=&quot;wiki:news:11aug2015&quot;&gt; Building a Modbus RTU server with state machines, activity diagrams and minimal runtime environment &lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://sinelabore.com/doku.php/wiki/news/22may2016&quot; class=&quot;wikilink1&quot; title=&quot;wiki:news:22may2016&quot; data-wiki-id=&quot;wiki:news:22may2016&quot;&gt; Vending machine with PyTK GUI&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;  &lt;a href=&quot;https://sinelabore.com/doku.php/wiki/examples/light_controller&quot; class=&quot;wikilink1&quot; title=&quot;wiki:examples:light_controller&quot; data-wiki-id=&quot;wiki:examples:light_controller&quot;&gt;Light Controller&lt;/a&gt;   &lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;  &lt;a href=&quot;https://sinelabore.com/doku.php/wiki/examples/plcopen_function_block&quot; class=&quot;wikilink1&quot; title=&quot;wiki:examples:plcopen_function_block&quot; data-wiki-id=&quot;wiki:examples:plcopen_function_block&quot;&gt;PLCOpen Function Block&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;  &lt;a href=&quot;https://sinelabore.com/doku.php/wiki/examples/dcf77_radio-clock_decoder&quot; class=&quot;wikilink1&quot; title=&quot;wiki:examples:dcf77_radio-clock_decoder&quot; data-wiki-id=&quot;wiki:examples:dcf77_radio-clock_decoder&quot;&gt;DCF77 Radio-Clock Decoder&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;  &lt;a href=&quot;https://sinelabore.com/doku.php/wiki/examples/car_window_lift_controller&quot; class=&quot;wikilink1&quot; title=&quot;wiki:examples:car_window_lift_controller&quot; data-wiki-id=&quot;wiki:examples:car_window_lift_controller&quot;&gt;Car Window Lift Controller&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;  &lt;a href=&quot;https://sinelabore.com/doku.php/wiki/examples/mobile_robot_i&quot; class=&quot;wikilink1&quot; title=&quot;wiki:examples:mobile_robot_i&quot; data-wiki-id=&quot;wiki:examples:mobile_robot_i&quot;&gt;Asuro Mobile Robot Programming&lt;/a&gt;   &lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;  &lt;a href=&quot;https://sinelabore.com/doku.php/wiki/examples/pump_controller&quot; class=&quot;wikilink1&quot; title=&quot;wiki:examples:pump_controller&quot; data-wiki-id=&quot;wiki:examples:pump_controller&quot;&gt;Pump Controller&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;  &lt;a href=&quot;https://sinelabore.com/doku.php/wiki/examples/room_thermostat&quot; class=&quot;wikilink1&quot; title=&quot;wiki:examples:room_thermostat&quot; data-wiki-id=&quot;wiki:examples:room_thermostat&quot;&gt;Room Thermostat, example with regions&lt;/a&gt; &lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://sinelabore.com/doku.php/wiki/news/02jan2015&quot; class=&quot;wikilink1&quot; title=&quot;wiki:news:02jan2015&quot; data-wiki-id=&quot;wiki:news:02jan2015&quot;&gt;Wireless temperature sensor&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://github.com/sinelabore/examples&quot; class=&quot;urlextern&quot; title=&quot;https://github.com/sinelabore/examples&quot; rel=&quot;ugc nofollow&quot;&gt;Energia example on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Examples&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;examples&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:7,&amp;quot;range&amp;quot;:&amp;quot;4345-5443&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit8&quot; id=&quot;there_are_better_ways_to_model_state_machines_than_using_spread_sheets&quot;&gt;There are better ways to model state machines than using spread sheets!&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
 In the past different μC manufacturers have published application notes about the benefit of using state machines for the design of embedded software. An example is  the application note &lt;a href=&quot;https://www.ti.com/lit/an/slaa402a/slaa402a.pdf&quot; class=&quot;urlextern&quot; title=&quot;https://www.ti.com/lit/an/slaa402a/slaa402a.pdf&quot; rel=&quot;ugc nofollow&quot;&gt;SLAA402&lt;/a&gt; from Texas Instruments (TI). It suggests to generate source code based on a spread sheet table. Nowadays several affordable &lt;abbr title=&quot;Unified Modeling Language&quot;&gt;UML&lt;/abbr&gt; modeling tools are available supporting the efficient design of state machines in a graphical way. SinelaboreRT generates production quality source code from state diagrams created with many different &lt;abbr title=&quot;Unified Modeling Language&quot;&gt;UML&lt;/abbr&gt; tools. Give it a try!
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;There are better ways to model state machines than using spread sheets!&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;there_are_better_ways_to_model_state_machines_than_using_spread_sheets&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:8,&amp;quot;range&amp;quot;:&amp;quot;5444-6132&amp;quot;} --&gt;
&lt;h1 class=&quot;sectionedit9&quot; id=&quot;latest_changes&quot;&gt;Latest Changes&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;
Follow us on &lt;a href=&quot;https://www.youtube.com/@sinelaboreRT/&quot; class=&quot;media&quot; title=&quot;https://www.youtube.com/@sinelaboreRT/&quot; rel=&quot;ugc nofollow&quot;&gt;&lt;img src=&quot;https://sinelabore.com/lib/exe/fetch.php/yt_logo_rgb_light.png?w=60&amp;amp;tok=6ad575&quot; class=&quot;media&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;60&quot; /&gt;&lt;/a&gt;
&lt;a href=&quot;https://www.linkedin.com/in/sinelabore&quot; class=&quot;media&quot; title=&quot;https://www.linkedin.com/in/sinelabore&quot; rel=&quot;ugc nofollow&quot;&gt;&lt;img src=&quot;https://sinelabore.com/lib/exe/fetch.php/li-in-bug.png?w=20&amp;amp;tok=e8c995&quot; class=&quot;media&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;20&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Latest Changes&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;latest_changes&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:9,&amp;quot;range&amp;quot;:&amp;quot;6133-&amp;quot;} --&gt;</description>
            <author>webmin@undisclosed.example.com (webmin)</author>
            <pubDate>Sun, 15 Mar 2026 19:12:18 +0000</pubDate>
        </item>
        <item>
            <title>Trademarks and Terms of Use</title>
            <link>https://sinelabore.com/doku.php/wiki/terms_of_use</link>
            <description>


&lt;h1 class=&quot;sectionedit1&quot; id=&quot;trademarks_and_terms_of_use&quot;&gt;Trademarks and Terms of Use&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;
I refer to the &lt;a href=&quot;https://sinelabore.com/lib/exe/fetch.php/wiki/downloads/agb_sinelabore_2021.pdf&quot; class=&quot;media mediafile mf_pdf&quot; title=&quot;wiki:downloads:agb_sinelabore_2021.pdf (64.9 KB)&quot;&gt;Contract and License Conditions SINELABORE Software / Vertrags- und Lizenzbedingungen Sinelabore Software&lt;/a&gt;, which apply insofar as nothing to the contrary results from the following conditions.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Trademarks and Terms of Use&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;trademarks_and_terms_of_use&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;14-309&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit2&quot; id=&quot;trademarks&quot;&gt;Trademarks&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Java is a registered trademark of Sun Microsystems, Inc. in the United States and/or other countries.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Microsoft, Windows Vista, Windows XP, Windows 2000, Windows, Microsoft Word, Word 97 and Word 2003 are trademarks or registered trademarks of Microsoft Corporation.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Cadifra is a registered trademark Adrian &amp;amp; Frank Buehlmann.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Enterprise Architect is a trademark of Sparx Systems Pty Ltd &lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Magic Draw is a trademark of No Magic, Inc.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; UModel is a trademark of Altova GmbH and Altova Inc.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; ArgoUML is made available under the BSD Open Source License&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;abbr title=&quot;Unified Modeling Language&quot;&gt;UML&lt;/abbr&gt; and Unified Modeling Language are trademarks or registered trademarks of Object Management Group, Inc.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; SysML and SysML v2 are trademarks or registered trademarks of &lt;abbr title=&quot;Object Management Group&quot;&gt;OMG&lt;/abbr&gt; Object Management Group, Inc..&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Other trademarks or registered trademarks mentioned on this web site are the property of their respective owners and no rights are claimed for these.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Trademarks&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;trademarks&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;310-1274&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit3&quot; id=&quot;terms_of_use_license_agreement&quot;&gt;Terms of Use, License Agreement&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
This software and its associated documentation are the intellectual property of Peter Mueller.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Terms of Use, License Agreement&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;terms_of_use_license_agreement&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:3,&amp;quot;range&amp;quot;:&amp;quot;1275-1415&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit4&quot; id=&quot;this_software_is_licensed_not_bought&quot;&gt;This Software is Licensed, not Bought&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
The licensee obtains the non-exclusive, non-transferable right, to use the software under the conditions given below. The license remains valid for an unlimited period of time.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;This Software is Licensed, not Bought&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;this_software_is_licensed_not_bought&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:4,&amp;quot;range&amp;quot;:&amp;quot;1416-1642&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit5&quot; id=&quot;storage_and_network_use&quot;&gt;Storage and Network Use&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Each licensed copy of the software may either be used by a single person who uses the software personally on one or more computers, or installed on a single workstation used non-simultaneously by multiple people, but not both. Each licensed copy may be accessed through a network, provided that you have purchased the rights to use a licensed copy for each workstation that will access the software through the network. You may make copies of the Software for backup purpose. 
The Software may be installed and used on an unlimited number of computers, provided the software is used in evaluation mode (i.e. without the license file). Evaluation mode of the software may only be used for evaluation or demonstration purposes, not for development or production.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Storage and Network Use&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;storage_and_network_use&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:5,&amp;quot;range&amp;quot;:&amp;quot;1643-2439&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit6&quot; id=&quot;no_derivative_works&quot;&gt;No Derivative Works&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
The licensee agrees not to translate, disassemble, de-compile or in any other way create derivative works of the software.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;No Derivative Works&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;no_derivative_works&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:6,&amp;quot;range&amp;quot;:&amp;quot;2440-2594&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit7&quot; id=&quot;no_resale&quot;&gt;No Resale&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
The licensee agrees not to rent, sell, lend, license or otherwise distribute the software to any third party without the prior written consent of Peter Mueller. (However, the licensee is encouraged to recommend the software.)
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;No Resale&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;no_resale&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:7,&amp;quot;range&amp;quot;:&amp;quot;2595-2842&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit8&quot; id=&quot;limitation_of_liability&quot;&gt;Limitation of Liability&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
The software is provided “as is”, without warranty of any kind, express of implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and non-infringement. In no event shall Peter Mueller or any other contributor be liable for any claim, damages or other liability, whether in an action of contract, tort or otherwise, arising from, out of or in connection with the software or the use of other dealings in the software. In no event shall Peter Mueller‘s liability arising out of the use or inability to use the software exceed the amount that you have actually paid for the software. 
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Limitation of Liability&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;limitation_of_liability&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:8,&amp;quot;range&amp;quot;:&amp;quot;2843-3517&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit9&quot; id=&quot;general&quot;&gt;General&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Place of performance and place of jurisdiction for all disputes arising from and in connection with this contract are the headquarters of Sinelabore Software Tools GmbH.
&lt;/p&gt;

&lt;p&gt;
For questions write to
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://sinelabore.com/lib/exe/detail.php/contact.jpg?id=wiki%3Aterms_of_use&quot; class=&quot;media&quot; title=&quot;contact.jpg&quot;&gt;&lt;img src=&quot;https://sinelabore.com/lib/exe/fetch.php/contact.jpg&quot; class=&quot;media&quot; loading=&quot;lazy&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;General&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;general&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:9,&amp;quot;range&amp;quot;:&amp;quot;3518-&amp;quot;} --&gt;</description>
            <author>webmin@undisclosed.example.com (webmin)</author>
            <pubDate>Sat, 29 Nov 2025 13:13:13 +0000</pubDate>
        </item>
        <item>
            <title>From design to code with ease - [Generate CPP code from SysML V2 textual models] </title>
            <link>https://sinelabore.com/doku.php/start</link>
            <description>


&lt;h1 class=&quot;sectionedit1&quot; id=&quot;from_design_to_code_with_ease&quot;&gt;From design to code with ease&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;From design to code with ease&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;from_design_to_code_with_ease&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;373-417&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit2&quot; id=&quot;generate_production_ready_source_code_from_state_diagrams&quot;&gt;Generate production ready source code from state diagrams&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Sinelabore enables developers to effectively combine event-driven architecture, hierarchical state machines, model-based design and automatic code generation. A payback is usually given already immediately.
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://sinelabore.com/lib/exe/detail.php/sinelabore_homepage.svg?id=start&quot; class=&quot;media&quot; title=&quot;sinelabore_homepage.svg&quot;&gt;&lt;img src=&quot;https://sinelabore.com/lib/exe/fetch.php/sinelabore_homepage.svg?w=600&amp;amp;tok=608596&quot; class=&quot;media&quot; loading=&quot;lazy&quot; title=&quot; Image showing the design workflow using the sinelabore code generator for embedded system design.&quot; alt=&quot; Image showing the design workflow using the sinelabore code generator for embedded system design.&quot; width=&quot;600&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Generate production ready source code from state diagrams&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;generate_production_ready_source_code_from_state_diagrams&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;418-830&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit3&quot; id=&quot;generate_cpp_code_from_sysml_v2_textual_models&quot;&gt;Generate CPP code from SysML V2 textual models&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Sinelabore allows also the generation of CPP code on the basis of a SysML V2 textual specification. Code generation for parts, attributes, ports, enums, connections and of course state machines is supported. This allows to specify complete systems in a simple and efficient way and to simulate them on CPP basis. Some basic framework classes are used in addition to provide required glue code.
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://sinelabore.com/lib/exe/detail.php/wiki/sysml_v2.svg?id=start&quot; class=&quot;media&quot; title=&quot;wiki:sysml_v2.svg&quot;&gt;&lt;img src=&quot;https://sinelabore.com/lib/exe/fetch.php/wiki/sysml_v2.svg?w=600&amp;amp;tok=035e07&quot; class=&quot;media&quot; loading=&quot;lazy&quot; title=&quot; Image showing the design workflow using the sinelabore code generator for SysML-V2 textual notation based designs.&quot; alt=&quot; Image showing the design workflow using the sinelabore code generator for SysML-V2 textual notation based designs.&quot; width=&quot;600&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
If you are specifically interested in the new SysML V2 features go on reading &lt;a href=&quot;https://sinelabore.com/doku.php/wiki/landing_pages/sysml/sysml_v2&quot; class=&quot;wikilink1&quot; title=&quot;wiki:landing_pages:sysml:sysml_v2&quot; data-wiki-id=&quot;wiki:landing_pages:sysml:sysml_v2&quot;&gt;here&lt;/a&gt;.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Generate CPP code from SysML V2 textual models&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;generate_cpp_code_from_sysml_v2_textual_models&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:3,&amp;quot;range&amp;quot;:&amp;quot;831-1550&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit4&quot; id=&quot;what_can_sinelabore_do_for_me_as_an_embedded_software_developer&quot;&gt;What can Sinelabore do for me as an embedded software developer?&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Sinelabore&lt;em&gt;RT&lt;/em&gt; focus is on generation of readable and maintainable code from flat or hierarchical &lt;abbr title=&quot;Unified Modeling Language&quot;&gt;UML&lt;/abbr&gt; state machine diagrams. With its unique features the tool covers perfectly the requirements of &lt;strong&gt;embedded real-time and low-power application developers&lt;/strong&gt; coding in C / CPP or another language. The generated code is independent of CPU and operating system.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;What can Sinelabore do for me as an embedded software developer?&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;what_can_sinelabore_do_for_me_as_an_embedded_software_developer&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:4,&amp;quot;range&amp;quot;:&amp;quot;1551-1989&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit5&quot; id=&quot;what_can_sinelabore_do_for_me_as_a_software_developer_for_the_iot_or_for_critical_applications&quot;&gt;What can Sinelabore do for me as a software developer for the IoT or for critical applications?&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Many systems are likely candidates for implementation as finite state machines. A system that must sequence a series of actions or that must handle inputs differently depending on the mode it is in is often best implemented as a finite state machine. Typical examples are control-logic-oriented applications such as metering, monitoring, workflows and control applications. For &lt;strong&gt;IoT applications&lt;/strong&gt; where parts of the application are implemented in Java / Python / C# / Lua / Rust / JavaScript / Go or Swift, the code can also be generated in these languages besides C or CPP.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;What can Sinelabore do for me as a software developer for the IoT or for critical applications?&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;what_can_sinelabore_do_for_me_as_a_software_developer_for_the_iot_or_for_critical_applications&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:5,&amp;quot;range&amp;quot;:&amp;quot;1990-2676&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit6&quot; id=&quot;how_do_i_use_the_code-generator&quot;&gt;How do I use the Code-Generator?&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Use your existing favourite modelling tool and generate code from your created model with an &lt;strong&gt;easy-to-use command line tool&lt;/strong&gt;. Or use the &lt;a href=&quot;https://sinelabore.com/doku.php/wiki/manual/editor&quot; class=&quot;wikilink1&quot; title=&quot;wiki:manual:editor&quot; data-wiki-id=&quot;wiki:manual:editor&quot;&gt;built editor&lt;/a&gt; to create state machines within minutes. Automatic model checks warn from design flaws. Configure the generation process according to your needs. Simulate your model. Generate trace code automatically if needed. All major state diagram features like hierarchical states, regions, history, sub-machines … are supported.
&lt;/p&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;plugin_wrap_start&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;secid&amp;quot;:7,&amp;quot;range&amp;quot;:&amp;quot;0-&amp;quot;} --&gt;&lt;div class=&quot;wrap_center wrap_round wrap_download plugin_wrap&quot; style=&quot;width: 100%;&quot;&gt;
&lt;p&gt;
&lt;a href=&quot;https://sinelabore.com/doku.php/wiki/accepted_download&quot; class=&quot;wikilink1&quot; title=&quot;wiki:accepted_download&quot; data-wiki-id=&quot;wiki:accepted_download&quot;&gt; Download &amp;amp; Try it! There are examples for various UML modelling tools and target languages for having a quick start.  
&lt;/a&gt;
&lt;/p&gt;
&lt;/div&gt;&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;plugin_wrap_end&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;secid&amp;quot;:8,&amp;quot;range&amp;quot;:&amp;quot;0-&amp;quot;} --&gt;
&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;How do I use the Code-Generator?&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;how_do_i_use_the_code-generator&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:6,&amp;quot;range&amp;quot;:&amp;quot;2677-3409&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit9&quot; id=&quot;does_the_code_generator_run_on_my_os&quot;&gt;Does the Code Generator run on my OS?&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
The Sinelabore code generator runs on any &lt;abbr title=&quot;Operating System&quot;&gt;OS&lt;/abbr&gt; that supports a modern Java Version e.g. Windows, 
Linux, macOS or from within a container.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Does the Code Generator run on my OS?&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;does_the_code_generator_run_on_my_os&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:9,&amp;quot;range&amp;quot;:&amp;quot;3410-3598&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit10&quot; id=&quot;can_i_use_the_generated_code_on_my_embedded_platform&quot;&gt;Can I use the generated code on my embedded platform?&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
&lt;a href=&quot;https://sinelabore.com/lib/exe/detail.php/jigsaw.png?id=start&quot; class=&quot;media&quot; title=&quot;jigsaw.png&quot;&gt;&lt;img src=&quot;https://sinelabore.com/lib/exe/fetch.php/jigsaw.png?w=80&amp;amp;tok=93c628&quot; class=&quot;medialeft&quot; align=&quot;left&quot; loading=&quot;lazy&quot; title=&quot;Icon indicating the codegen flexibility&quot; alt=&quot;Icon indicating the codegen flexibility&quot; width=&quot;80&quot; /&gt;&lt;/a&gt; By generating code that can be compiled with virtually any compiler, and the ability to integrate with your existing IDE, build process or continuous integration system, the code generator can be quickly integrated into any project. Configuration is stored in a plain text file which allows customisation of generated code to exactly your needs.
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Generated code has production-quality. It is based on nested &lt;code&gt;switch/case&lt;/code&gt; and &lt;code&gt;if/then/else&lt;/code&gt; statements. It is easy to read, understand and debug if needed. The generated code requires no compiler specific tricks except standard language features. This means that if the worst comes to the worst, you can easily change or expand the code by hand.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Can be used with any 8-, 16- or 32-bit CPUs. There is &lt;strong&gt;no run-time environment needed&lt;/strong&gt; like with some other solutions.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Fits well in different system designs. The code generator &lt;strong&gt;does not dictate how you design your system&lt;/strong&gt;. Therefore it is no problem to use the generated code in the context of a real-time operating system (VxWorks, FreeRTOS, embOS, RTEMS, …) or within an interrupt service routine or in a foreground / background (super loop) system.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; There will be &lt;strong&gt;no problems when using static code analyzers&lt;/strong&gt;.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Generated cpp code passes clang-tidy and is cpp11 ready (modernize-*). Set configuration parameters accordingly.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Can I use the generated code on my embedded platform?&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;can_i_use_the_generated_code_on_my_embedded_platform&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:10,&amp;quot;range&amp;quot;:&amp;quot;3599-5083&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit11&quot; id=&quot;how_sinelabore_improves_developer_productivity&quot;&gt;How Sinelabore Improves Developer Productivity&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Avoid bugs that can waste countless hours of developer and end-user time before they are found. Developers spend a lot of their time coding state machines by hand. 
&lt;a href=&quot;https://sinelabore.com/lib/exe/detail.php/uhr.png?id=start&quot; class=&quot;media&quot; title=&quot;uhr.png&quot;&gt;&lt;img src=&quot;https://sinelabore.com/lib/exe/fetch.php/uhr.png?w=50&amp;amp;tok=4110ea&quot; class=&quot;medialeft&quot; align=&quot;left&quot; loading=&quot;lazy&quot; title=&quot;Icon that shows the time saved when using the sinelabore code generator&quot; alt=&quot;Icon that shows the time saved when using the sinelabore code generator&quot; width=&quot;50&quot; /&gt;&lt;/a&gt;
And have to do it whenever the design changes. Sinelabore avoids the error-prone and tedious hand-coding by generating high-quality source code directly from the state machine design document.
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; No gap between design and code anymore. The documentation is always up to date.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Use the &lt;abbr title=&quot;Unified Modeling Language&quot;&gt;UML&lt;/abbr&gt; tool of your choice: &lt;a href=&quot;https://sinelabore.com/doku.php/wiki/landing_pages/cadifra&quot; class=&quot;wikilink1&quot; title=&quot;wiki:landing_pages:cadifra&quot; data-wiki-id=&quot;wiki:landing_pages:cadifra&quot;&gt;Cadifra UML Editor&lt;/a&gt;, &lt;a href=&quot;https://sinelabore.com/doku.php/wiki/getting_started/umodel_windows_mingw&quot; class=&quot;wikilink1&quot; title=&quot;wiki:getting_started:umodel_windows_mingw&quot; data-wiki-id=&quot;wiki:getting_started:umodel_windows_mingw&quot;&gt;UModel&lt;/a&gt;,  &lt;a href=&quot;https://sinelabore.com/doku.php/wiki/toolbox/model-based_testing_of_state_machines_i&quot; class=&quot;wikilink1&quot; title=&quot;wiki:toolbox:model-based_testing_of_state_machines_i&quot; data-wiki-id=&quot;wiki:toolbox:model-based_testing_of_state_machines_i&quot;&gt;Magic Draw&lt;/a&gt;, &lt;a href=&quot;https://sinelabore.com/doku.php/wiki/landing_pages/ea&quot; class=&quot;wikilink1&quot; title=&quot;wiki:landing_pages:ea&quot; data-wiki-id=&quot;wiki:landing_pages:ea&quot;&gt;Enterprise Architect&lt;/a&gt;, &lt;a href=&quot;https://sinelabore.com/doku.php/wiki/news/7june2014&quot; class=&quot;wikilink1&quot; title=&quot;wiki:news:7june2014&quot; data-wiki-id=&quot;wiki:news:7june2014&quot;&gt;Astah* / astah SysML&lt;/a&gt;, Visual Paradigm, &lt;a href=&quot;https://sinelabore.com/doku.php/wiki/howto/modelio&quot; class=&quot;wikilink1&quot; title=&quot;wiki:howto:modelio&quot; data-wiki-id=&quot;wiki:howto:modelio&quot;&gt;Modelio&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://sinelabore.com/doku.php/wiki/manual/editor&quot; class=&quot;wikilink1&quot; title=&quot;wiki:manual:editor&quot; data-wiki-id=&quot;wiki:manual:editor&quot;&gt;An integrated state diagram&lt;/a&gt; editor makes it easy to get started and allows you to create state diagrams within minutes. The entry barrier is significantly lower compared to full-fledged &lt;abbr title=&quot;Unified Modeling Language&quot;&gt;UML&lt;/abbr&gt; tools. A series of tutorials (see sidebar) explains step by step how to use the integrated diagram tool.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;  Use the code generator only for those parts of your software that benefit from state machine modeling and code generation. Use your existing development environment for all the other code. The code-generator does not dictate an “all or nothing” approach as many other commercial tools.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Automatic robustness tests, test-case generation, tracing and simulation&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Extensive &lt;a href=&quot;https://sinelabore.com/lib/exe/fetch.php/wiki/downloads/sinelaborert.pdf&quot; class=&quot;media mediafile mf_pdf&quot; title=&quot;wiki:downloads:sinelaborert.pdf (6.9 MB)&quot;&gt;Manual&lt;/a&gt; with getting started section&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;How Sinelabore Improves Developer Productivity&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;how_sinelabore_improves_developer_productivity&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:11,&amp;quot;range&amp;quot;:&amp;quot;5084-6810&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit12&quot; id=&quot;secure_on-site_code_generation&quot;&gt;Secure, On-site Code Generation&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
The code generator runs locally on your developer workstations, build servers or continuous integration servers. 
&lt;a href=&quot;https://sinelabore.com/lib/exe/detail.php/schluessel.png?id=start&quot; class=&quot;media&quot; title=&quot;schluessel.png&quot;&gt;&lt;img src=&quot;https://sinelabore.com/lib/exe/fetch.php/schluessel.png?w=50&amp;amp;tok=df4d83&quot; class=&quot;medialeft&quot; align=&quot;left&quot; loading=&quot;lazy&quot; title=&quot; Icon that shows the hat your code is never loaded on any server by the sinelabore code generator&quot; alt=&quot; Icon that shows the hat your code is never loaded on any server by the sinelabore code generator&quot; width=&quot;50&quot; /&gt;&lt;/a&gt;
It does not use an internet connection and will never collect nor submit data, code, statistics, analytics, or any other information from your system over any channel.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Secure, On-site Code Generation&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;secure_on-site_code_generation&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:12,&amp;quot;range&amp;quot;:&amp;quot;6811-7262&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit13&quot; id=&quot;generate_code_in_the_shortest_time&quot;&gt;Generate code in the shortest time&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
To get an impression of the powerful capabilities of the tool &lt;a href=&quot;https://sinelabore.com/doku.php/wiki/accepted_download&quot; class=&quot;wikilink1&quot; title=&quot;wiki:accepted_download&quot; data-wiki-id=&quot;wiki:accepted_download&quot;&gt; download&lt;/a&gt; the demo version. Checkout the examples folder to see the generated code. Follow the “Getting Started” pages on this website. The manual contains a basic introduction into state-machines in case you need a refresh. Read the sections related to your &lt;abbr title=&quot;Unified Modeling Language&quot;&gt;UML&lt;/abbr&gt; tool and the language backend you want to use. If no &lt;abbr title=&quot;Unified Modeling Language&quot;&gt;UML&lt;/abbr&gt; tool is already in place take a look at the &lt;a href=&quot;https://sinelabore.com/doku.php/wiki/manual/editor&quot; class=&quot;wikilink1&quot; title=&quot;wiki:manual:editor&quot; data-wiki-id=&quot;wiki:manual:editor&quot;&gt;built in state machine diagram editor&lt;/a&gt;. 
&lt;/p&gt;

&lt;p&gt;
To run the code you have two options.
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Run the examples on your PC. The example folder contains examples for all supported modelling tools and various languages (C, CPP, …). The examples realizes a microwave oven and can be executed and tested. Play with the model and enhance it. Regenerate the code and learn from the warning and error messages.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Run examples on a Micro-Controller e.g. a MSP430 evaluation board using Energia. An example with all details is available &lt;a href=&quot;https://github.com/sinelabore/examples/tree/master/EnergiaBlink&quot; class=&quot;urlextern&quot; title=&quot;https://github.com/sinelabore/examples/tree/master/EnergiaBlink&quot; rel=&quot;ugc nofollow&quot;&gt;on github&lt;/a&gt;. &lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Generate code in the shortest time&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;generate_code_in_the_shortest_time&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:13,&amp;quot;range&amp;quot;:&amp;quot;7263-8387&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit14&quot; id=&quot;customers_and_what_customers_say&quot;&gt;Customers and what customers say&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Sinelabore Code Generator is used worldwide by companies of all sizes, from well-known multinational organizations to smaller independent companies and consultants. The code generator is also used in a wide range of industries. 
&lt;/p&gt;

&lt;p&gt;
&lt;em&gt;“Sinelabore has helped me implement  the behavior of a complex, asynchronous system. All the &lt;abbr title=&quot;Unified Modeling Language&quot;&gt;UML&lt;/abbr&gt; 2 elements I needed are available. I like that I don’t have to draw the state machine, then separately implement it and keep these two synchronized; this saves me time and reduces the potential of bugs. The error checking to make sure the state machine is valid is also useful.
—-
&lt;strong&gt;Daniel Bedrenko / Software Developer @ BPS…tec GmbH”&lt;/strong&gt;&lt;/em&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;em&gt;“Thank you again for providing such great tool!”&lt;/em&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;em&gt;“… wir nutzen Ihr Produkt schon seit vielen Jahren und es hat sich als zuverlässiges und wertvolles Werkzeug erwiesen …” &lt;/em&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;em&gt;“We like Your Tool, infact we will give intro for another local company next week.”&lt;/em&gt;
&lt;/p&gt;

&lt;p&gt;
Study done by “&lt;em&gt;Laboratory of Model Driven Engineering for Embedded Systems @ CEA in France&lt;/em&gt;” with the title “&lt;em&gt;Complete Code Generation from &lt;abbr title=&quot;Unified Modeling Language&quot;&gt;UML&lt;/abbr&gt; State Machine&lt;/em&gt;” write in their report “ &lt;em&gt;… without optimization, Sinelabore generates the smallest executable size ,,,&lt;/em&gt;”.
&lt;/p&gt;
&lt;hr /&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Customers and what customers say&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;customers_and_what_customers_say&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:14,&amp;quot;range&amp;quot;:&amp;quot;8388-9667&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit15&quot; id=&quot;using_state-machines_in_low-power_embedded_systems&quot;&gt;Using State-Machines in (Low-Power) Embedded Systems&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
&lt;a href=&quot;https://sinelabore.com/lib/exe/detail.php/statemachinebaseddesign.svg?id=start&quot; class=&quot;media&quot; title=&quot;statemachinebaseddesign.svg&quot;&gt;&lt;img src=&quot;https://sinelabore.com/lib/exe/fetch.php/statemachinebaseddesign.svg?w=300&amp;amp;tok=750767&quot; class=&quot;mediaright&quot; align=&quot;right&quot; loading=&quot;lazy&quot; title=&quot; Embedded software architecture using BSP, Drivers and State Machines&quot; alt=&quot; Embedded software architecture using BSP, Drivers and State Machines&quot; width=&quot;300&quot; /&gt;&lt;/a&gt;
Reactive systems are characterized by a continuous interaction with their environment. They typically continuously receive inputs (events) from their environment and − usually within quite a short delay − react on these inputs. Reactive systems can be very well described with the help of state machines. State machines allow to develop an application in an iterative way. States in the state diagram often correspond to states in the application. The resulting model helps to manage the complexity of the application and to discuss it with colleagues from other departments (and domains).  Details can be added step by step during the development. Even during creation, the Code Generator can check the state diagrams for consistency (Model Check). Its logic can be simulated and tested. This ensures that the state machine behaves as intended.
State machines are very useful for control-oriented applications where attributes such as reliability, code size, power consumption, and real-time behavior are particularly important. 
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Using State-Machines in (Low-Power) Embedded Systems&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;using_state-machines_in_low-power_embedded_systems&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:15,&amp;quot;range&amp;quot;:&amp;quot;9668-10877&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit16&quot; id=&quot;system_architecture&quot;&gt;System Architecture&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
There are different ways how to integrate state machines in a specific system design. Some design principles are more applicable for developers of deeply embedded systems. Others more relevant for developers having not so tight resource constraints.
&lt;/p&gt;

&lt;p&gt;
The Sinelabore&lt;em&gt;RT&lt;/em&gt; code generator supports you in the creation of the state based control logic. 
Generated code fits well in different system designs. The code generator does not dictate how you design your system. Therefore it is no problem to use the generated code in the context of a real-time operating system or within an interrupt service routine or in a foreground / background system.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;System Architecture&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;system_architecture&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:16,&amp;quot;range&amp;quot;:&amp;quot;10878-11560&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit17&quot; id=&quot;using_state_machines_in_a_main-loop&quot;&gt;Using state machines in a main-loop&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
In this design an endless loop — typically the main function — calls one or more state machines after each other.
&lt;a href=&quot;https://sinelabore.com/lib/exe/detail.php/mainloop.svg?id=start&quot; class=&quot;media&quot; title=&quot;mainloop.svg&quot;&gt;&lt;img src=&quot;https://sinelabore.com/lib/exe/fetch.php/mainloop.svg?w=150&amp;amp;tok=1e6f9e&quot; class=&quot;mediaright&quot; align=&quot;right&quot; loading=&quot;lazy&quot; title=&quot;Using state machines in a main-loop&quot; alt=&quot;Using state machines in a main-loop&quot; width=&quot;150&quot; /&gt;&lt;/a&gt;
 It is still one of the most common ways of designing small embedded systems. The event information processed from the state machines might come from global or local variables fed from other code or IRQ handlers. The benefits of this design are no need for a runtime framework and only little RAM requirements.
&lt;/p&gt;

&lt;p&gt;
The consequences are:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; All housekeeping code has to be provided by the designer&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Main loop must be fast enough for the overall required response time&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; In case of extensions the timing must be carefully rechecked again&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Example:
&lt;/p&gt;
&lt;pre class=&quot;code c&quot;&gt;&lt;span class=&quot;kw4&quot;&gt;void&lt;/span&gt; main&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;kw4&quot;&gt;void&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
  …
  sm_A&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
  sm_B&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
  …
&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Using state machines in a main-loop&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;using_state_machines_in_a_main-loop&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:17,&amp;quot;range&amp;quot;:&amp;quot;11561-12403&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit18&quot; id=&quot;using_state_machines_in_a_main_loop_with_event_queue&quot;&gt;Using state machines in a main loop with event queue&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
This design is like the one presented above. But the state machine receives its events from an event queue. The queue is filled from timer events, other state machines (cooperating machines) or interrupt handlers.
&lt;a href=&quot;https://sinelabore.com/lib/exe/detail.php/mainloop_ext.svg?id=start&quot; class=&quot;media&quot; title=&quot;mainloop_ext.svg&quot;&gt;&lt;img src=&quot;https://sinelabore.com/lib/exe/fetch.php/mainloop_ext.svg?w=400&amp;amp;tok=6ebb68&quot; class=&quot;mediaright&quot; align=&quot;right&quot; loading=&quot;lazy&quot; title=&quot;Using state machines in a main loop with event queue&quot; alt=&quot;Using state machines in a main loop with event queue&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
Benefits:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Events are not lost (queuing)&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Event order is preserved&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Decoupling of event processing from event generation.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Consequences:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; A minimal runtime framework is required: Timers and Queues&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Main loop must be fast enough for the overall required response time&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
A minimal runtime framework for C is available here: &lt;a href=&quot;https://github.com/sinelabore/examples/tree/master/lib&quot; class=&quot;urlextern&quot; title=&quot;https://github.com/sinelabore/examples/tree/master/lib&quot; rel=&quot;ugc nofollow&quot;&gt;https://github.com/sinelabore/examples/tree/master/lib&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
It offers timers and queues. The intended usage is as follows:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Each state machine has an own event queue&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Eventually a state machine requires one or more timers (single shot or cyclically).&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; A state machine can create as  many timers as needed. When creating a timer the event queue of the state machine and the timeout event has to be provided. For different timers it makes sense to provide different timeout events.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; To make the timer work, a tick counter variable has to be incremented cyclically from a timer interrupt (e.g., every 10 ms). The tick frequency should be selected based on the minimal required resolution of the timeout times. &lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; A tick() function must be called in the main loop to check if any timer has expired. In case a timeout has happened the provided event is stored in the event queue of the state machine.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; The main loop has to check if events are stored for a state machine in its queue. If there are new events they are pulled from the queue and the state machine is called with the event.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a class=&quot;folder&quot; href=&quot;#folded_ffb0e274c76dfd90c85e4c7a7a564440_1&quot;&gt;Example code with two state machines shows the general principle: &lt;/a&gt;&lt;/p&gt;&lt;div class=&quot;folded hidden&quot; id=&quot;folded_ffb0e274c76dfd90c85e4c7a7a564440_1&quot;&gt;&lt;pre class=&quot;code c&quot;&gt;&lt;span class=&quot;co1&quot;&gt;// tick irq&lt;/span&gt;
&lt;span class=&quot;kw4&quot;&gt;void&lt;/span&gt; tick&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;kw4&quot;&gt;void&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
  pulseCnt&lt;span class=&quot;sy0&quot;&gt;++;&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
&amp;nbsp;
&lt;span class=&quot;kw4&quot;&gt;void&lt;/span&gt; main&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;kw4&quot;&gt;void&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
  ….
&amp;nbsp;
  &lt;span class=&quot;co1&quot;&gt;// create two queues for two state machines and init the timer subsystem&lt;/span&gt;
  fifoInit&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;&amp;amp;&lt;/span&gt;fifo2VendingMachine&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; fifo2VendingMachineRawMem&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
  fifoInit&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;&amp;amp;&lt;/span&gt;fifo2ProductStoreMachine&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; fifo2ProductStoreMachineRawMem&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
  timerInit&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
  …
&amp;nbsp;
  &lt;span class=&quot;kw1&quot;&gt;while&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
    &lt;span class=&quot;kw4&quot;&gt;uint8_t&lt;/span&gt; evt&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;co1&quot;&gt;//&lt;/span&gt;
    &lt;span class=&quot;co1&quot;&gt;// Check if there are new events for the state machine. If yes,&lt;/span&gt;
    &lt;span class=&quot;co1&quot;&gt;// call state machine with event.&lt;/span&gt;
    &lt;span class=&quot;co1&quot;&gt;//&lt;/span&gt;
    bool fifoEmpty &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; fifoIsEmpty&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;&amp;amp;&lt;/span&gt;fifo2VendingMachine&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;!&lt;/span&gt;fifoEmpty&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
      fifoGet&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;&amp;amp;&lt;/span&gt;fifo2VendingMachine&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;&amp;amp;&lt;/span&gt;evt&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
      vending_machine&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;&amp;amp;&lt;/span&gt;vendingMachine&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; evt&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
    fifoEmpty &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; fifoIsEmpty&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;&amp;amp;&lt;/span&gt;fifo2ProductStoreMachine&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;!&lt;/span&gt;fifoEmpty&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
      fifoGet&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;&amp;amp;&lt;/span&gt;fifo2ProductStoreMachine&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;&amp;amp;&lt;/span&gt;evt&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
      product_store_sm&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;&amp;amp;&lt;/span&gt;productStoreMachine&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; evt&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
   &lt;span class=&quot;co1&quot;&gt;// any new timeouts?&lt;/span&gt;
   tick&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
&lt;br/&gt;

As indicated in the figure above also other state machines or interrupt handlers might push events to the queue of a state machine. An example how to do this is shown below.
&lt;/p&gt;
&lt;pre class=&quot;code c&quot;&gt;&lt;span class=&quot;co1&quot;&gt;// add event evErr to a state machine queue.&lt;/span&gt;
&lt;span class=&quot;kw4&quot;&gt;void&lt;/span&gt; ISR_Btn1&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
  fifoPut&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;&amp;amp;&lt;/span&gt;fifo2VendingMachine&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; evErr&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Using state machines in a main loop with event queue&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;using_state_machines_in_a_main_loop_with_event_queue&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:1,&amp;quot;secid&amp;quot;:18,&amp;quot;range&amp;quot;:&amp;quot;12404-15452&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit19&quot; id=&quot;using_state_machines_in_a_main_loop_with_event_queue_optimized_for_low_power_consumption&quot;&gt;Using state machines in a main loop with event queue, optimized for low power consumption&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
In low power system designs a key design goal is to keep the processor as long as possible in low power mode and only wake it up if something needs to be processed. The design is very similar to the one described above. The main difference is that the main loop runs not all time but only in case an event has happened. The timer service for the small runtime framework is handled in the timer interrupt.
&lt;br/&gt;

&lt;/p&gt;
&lt;p&gt;&lt;a class=&quot;folder&quot; href=&quot;#folded_ffb0e274c76dfd90c85e4c7a7a564440_2&quot;&gt;A skeleton for the MSP430 looks as follows: &lt;/a&gt;&lt;/p&gt;&lt;div class=&quot;folded hidden&quot; id=&quot;folded_ffb0e274c76dfd90c85e4c7a7a564440_2&quot;&gt;&lt;pre class=&quot;code c&quot;&gt;&lt;span class=&quot;kw4&quot;&gt;void&lt;/span&gt; main&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;kw4&quot;&gt;void&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
&amp;nbsp;
  &lt;span class=&quot;co1&quot;&gt;// init system&lt;/span&gt;
&amp;nbsp;
  &lt;span class=&quot;kw1&quot;&gt;while&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;co1&quot;&gt;// check event queues and run the state machine as shown above&lt;/span&gt;
&amp;nbsp;
     …
     __bis_SR_register&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;LPM3_bits &lt;span class=&quot;sy0&quot;&gt;+&lt;/span&gt; GIE&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;  &lt;span class=&quot;co1&quot;&gt;// Enter low power mode once&lt;/span&gt;
     __no_operation&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;                    &lt;span class=&quot;co1&quot;&gt;// no more events to process&lt;/span&gt;
   &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;co1&quot;&gt;// Timer A0 interrupt service routine. If the timer &lt;/span&gt;
&lt;span class=&quot;co1&quot;&gt;// function tick() returns true there&lt;/span&gt;
&lt;span class=&quot;co1&quot;&gt;// is a timeout and we wakeup the main loop.&lt;/span&gt;
&lt;span class=&quot;co2&quot;&gt;#pragma vector=TIMER0_A0_VECTOR&lt;/span&gt;
__interrupt &lt;span class=&quot;kw4&quot;&gt;void&lt;/span&gt; Timer_A0&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;kw4&quot;&gt;void&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
  bool retVal&lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;kw2&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
  P1OUT &lt;span class=&quot;sy0&quot;&gt;|=&lt;/span&gt; BIT0&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;co1&quot;&gt;// toggle for debugging&lt;/span&gt;
&amp;nbsp;
  retVal &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; tick&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
  &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;retVal&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
    &lt;span class=&quot;co1&quot;&gt;// at least one timeout timer fired.&lt;/span&gt;
    &lt;span class=&quot;co1&quot;&gt;// wake up main loop&lt;/span&gt;
    bic_SR_register_on_exit&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;LPM3_bits&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
  P1OUT &lt;span class=&quot;sy0&quot;&gt;&amp;amp;=&lt;/span&gt; ~BIT0&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;co1&quot;&gt;// toggle for debugging&lt;/span&gt;
  &lt;span class=&quot;co1&quot;&gt;// no more events must be processed&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;br/&gt;

&lt;/p&gt;

&lt;p&gt;
The following temperature transmitter using a MSP430F1232 header board with just 256 bytes of RAM and 8K of program memory is based on this design principle. 
&lt;a href=&quot;https://sinelabore.com/lib/exe/detail.php/msp430.svg?id=start&quot; class=&quot;media&quot; title=&quot;msp430.svg&quot;&gt;&lt;img src=&quot;https://sinelabore.com/lib/exe/fetch.php/msp430.svg?w=500&amp;amp;tok=1a4e1f&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; title=&quot;Architecture for low power designs based on statemachines for MSP430&quot; alt=&quot;Architecture for low power designs based on statemachines for MSP430&quot; width=&quot;500&quot; /&gt;&lt;/a&gt;
For more information on how to use state-machines in low-power embedded systems see &lt;a href=&quot;https://sinelabore.com/doku.php/wiki/toolbox/using_state_machines_in_low-power_embedded_systems&quot; class=&quot;wikilink1&quot; title=&quot;wiki:toolbox:using_state_machines_in_low-power_embedded_systems&quot; data-wiki-id=&quot;wiki:toolbox:using_state_machines_in_low-power_embedded_systems&quot;&gt;here&lt;/a&gt; and &lt;a href=&quot;https://sinelabore.com/doku.php/wiki/toolbox/using_state_machines_in_low-power_embedded_systems_part_ii&quot; class=&quot;wikilink1&quot; title=&quot;wiki:toolbox:using_state_machines_in_low-power_embedded_systems_part_ii&quot; data-wiki-id=&quot;wiki:toolbox:using_state_machines_in_low-power_embedded_systems_part_ii&quot;&gt;here&lt;/a&gt;.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Using state machines in a main loop with event queue, optimized for low power consumption&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;using_state_machines_in_a_main_loop_with_event_queue_optimized_for_low_power_consumption&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:3,&amp;quot;secid&amp;quot;:19,&amp;quot;range&amp;quot;:&amp;quot;15453-17306&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit20&quot; id=&quot;using_state_machines_in_interrupts&quot;&gt;Using state machines in interrupts&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Sometimes state dependent interrupt handling is required. Then it is useful to embed the state machine directly into the interrupt handler to save every us. Typical usage might be the pre-processing of characters received by a serial interface. Or state dependent filtering of an analog signal before further processing takes place. 
&lt;a href=&quot;https://sinelabore.com/lib/exe/detail.php/irq.svg?id=start&quot; class=&quot;media&quot; title=&quot;irq.svg&quot;&gt;&lt;img src=&quot;https://sinelabore.com/lib/exe/fetch.php/irq.svg?w=100&amp;amp;tok=b425cc&quot; class=&quot;mediaright&quot; align=&quot;right&quot; loading=&quot;lazy&quot; title=&quot;Using state machines in interrupts&quot; alt=&quot;Using state machines in interrupts&quot; width=&quot;100&quot; /&gt;&lt;/a&gt;
Using state machines in an interrupt handler can be useful in any system design.
&lt;/p&gt;

&lt;p&gt;
For code generation some considerations are necessary. Usually it is necessary to decorate interrupt handlers with compiler specific keywords or vector information , etc. Furthermore interrupt service handlers have no parameters and no return value. To meet these requirements the Sinelabore code generator offers the parameters &lt;code&gt;StateMachineFunctionPrefixHeader&lt;/code&gt;, &lt;code&gt;StateMachineFunctionPrefixCFile&lt;/code&gt; and &lt;code&gt;HsmFunctionWithInstanceParameters&lt;/code&gt;. 
&lt;/p&gt;
&lt;p&gt;&lt;a class=&quot;folder&quot; href=&quot;#folded_ffb0e274c76dfd90c85e4c7a7a564440_3&quot;&gt;The example below shows an interrupt service routine with the compiler specific extensions as required by mspgcc &lt;/a&gt;&lt;/p&gt;&lt;div class=&quot;folded hidden&quot; id=&quot;folded_ffb0e274c76dfd90c85e4c7a7a564440_3&quot;&gt;&lt;pre class=&quot;code c&quot;&gt;&lt;span class=&quot;co1&quot;&gt;// generated state machine code for an irq&lt;/span&gt;
&amp;nbsp;
interrupt &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;INTERRUPT_VECTOR&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; IntServiceRoutine&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;kw4&quot;&gt;void&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
   &lt;span class=&quot;coMULTI&quot;&gt;/* generated statemachine code goes here */&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
To generate this code, set the key/value pairs in your configuration file the following way:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;StateMachineFunctionPrefixCFile=interrupt (INTERRUPT_VECTOR)
HsmFunctionWithInstanceParameters=no&lt;/pre&gt;

&lt;p&gt;
If the prefix of the interrupt service routine requires to span more than one line the line break ’\n’ character can be inserted as shown below: 
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;StateMachineFunctionPrefixCFile=#pragma vector=UART0TX_VECTOR\n__interrupt void&lt;/pre&gt;

&lt;p&gt;
Prefixes for the header and the C file can be specified separately. 
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Using state machines in interrupts&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;using_state_machines_in_interrupts&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:4,&amp;quot;secid&amp;quot;:20,&amp;quot;range&amp;quot;:&amp;quot;17307-19086&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit21&quot; id=&quot;using_state_machines_with_a_real-time_operating_system&quot;&gt;Using state machines with a real-time operating system&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
In this design each state machine usually runs in the context of an own task. The principle design is shown in the following figure.
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://sinelabore.com/lib/exe/detail.php/task_ab.svg?id=start&quot; class=&quot;media&quot; title=&quot;task_ab.svg&quot;&gt;&lt;img src=&quot;https://sinelabore.com/lib/exe/fetch.php/task_ab.svg?w=400&amp;amp;tok=55c626&quot; class=&quot;mediacenter&quot; loading=&quot;lazy&quot; title=&quot;Using state machines with a real-time operating system&quot; alt=&quot;Using state machines with a real-time operating system&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
Each task executes a state machine (often called active object) in an endless while loop. The tasks wait for new events to be processed from the state machine. In case no event is present the task is set in idle mode from the &lt;abbr title=&quot;Real-Time Operating System&quot;&gt;RTOS&lt;/abbr&gt;. In case one or more new events are available the &lt;abbr title=&quot;Real-Time Operating System&quot;&gt;RTOS&lt;/abbr&gt; wakes up the task.  The used &lt;abbr title=&quot;Real-Time Operating System&quot;&gt;RTOS&lt;/abbr&gt; mechanism for event signaling can be different. But often a message queue is used. Events might be stored in the event queue from various sources. E.g. from within another task or from inside an interrupt service routine. 
This design can be realized with every real-time operating system. Only the event transport mechanisms might differ.
&lt;/p&gt;

&lt;p&gt;
Benefits:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Efficient and well tested runtime environment provided from the real-time operating system&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Prioritization of tasks, scheduling available&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; State machine processing times decoupled from each other.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Consequences:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Need of a real-time operating system (complexity, ram usage, cost …)&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
In the how-to section an example of this &lt;a href=&quot;https://sinelabore.com/doku.php/wiki/howto/rtos&quot; class=&quot;wikilink1&quot; title=&quot;wiki:howto:rtos&quot; data-wiki-id=&quot;wiki:howto:rtos&quot;&gt;pattern is presented with FreeRTOS&lt;/a&gt;. The examples below shows code for the &lt;a href=&quot;https://www.rtems.org&quot; class=&quot;urlextern&quot; title=&quot;https://www.rtems.org&quot; rel=&quot;ugc nofollow&quot;&gt;RTEMS&lt;/a&gt; and &lt;a href=&quot;https://www.segger.com/products/rtos/embos/&quot; class=&quot;urlextern&quot; title=&quot;https://www.segger.com/products/rtos/embos/&quot; rel=&quot;ugc nofollow&quot;&gt;embOS&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;&lt;a class=&quot;folder&quot; href=&quot;#folded_ffb0e274c76dfd90c85e4c7a7a564440_4&quot;&gt;Example code for RTEMS &lt;/a&gt;&lt;/p&gt;&lt;div class=&quot;folded hidden&quot; id=&quot;folded_ffb0e274c76dfd90c85e4c7a7a564440_4&quot;&gt;&lt;pre class=&quot;code c&quot;&gt;&lt;span class=&quot;co1&quot;&gt;// rtems specific task body&lt;/span&gt;
rtems_task oven_task&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;rtems_task_argument unused&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
  OVEN_INSTANCEDATA_T inst &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; OVEN_INSTANCEDATA_INIT&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
  &lt;span class=&quot;kw1&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
    &lt;span class=&quot;co1&quot;&gt;// returns if one event was processed&lt;/span&gt;
    oven&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;&amp;amp;&lt;/span&gt;inst&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
&amp;nbsp;
&lt;span class=&quot;co1&quot;&gt;// generated state machine code&lt;/span&gt;
&lt;span class=&quot;kw2&quot;&gt;extern&lt;/span&gt; rtems_id Queue_id&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;kw4&quot;&gt;uint8_t&lt;/span&gt; msg&lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt;NO_MSG&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;kw4&quot;&gt;size_t&lt;/span&gt; received&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
rtems_status_code status&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;kw4&quot;&gt;void&lt;/span&gt;   oven&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;OVEN_INSTANCEDATA_T &lt;span class=&quot;sy0&quot;&gt;*&lt;/span&gt;instanceVar&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
&amp;nbsp;
  OVEN_EV_CONSUMED_FLAG_T evConsumed &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; 0U&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
&amp;nbsp;
  &lt;span class=&quot;coMULTI&quot;&gt;/*execute entry code of default state once to init machine */&lt;/span&gt;
  &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;instanceVar&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;superEntry &lt;span class=&quot;sy0&quot;&gt;==&lt;/span&gt; 1U&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
    ovenOff&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
    instanceVar&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;superEntry &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; 0U&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
  &lt;span class=&quot;coMULTI&quot;&gt;/* action code */&lt;/span&gt;
  &lt;span class=&quot;coMULTI&quot;&gt;/* wait for message */&lt;/span&gt;
  status &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; rtems_message_queue_receive&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;
             Queue_id&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
             &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;kw4&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;&amp;amp;&lt;/span&gt;msg&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
             &lt;span class=&quot;sy0&quot;&gt;&amp;amp;&lt;/span&gt;received&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
             RTEMS_DEFAULT_OPTIONS&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
             RTEMS_NO_TIMEOUT
           &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt; status &lt;span class=&quot;sy0&quot;&gt;!=&lt;/span&gt; RTEMS_SUCCESSFUL &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
    error_handler&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;&lt;span class=&quot;kw1&quot;&gt;else&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
    &lt;span class=&quot;kw1&quot;&gt;switch&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;instanceVar&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;stateVar&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
      &lt;span class=&quot;co1&quot;&gt;// generated state handling code&lt;/span&gt;
     …
    &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
  &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;p&gt;&lt;a class=&quot;folder&quot; href=&quot;#folded_ffb0e274c76dfd90c85e4c7a7a564440_5&quot;&gt;Example code for embOS RTOS from Segger. &lt;/a&gt;&lt;/p&gt;&lt;div class=&quot;folded hidden&quot; id=&quot;folded_ffb0e274c76dfd90c85e4c7a7a564440_5&quot;&gt;&lt;pre class=&quot;code c&quot;&gt;&lt;span class=&quot;co1&quot;&gt;// state machine instance&lt;/span&gt;
SM_INSTANCEDATA_T instanceVar &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; SM_INSTANCEDATA_INIT&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;co1&quot;&gt;// Task and queue objects.&lt;/span&gt;
&lt;span class=&quot;kw4&quot;&gt;static&lt;/span&gt; OS_STACKPTR &lt;span class=&quot;kw4&quot;&gt;int&lt;/span&gt; Stack_TASK_1&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;128&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;   &lt;span class=&quot;coMULTI&quot;&gt;/* Task stacks */&lt;/span&gt;
&lt;span class=&quot;kw4&quot;&gt;static&lt;/span&gt; OS_TASK         TCB_TASK_1&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;         &lt;span class=&quot;coMULTI&quot;&gt;/* Task-control-blocks */&lt;/span&gt;
&lt;span class=&quot;kw4&quot;&gt;static&lt;/span&gt; OS_Q            MyQueue&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;kw4&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;kw4&quot;&gt;char&lt;/span&gt;            MyQBuffer&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;100&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
OS_TIMER MyTimer&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;kw4&quot;&gt;char&lt;/span&gt; txbuf&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;32&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;co1&quot;&gt;// Routine called from the embOS RTOS to signal &lt;/span&gt;
&lt;span class=&quot;co1&quot;&gt;// a timeout. A timeout event is sent to the state&lt;/span&gt;
&lt;span class=&quot;co1&quot;&gt;// machine. Multiple timer callback functions might be created if&lt;/span&gt;
&lt;span class=&quot;co1&quot;&gt;// several timers are needed at the same time. Each one then fires an own&lt;/span&gt;
&lt;span class=&quot;co1&quot;&gt;// event. E.g. ev50ms or ev100ms&lt;/span&gt;
&lt;span class=&quot;kw4&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;kw4&quot;&gt;void&lt;/span&gt; MyTimerCallback&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;kw4&quot;&gt;void&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;kw4&quot;&gt;uint8_t&lt;/span&gt; msg&lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt;evtTimeout&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
    OS_Q_Put&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;&amp;amp;&lt;/span&gt;MyQueue&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;&amp;amp;&lt;/span&gt;msg&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;co1&quot;&gt;// Task blocked until a new event is present. The new event is &lt;/span&gt;
&lt;span class=&quot;co1&quot;&gt;// then sent to the state machine.&lt;/span&gt;
&lt;span class=&quot;kw4&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;kw4&quot;&gt;void&lt;/span&gt; TaskRunningStateMachine&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;kw4&quot;&gt;void&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
    &lt;span class=&quot;kw4&quot;&gt;char&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;*&lt;/span&gt; pData&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;kw1&quot;&gt;while&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
        &lt;span class=&quot;co1&quot;&gt;// waiting for new event&lt;/span&gt;
        &lt;span class=&quot;kw4&quot;&gt;volatile&lt;/span&gt; &lt;span class=&quot;kw4&quot;&gt;int&lt;/span&gt; Len &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; OS_Q_GetPtr&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;&amp;amp;&lt;/span&gt;MyQueue&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;kw4&quot;&gt;void&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;**&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;&amp;amp;&lt;/span&gt;pData&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;kw4&quot;&gt;volatile&lt;/span&gt; &lt;span class=&quot;kw4&quot;&gt;char&lt;/span&gt; msg &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;*&lt;/span&gt;pData&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
        sm&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;&amp;amp;&lt;/span&gt;instanceVar&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;SM_EVENT_T&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;msg&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;co1&quot;&gt;// call generated state machine with event&lt;/span&gt;
&amp;nbsp;
        OS_Q_Purge&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;&amp;amp;&lt;/span&gt;MyQueue&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;br/&gt;

&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Using state machines with a real-time operating system&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;using_state_machines_with_a_real-time_operating_system&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:7,&amp;quot;secid&amp;quot;:21,&amp;quot;range&amp;quot;:&amp;quot;19087-22843&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit22&quot; id=&quot;events_versus_boolean_conditions&quot;&gt;Events versus Boolean Conditions&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Sinelabore supports two basic modes of operation. Either the generated state machines react on events. Only if an event is present a transition is taken (e.g. evDoorClosed, evButtonPressed). Events are eventually send to the state machine using an event queue (see above). Alternatively transitions are triggered by boolean conditions. If a boolean condition is true a state change happens (e.g. DI0==true). The latter one is useful if binary signals should be processed like shown in these two designs (&lt;a href=&quot;https://sinelabore.com/doku.php/wiki/examples/function_blocks_desing&quot; class=&quot;wikilink1&quot; title=&quot;wiki:examples:function_blocks_desing&quot; data-wiki-id=&quot;wiki:examples:function_blocks_desing&quot;&gt;signal shaping function blocks&lt;/a&gt;)(&lt;a href=&quot;https://sinelabore.com/doku.php/wiki/examples/plcopen_function_block&quot; class=&quot;wikilink1&quot; title=&quot;wiki:examples:plcopen_function_block&quot; data-wiki-id=&quot;wiki:examples:plcopen_function_block&quot;&gt;PLCOpen function block&lt;/a&gt;). In this case the state machine runs without receiving a dedicated event. Based on the current state, conditions derived from boolean signals are used to trigger state transitions.
&lt;/p&gt;
&lt;hr /&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Events versus Boolean Conditions&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;events_versus_boolean_conditions&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:9,&amp;quot;secid&amp;quot;:22,&amp;quot;range&amp;quot;:&amp;quot;22844-&amp;quot;} --&gt;</description>
            <author>webmin@undisclosed.example.com (webmin)</author>
            <pubDate>Sat, 29 Nov 2025 13:08:46 +0000</pubDate>
        </item>
    </channel>
</rss>
