Hauptinhalt

Die Übersetzung dieser Seite ist veraltet. Klicken Sie hier, um die neueste Version auf Englisch zu sehen.

Operationen für Stateflow-Daten

Stateflow®-Diagramme in Simulink®-Modellen weisen als eine ihrer Eigenschaften eine Aktionssprache auf, die die Operationen definiert, die Sie für Zustands- und Übergangsaktionen verwenden können. Die Sprach-Eigenschaften sind:

  • MATLAB® als Aktionssprache.

  • C als Aktionssprache.

Weitere Informationen finden Sie unter Unterschiede zwischen MATLAB und C als Aktionssprache-Syntax.

Bitweise Operationen

In dieser Tabelle werden die Interpretationen aller bitweiser Operationen in Stateflow-Diagrammen gemäß ihrer Priorität dargestellt (0 = höchste Priorität, 10 = niedrigste Priorität). Bitweise Operationen sind linksassoziativ. Bei jedem Ausdruck werden also Operatoren mit derselben Priorität von links nach rechts evaluiert. Die Reihenfolge der Evaluierung ist bei anderen Operationen nicht spezifiziert. Bei dieser Zuweisung

A = f() > g();
ist die Evaluierungsreihenfolge von f() und g() nicht spezifiziert. Für besser vorhersagbare Ergebnisse ist es gute Programmierpraxis, Ausdrücke, die von der Reihenfolge der Evaluierung abhängen, auf mehrere Ausdrücke aufzuteilen.

Operation

Priorität

MATLAB als Aktionssprache

C als Aktionssprache

a ^ b

0

Exponent.

Exponent. Diese Operation ist äquivalent zur Funktion pow der C Bibliothek. Die Operanden werden zunächst als Gleitkommazahlen dargestellt. Weitere Informationen finden Sie unter Call C Library Functions.

Aktivieren Sie diese Operation, indem Sie die Diagrammeigenschaft Enable C-bit operations löschen. Weitere Informationen finden Sie unter Enable C-bit operations.

a * b

1

Multiplikation.

Multiplikation.

a / b

1

Division.

Division.

a %% b

1

Nicht unterstützt. Verwenden Sie die rem- oder mod-Funktion.

Rest. Nicht ganzzahlige Operanden werden zunächst als Ganzahlen dargestellt.

a + b

2

Addition.

Addition.

a - b

2

Subtraktion.

Subtraktion.

a >> b

3

Nicht unterstützt. Verwenden Sie die bitshift-Funktion.

Verschiebt a um b Bits nach rechts. Weitere Informationen finden Sie unter Bitweise Operationen.

a << b

3

Nicht unterstützt. Verwenden Sie die bitshift-Funktion.

Verschiebt a um b Bits nach links. Weitere Informationen finden Sie unter Bitweise Operationen.

a > b

4

Vergleich, größer als.

Vergleich, größer als.

a < b

4

Vergleich, kleiner als.

Vergleich, kleiner als.

a >= b

4

Vergleich, größer gleich.

Vergleich, größer gleich.

a <= b

4

Vergleich, kleiner gleich.

Vergleich, kleiner gleich.

a == b

5

Vergleich, gleich.

Vergleich, gleich.

a ~= b

5

Vergleich, ungleich.

Vergleich, ungleich.

a != b

5

Nicht unterstützt. Verwenden Sie die Operation a ~= b.

Vergleich, ungleich.

a <> b

5

Nicht unterstützt. Verwenden Sie die Operation a ~= b.

Vergleich, ungleich.

a & b

6

Logisches AND. Verwenden Sie bei bitweisem AND die bitand-Funktion.

  • Bitweises AND (Standard). Aktivieren Sie diese Operation, indem Sie die Diagrammeigenschaft Enable C-bit operations auswählen.

  • Logisches AND. Aktivieren Sie diese Operation, indem Sie die Diagrammeigenschaft Enable C-bit operations löschen.

Weitere Informationen finden Sie unter Bitweise Operationen und Enable C-bit operations.

a ^ b

7

Nicht unterstützt. Verwenden Sie für bitweises XOR die bitxor-Funktion.

Bitweises XOR (Standard). Aktivieren Sie diese Operation, indem Sie die Diagrammeigenschaft Enable C-bit operations auswählen. Weitere Informationen finden Sie unter Bitweise Operationen und Enable C-bit operations.

a | b

8

Logisches OR. Verwenden Sie für bitweises OR die bitor-Funktion.

  • Bitweises OR (Standard). Aktivieren Sie diese Operation, indem Sie die Diagrammeigenschaft Enable C-bit operations auswählen.

  • Logisches OR. Aktivieren Sie diese Operation, indem Sie die Diagrammeigenschaft Enable C-bit operations löschen.

Weitere Informationen finden Sie unter Bitweise Operationen und Enable C-bit operations.

a && b

9

Logisches AND.

Logisches AND.

a || b

10

Logisches OR.

Logisches OR.

Unäre Operationen und Aktionen

In dieser Tabelle wird die Interpretation aller unären Operationen und Aktionen in Stateflow-Diagrammen zusammengefasst. Unäre Operationen:

  • Weisen eine höhere Priorität als bitweise Operatoren auf.

  • Sind rechtsassoziativ, werden also bei jedem Ausdruck von rechts nach links evaluiert.

Operation

MATLAB als Aktionssprache

C als Aktionssprache

~a

Logisches NOT. Verwenden Sie für bitweises NOT die bitcmp-Funktion.

  • Bitweises NOT (Standard). Aktivieren Sie diese Operation, indem Sie die Diagrammeigenschaft Enable C-bit operations auswählen.

  • Logisches NOT. Aktivieren Sie diese Operation, indem Sie die Diagrammeigenschaft Enable C-bit operations löschen.

Weitere Informationen finden Sie unter Bitweise Operationen und Enable C-bit operations.

!a

Nicht unterstützt. Verwenden Sie die Operation ~a.

Logisches NOT.

-a

Negativ.

Negativ.

a++

Nicht unterstützt. Verwenden Sie den Ausdruck a = a+1.

Inkrementieren. Äquivalent zu a = a+1.

a--

Nicht unterstützt. Verwenden Sie den Ausdruck a = a-1.

Dekrementieren. Äquivalent zu a = a-1.

Zuweisungsoperationen

In dieser Tabelle wird die Interpretation der Zuweisungsoperationen in Stateflow-Diagrammen zusammengefasst.

Operation

MATLAB als Aktionssprache

C als Aktionssprache

a = b

Einfache Zuweisung.

Einfache Zuweisung.

a := b

Nicht unterstützt. Verwenden Sie Typecast-Operationen, um die Festkomma-Promotionsregeln zu übersteuern. Weitere Informationen finden Sie unter Typecast-Operationen.

Zuweisung von Festkommazahlen. Weitere Informationen finden Sie unter Override Fixed-Point Promotion in C Charts.

a += b

Nicht unterstützt. Verwenden Sie den Ausdruck a = a+b.

Äquivalent zu a = a+b.

a -= b

Nicht unterstützt. Verwenden Sie den Ausdruck a = a-b.

Äquivalent zu a = a-b.

a *= b

Nicht unterstützt. Verwenden Sie den Ausdruck a = a*b.

Äquivalent zu a = a*b.

a /= b

Nicht unterstützt. Verwenden Sie den Ausdruck a = a/b.

Äquivalent zu a = a/b.

a %%= b

Nicht unterstützt. Verwenden Sie den Ausdruck a = mod(a,b) oder a = rem(a,b).

Äquivalent zu a = a%%b.

a &= b

Nicht unterstützt. Verwenden Sie den Ausdruck a = bitand(a,b).

Äquivalent zu a = a&b (bitweises AND). Aktivieren Sie diese Operation, indem Sie die Diagrammeigenschaft Enable C-bit operations auswählen. Weitere Informationen finden Sie unter Bitweise Operationen und Enable C-bit operations.

a ^= b

Nicht unterstützt. Verwenden Sie den Ausdruck a = bitxor(a,b).

Äquivalent zu a = a^b (bitweises XOR). Aktivieren Sie diese Operation, indem Sie die Diagrammeigenschaft Enable C-bit operations auswählen. Weitere Informationen finden Sie unter Bitweise Operationen und Enable C-bit operations.

a |= b

Nicht unterstützt. Verwenden Sie den Ausdruck a = bitor(a,b).

Äquivalent zu a = a|b (bitweises OR). Aktivieren Sie diese Operation, indem Sie die Diagrammeigenschaft Enable C-bit operations auswählen. Weitere Informationen finden Sie unter Bitweise Operationen und Enable C-bit operations.

Typecast-Operationen

Um einen Wert eines Typs in einen anderen Typ umzuwandeln, verwenden Sie Typecast-Operationen. Sie können Daten als expliziten Typ oder den Typ einer anderen Variable darstellen.

Darstellen als expliziter Datentyp

Um einen numerischen Ausdruck als einen expliziten Datentyp darzustellen, verwenden Sie eine dieser Typumwandlungs-Funktionen: double, single, int8, int16, int32, int64, uint8, uint16, uint32, uint64 und boolean. In diesem Beispiel wird der Ausdruck x+3 als vorzeichenlose 16-Bit-Ganzzahl dargestellt und der Wert den Daten y zugewiesen:

y = uint16(x+3);

Bei Diagrammen, die MATLAB als Aktionssprache verwenden, können Sie alternativ die cast-Funktion verwenden und "double", "single", "int8", "int16", "int32", "int64", "uint8", "uint16", "uint32", "uint64" oder "logical" als Eingangsargument festlegen. In diesem Beispiel wird der Ausdruck x+3 als vorzeichenlose 16-Bit-Ganzzahl dargestellt und der Wert y zugewiesen:

y = cast(x+3,"uint16");

Um einen Ausdruck als Festkommatyp darzustellen, wird bei Diagrammen, die MATLAB als Aktionssprache verwenden, das Aufrufen der fi (Fixed-Point Designer)-Funktion unterstützt. In diesem Beispiel wird der Ausdruck x+3 als vorzeichenbehaftete Festkommazahl mit einer Wortlänge von acht Bit und einer Bruchlänge von drei Bit dargestellt:

y = fi(x+3,1,8,3);

Rufen Sie bei Diagrammen, die C als Aktionssprache verwenden, die cast-Funktion mit einem fixdt (Simulink)-Ausdruck als Argument auf. In diesem Beispiel wird der Ausdruck x+3 als vorzeichenbehaftete Festkommazahl mit einer Wortlänge von acht Bit und einer Bruchlänge von drei Bit dargestellt:

y = cast(x+3,fixdt(1,8,3));

Darstellen eines Typs auf Basis anderer Daten

Um die Typdarstellung zu vereinfachen, können Sie den Typ des numerischen Ausdrucks in denselben Typ wie andere Stateflow-Daten umwandeln.

Verwenden Sie bei Diagrammen, die MATLAB als Aktionssprache verwenden, die cast-Funktion mit dem Schlüsselwort "like". Dieser Ausdruck wandelt beispielsweise den Wert von x+3 in denselben Typ wie den der Daten z um und weist den Wert y zu:

y = cast(x+3,"like",z);

Bei Diagrammen, die C als Aktionssprache verwenden, gibt der type-Operator den Typ von bestehenden Stateflow-Daten zurück. Verwenden Sie diesen Rückgabewert anstatt eines expliziten Typs in einer cast-Operation. Dieser Ausdruck wandelt beispielsweise den Wert von x+3 in denselben Typ wie den der Daten z um und weist den Wert y zu:

y = cast(x+3,type(z));

Bitweise Operationen

In dieser Tabelle wird die Interpretation aller bitweisen Operationen in Stateflow-Diagrammen zusammengefasst, die C als Aktionssprache verwenden.

Operation

Beschreibung
a & bBitweises AND.
a | bBitweises OR.
a ^ bBitweises XOR.
~aBitweises NOT.

a >> b

Verschiebt a um b Bits nach rechts.

a << b

Verschiebt a um b Bits nach links.

Außer Bitverschiebungs-Operationen a >> b und a << b müssen Sie alle bitweisen Operationen aktivieren, indem Sie die Diagrammeigenschaft Enable C-bit operations auswählen. Weitere Informationen finden Sie unter Enable C-bit operations.

Bitweise Operationen werden an Ganzzahlen auf Binärebene ausgeführt. Nicht ganzzahlige Operanden werden zunächst als Ganzzahlen dargestellt. Ganzzahl-Operanden befolgen die C Promotionsregeln, um den Zwischenwert des Ergebnisses zu ermitteln. Dieser Zwischenwert wird daraufhin als der Typ dargestellt, den Sie für das Ergebnis der Operation angeben.

Hinweis

Bitweise Operationen werden bei Diagrammen, die MATLAB als Aktionssprache verwenden, nicht unterstützt. Verwenden Sie stattdessen die Funktionen bitand, bitor, bitxor, bitnot oder bitshift.

Bitweise Operationen und Ganzzahl-Überläufe

Die zur Zuweisung des Zwischenwerts verwendete implizite Darstellung einer bitweisen Operation kann zu einem Überlauf führen. Um die rechtesten Bits des Ergebnisses zu bewahren und unerwartetes Verhalten zu vermeiden, deaktivieren Sie die Diagrammeigenschaft Saturate on Integer Overflows.

Zum Beispiel berechnen beide Diagramme in diesem Modell die bitweise Operation y = ~u. Die Diagramme berechnen den Zwischenwert dieser Operation anhand der Ziel-Ganzzahlgröße 32 Bit; die ersten 24 Bits in diesem Wert sind daher alle 1. Wenn die Diagramme den Zwischenwert y zuweisen, verursacht die Darstellung als uint8 einen Ganzzahl-Überlauf. Der Ausgang der Diagramme hängt davon ab, wie das Diagramm Ganzzahl-Überläufe verarbeitet.

  • Ist Saturate on Integer Overflow aktiviert, sättigt das Diagramm das Ergebnis der bitweisen Operation und gibt den Wert null aus.

  • Ist Saturate on Integer Overflow deaktiviert, bricht das Diagramm das Ergebnis der bitweisen Operation um und gibt die acht rechtesten Bits aus.

Pointer- und Adressen-Operationen

In dieser Tabelle wird die Interpretation der Pointer- und Adressen-Operationen in Stateflow-Diagrammen, die C als Aktionssprache verwenden, zusammengefasst.

Operation

Beschreibung

&a

Adressen-Operation. Verwenden Sie diese mit benutzerdefiniertem Code und Stateflow-Variablen.

*a

Pointer-Operation. Verwenden Sie diese nur mit benutzerdefinierten Code-Variablen.

Das Modell sf_bus_demo enthält beispielsweise eine benutzerdefinierte C Funktion, die Pointer als Argumente akzeptiert. Wenn das Diagramm die benutzerdefinierte Code-Funktion aufruft, verwendet es die &-Operation, um die Stateflow-Daten nach Adresse zu übergeben. Weitere Informationen finden Sie unter Integrate Custom Structures in Stateflow Charts.

Pointer- und Adressen-Operationen werden bei Diagrammen, die MATLAB als Aktionssprache verwenden, nicht unterstützt. Pointer auf Strukturen sollten nur im schreibgeschützten Modus verwendet werden und sind nur während dem Aufruf, bei dem sie übergeben werden, gültig.

Ersetzen von Operationen durch Anwendungs-Implementierungen

Wenn Sie Embedded Coder® oder Simulink Coder™ haben, können Sie den Codegenerator so konfigurieren, dass bei der Codegenerierung eine Code-Ersatzbibliothek (CRL) angewendet wird. Der Codegenerator ändert den für Operationen generierten Code, um die Anforderungen der Anwendung zu erfüllen. Mit Embedded Coder können Sie benutzerdefinierte Code-Ersatzbibliotheken entwickeln und anwenden.

Operations-Einträge der Code-Ersatzbibliothek können integrale oder Festkomma-Operanden- und Ergebnismuster festlegen. Sie können Operationseinträge für diese Operationen verwenden:

  • Addition +

  • Subtraktion -

  • Multiplikation *

  • Division /

In diesem Ausdruck können Sie beispielsweise den Additions-Operator + durch eine zielspezifische Implementierung ersetzen, wenn u1, u2 und y Typen aufweisen, die eine Übereinstimmung mit einem Additions-Eintrag in der Code-Ersatzbibliothek zulassen:

y = u1 + u2

Die C Diagrammsemantik beschränkt den Abgleich von Operator-Einträgen, da das Diagramm bei arithmetischen Ausdrücken die Ziel-Ganzzahlgröße als Zwischentyp verwendet. Dieser arithmetische Ausdruck berechnet beispielsweise die Zwischen-Addition in die Ziel-Ganzzahl:

y = (u1 + u2) % 3
Ist die Ziel-Ganzzahlgröße 32 Bit, können Sie den Ausdruck nicht durch einen Addition-Operator aus der Code-Ersatzbibliothek ersetzen und ein vorzeichenbehaftetes 16-Bit-Ergebnis erzeugen, ohne dass es zu einem Präzisionsverlust kommt.

Weitere Informationen über die Code-Ersatzbibliotheken von MathWorks® finden Sie unter What Is Code Replacement? (Simulink Coder) und Code Replacement Libraries (Simulink Coder). Informationen zur Entwicklung benutzerdefinierter Code-Ersatzbibliotheken finden Sie unter What Is Code Replacement Customization? (Embedded Coder) und Code You Can Replace From Simulink Models (Embedded Coder).

Siehe auch

Themen