Contenido principal

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 -c

Elegir 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

FuncionalidadMATLAB como lenguaje de acciónC 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, a++ se corrige como a = a+1.

El gráfico admite a++ y a-- compatibles. Consulte Operaciones para datos de Stateflow.

Operaciones de asignación

El gráfico corrige automáticamente la sintaxis para que sea sintaxis de MATLAB. Por ejemplo, a += b se corrige como a = a+b.

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 ~= bEl 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 if, for y while en las acciones de estado. Consulte Bucles e instrucciones condicionales.

Solo se admiten en las acciones de estado.

Instrucciones de bucle

Puede utilizar instrucciones if, for y while en las acciones de estado. Consulte Bucles e instrucciones condicionales.

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

FuncionalidadMATLAB como lenguaje de acciónC como lenguaje de acción

Indexación de matrices y vectores

Indexación de base uno. Por ejemplo, A(1,2). Consulte Operaciones para vectores y matrices en Stateflow.

Indexación de base cero. Por ejemplo, A[0][1]. Consulte Operaciones para vectores y matrices en Stateflow.

Delimitadores de índice

Paréntesis con comas. Por ejemplo, A(1,2). Consulte Operaciones para vectores y matrices en Stateflow.

Corchetes. Por ejemplo, A[0][1]. Consulte Operaciones para vectores y matrices en Stateflow.

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:

  • Funciones de MATLAB

  • Funciones de Simulink

  • Tablas de verdad que utilizan MATLAB como lenguaje de acción

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 ("..."). Consulte Manage Textual Information by Using Strings.

Utilice comillas dobles ("...") o comillas simples ('...'). Consulte Manage Textual Information by Using Strings.

Datos complejos

Utilice la notación de números complejos a + bi o el operador complex. Consulte Operations for Complex Data in Stateflow.

Utiliza el operador complex. No se admite la notación de números complejos. Consulte Operations for Complex Data in Stateflow.

Propagación de tipos de datos

Sigue las reglas de escritura de MATLAB. Por ejemplo, si se añaden datos del tipo double a datos del tipo int32, se obtienen datos del tipo int32.

Sigue las reglas de escritura de C. Por ejemplo, si se añaden datos del tipo double a datos del tipo int32, se obtienen datos del tipo double.

Funcionalidades avanzadas y generación de código

FuncionalidadMATLAB como lenguaje de acciónC como lenguaje de acción

Construcciones de punto fijo:

  • Operador de asignación especial :=

  • Constantes contextuales, como 4.3C

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 cast. No se admite el operador type. Consulte Operaciones de conversión de tipos.

Utilice la función de conversión de tipos de MATLAB o la función cast con el operador type. Consulte Operaciones de conversión de tipos.

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 fimath global

Admitido.

No se admite.

Datos complejos

Utiliza la notación de números complejos a + bi o el operador complex. Consulte Operations for Complex Data in Stateflow.

Utiliza el operador complex. No se admite la notación de números complejos. Consulte Operations for Complex Data in Stateflow.

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++ y a--. Por ejemplo, a++ se cambia a a = a+1.

  • Operaciones de asignación como a += b, a –= b, a *= b y a /= b. Por ejemplo, a += b se cambia a a = a+b.

  • Operaciones de evaluación como a != b y !a. Por ejemplo, a != b se cambia a a ~= 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 MATLAB

Los 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).

Consulte también

Temas