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

Можно сгенерировать код С из модели 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.

Переключитесь между вариантами

  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

Похожие темы