Представление значений исполнительных условий перечисляемого типа в сгенерированном коде

Можно сгенерировать код С из Simulink® модель с переменными условий варианта или значениями поддерживаемых Simulink перечисляемых типов. Перечисленные типы улучшают читаемость кода, потому что значения условий и переменные в выражениях управления представлены в виде значимых имен вместо целых чисел. В этом разделе вы узнаете:

  • Как сгенерировать код С из модели со значениями вариантов условий перечисленных типов.

  • Как значения исполнительных условий представлены в сгенерированном коде.

Используйте перечисленный тип, выведенный из встроенного целого числа

В этом примере показано, как сгенерировать код С из модели Simulink со значениями вариантов условий перечисляемого типа, выведенными из встроенного целого числа int32.

Откройте slexVariantSetupUsingIntEnums модель. Эта модель запускает PostLoadFcn определяется в диалоговом окне File > ModelProperties > Callbacks. Эта функция заполняет базовое рабочее пространство переменными управления для блоков варианта.

В этой модели блоки Variant Sink и Variant Source задают два потенциальных варианта для подсистем Linear controller и Nonlinear controller. Управляющее выражение для подсистемы Linear controller V == ControllerChoice.Linear. Управляющее выражение для подсистемы Nonlinear controller V == ControllerChoice.NonLinear. Здесь, ControllerChoice является целочисленным классом перечисления, полученным из встроенного типа данных, int32. Класс определяется в ControllerChoice.m файл. Класс имеет два значения перечисления, Linear и Nonlinear. Эти перечисленные значения имеют базовые целочисленные значения 0 и 1.

Переключение между вариантами выбора

  1. Нажмите Simulation > Run и увидите условия варианта, который распространяется на блоки. По умолчанию модель моделирует подсистему Linear controller.

  2. Чтобы изменить активный выбор, установите значение V равным ControllerChoice.Nonlinear, затем снова симулируйте модель. Модель моделирует подсистему Nonlinear controller.

Сгенерируйте код из модели

Прежде чем вы сгенерируете код из модели, необходимо сначала убедиться, что у вас есть разрешение на запись в текущую папку.

  1. Чтобы сгенерировать код, в галерее Apps панели инструментов модели нажмите Embedded Coder. Появится вкладка C Code.

  2. Щелкните значок Generate Code > Build. ().

Просмотр сгенерированного кода

  1. На C Code вкладке панели инструментов выберите Open Report.

    В сгенерированном коде варианты управляют значениями ControllerChoice.Linear и ControllerChoice.Nonlinear преобразуются в ControllerChoice_Linear и ControllerChoice_Nonlinear, соответственно. Допустимый процессор C распознает этот формат. Код также включает определения макросов, соответствующих этим вариантам. Активный вариант определяется при помощи предварительных условий процессора (#if) на макросах (#define) ControllerChoice_Linear и ControllerChoice_Nonlinear.

    #if V == ControllerChoice_Linear
    
    slexVariantSetupUsingIntEnums_B.VariantMerge_For_Variant_Source =
    slexVariantSetupUsingIntEnums_P.DiscreteTransferFcn_NumCoef_a *
    slexVariantSetupUsingIntEnum_DW.DiscreteTransferFcn_states_o;
    
    #endif
    
    #if V == ControllerChoice_Nonlinear
    
    slexVariantSetupUsingIntEnums_B.VariantMerge_For_Variant_Source =
    look1_binlxpw(slexVariantSetupUsingIntEnums_P.DiscreteTransferFcn_NumCoef_l *
    slexVariantSetupUsingIntEnum_DW.DiscreteTransferFcn_states_n,
    slexVariantSetupUsingIntEnums_P.uDLookupTable_bp01Data,
    slexVariantSetupUsingIntEnums_P.uDLookupTable_tableData, 10U);
    
    #endif
  2. Чтобы просмотреть определения макросов, ControllerChoice_Linear и ControllerChoice_Nonlinear, нажмите на Controller.h файл в панели Generated Code отчета.

    #define ControllerChoice_Linear     (0)  /* Default value */
    #define ControllerChoice_Nonlinear  (1)
    #endif                                  /* RTW_HEADER_Controller_h_ */
  3. Чтобы просмотреть определение переменной управления вариантом, V, нажмите на slexVariantSetupUsingIntEnums_types.h файл.

    #ifndef V
    #define V                              ControllerChoice_Linear
    #endif

Используйте перечисленный тип в памяти, выведенный из Simulink .IntEnumType

Модель Simulink в этом примере показывает, как сгенерировать код С из модели, имеющей переменные управления вариантом перечисленного типа, выведенные из Simulink.IntEnumType.

  1. Откройте slexVariantSetupUsingInMemoryEnums модель. Модель запускает PreLoadFcn определяется в диалоговом окне File > ModelProperties > Callbacks. Это заполняет базовое рабочее пространство переменными управления для блоков варианта.

  2. Сгенерируйте код С Переменные управления вариантом Controller.Linear и Controller.Nonlinear представлены как Controller_Linear и Controller_Nonlinear в сгенерированном коде, как также показывает вышеописанный пример.

    Макросы Controller_Linear и Controller_Nonlinear определяются в Controller.h файл.

    #define Controller_Linear     (0)  /* Default value */
    #define Controller_Nonlinear  (1)
    #endif                                  /* RTW_HEADER_Controller_h_ */

    Переменная управления вариантом определяется в slexVariantSetupUsingInMemoryEnums_types.h файл.

    #ifndef V
    #define V                              Controller_Linear
    #endif

Похожие темы