Frage

Ich bin auf der Suche nach einem Rahmen, der die Ausführung von hierarchischen Zustandsautomaten liefert (HSMs).

Dies sind die Anforderungen an den Rahmen:

  • Konform UML-Zustands Semantik (so viel wie möglich)
  • Unterstützung zumindest
    • Run-to-Completion-Semantik
    • hierarchische Zustände
    • Eintritts- und Austrittsaktionen
    • Übergang Aktionen
    • Wächter
    • Ereignisse mit benutzerdefinierten Parametern
  • Ist objektorientiert oder nicht zumindest nicht OO-Design
  • verbieten

Die Zielplattform ist ein mittel- bis großes Embedded-System mit einem O.

Sie wissen einen Rahmen, der die obigen Anforderungen erfüllt? Was sind die Vor- und Nachteile des Rahmens?

War es hilfreich?

Lösung

Schauen Sie sich die Quantum-Plattform .

habe ich es auf mehr Embedded-Projekten (von sehr klein bis sehr groß) verwendet wird, und es unterstützt alle der Kugel Elemente, die Sie benötigen, und vieles mehr.

Die Webseite für die QP hat eine viel bessere Arbeit selbst zu erklären, als ich hier tun kann.

Bitte beachten Sie, wird der QP nicht zu 100% der in der UML-Spezifikation angegeben Funktionalität implementieren, aber die Abweichungen sind deutlich erklärt, und in allen meinen Erfahrungen mit dem QP, keiner von ihnen hat ein Problem für das Projekt.

Es gibt auch 2-Boost-Statechart-Pakete, die Sie scheinen zu wissen.

Andere Tipps

Sie sollten gehen und Check-out -Boost MSM , es ist neu für Boost-1.44 scheint aber ganz vollständig. Ich habe noch nicht versucht, es aus mir, aber es sieht ganz vielversprechend.

Ab heute gibt es eine neue C ++ (unterstützt C ++ 11 und C ++ 03 mit Boost) Alternative zur Verfügung. Es heißt yasmine (und ich bin der Architekt). Es erfüllt alle die oben genannten Anforderungen.

Einige Vor-und Nachteile (von der yasmine Webseite zitiert):

Die Vorteile der Verwendung von Yasmine

  • Sie bietet eine vollständige Implementierung von UML-Zustands Semantik.
  • Yasmine ist eine moderner C ++ Implementierung unter Verwendung von C ++ 11 (C ++ 03-Unterstützung verfügbar ist, auch).
  • Weil es C ++ (und nicht C) den Code integriert sich gut in OO-Code.
  • Sie ist gut dokumentiert [...]
  • Weil sie Open-Source ist, dass Sie ihre Implementierung heraus überprüfen können. Auch dies garantiert langfristige Nutzbarkeit und Verfügbarkeit.
  • Die Bibliothek ermöglicht es Ihnen, Zustandsmaschinen zur Laufzeit zu erstellen.
  • [...]

Was Yasmine ist nicht

Sie ist kein Mindest Fußdruck Bibliothek dass priorisiert auf Laufen auf jedes System, egal wie wenig Ressourcen zur Verfügung stehen. Yasmine ist nicht Ressourcen hungrig, aber sie kann nicht (und will nicht) konkurrieren mit switch-case-basierte Bare-Metal-no-Abstraktion Bibliotheken.

Hinweis

Ich weiß, das ist eine alte Frage, aber es ist Googles # 1 für „c ++ uml Zustandsmaschine“, die es sehr relevant macht.

Wenn Sie einen Rahmen suchen, unterstützt hierarchische und gleichzeitig Zustandsmaschinen mit UML Semantik (Entry / Exit, Übergänge, Wachen, Ereignisse mit Parametern, asynchron / synchron), haben einen Blick auf meine Zustand Maschinencode und Plangenerator .

Statt sich auf die Zustandsmaschine „von Hand“ Implementierung beschreiben die Zustandsmaschine in einem einfachen Menschen lesbaren und beschreibbaren XML-Beschreibung und lassen Sie die Zustandsmaschine Generator Schreiben Sie den Code Quelle in C ++, C # oder Java.

Eigentlich für die C ++ Version kann der generierte Code für einen mittleren / großen Embedded-System leicht Quer kompiliert werden. Es wurde bereits getan.

Sie können einen Blick auf meine C ++ Framework Template-Klasse STTCL dh purposed schaffen Kartierung UML 2.2-Zustandsdiagramm-Notation Implementierungsklassen. Der STTCL Ansatz ist eine Verfeinerung des GoF Zustandsmusters und versucht die Lücke (n) mit der UML-Zustandsdiagramm-Notation zu füllen.

Die Rahmen-Implementierungen sind in Bezug auf OS Abhängigkeiten konfigurierbar, so weit diese (nur für asynchrone Ausführung Modelle) benötigt werden.

Es gibt eine PDF-Dokument verfügbar Erläuterung des Konzepts im Detail.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top