Opérations pour données Stateflow
Les diagrammes Stateflow® des modèles Simulink® possèdent une propriété de langage d'action qui définit les opérations que vous pouvez utiliser dans les actions d'état et de transition. Les propriétés de langage sont les suivantes :
MATLAB® comme langage d’action.
C comme langage d’action.
Pour plus d’informations, veuillez consulter Differences Between MATLAB and C as Action Language Syntax.
Opérations binaires
Ce tableau récapitule l'interprétation de toutes les opérations binaires dans les diagrammes Stateflow en fonction de leur ordre de priorité (0 = le plus élevé, 10 = le plus faible). Les opérations binaires sont associatives à gauche. De ce fait, dans toute expression, les opérateurs présentant la même priorité sont évalués de gauche à droite. L'ordre d'évaluation des autres opérations n'est pas spécifié. Par exemple, dans cette affectation
A = f() > g();
f() et g() n'est pas spécifié. Pour obtenir des résultats plus prévisibles, il est judicieux de diviser les expressions qui dépendent de l'ordre d'évaluation en plusieurs instructions.
Opération | Priorité | MATLAB comme langage d’action | C comme langage d’action. |
|---|---|---|---|
| 0 | Puissance. | Puissance. Cette opération équivaut à la fonction de bibliothèque C Activez cette opération en désactivant la propriété de diagramme Enable C-bit operations. Pour plus d’informations, veuillez consulter Enable C-bit operations. |
| 1 | Multiplication. | Multiplication. |
| 1 | Division. | Division. |
| 1 | Rappel. Dans un premier temps, les opérandes non entiers sont convertis en nombres entiers. | |
| 2 | Addition. | Addition. |
| 2 | Soustraction. | Soustraction. |
| 3 | Non pris en charge. Utilisez la fonction | Décalez |
| 3 | Non pris en charge. Utilisez la fonction | Décalez |
| 4 | Comparaison, supérieur à. | Comparaison, supérieur à. |
| 4 | Comparaison, inférieur à. | Comparaison, inférieur à. |
| 4 | Comparaison, supérieur ou égal à. | Comparaison, supérieur ou égal à. |
| 4 | Comparaison, inférieur ou égal à. | Comparaison, inférieur ou égal à. |
| 5 | Comparaison, égal à. | Comparaison, égal à. |
| 5 | Comparaison, différent de. | Comparaison, différent de. |
| 5 | Non pris en charge. Utilisez l’opération | Comparaison, différent de. |
| 5 | Non pris en charge. Utilisez l’opération | Comparaison, différent de. |
| 6 | Opérateur logique AND. Pour l’opérateur binaire AND, utilisez la fonction |
Pour plus d’informations, veuillez consulter Opérations bit à bit et Enable C-bit operations. |
| 7 | Non pris en charge. Pour l’opérateur binaire XOR, utilisez la fonction | Opérateur binaire XOR (par défaut). Activez cette opération en sélectionnant la propriété de diagramme Enable C-bit operations. Pour plus d’informations, veuillez consulter Opérations bit à bit et Enable C-bit operations. |
| 8 | Opérateur logique OR. Pour l’opérateur binaire OR, utilisez la fonction |
Pour plus d’informations, veuillez consulter Opérations bit à bit et Enable C-bit operations. |
| 9 | Opérateur logique AND. | Opérateur logique AND. |
| 10 | Opérateur logique OR. | Opérateur logique OR. |
Opérations et actions unitaires
Ce tableau récapitule l’interprétation de l’ensemble des opérations et actions unitaires des diagrammes Stateflow. Opérations unitaires :
Sont prioritaires par rapport aux opérateurs binaires.
Sont associatives à droite. De ce fait, dans toute expression, elles sont évaluées de droite à gauche.
Opération | MATLAB comme langage d’action | C comme langage d’action. |
|---|---|---|
| Opérateur logique NOT. Pour l’opérateur binaire NOT, utilisez la fonction |
Pour plus d’informations, veuillez consulter Opérations bit à bit et Enable C-bit operations. |
| Non pris en charge. Utilisez l’opération | Opérateur logique NOT. |
| Négatif. | Négatif. |
| Non pris en charge. Utilisez l’expression | Incrémenter. Équivaut à |
| Non pris en charge. Utilisez l’expression | Décrémenter. Équivaut à |
Opérations d’affectation
Ce tableau récapitule l’interprétation des opérations d'affectation dans les diagrammes Stateflow.
Opération | MATLAB comme langage d’action | C comme langage d’action. |
|---|---|---|
| Affectation simple. | Affectation simple. |
| Non pris en charge. Utilisez les opérations de conversion de type pour ignorer les règles de promotion en virgule fixe. Pour plus d’informations, veuillez consulter Opérations de conversion de type. | Affectation de nombres à virgule fixe. Pour plus d’informations, veuillez consulter Override Fixed-Point Promotion in C Charts. |
| Non pris en charge. Utilisez l’expression | Équivaut à |
| Non pris en charge. Utilisez l’expression | Équivaut à |
| Non pris en charge. Utilisez l’expression | Équivaut à |
| Non pris en charge. Utilisez l’expression | Équivaut à |
| Non pris en charge. Utilisez l’expression a = mod(a,b) ou a = rem(a,b). | Équivaut à |
| Non pris en charge. Utilisez l’expression | Équivaut à a = a&b (opérateur binaire AND). Activez cette opération en sélectionnant la propriété de diagramme Enable C-bit operations. Pour plus d’informations, veuillez consulter Opérations bit à bit et Enable C-bit operations. |
| Non pris en charge. Utilisez l’expression | Équivaut à a = a^b (opérateur binaire XOR). Activez cette opération en sélectionnant la propriété de diagramme Enable C-bit operations. Pour plus d’informations, veuillez consulter Opérations bit à bit et Enable C-bit operations. |
| Non pris en charge. Utilisez l’expression | Équivaut à a = a|b (opérateur binaire OR). Activez cette opération en sélectionnant la propriété de diagramme Enable C-bit operations. Pour plus d’informations, veuillez consulter Opérations bit à bit et Enable C-bit operations. |
Opérations de conversion de type
Pour convertir une valeur d'un type à un autre, utilisez des opérations de conversion de type. Vous pouvez convertir des données en un type explicite ou dans le type d’une autre variable.
Conversion en un type de données explicite
Pour convertir une expression numérique en un type de données explicite, utilisez l'une des fonctions de conversion de type suivantes : double, single, int8, int16, int32, int64, uint8, uint16, uint32, uint64 et boolean. Par exemple, cette instruction convertit l’expression x+3 en entier non signé 16 bits et affecte cette valeur à la donnée y :
y = uint16(x+3);
Sinon, dans les diagrammes qui utilisent MATLAB comme langage d'action, vous pouvez utiliser la fonction cast et spécifier "double", "single", "int8", "int16", "int32", "int64", "uint8", "uint16", "uint32", "uint64" ou "logical" en tant qu'argument d'entrée. Par exemple, cette instruction convertit l’expression x+3 en entier non signé 16 bits et affecte cette valeur à y :
y = cast(x+3,"uint16");Pour convertir une expression en un type à virgule fixe, les diagrammes qui utilisent MATLAB comme langage d'action prennent en charge l'appel de la fonction fi (Fixed-Point Designer). Par exemple, cette instruction convertit l'expression x+3 en une valeur signée à virgule fixe présentant une longueur de mot de 8 bits et une longueur de fraction de 3 bits :
y = fi(x+3,1,8,3);
Dans les diagrammes qui utilisent le langage C comme langage d'action, appelez la fonction cast au moyen d’une expression fixdt (Simulink) en tant qu’argument. Par exemple, cette instruction convertit l'expression x+3 en une valeur signée à virgule fixe présentant une longueur de mot de 8 bits et une longueur de fraction de 3 bits :
y = cast(x+3,fixdt(1,8,3));
Conversion de type sur la base d’autres données
Pour faciliter la conversion de type, vous pouvez convertir le type d'une expression numérique en un type identique à celui d'une autre donnée Stateflow.
Dans les diagrammes utilisant MATLAB comme langage d’action, appelez la fonction cast avec le mot-clé "like". Par exemple, cette instruction convertit la valeur de x+3 en un type identique à celui des données z et attribue la valeur à y :
y = cast(x+3,"like",z);Dans les diagrammes utilisant le C comme langage d’action, l’opérateur type renvoie le type d’une donnée Stateflow existante. Utilisez cette valeur de retour à la place d'un type explicite dans une opération cast. Par exemple, cette instruction convertit la valeur de x+3 en un type identique à celui des données z et attribue la valeur à y :
y = cast(x+3,type(z));
Opérations bit à bit
Ce tableau récapitule l’interprétation de toutes les opérations binaires dans les diagrammes Stateflow qui utilisent le C comme langage d’action.
Opération | Description |
|---|---|
a & b | Opérateur binaire AND. |
a | b | Opérateur binaire OR. |
a ^ b | Opérateur binaire XOR. |
~a | Opérateur binaire NOT. |
| Décalez a vers la droite de b bits. |
| Décalez a vers la gauche de b bits. |
À l'exception des opérations de décalage de bits a >> b et a << b, vous devez activer toutes les opérations binaires en sélectionnant la propriété de diagramme Enable C-bit operations. Pour plus d’informations, veuillez consulter Enable C-bit operations.
Les opérations binaires s’appliquent aux nombres entiers au niveau binaire. Dans un premier temps, les opérandes non entiers sont convertis en nombres entiers. Les opérandes entiers suivent les règles de promotion du langage C pour déterminer la valeur intermédiaire du résultat. Cette valeur intermédiaire est ensuite convertie dans le type que vous spécifiez pour le résultat de l'opération.
Remarque
Les opérations binaires ne sont pas prises en charge dans les diagrammes qui utilisent MATLAB comme langage d'action. Utilisez à la place les fonctions bitand, bitor, bitxor, bitnot ou bitshift.
Opérations binaires et dépassements d’entier
La conversion implicite utilisée pour attribuer la valeur intermédiaire d'une opération binaire peut entraîner un dépassement. Pour préserver les bits les plus à droite du résultat et éviter un comportement inattendu, désactivez la propriété de diagramme Saturate on Integer Overflows.
Par exemple, les deux diagrammes de ce modèle calculent l’opération binaire y = ~u. Les diagrammes calculent la valeur intermédiaire pour cette opération en utilisant la taille de l'entier cible de 32 bits. Ainsi, les 24 bits les plus à gauche de cette valeur sont tous des uns. Lorsque les diagrammes attribuent la valeur intermédiaire à y, la conversion en uint8 entraîne un dépassement d’entier. La sortie de chaque diagramme dépend de la manière dont le diagramme traite les dépassements d'entier.
Si la propriété Saturate on Integer Overflow est activée, le diagramme sature le résultat de l'opération binaire et émet une valeur nulle.
Si la propriété Saturate on Integer Overflow est désactivée, le diagramme récapitule le résultat de l'opération binaire et émet ses huit bits les plus à droite.

Opérations de pointeur et d'adresse
Ce tableau récapitule l’interprétation de toutes les opérations de pointeur et d’adresse dans les diagrammes Stateflow qui utilisent le C comme langage d’action.
Opération | Description |
|---|---|
| Opération d’adresse. Utilisez-la avec des variables de code personnalisé et Stateflow. |
| Opération de pointeur. Utilisez-la uniquement avec des variables de code personnalisé. |
Par exemple, le modèle sf_bus_demo contient une fonction C personnalisée qui utilise des pointeurs en tant qu’arguments. Lorsque le diagramme appelle la fonction de code personnalisé, il utilise l'opération & pour transmettre les données Stateflow par adresse. Pour plus d’informations, veuillez consulter Integrate Custom Structures in Stateflow Charts.
Les opérations de pointeur et d’adresse ne sont pas prises en charge dans les diagrammes qui utilisent MATLAB comme langage d'action. Les pointeurs vers des structures ne doivent être utilisés qu'en mode lecture seule et ne sont valides que pendant l'appel au cours duquel ils sont transmis.
Remplacement des opérations par des implémentations d'applications
Si vous possédez Embedded Coder® ou Simulink Coder™, vous pouvez configurer le générateur de code afin qu'il applique une bibliothèque de remplacement de code (CRL) pendant la génération du code. Le générateur de code modifie le code qu'il génère pour les opérations afin de répondre aux exigences de l'application. Avec Embedded Coder, vous pouvez développer et appliquer des bibliothèques de remplacement de code personnalisées.
Les entrées d'opération de la bibliothèque de remplacement de code peuvent spécifier des modèles d'intégrale ou d’opérandes et de résultats à virgule fixe. Vous pouvez utiliser des entrées d’opération pour ces opérations :
Addition
+Soustraction
-Multiplication
*Division
/
Par exemple, dans cette expression, vous pouvez remplacer l'opérateur d'addition + par une implémentation propre à la cible si u1, u2 et y présentent des types correspondant à une entrée d'addition dans la bibliothèque de remplacement de code :
y = u1 + u2
La sémantique des diagrammes C limite la correspondance des entrées des opérateurs. En effet, le diagramme utilise la taille de l'entier cible comme type intermédiaire dans les expressions arithmétiques. Par exemple, cette expression arithmétique calcule l'addition intermédiaire dans un entier cible :
y = (u1 + u2) % 3Pour plus d’informations sur l’utilisation des bibliothèques de remplacement de code fournies par MathWorks®, consultez What Is Code Replacement? (Simulink Coder) et Code Replacement Libraries (Simulink Coder). Pour plus d’informations sur le développement de bibliothèques de remplacement de code personnalisé, consultez What Is Code Replacement Customization? (Embedded Coder) et Code You Can Replace From Simulink Models (Embedded Coder).