{"id":7810,"date":"2025-11-29T06:46:27","date_gmt":"2025-11-29T05:46:27","guid":{"rendered":"https:\/\/web-dev-weissblau.de\/microconsult\/?p=7810"},"modified":"2026-02-13T15:06:37","modified_gmt":"2026-02-13T14:06:37","slug":"boost-your-state-machines","status":"publish","type":"post","link":"https:\/\/www.microconsult.de\/en\/boost-your-state-machines\/","title":{"rendered":"Boost Your State Machines"},"content":{"rendered":"<h2>Create state machines that are easy to read and maintain<\/h2>\n<p>Autor: Pawel Wi\u015bniewski, Pawel Wi\u015bniewski Consulting<\/p>\n<h3>Beitrag &#8211; Embedded Software Engineering Kongress 2017<\/h3>\n<p><strong>State Machines sind ein wichtiger Bestandsteil von Software. Leider sind sie zu oft per Hand implementiert, z.B. unter Verwendung von if-else oder switch-case Konstruktionen. Solche Konstruktionen sind schwer zu verstehen und schwierig zu erweitern. Zus\u00e4tzlich sehen sie immer ein bisschen anders aus, weil sie stets wieder von vorne geschrieben werden. Der Vortrag zeigt eine L\u00f6sung auf Basis der Bibliothek Boost.SML. Die mit der Bibliothek erstellten State Machines sind nicht nur einfacher zu verstehen und zu erweitern, sie sind auch oft effizienter als die handgeschrieben Varianten.<\/strong><\/p>\n<h2>Was sind State Machines (Zustandsautomaten) und wof\u00fcr sind sie gut?<\/h2>\n<p>Embedded Systeme sind meistens eventgetrieben, das hei\u00dft, sie warten auf verschiedene (interne oder externe) Ereignisse. Wenn ein Ereignis auftritt, wird es abgearbeitet. Innerhalb der Verarbeitung k\u00f6nnen weitere interne Ereignisse generiert werden. Wenn es kein Ereignis zum Verarbeiten gibt, wird wieder gewartet.<\/p>\n<p>Dieses Verhalten l\u00e4sst sich als sequentielle Software realisieren. Wenn die Reihenfolge von Events nicht bekannt ist oder wenn auf mehrere Events gewartet wird, wird eine sequentielle Software komplex. Es ist deutlich einfacher, ein eventgetriebenes Verhalten mit Zustandsautomaten abzubilden.<\/p>\n<p>Zustandsautomaten lassen sich mit Hilfe von UML-Zustandsdiagrammen [1] graphisch projektieren. Ein Zustandsdiagramm zeigt die zur Laufzeit erlaubten Zust\u00e4nde eines Zustandsautomaten an und gibt Ereignisse an, die seine Zustands\u00fcberg\u00e4nge ausl\u00f6sen.<\/p>\n<p>Die Zust\u00e4nde in einem Zustandsdiagramm werden durch Rechtecke mit abgerundeten Ecken dargestellt. Die Pfeile zwischen den Zust\u00e4nden symbolisieren m\u00f6gliche Zustands\u00fcberg\u00e4nge. Sie sind mit den Ereignissen beschriftet, die zu dem jeweiligen Zustands\u00fcbergang f\u00fchren.<\/p>\n<p>Im Diagramm 1 (siehe\u00a0<a title=\"Boost your State-machines (PDF)\" href=\"https:\/\/www.microconsult.de\/wp-content\/uploads\/2025\/12\/fachinfo_ese_implementierung_boost_yout_state-machines_pawel_wisniewski_consulting_wisniewski.pdf\" target=\"_blank\" rel=\"noopener\">PDF<\/a>) sind die wichtigsten UML Elemente zu sehen.<\/p>\n<ul>\n<li>Initial &#8211; Startpunkt des Zustandsautomaten<\/li>\n<li>State \u2013 Zustand<\/li>\n<li>Transition &#8211; Zustands\u00fcbergang<\/li>\n<li>Event \u2013 Ereignis, das einen Zustands\u00fcbergang ausl\u00f6st<\/li>\n<li>Guard &#8211; Bedingung f\u00fcr die Transition<\/li>\n<li>Action &#8211; Aktion w\u00e4hrend der Transition<\/li>\n<li>Final &#8211; Ende des Zustandsautomaten<\/li>\n<\/ul>\n<h2>Handgeschriebene Implementierungen (switch-case, if-else)<\/h2>\n<p>Betrachten wir den Zustandsautomaten aus Diagramm 2 (siehe\u00a0<a title=\"Boost your State-machines (PDF)\" href=\"https:\/\/www.microconsult.de\/wp-content\/uploads\/2025\/12\/fachinfo_ese_implementierung_boost_yout_state-machines_pawel_wisniewski_consulting_wisniewski.pdf\" target=\"_blank\" rel=\"noopener\">PDF<\/a>). Er beinhaltet drei States (Wait for first value, Wait for second value und Calculate), zwei Events (value und done) und eine Aktion (insert_value).<\/p>\n<p>Es w\u00e4re m\u00f6glich, diese State Machine mit Hilfe von if-else oder switch-case Konstruktionen zu implementieren. Der Quellcode k\u00f6nnte wie in Listing 1 (siehe\u00a0<a title=\"Boost your State-machines (PDF) \" href=\"https:\/\/www.microconsult.de\/wp-content\/uploads\/2025\/12\/fachinfo_ese_implementierung_boost_yout_state-machines_pawel_wisniewski_consulting_wisniewski.pdf\" target=\"_blank\" rel=\"noopener\">PDF<\/a>) (Switch-case) oder Listing 2 (siehe\u00a0<a title=\"Boost your State-machines (PDF)\" href=\"https:\/\/www.microconsult.de\/wp-content\/uploads\/2025\/12\/fachinfo_ese_implementierung_boost_yout_state-machines_pawel_wisniewski_consulting_wisniewski.pdf\" target=\"_blank\" rel=\"noopener\">PDF<\/a>) (if-else) aussehen. Leider ist auf den ersten Blick in beiden F\u00e4llen schwierig zu erkennen, was diese Software macht. Die Entry Aktion von State Calculate (Play_animation) ist in beiden F\u00e4llen (if-else und switch-case) mehr eine Exit-Aktion von State WaitForSecondValue. Das kann zu Schwierigkeiten f\u00fchren, wenn das System um weitere Transitionen in Richtung Calculate erweitert werden soll.<\/p>\n<p>Wenn es mehrere Events und Transitionen im System gibt, wird der Quellcode lang und un\u00fcbersichtlich. Wenn wir unsere Software um weitere States erweitern m\u00f6chten, m\u00fcssen wir alle Bedingungen betrachten &#8211; auch diejenigen, die nicht leicht erkennbar sind.<\/p>\n<p>Wir versuchen den Zustandsautomaten von Diagramm\u00a02 (siehe\u00a0<a title=\"Boost your State-machines (PDF)\" href=\"https:\/\/www.microconsult.de\/wp-content\/uploads\/2025\/12\/fachinfo_ese_implementierung_boost_yout_state-machines_pawel_wisniewski_consulting_wisniewski.pdf\" target=\"_blank\" rel=\"noopener\">PDF<\/a>) um ein einfaches Error-Handling zu erweitern, wie in Diagramm 3 (siehe\u00a0<a title=\"Boost your State-machines (PDF)\" href=\"https:\/\/www.microconsult.de\/wp-content\/uploads\/2025\/12\/fachinfo_ese_implementierung_boost_yout_state-machines_pawel_wisniewski_consulting_wisniewski.pdf\" target=\"_blank\" rel=\"noopener\">PDF<\/a>) zu sehen ist.<\/p>\n<p>Der Quellcode (Listing 3, siehe\u00a0<a title=\"Boost your State-machines (PDF)\" href=\"https:\/\/www.microconsult.de\/wp-content\/uploads\/2025\/12\/fachinfo_ese_implementierung_boost_yout_state-machines_pawel_wisniewski_consulting_wisniewski.pdf\" target=\"_blank\" rel=\"noopener\">PDF<\/a>) ist nun fast doppelt so lang; eine extra Ebene mit einer if-Bedingung ist dazugekommen. Jetzt haben wir auch an zwei Stellen Stop_animation (in Zeile 11 und 24) als Exit-Aktionen f\u00fcr Calculate State. Bei realistischen Zustandsautomaten ergeben sich noch deutlich mehr Duplikate.<\/p>\n<h2>Die Grundlagen der Bibliothek [Boost].SML [3]<\/h2>\n<p>Das Verhalten von Zustandsdiagramm 2 (siehe\u00a0<a title=\"Boost your State-machines (PDF) \" href=\"https:\/\/www.microconsult.de\/wp-content\/uploads\/2025\/12\/fachinfo_ese_implementierung_boost_yout_state-machines_pawel_wisniewski_consulting_wisniewski.pdf\" target=\"_blank\" rel=\"noopener\">PDF<\/a>) l\u00e4sst sich mit Hilfe von UML 2.5 (&#8222;Textuelle Repr\u00e4sentation&#8220;) als Zustandsautomat-Transitionen-Tabelle definieren (Listing 4, siehe\u00a0<a title=\"Boost your State-machines (PDF) \" href=\"https:\/\/www.microconsult.de\/wp-content\/uploads\/2025\/12\/fachinfo_ese_implementierung_boost_yout_state-machines_pawel_wisniewski_consulting_wisniewski.pdf\" target=\"_blank\" rel=\"noopener\">PDF<\/a>).<\/p>\n<p>In der Transitionen-Tabelle k\u00f6nnen wir einfach sehen, unter welchen Bedingungen wir von State zu State kommen. Wenn wir unsere Transitionen-Tabelle um ein Error Handling erweitern wollen, m\u00fcssen wir nur die neuen Transitionen eintragen (Listing 5, siehe\u00a0<a title=\"Boost your State-machines (PDF)\" href=\"https:\/\/www.microconsult.de\/wp-content\/uploads\/2025\/12\/fachinfo_ese_implementierung_boost_yout_state-machines_pawel_wisniewski_consulting_wisniewski.pdf\" target=\"_blank\" rel=\"noopener\">PDF<\/a>).<\/p>\n<p>Das Herz von [Boost].SML ist die Transitionen-Tabelle. Die Syntax basiert auf der gezeigten UML-Notation:<\/p>\n<p class=\"quellcode\">SourceState + event [Guard] \/ Action = TargetState<\/p>\n<p>Die Transitionen-Tabelle von Listing 4 (siehe\u00a0<a title=\"Boost your State-machines (PDF)\" href=\"https:\/\/www.microconsult.de\/wp-content\/uploads\/2025\/12\/fachinfo_ese_implementierung_boost_yout_state-machines_pawel_wisniewski_consulting_wisniewski.pdf\" target=\"_blank\" rel=\"noopener\">PDF<\/a>) kann man f\u00fcr die Nutzung mit dem [Boost].SML Framework fast unver\u00e4ndert \u00fcbernehmen (Listing 6, siehe\u00a0<a title=\"Boost your State-machines (PDF)\" href=\"https:\/\/www.microconsult.de\/wp-content\/uploads\/2025\/12\/fachinfo_ese_implementierung_boost_yout_state-machines_pawel_wisniewski_consulting_wisniewski.pdf\" target=\"_blank\" rel=\"noopener\">PDF<\/a>).<\/p>\n<p>Die Erweiterung der Tabelle ist genauso einfach wie in Listing 5 (siehe\u00a0<a title=\"Boost your State-machines (PDF)\" href=\"https:\/\/www.microconsult.de\/wp-content\/uploads\/2025\/12\/fachinfo_ese_implementierung_boost_yout_state-machines_pawel_wisniewski_consulting_wisniewski.pdf\" target=\"_blank\" rel=\"noopener\">PDF<\/a>).<\/p>\n<p>Au\u00dfer der Transitionen-Tabelle m\u00fcssen wir alle Events, Aktionen und Guards definieren. Die Aktionen und Guards sind Callable [2] Elemente, wie z.B. Lambda-Funktionen (Listing 7, siehe\u00a0<a title=\"Boost your State-machines (PDF)\" href=\"https:\/\/www.microconsult.de\/wp-content\/uploads\/2025\/12\/fachinfo_ese_implementierung_boost_yout_state-machines_pawel_wisniewski_consulting_wisniewski.pdf\" target=\"_blank\" rel=\"noopener\">PDF<\/a>).<\/p>\n<p>Der Unterschied zwischen den Aktionen und Guards ist, dass die Aktionen nichts zur\u00fcckgeben d\u00fcrfen und die Guards bool zur\u00fcckgeben m\u00fcssen. Events sind benutzerdefinierte Typen wie z.B. Strukturen (Listing 8, siehe\u00a0<a title=\"Boost your State-machines (PDF) \" href=\"https:\/\/www.microconsult.de\/wp-content\/uploads\/2025\/12\/fachinfo_ese_implementierung_boost_yout_state-machines_pawel_wisniewski_consulting_wisniewski.pdf\" target=\"_blank\" rel=\"noopener\">PDF<\/a>).<\/p>\n<p>Der fertige Zustandsautomat aus Diagramm 2 (siehe\u00a0<a title=\"Boost your State-machines (PDF)\" href=\"https:\/\/www.microconsult.de\/wp-content\/uploads\/2025\/12\/fachinfo_ese_implementierung_boost_yout_state-machines_pawel_wisniewski_consulting_wisniewski.pdf\" target=\"_blank\" rel=\"noopener\">PDF<\/a>) ist in Listing 9 (siehe\u00a0<a title=\"Boost your State-machines (PDF)\" href=\"https:\/\/www.microconsult.de\/wp-content\/uploads\/2025\/12\/fachinfo_ese_implementierung_boost_yout_state-machines_pawel_wisniewski_consulting_wisniewski.pdf\" target=\"_blank\" rel=\"noopener\">PDF<\/a>) zu sehen. Dort sind gleich alle Zust\u00e4nde (Zeile 6-8), Aktionen (Zeile 11-13), Events (Zeile 2-3) und die Transitionen-Tabelle (Zeile 19-25) zu erkennen. Der gesamte Quellcode ist gut lesbar und l\u00e4sst sich einfach mit Diagramm 2 vergleichen. \u00c4nderungen sind leicht durchzuf\u00fchren, weil sich die Logik des Zustandsautomaten an einer Stelle befindet und einfach zu verstehen ist.<\/p>\n<p>In Zeile 29 bis 44 ist eine einfache Anwendung eines Boost::SML Zustandsautomaten gezeigt. Es ist lediglich notwendig, den Zustandsautomaten zu instantiieren (Zeile 32), und dann k\u00f6nnen wir mit Hilfe von process_event Transitionen in unserem Zustandsautomaten ausl\u00f6sen (Zeilen 36, 39 und 42).<\/p>\n<p>Zus\u00e4tzlich sehen wir in Zeile 33 die Pr\u00fcfung des RAM-Verbrauchs, durch die Instanz des Zustandsautomaten. Wenn die Instanz gr\u00f6\u00dfer als ein Byte ist, dann bekommen wir einen Fehler zur Compilezeit. Weitere Pr\u00fcfungen sind in Zeilen 34, 40 und 43 zu sehen. Dort wird gepr\u00fcft, ob die Transitionen richtig definiert sind. Unser Zustandsautomat soll im Zustand Wait_For_First_Value starten, diese Pr\u00fcfung findet in Zeile 34 statt. Weitere Pr\u00fcfungen werden nach Aufruf von process_event durchgef\u00fchrt. Diese Pr\u00fcfungen finden zur Laufzeit statt und k\u00f6nnen in Unit-Tests verwendet werden.<\/p>\n<h2>Vergleich der Ans\u00e4tze<\/h2>\n<table border=\"1\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td valign=\"top\" width=\"202\">\n<p class=\"TableContents\">\n<\/td>\n<td valign=\"top\" width=\"202\">\n<p class=\"TableContents\"><strong>Handgeschriebene Konstruktionen<br \/>\n<\/strong><\/p>\n<\/td>\n<td valign=\"top\" width=\"202\">\n<p class=\"TableContents\"><strong>Boost::SML<br \/>\n<\/strong><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\" width=\"202\">\n<p class=\"TableContents\"><strong>Komplexit\u00e4t<\/strong><\/p>\n<\/td>\n<td valign=\"top\" width=\"202\">\n<p class=\"TableContents\">Abh\u00e4ngig von der Anzahl States und Events<\/p>\n<\/td>\n<td valign=\"top\" width=\"202\">\n<p class=\"TableContents\">Konstant<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\" width=\"202\">\n<p class=\"TableContents\"><strong>Erweiterbarkeit\/Wartbarkeit<br \/>\n<\/strong><\/p>\n<\/td>\n<td valign=\"top\" width=\"202\">\n<p class=\"TableContents\">Abh\u00e4ngig von der Anzahl States und Events<\/p>\n<\/td>\n<td valign=\"top\" width=\"202\">\n<p class=\"TableContents\">Konstant<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\" width=\"202\">\n<p class=\"TableContents\"><strong>Testbarkeit<\/strong><\/p>\n<\/td>\n<td valign=\"top\" width=\"202\">\n<p class=\"TableContents\">Komplex, fragile Tests<\/p>\n<\/td>\n<td valign=\"top\" width=\"202\">\n<p class=\"TableContents\">Einfacher<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\" width=\"202\">\n<p class=\"TableContents\"><strong>Run time<\/strong><\/p>\n<\/td>\n<td valign=\"top\" width=\"202\">\n<p class=\"TableContents\">Abh\u00e4ngig von Code-Qualit\u00e4t, meistens langsamer<\/p>\n<\/td>\n<td valign=\"top\" width=\"202\">\n<p class=\"TableContents\">Schnell, Jump Table<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\" width=\"202\">\n<p class=\"TableContents\"><strong>Compile time<\/strong><\/p>\n<\/td>\n<td valign=\"top\" width=\"202\">\n<p class=\"TableContents\">Schnell<\/p>\n<\/td>\n<td valign=\"top\" width=\"202\">\n<p class=\"TableContents\">Etwas langsamer<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\" width=\"202\">\n<p class=\"TableContents\"><strong>Abh\u00e4ngigkeiten<\/strong><\/p>\n<\/td>\n<td valign=\"top\" width=\"202\">\n<p class=\"TableContents\">keine<\/p>\n<\/td>\n<td valign=\"top\" width=\"202\">\n<p class=\"TableContents\">C++14<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<p>Die handgeschriebenen Konstruktionen sind meistens komplex. F\u00fcr die Implementierung der Transitionen brauchen wir zus\u00e4tzliche Variablen mit Zustandsinformationen und Bedingungen f\u00fcr die Transitions-Logik. Die if-else Konstruktionen sind f\u00fcr Compiler schwierig zu optimieren und brauchen mehrere CPU-Takte f\u00fcr die Abarbeitung. Handgeschriebene Zustandsautomaten sind fragil, und man muss alle \u00c4nderungen vorsichtig durchf\u00fchren.<\/p>\n<p>In Boost::SLM Framework wird die Transitionslogik als Jump-Tabelle zur Compile-Zeit generiert, das macht den Compile-Process etwas langsamer, reduziert aber die Laufzeit, weil der Compiler den Zustandsautomaten besser optimieren kann. Zus\u00e4tzlicher Vorteil ist das einfachere Testing, weil Transationen, Aktionen und Guards per Design getrennt sind. Es ist einfach, Einzelteile separat zu testen. Tests sind stabiler, weil bei \u00c4nderungen der Zustandsautomatenlogik nur die Tests, die die Transitionen testen, angepasst werden m\u00fcssen.<\/p>\n<p>Mit Nutzung von Frameworks wie z.B. Boost::SML k\u00f6nnen wir Entwicklungszeit sparen. Unsere Software wird einfacher zu lesen, zu erweitern und zu testen. Meistens wird die Laufzeit auch schneller, weil der gr\u00f6\u00dfte Teil von Entscheidungen zu Kompilierzeit getroffen wird.<\/p>\n<h2>References<\/h2>\n<p>[1]\u00a0<a href=\"https:\/\/www.omg.org\/spec\/UML\/2.5\/\" target=\"_blank\" rel=\"noopener\">https:\/\/www.omg.org\/spec\/UML\/2.5\/<\/a><\/p>\n<p>[2]\u00a0<a href=\"https:\/\/en.cppreference.com\/w\/cpp\/concept\/Callable\" target=\"_blank\" rel=\"noopener\">https:\/\/en.cppreference.com\/w\/cpp\/concept\/Callable<\/a><\/p>\n<p>[3]\u00a0<a href=\"https:\/\/boost-experimental.github.io\/sml\/index.html\" target=\"_blank\" rel=\"noopener\">https:\/\/boost-experimental.github.io\/sml\/index.html<\/a><\/p>\n<p><a title=\"Boost yout State-machines (PDF) \" href=\"https:\/\/www.microconsult.de\/wp-content\/uploads\/2025\/12\/fachinfo_ese_implementierung_boost_yout_state-machines_pawel_wisniewski_consulting_wisniewski.pdf\" target=\"_blank\" rel=\"noopener\"><strong>Beitrag als PDF downloaden<\/strong><\/a><\/p>\n<hr \/>\n<h2>Implementierung &#8211; unsere Trainings &amp; Coachings<\/h2>\n<p><strong>Wollen Sie sich auf den aktuellen Stand der Technik bringen?<\/strong><\/p>\n<p>Dann informieren Sie sich\u00a0<a title=\"MicroConsult Training\" href=\"https:\/\/www.microconsult.de\/alle-trainings-termine-komplettuebersicht\/\" target=\"_blank\" rel=\"noopener\"><strong>hier<\/strong>\u00a0<\/a>zu Schulungen\/ Seminaren\/ Trainings\/ Workshops und individuellen Coachings von MircoConsult zum Thema Implementierung \/Embedded- und Echtzeit-Softwareentwicklung.<\/p>\n<p><strong>Training &amp; Coaching zu den weiteren Themen unseren Portfolios finden Sie\u00a0<a title=\"Training &amp; Beratung - alle Themen\" href=\"https:\/\/www.microconsult.de\/training-beratung\/\" target=\"_blank\" rel=\"noopener\">hier<\/a>.<\/strong><\/p>\n<hr \/>\n<h2>Implementierung &#8211; Fachwissen<\/h2>\n<p>Wertvolles Fachwissen zum Thema Implementierung\/\u00a0Embedded- und Echtzeit-Softwareentwicklung steht\u00a0<a title=\"Embedded- und Echtzeit-Softwareentwicklung\" href=\"https:\/\/www.microconsult.de\/embedded-und-echtzeit-softwareentwicklung\/\" target=\"_blank\" rel=\"noopener\"><strong>hier\u00a0<\/strong><\/a>f\u00fcr Sie zum kostenfreien Download bereit.<\/p>\n<p><a title=\"Embedded- und Echtzeit-Softwareentwicklung\" href=\"https:\/\/www.microconsult.de\/embedded-und-echtzeit-softwareentwicklung\/\" target=\"_blank\" rel=\"noopener\"><strong>Zu den Fachinformationen<\/strong><\/a><\/p>\n<p><strong>Fachwissen zu weiteren Themen unseren Portfolios finden Sie <a title=\"MicroConsult Fachwissen\" href=\"https:\/\/www.microconsult.de\/fachwissen\/\" target=\"_blank\" rel=\"noopener\">hier<\/a>.<\/strong><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Create state machines that are easy to read and maintain Autor: Pawel Wi\u015bniewski, Pawel Wi\u015bniewski Consulting Beitrag &#8211; Embedded Software Engineering Kongress 2017 State Machines sind ein wichtiger Bestandsteil von Software. Leider sind sie zu oft per Hand implementiert, z.B. unter Verwendung von if-else oder switch-case Konstruktionen. Solche Konstruktionen sind schwer zu verstehen und schwierig [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_et_pb_use_builder":"","_et_pb_old_content":"","_et_gb_content_width":"","inline_featured_image":false,"footnotes":""},"categories":[],"tags":[],"class_list":["post-7810","post","type-post","status-publish","format-standard","hentry"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.9 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Boost Your State Machines - MicroConsult Academy GmbH<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.microconsult.de\/en\/boost-your-state-machines\/\" \/>\n<meta property=\"og:locale\" content=\"en_GB\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Boost Your State Machines - MicroConsult Academy GmbH\" \/>\n<meta property=\"og:description\" content=\"Create state machines that are easy to read and maintain Autor: Pawel Wi\u015bniewski, Pawel Wi\u015bniewski Consulting Beitrag &#8211; Embedded Software Engineering Kongress 2017 State Machines sind ein wichtiger Bestandsteil von Software. Leider sind sie zu oft per Hand implementiert, z.B. unter Verwendung von if-else oder switch-case Konstruktionen. Solche Konstruktionen sind schwer zu verstehen und schwierig [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.microconsult.de\/en\/boost-your-state-machines\/\" \/>\n<meta property=\"og:site_name\" content=\"MicroConsult Academy GmbH\" \/>\n<meta property=\"article:published_time\" content=\"2025-11-29T05:46:27+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-02-13T14:06:37+00:00\" \/>\n<meta name=\"author\" content=\"weissblau media\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"weissblau media\" \/>\n\t<meta name=\"twitter:label2\" content=\"Estimated reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.microconsult.de\\\/boost-your-state-machines\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.microconsult.de\\\/boost-your-state-machines\\\/\"},\"author\":{\"name\":\"weissblau media\",\"@id\":\"https:\\\/\\\/www.microconsult.de\\\/#\\\/schema\\\/person\\\/b6d4c4ae959b068fbe8d9416ed019a0a\"},\"headline\":\"Boost Your State Machines\",\"datePublished\":\"2025-11-29T05:46:27+00:00\",\"dateModified\":\"2026-02-13T14:06:37+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.microconsult.de\\\/boost-your-state-machines\\\/\"},\"wordCount\":1282,\"commentCount\":0,\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.microconsult.de\\\/boost-your-state-machines\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.microconsult.de\\\/boost-your-state-machines\\\/\",\"url\":\"https:\\\/\\\/www.microconsult.de\\\/boost-your-state-machines\\\/\",\"name\":\"Boost Your State Machines - MicroConsult Academy GmbH\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.microconsult.de\\\/#website\"},\"datePublished\":\"2025-11-29T05:46:27+00:00\",\"dateModified\":\"2026-02-13T14:06:37+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/www.microconsult.de\\\/#\\\/schema\\\/person\\\/b6d4c4ae959b068fbe8d9416ed019a0a\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.microconsult.de\\\/boost-your-state-machines\\\/#breadcrumb\"},\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.microconsult.de\\\/boost-your-state-machines\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.microconsult.de\\\/boost-your-state-machines\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.microconsult.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Boost Your State Machines\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.microconsult.de\\\/#website\",\"url\":\"https:\\\/\\\/www.microconsult.de\\\/\",\"name\":\"MicroConsult Academy GmbH\",\"description\":\"Professionelle Schulungen, Beratung und Projektunterst\u00fctzung\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.microconsult.de\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-GB\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.microconsult.de\\\/#\\\/schema\\\/person\\\/b6d4c4ae959b068fbe8d9416ed019a0a\",\"name\":\"weissblau media\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/bbb409da4970da9446f6c49465d453cb8a0dae301e4d4f465b5c4e62408daa2e?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/bbb409da4970da9446f6c49465d453cb8a0dae301e4d4f465b5c4e62408daa2e?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/bbb409da4970da9446f6c49465d453cb8a0dae301e4d4f465b5c4e62408daa2e?s=96&d=mm&r=g\",\"caption\":\"weissblau media\"},\"sameAs\":[\"https:\\\/\\\/www.microconsult.de\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Boost Your State Machines - MicroConsult Academy GmbH","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.microconsult.de\/en\/boost-your-state-machines\/","og_locale":"en_GB","og_type":"article","og_title":"Boost Your State Machines - MicroConsult Academy GmbH","og_description":"Create state machines that are easy to read and maintain Autor: Pawel Wi\u015bniewski, Pawel Wi\u015bniewski Consulting Beitrag &#8211; Embedded Software Engineering Kongress 2017 State Machines sind ein wichtiger Bestandsteil von Software. Leider sind sie zu oft per Hand implementiert, z.B. unter Verwendung von if-else oder switch-case Konstruktionen. Solche Konstruktionen sind schwer zu verstehen und schwierig [&hellip;]","og_url":"https:\/\/www.microconsult.de\/en\/boost-your-state-machines\/","og_site_name":"MicroConsult Academy GmbH","article_published_time":"2025-11-29T05:46:27+00:00","article_modified_time":"2026-02-13T14:06:37+00:00","author":"weissblau media","twitter_card":"summary_large_image","twitter_misc":{"Written by":"weissblau media","Estimated reading time":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.microconsult.de\/boost-your-state-machines\/#article","isPartOf":{"@id":"https:\/\/www.microconsult.de\/boost-your-state-machines\/"},"author":{"name":"weissblau media","@id":"https:\/\/www.microconsult.de\/#\/schema\/person\/b6d4c4ae959b068fbe8d9416ed019a0a"},"headline":"Boost Your State Machines","datePublished":"2025-11-29T05:46:27+00:00","dateModified":"2026-02-13T14:06:37+00:00","mainEntityOfPage":{"@id":"https:\/\/www.microconsult.de\/boost-your-state-machines\/"},"wordCount":1282,"commentCount":0,"inLanguage":"en-GB","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.microconsult.de\/boost-your-state-machines\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.microconsult.de\/boost-your-state-machines\/","url":"https:\/\/www.microconsult.de\/boost-your-state-machines\/","name":"Boost Your State Machines - MicroConsult Academy GmbH","isPartOf":{"@id":"https:\/\/www.microconsult.de\/#website"},"datePublished":"2025-11-29T05:46:27+00:00","dateModified":"2026-02-13T14:06:37+00:00","author":{"@id":"https:\/\/www.microconsult.de\/#\/schema\/person\/b6d4c4ae959b068fbe8d9416ed019a0a"},"breadcrumb":{"@id":"https:\/\/www.microconsult.de\/boost-your-state-machines\/#breadcrumb"},"inLanguage":"en-GB","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.microconsult.de\/boost-your-state-machines\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.microconsult.de\/boost-your-state-machines\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.microconsult.de\/"},{"@type":"ListItem","position":2,"name":"Boost Your State Machines"}]},{"@type":"WebSite","@id":"https:\/\/www.microconsult.de\/#website","url":"https:\/\/www.microconsult.de\/","name":"MicroConsult Academy GmbH","description":"Professional training, consulting and project support","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.microconsult.de\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-GB"},{"@type":"Person","@id":"https:\/\/www.microconsult.de\/#\/schema\/person\/b6d4c4ae959b068fbe8d9416ed019a0a","name":"weissblau media","image":{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/secure.gravatar.com\/avatar\/bbb409da4970da9446f6c49465d453cb8a0dae301e4d4f465b5c4e62408daa2e?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/bbb409da4970da9446f6c49465d453cb8a0dae301e4d4f465b5c4e62408daa2e?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/bbb409da4970da9446f6c49465d453cb8a0dae301e4d4f465b5c4e62408daa2e?s=96&d=mm&r=g","caption":"weissblau media"},"sameAs":["https:\/\/www.microconsult.de"]}]}},"post_mailing_queue_ids":[],"_links":{"self":[{"href":"https:\/\/www.microconsult.de\/en\/wp-json\/wp\/v2\/posts\/7810","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.microconsult.de\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.microconsult.de\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.microconsult.de\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.microconsult.de\/en\/wp-json\/wp\/v2\/comments?post=7810"}],"version-history":[{"count":6,"href":"https:\/\/www.microconsult.de\/en\/wp-json\/wp\/v2\/posts\/7810\/revisions"}],"predecessor-version":[{"id":11744,"href":"https:\/\/www.microconsult.de\/en\/wp-json\/wp\/v2\/posts\/7810\/revisions\/11744"}],"wp:attachment":[{"href":"https:\/\/www.microconsult.de\/en\/wp-json\/wp\/v2\/media?parent=7810"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.microconsult.de\/en\/wp-json\/wp\/v2\/categories?post=7810"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.microconsult.de\/en\/wp-json\/wp\/v2\/tags?post=7810"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}