Можно сгенерировать код С из 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
.
Нажмите Simulation > Run и увидите условия варианта, который распространяется на блоки. По умолчанию модель моделирует подсистему Linear controller.
Чтобы изменить активный выбор, установите значение V равным ControllerChoice.Nonlinear
, затем снова симулируйте модель. Модель моделирует подсистему Nonlinear controller.
Прежде чем вы сгенерируете код из модели, необходимо сначала убедиться, что у вас есть разрешение на запись в текущую папку.
Чтобы сгенерировать код, в галерее Apps панели инструментов модели нажмите Embedded Coder. Появится вкладка C Code.
Щелкните значок Generate Code > Build. ().
На 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
Чтобы просмотреть определения макросов, ControllerChoice_Linear
и ControllerChoice_Nonlinear
, нажмите на Controller.h
файл в панели Generated Code отчета.
#define ControllerChoice_Linear (0) /* Default value */ #define ControllerChoice_Nonlinear (1) #endif /* RTW_HEADER_Controller_h_ */
Чтобы просмотреть определение переменной управления вариантом, V
, нажмите на slexVariantSetupUsingIntEnums_types.h
файл.
#ifndef V #define V ControllerChoice_Linear #endif
Модель Simulink в этом примере показывает, как сгенерировать код С из модели, имеющей переменные управления вариантом перечисленного типа, выведенные из Simulink.IntEnumType.
Откройте slexVariantSetupUsingInMemoryEnums
модель. Модель запускает PreLoadFcn
определяется в диалоговом окне File > ModelProperties > Callbacks. Это заполняет базовое рабочее пространство переменными управления для блоков варианта.
Сгенерируйте код С Переменные управления вариантом 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