<?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:26:46 +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></title>
            <link>https://sinelabore.com/doku.php/history</link>
            <description>
&lt;p&gt;
&lt;div class=&quot;plugin_nspages&quot;&gt;&lt;p class=&quot;catpageheadline&quot;&gt;List of previous announcements and news&lt;/p&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/news/5aug2012&quot; class=&quot;wikilink1&quot; title=&quot;wiki:news:5aug2012&quot; data-wiki-id=&quot;wiki:news:5aug2012&quot;&gt;New versions 2.8.1 to 2.8.3&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/3jan2012&quot; class=&quot;wikilink1&quot; title=&quot;wiki:news:3jan2012&quot; data-wiki-id=&quot;wiki:news:3jan2012&quot;&gt;New Version 2.7&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/07nov2012&quot; class=&quot;wikilink1&quot; title=&quot;wiki:news:07nov2012&quot; data-wiki-id=&quot;wiki:news:07nov2012&quot;&gt;New Version 3.0&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/03jan2013&quot; class=&quot;wikilink1&quot; title=&quot;wiki:news:03jan2013&quot; data-wiki-id=&quot;wiki:news:03jan2013&quot;&gt;Version 3.1&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/26feb2013&quot; class=&quot;wikilink1&quot; title=&quot;wiki:news:26feb2013&quot; data-wiki-id=&quot;wiki:news:26feb2013&quot;&gt;Screenshots of the Simulator using 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/16aug2013&quot; class=&quot;wikilink1&quot; title=&quot;wiki:news:16aug2013&quot; data-wiki-id=&quot;wiki:news:16aug2013&quot;&gt;Generating C# code&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/10oct2013&quot; class=&quot;wikilink1&quot; title=&quot;wiki:news:10oct2013&quot; data-wiki-id=&quot;wiki:news:10oct2013&quot;&gt;Multiple instances of the same machine&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/10sep2013&quot; class=&quot;wikilink1&quot; title=&quot;wiki:news:10sep2013&quot; data-wiki-id=&quot;wiki:news:10sep2013&quot;&gt;Creating complex 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/3nov2013&quot; class=&quot;wikilink1&quot; title=&quot;wiki:news:3nov2013&quot; data-wiki-id=&quot;wiki:news:3nov2013&quot;&gt;Initial pseudo-states can end in a choice state now&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/12may2014&quot; class=&quot;wikilink1&quot; title=&quot;wiki:news:12may2014&quot; data-wiki-id=&quot;wiki:news:12may2014&quot;&gt;New version 3.6 has support for activity diagrams&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/18may2014&quot; class=&quot;wikilink1&quot; title=&quot;wiki:news:18may2014&quot; data-wiki-id=&quot;wiki:news:18may2014&quot;&gt;Using Activities -- Updated Microwave Oven&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/24may2014&quot; class=&quot;wikilink1&quot; title=&quot;wiki:news:24may2014&quot; data-wiki-id=&quot;wiki:news:24may2014&quot;&gt;Activity diagram generation from UModel&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/7june2014&quot; class=&quot;wikilink1&quot; title=&quot;wiki:news:7june2014&quot; data-wiki-id=&quot;wiki:news:7june2014&quot;&gt;Generate code from Astah* activity diagrams&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/20july2014&quot; class=&quot;wikilink1&quot; title=&quot;wiki:news:20july2014&quot; data-wiki-id=&quot;wiki:news:20july2014&quot;&gt;New version 3.6.5&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/1sep2014&quot; class=&quot;wikilink1&quot; title=&quot;wiki:news:1sep2014&quot; data-wiki-id=&quot;wiki:news:1sep2014&quot;&gt;New version 3.6.6&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 backend added&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 Low-Power Embedded 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/news/12feb2015&quot; class=&quot;wikilink1&quot; title=&quot;wiki:news:12feb2015&quot; data-wiki-id=&quot;wiki:news:12feb2015&quot;&gt;Using State-Machines in Low-Power Embedded Systems - 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/news/11aug2015&quot; class=&quot;wikilink1&quot; title=&quot;wiki:news:11aug2015&quot; data-wiki-id=&quot;wiki:news:11aug2015&quot;&gt;Building a ModbusRTU 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/1jan2016&quot; class=&quot;wikilink1&quot; title=&quot;wiki:news:1jan2016&quot; data-wiki-id=&quot;wiki:news:1jan2016&quot;&gt;Leader State Machine - Follower 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/16april2016&quot; class=&quot;wikilink1&quot; title=&quot;wiki:news:16april2016&quot; data-wiki-id=&quot;wiki:news:16april2016&quot;&gt;Astah SysML&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 example on GitHub&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/14sep2014&quot; class=&quot;wikilink1&quot; title=&quot;wiki:news:14sep2014&quot; data-wiki-id=&quot;wiki:news:14sep2014&quot;&gt;Need to design on a Unix like OS?&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/17sep2012&quot; class=&quot;wikilink1&quot; title=&quot;wiki:news:17sep2012&quot; data-wiki-id=&quot;wiki:news:17sep2012&quot;&gt;New versions 2.9&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/27okt2012&quot; class=&quot;wikilink1&quot; title=&quot;wiki:news:27okt2012&quot; data-wiki-id=&quot;wiki:news:27okt2012&quot;&gt;Generate code from state machines 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/14feb2020&quot; class=&quot;wikilink1&quot; title=&quot;wiki:news:14feb2020&quot; data-wiki-id=&quot;wiki:news:14feb2020&quot;&gt;How to generate Lua Code from State Diagrams&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;catpageeofidx&quot;&gt;&lt;/div&gt;&lt;/div&gt;
&lt;/p&gt;
</description>
            <author>anonymous@undisclosed.example.com (Anonymous)</author>
            <pubDate>Sat, 18 Dec 2021 10:45:15 +0000</pubDate>
        </item>
        <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>anonymous@undisclosed.example.com (Anonymous)</author>
            <pubDate>Sun, 15 Mar 2026 19:22:24 +0000</pubDate>
        </item>
        <item>
            <title>Interesting readings</title>
            <link>https://sinelabore.com/doku.php/other_resources</link>
            <description>


&lt;h1 class=&quot;sectionedit1&quot; id=&quot;interesting_readings&quot;&gt;Interesting readings&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;
On this page you find interesting resources that might help you to become a better embedded software engineer.
&lt;/p&gt;

&lt;p&gt;
Send us links to interesting material if you think it should appear here.
&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;Interesting readings&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;interesting_readings&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;11-233&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit2&quot; id=&quot;books&quot;&gt;Books&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;
&lt;div class=&quot;table sectionedit3&quot;&gt;&lt;table class=&quot;inline&quot;&gt;
	&lt;tr class=&quot;row0&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; &lt;img src=&quot;https://sinelabore.com/lib/exe/fetch.php/wiki/articles/book_mbt.png&quot; class=&quot;medialeft&quot; align=&quot;left&quot; loading=&quot;lazy&quot; title=&quot;Image of book Practical Model-Based Testing: A Tools Approach&quot; alt=&quot;Image of book Practical Model-Based Testing: A Tools Approach&quot; /&gt; &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; Practical Model-Based Testing: A Tools Approach from Mark Utting and Bruno Legeard. Chapter 5 discusses “Testing from finite state machines”.  &lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;secid&amp;quot;:3,&amp;quot;range&amp;quot;:&amp;quot;251-507&amp;quot;} --&gt;&lt;div class=&quot;table sectionedit4&quot;&gt;&lt;table class=&quot;inline&quot;&gt;
	&lt;tr class=&quot;row0&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; &lt;img src=&quot;https://sinelabore.com/lib/exe/fetch.php/wiki/articles/book_test_driven_development.png&quot; class=&quot;medialeft&quot; align=&quot;left&quot; loading=&quot;lazy&quot; title=&quot;Image of book Test-Driven Development for Embedded C&quot; alt=&quot;Image of book Test-Driven Development for Embedded C&quot; /&gt; &lt;/td&gt;&lt;td class=&quot;col1 leftalign&quot;&gt;“Test-Driven Development for Embedded C” from  James W. Grenning. It teaches you how to use the unit testing frameworks  &lt;a href=&quot;http://sourceforge.net/apps/trac/unity/wiki&quot; class=&quot;urlextern&quot; title=&quot;http://sourceforge.net/apps/trac/unity/wiki&quot; rel=&quot;ugc nofollow&quot;&gt;Unity&lt;/a&gt; and CppUTest to test embedded software. This book does not explicitly discuss state machine testing.  &lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;table1&amp;quot;,&amp;quot;secid&amp;quot;:4,&amp;quot;range&amp;quot;:&amp;quot;510-908&amp;quot;} --&gt;&lt;div class=&quot;table sectionedit5&quot;&gt;&lt;table class=&quot;inline&quot;&gt;
	&lt;tr class=&quot;row0&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; &lt;img src=&quot;https://sinelabore.com/lib/exe/fetch.php/wiki/articles/constructingtheuserinterfacewithstatecharts.png?w=100&amp;amp;tok=89baca&quot; class=&quot;media&quot; loading=&quot;lazy&quot; title=&quot;Image of book Constructing the User Interface with Statecharts by Ian Horrocks&quot; alt=&quot;Image of book Constructing the User Interface with Statecharts by Ian Horrocks&quot; width=&quot;100&quot; /&gt; &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; “Constructing the User Interface with Statecharts” by Ian Horrocks was published 1999. But still gives very good introductions how to use state machine for designing user interfaces. Using concrete and extensively discussed examples, such as a CD player, he shows how to practically design GUIs with statecharts. Due to the chosen examples it is specifically useful for UI designers of real physical devices.&lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;table2&amp;quot;,&amp;quot;secid&amp;quot;:5,&amp;quot;range&amp;quot;:&amp;quot;910-1480&amp;quot;} --&gt;
&lt;p&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;Books&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;books&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;234-1487&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit6&quot; id=&quot;reports_where_state-machines_are_used_in_practise&quot;&gt;Reports where state-machines are used in practise&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;strong&gt;NASA&lt;/strong&gt;: Read this interesting article on “&lt;abbr title=&quot;Unified Modeling Language&quot;&gt;UML&lt;/abbr&gt; Statechart Autocoding for the Mars Science Lab (MSL) Mission”. This article describes how &lt;strong&gt;NASA generates flight code automatically&lt;/strong&gt; from a state machine diagram. The generated code has been part of Curiosity’s flight software since launch, and continues to run onboard today. They describe how their generated code looks like and shares the lessons they learned. Link to the &lt;a href=&quot;https://trs.jpl.nasa.gov/bitstream/handle/2014/43235/12-5232_A1b.pdf?sequence=1&quot; class=&quot;urlextern&quot; title=&quot;https://trs.jpl.nasa.gov/bitstream/handle/2014/43235/12-5232_A1b.pdf?sequence=1&quot; rel=&quot;ugc nofollow&quot;&gt;article&lt;/a&gt;.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&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;Reports where state-machines are used in practise&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;reports_where_state-machines_are_used_in_practise&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:6,&amp;quot;range&amp;quot;:&amp;quot;1488-2080&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit7&quot; id=&quot;tools&quot;&gt;Tools&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;strong&gt;SocketCAN&lt;/strong&gt; is a CAN driver directly integrated into the Linux kernel. The SocketCAN concept extends the Berkeley sockets &lt;abbr title=&quot;Application Programming Interface&quot;&gt;API&lt;/abbr&gt; in Linux by introducing a new protocol family, PF_CAN, that coexists with other protocol families, such as PF_INET for the Internet Protocol. That means you can work with CAN just using your TCP/IP know-how and related tools e.g. logging traffic with wireshark. More information is available at &lt;a href=&quot;https://en.wikipedia.org/wiki/SocketCAN&quot; class=&quot;urlextern&quot; title=&quot;https://en.wikipedia.org/wiki/SocketCAN&quot; rel=&quot;ugc nofollow&quot;&gt;SocketCAN&lt;/a&gt;. A nice hardware interface for SocketCAN is &lt;a href=&quot;https://linux-automation.com/de/products/candlelight.html&quot; class=&quot;urlextern&quot; title=&quot;https://linux-automation.com/de/products/candlelight.html&quot; rel=&quot;ugc nofollow&quot;&gt;candleLight&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;Tools&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;tools&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:7,&amp;quot;range&amp;quot;:&amp;quot;2081-&amp;quot;} --&gt;</description>
            <author>anonymous@undisclosed.example.com (Anonymous)</author>
            <pubDate>Sun, 16 Jul 2023 09:54:33 +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>anonymous@undisclosed.example.com (Anonymous)</author>
            <pubDate>Sun, 15 Mar 2026 19:12:18 +0000</pubDate>
        </item>
        <item>
            <title>From design to code with ease</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>anonymous@undisclosed.example.com (Anonymous)</author>
            <pubDate>Sat, 29 Nov 2025 13:08:46 +0000</pubDate>
        </item>
    </channel>
</rss>
