Operaciones para datos de Stateflow
Los gráficos de Stateflow® en los modelos de Simulink® tienen una propiedad del lenguaje de acción que define las operaciones que puede utilizar en acciones de estado y transición. Las propiedades del lenguaje son:
MATLAB® como lenguaje de acción.
C como lenguaje de acción.
Para obtener más información, consulte Diferencias entre C y MATLAB como sintaxis de lenguaje de acción.
Operaciones binarias
Esta tabla resume la interpretación de todas las operaciones binarias de gráficos de Stateflow según su orden de precedencia (0 = mayor, 10 = menor). Las operaciones binarias son asociativas por la izquierda, de modo que, en cualquier expresión, los operadores con la misma precedencia se evalúan de izquierda a derecha. No se especifica el orden de evaluación para otras operaciones. Por ejemplo, en esta asignación
A = f() > g();
f()
y g()
. Para obtener resultados más predecibles, una práctica de codificación recomendada consiste en dividir expresiones que dependen del orden de evaluación en varias instrucciones.
Operación | Precedencia | MATLAB como lenguaje de acción | C como lenguaje de acción |
---|---|---|---|
| 0 | Potencia. | Potencia. Esta operación es equivalente a la función de biblioteca de C Habilite esta operación eliminando la propiedad de gráfico Enable C-bit operations (Habilitar operaciones de bit C). Para obtener más información, consulte Habilitar las operaciones de bits en C. |
| 1 | Multiplicación. | Multiplicación. |
| 1 | División. | División. |
| 1 | Resto. Primero, los operandos no enteros se convierten a enteros. | |
| 2 | Suma. | Suma. |
| 2 | Resta. | Resta. |
| 3 | No se admite. Utilice la función | Desplace |
| 3 | No se admite. Utilice la función | Desplace |
| 4 | Comparación, mayor que. | Comparación, mayor que. |
| 4 | Comparación, menor que. | Comparación, menor que. |
| 4 | Comparación, mayor que o igual a. | Comparación, mayor que o igual a. |
| 4 | Comparación, menor que o igual a. | Comparación, menor que o igual a. |
| 5 | Comparación, igual a. | Comparación, igual a. |
| 5 | Comparación, no igual que. | Comparación, no igual que. |
| 5 | No se admite. Utilice la operación | Comparación, no igual que. |
| 5 | No se admite. Utilice la operación | Comparación, no igual que. |
| 6 | AND lógico. Para AND bit por bit, utilice la función |
Para obtener más información, consulte Operaciones bit por bit y Habilitar las operaciones de bits en C. |
| 7 | No se admite. Para XOR bit por bit, utilice la función | XOR bit por bit (valor predeterminado). Habilite esta operación seleccionando la propiedad de gráfico Enable C-bit operations (Habilitar operaciones de bit C). Para obtener más información, consulte Operaciones bit por bit y Habilitar las operaciones de bits en C. |
| 8 | OR lógico. Para OR bit por bit, utilice la función |
Para obtener más información, consulte Operaciones bit por bit y Habilitar las operaciones de bits en C. |
| 9 | AND lógico. | AND lógico. |
| 10 | OR lógico. | OR lógico. |
Acciones y operaciones unarias
Esta tabla resume la interpretación de todas las acciones y operaciones unarias de gráficos de Stateflow. Operaciones unarias:
Tienen mayor precedencia que los operadores binarios.
Son asociativas por la derecha, por lo que, en cualquier expresión, se evalúan de derecha a izquierda.
Operación | MATLAB como lenguaje de acción | C como lenguaje de acción |
---|---|---|
| NOT lógico. Para el NOT bit por bit, utilice la función |
Para obtener más información, consulte Operaciones bit por bit y Habilitar las operaciones de bits en C. |
| No se admite. Utilice la operación | NOT lógico. |
| Negativo. | Negativo. |
| No se admite. Utilice la expresión | Aumento. Equivale a |
| No se admite. Utilice la expresión | Disminución. Equivale a |
Operaciones de asignación
Esta tabla resume la interpretación de las operaciones de asignación en gráficos de Stateflow.
Operación | MATLAB como lenguaje de acción | C como lenguaje de acción |
---|---|---|
| Asignación sencilla. | Asignación sencilla. |
| No se admite. Utilice operaciones de conversión de tipos para anular las reglas de promoción de punto fijo. Consulte Operaciones de conversión de tipos. | Asignación de números de punto fijo. Consulte Override Fixed-Point Promotion in C Charts. |
| No se admite. Utilice la expresión | Equivale a |
| No se admite. Utilice la expresión | Equivale a |
| No se admite. Utilice la expresión | Equivale a |
| No se admite. Utilice la expresión | Equivale a |
| No se admite. Utilice la expresión a = mod(a,b) o a = rem(a,b) . | Equivale a |
| No se admite. Utilice la expresión | Equivale a a = a&b (AND bit por bit). Habilite esta operación seleccionando la propiedad de gráfico Enable C-bit operations (Habilitar operaciones de bit C). Para obtener más información, consulte Operaciones bit por bit y Habilitar las operaciones de bits en C. |
| No se admite. Utilice la expresión | Equivale a a = a^b (XOR bit por bit). Habilite esta operación seleccionando la propiedad de gráfico Enable C-bit operations (Habilitar operaciones de bit C). Para obtener más información, consulte Operaciones bit por bit y Habilitar las operaciones de bits en C. |
| No se admite. Utilice la expresión | Equivale a a = a|b (OR bit por bit). Habilite esta operación seleccionando la propiedad de gráfico Enable C-bit operations (Habilitar operaciones de bit C). Para obtener más información, consulte Operaciones bit por bit y Habilitar las operaciones de bits en C. |
Operaciones de conversión de tipos
Para convertir un valor de un tipo a otro tipo, utilice operaciones de conversión de tipos. Puede convertir datos a un tipo explícito o al tipo de otra variable.
Convertir a tipo de datos explícito
Para convertir una expresión numérica a un tipo de datos explícito, utilice una de estas funciones de conversión de tipos: double
, single
, int8
, int16
, int32
, int64
, uint8
, uint16
, uint32
, uint64
y boolean
. Por ejemplo, esta instrucción convierte la expresión x+3
a un entero de 16 bits sin signo y asigna el valor a los datos y
:
y = uint16(x+3);
Como alternativa, en gráficos que utilizan MATLAB como lenguaje de acción, puede usar la función cast
y especificar "double"
, "single"
, "int8"
, "int16"
, "int32"
, "int64"
, "uint8"
, "uint16"
, "uint32"
, "uint64"
o "logical"
como argumento de entrada. Por ejemplo, esta instrucción convierte la expresión x+3
a un entero de 16 bits sin signo y asigna el valor a y
:
y = cast(x+3,"uint16");
Para convertir una expresión a un tipo de punto fijo, los gráficos que utilizan MATLAB como lenguaje de acción admiten llamar a la función fi
(Fixed-Point Designer). Por ejemplo, esta instrucción convierte la expresión x+3
a un valor de punto fijo con signo con una longitud de palabra de ocho bits y una longitud de fracción de tres bits:
y = fi(x+3,1,8,3);
En gráficos que utilizan C como lenguaje de acción, llame a la función cast
usando una expresión fixdt
(Simulink) como argumento. Por ejemplo, esta instrucción convierte la expresión x+3
a un valor de punto fijo con signo con una longitud de palabra de ocho bits y una longitud de fracción de tres bits:
y = cast(x+3,fixdt(1,8,3));
Convertir tipos basándose en otros datos
Para facilitar la conversión de tipos, puede convertir el tipo de una expresión numérica al mismo tipo que otros datos de Stateflow.
En gráficos que utilizan MATLAB como lenguaje de acción, llame a la función cast
con la palabra clave "like"
. Por ejemplo, esta instrucción convierte el valor de x+3
al mismo tipo que el de los datos z
y asigna el valor a y
:
y = cast(x+3,"like",z);
En los gráficos que utilizan C como lenguaje de acción, el operador type
devuelve el tipo de datos de Stateflow existentes. Utilice este valor devuelto en lugar de un tipo explícito en una operación cast
. Por ejemplo, esta instrucción convierte el valor de x+3
al mismo tipo que el de los datos z
y asigna el valor a y
:
y = cast(x+3,type(z));
Operaciones bit por bit
Esta tabla resume la interpretación de todas las operaciones bit por bit de los gráficos de Stateflow que utilizan C como lenguaje de acción.
Operación | Descripción |
---|---|
a & b | AND bit por bit. |
a | b | OR bit por bit. |
a ^ b | XOR bit por bit. |
~a | NOT bit por bit. |
| Desplace a a la derecha b bits. |
| Desplace a a la izquierda b bits. |
Exceptuando las operaciones de desplazamiento de bits a >> b
y a << b
, debe habilitar todas las operaciones bit por bit seleccionando la propiedad de gráfico Enable C-bit operations. Consulte Habilitar las operaciones de bits en C.
Las operaciones bit por bit funcionan en enteros en el nivel binario. Primero, los operandos no enteros se convierten a enteros. Los operandos enteros siguen las reglas de promoción de C para determinar el valor intermedio del resultado. Después, este valor intermedio se convierte al tipo que especifique para el resultado de la operación.
Nota
Las operaciones bit por bit no se admiten en gráficos que utilizan MATLAB como lenguaje de acción. En su lugar, utilice las funciones bitand
, bitor
, bitxor
, bitnot
o bitshift
.
Operaciones bit por bit y desbordamientos de enteros
La conversión implícita utilizada para asignar el valor intermedio de una operación bit por bit puede producir un desbordamiento. Para conservar los bits situados más a la derecha del resultado y evitar comportamientos inesperados, deshabilite la propiedad de gráfico Saturate on Integer Overflows (Saturar en el desbordamiento de enteros).
Por ejemplo, ambos gráficos de este modelo calculan la operación bit por bit y = ~u
. Los gráficos calculan el valor intermedio de esta operación utilizando el tamaño de entero objetivo de 32 bits, por lo que los 24 bits situados más a la izquierda de este valor son solo unos. Cuando los gráficos asignan el valor intermedio a y
, la conversión a uint8
produce un desbordamiento de enteros. La salida de cada gráfico depende de cómo el gráfico maneje los desbordamientos de enteros.
Si Saturate on Integer Overflow está habilitado, el gráfico satura el resultado de la operación bit por bit y genera un valor de cero como salida.
Si Saturate on Integer Overflow está deshabilitado, el gráfico ajusta el resultado de la operación bit por bit y genera sus ocho bits situados más a la derecha como salida.
Para obtener más información, consulte Saturar en el desbordamiento de enteros.
Operaciones de puntero y dirección
Esta tabla resume la interpretación de las operaciones de puntero y dirección de los gráficos de Stateflow que utilizan C como lenguaje de acción.
Operación | Descripción |
---|---|
| Operación de dirección. Se utiliza con variables de código personalizado y de Stateflow. |
| Operación de puntero. Se utiliza solo con variables de código personalizado. |
Por ejemplo, el modelo sf_bus_demo
contiene una función de C personalizada que admite punteros como argumentos. Cuando el gráfico llama a la función de código personalizado, utiliza la operación &
para pasar los datos de Stateflow mediante dirección. Para obtener más información, consulte Integrar estructuras personalizadas en gráficos de Stateflow.
Las operaciones de puntero y dirección no se admiten en gráficos que utilizan MATLAB como lenguaje de acción. Los punteros a estructuras solo deben utilizarse en modo de solo lectura y únicamente son válidos durante la llamada en la que se pasan.
Reemplazar operaciones con implementaciones de aplicación
Si tiene Embedded Coder® o Simulink Coder™, puede configurar el generador de código para aplicar una biblioteca de sustitución de código (CRL) durante la generación de código. El generador de código cambia el código que genera para que las operaciones cumplan los requisitos de la aplicación. Con Embedded Coder, puede desarrollar y aplicar bibliotecas de sustitución de código personalizado.
Las entradas de operación de la biblioteca de sustitución de código pueden especificar operandos enteros o de punto fijo y patrones de resultado. Puede utilizar entradas de operación para estas operaciones:
Suma
+
Resta
-
Multiplicación
*
División
/
Por ejemplo, en esta expresión, puede reemplazar el operador de suma +
por una implementación específica objetivo si u1
, u2
e y
tienen tipos que permiten una coincidencia con una entrada de suma en la biblioteca de sustitución de código:
y = u1 + u2
La semántica del gráfico de C limita la coincidencia de entrada de operador porque el gráfico utiliza el tamaño de entero objetivo como su tipo intermedio en expresiones aritméticas. Por ejemplo, esta expresión aritmética calcula la suma intermedia en un entero objetivo:
y = (u1 + u2) % 3
Para obtener más información sobre cómo usar las bibliotecas de sustitución de código que ofrece MathWorks®, consulte What Is Code Replacement? (Simulink Coder) y Code Replacement Libraries (Simulink Coder). Para obtener información sobre cómo desarrollar bibliotecas de sustitución de código personalizado, consulte What Is Code Replacement Customization? (Embedded Coder) y Code You Can Replace From Simulink Models (Embedded Coder).