Можно сгенерировать код С от Simulink® модель с различными условными переменными или значениями поддержанных Simulink перечисляемых типов. Перечислимые типы улучшают удобочитаемость кода, потому что значения условия и переменные в выражениях управления представлены как понятные имена вместо целых чисел. В этом разделе вы будете учиться:
Как сгенерировать код С из модели с различными значениями условия перечислимых типов.
Как различные значения условия представлены в сгенерированном коде.
В этом примере показано, как сгенерировать код С из модели Simulink с различными значениями условия перечислимого типа, выведенного из встроенного целочисленного int32
.
Откройте slexVariantSetupUsingIntEnums
модель. Эта модель запускает PostLoadFcn
заданный в File> ModelProperties> диалоговое окно Callbacks. Эта функция заполняет базовое рабочее пространство с контрольными переменными для различных блоков.
В этой модели Различный Приемник и Различные Исходные блоки задают два потенциальных варианта для подсистем Nonlinear controller и Linear 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