Diferencias entre MATLAB y C como sintaxis de lenguaje de acción
Los gráficos de Stateflow® en los modelos de Simulink® tienen una propiedad de lenguaje de acción que define la sintaxis de las acciones de estado y transición. El icono en la esquina inferior izquierda del área de diseño del gráfico indica el lenguaje de acción del gráfico:
MATLAB® es el lenguaje de acción.
C es el lenguaje de acción.
El lenguaje de acción elegido afecta a la forma de escribir las acciones de estado y transición, a los operadores disponibles y a la manera en la que los gráficos generan código.
MATLAB es la sintaxis del lenguaje de acción predeterminado de los gráficos nuevos de Stateflow. Para crear un gráfico que utilice C como lenguaje de acción, introduzca:
sfnew -cElegir un lenguaje de acción
Utilice MATLAB como lenguaje de acción para:
Prototipado y desarrollo rápido, donde es necesario realizar iteraciones rápidamente en algoritmos y lógica.
Operaciones de matrices y vectores, donde los gráficos operan ampliamente con arreglos y operaciones matemáticas complejas.
Integración con MATLAB, donde desea aprovechar las funciones y toolboxes existentes de MATLAB.
Utilice C como lenguaje de acción para:
Aplicaciones críticas para el rendimiento, donde se requiere velocidad de ejecución máxima para sistemas en tiempo real.
Objetivos integrados y generación de código para hardware con recursos limitados.
Aplicaciones que contengan un comportamiento determinístico, donde se necesita una temporización y un uso de memoria predecibles.
Diferencias entre los lenguajes de acción
Los lenguajes de acción de MATLAB y C difieren en la sintaxis, las operaciones admitidas y el comportamiento de generación de código. En estas tablas se enumeran las diferencias más significativas entre los dos lenguajes de acción.
Operaciones básicas
| Funcionalidad | MATLAB como lenguaje de acción | C como lenguaje de acción |
|---|---|---|
Operaciones de aumento y disminución | El gráfico corrige automáticamente la sintaxis para que sea sintaxis de MATLAB. Por ejemplo, | El gráfico admite |
Operaciones de asignación | El gráfico corrige automáticamente la sintaxis para que sea sintaxis de MATLAB. Por ejemplo, | El gráfico admite a += b, a –= b, a *= b y a /= b compatibles. Consulte Operaciones para datos de Stateflow. |
Operaciones de comparación | a ~= b | El gráfico admite las operaciones a != b y !a. Consulte Operaciones para datos de Stateflow. |
Marcadores de comentarios | Corrección automática a %. | El gráfico admite // y /* */ compatibles. Consulte Operaciones para datos de Stateflow. |
| Instrucciones condicionales | Puede utilizar instrucciones | Solo se admiten en las acciones de estado. |
| Instrucciones de bucle | Puede utilizar instrucciones | No se admiten las instrucciones de bucle. Para los patrones condicionales y de bucle, utilice en su lugar funciones gráficas. Consulte Reutilizar patrones lógicos definiendo funciones gráficas. |
Indexación y gestión de datos
| Funcionalidad | MATLAB como lenguaje de acción | C como lenguaje de acción |
|---|---|---|
Indexación de matrices y vectores | Indexación de base uno. Por ejemplo, | Indexación de base cero. Por ejemplo, |
Delimitadores de índice | Paréntesis con comas. Por ejemplo, | Corchetes. Por ejemplo, |
Datos de tamaño variable | Puede modificar los datos del gráfico de tamaño variable en las acciones de estado y transición. Para obtener más información, consulte Variable-Size Data in Charts That Use MATLAB as the Action Language. | Puede modificar los datos del gráfico de tamaño variable usando:
Todos los cálculos con datos de tamaño variable deben producirse dentro de estas funciones y no directamente en los estados o las transiciones. Para obtener más información, consulte Variable-Size Data in Charts That Use C as the Action Language. |
| Expansión escalar | No se admite. | Admitido. Consulte Asignar valores a todos los elementos. |
| Delimitadores de cadena | Utilice comillas dobles ( | Utilice comillas dobles ("...") o comillas simples ('...'). Consulte Manage Textual Information by Using Strings. |
Datos complejos | Utilice la notación de números complejos | Utiliza el operador |
Propagación de tipos de datos | Sigue las reglas de escritura de MATLAB. Por ejemplo, si se añaden datos del tipo | Sigue las reglas de escritura de C. Por ejemplo, si se añaden datos del tipo |
Funcionalidades avanzadas y generación de código
| Funcionalidad | MATLAB como lenguaje de acción | C como lenguaje de acción |
|---|---|---|
Construcciones de punto fijo:
| No se admite. | Admitido. Consulte Override Fixed-Point Promotion in C Charts y Fixed-Point Context-Sensitive Constants. |
Operaciones explícitas de conversión de tipos | Utilice la función de conversión de tipos de MATLAB o la función | Utilice la función de conversión de tipos de MATLAB o la función |
Notación de puntos para especificar estados, datos locales, mensajes y eventos locales dentro de las funciones de MATLAB | Admitido. Consulte Identify Data by Using Dot Notation. | No se admite. |
Parámetros de estructura | Se admiten parámetros ajustables y no ajustables. | Solo se admiten parámetros ajustables. |
Uso del objeto | Admitido. | No se admite. |
Datos complejos | Utiliza la notación de números complejos | Utiliza el operador |
Corrección automática cuando se usa MATLAB como lenguaje de acción
Los gráficos de Stateflow que utilizan MATLAB como lenguaje de acción corrigen automáticamente estas construcciones de C a la sintaxis de MATLAB:
Operaciones de aumento y disminución como
a++ya--. Por ejemplo,a++se cambia aa = a+1.Operaciones de asignación como
a += b,a –= b,a *= bya /= b. Por ejemplo,a += bse cambia aa = a+b.Operaciones de evaluación como
a != by!a. Por ejemplo,a != bse cambia aa ~= b.Los marcadores de comentarios
//y/* */se cambian a%.
Para desactivar esta preferencia, utilice la función sfpref:
sfpref(EnableLabelAutoCorrectionForMAL=false);
Directrices para utilizar MATLAB como lenguaje de acción
Siga estas directrices cuando escriba código en gráficos que utilizan MATLAB como lenguaje de acción.
Utilizar la indexación de base uno para vectores y matrices
La indexación de base uno es congruente con la sintaxis de MATLAB. Para obtener más información, consulte Notación de indexación.
Utilizar corchetes en lugar de corchetes para indexar en vectores y matrices
Esta instrucción es válida:
a(2,5) = 0;
Esta instrucción no es válida:
a[2][5] = 0;
Para obtener más información, consulte Notación de indexación.
Utilizar el formato de MATLAB para los comentarios
Utilice % para especificar los comentarios en los estados y las transiciones a fin de que sean congruentes con MATLAB. Por ejemplo, el siguiente comentario es válido:
% This is a valid comment in the style of MATLABLos comentarios de estilo C, como // y /* */, se corrigen automáticamente para utilizar %.
Encierre las acciones de transición entre llaves
Esta etiqueta de transición contiene una acción de transición válida:
E [x > 0] / {x = x+1;}Esta etiqueta de transición es incorrecta, pero se corrige automáticamente a la sintaxis válida.
E [x > 0] / x = x+1;No utilizar la lógica de estructuras de control en las acciones de condición y las acciones de transición
Únicamente se admite la lógica de estructuras de control (como las instrucciones if, switch, for y while) en las acciones de estado. El uso de la lógica de estructuras de control en las acciones de condición o las acciones de transición da lugar a un error de sintaxis.
No declarar variables globales o persistentes en las acciones de estado
No se admiten las palabras clave global y persistent en las acciones de estado.
Asignar un valor inicial a los datos locales y de salida
Cuando se utiliza MATLAB como lenguaje de acción, los datos leídos sin un valor inicial generan un error.
Incluir un prefijo de tipo para los identificadores de valores enumerados
El identificador TrafficColors.Red es válido, pero Red no lo es.
Para generar código a partir del modelo, utilizar las características del lenguaje de MATLAB compatibles con la generación de código
De lo contrario, utilice coder.extrinsic para llamar a funciones no admitidas, lo que proporciona la funcionalidad que desea para la simulación, pero no en el código generado. Para ver una lista de las características y funciones compatibles, consulte Soporte para lenguaje, función y objetos (Simulink).