Сконфигурируйте генерацию кода C по умолчанию для категорий элементов данных и функций

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

Необходимо настроить окружение примера, как описано в Set Up Example Environment.

Настройте пример Окружения

  1. Скопируйте эти внешние исходные файлы и файлы заголовков из matlabroot/toolbox/rtw/rtwdemos в рабочую папку с возможностью записи. Эти файлы определяют и объявляют внешний тип данных и данные, которые использует сгенерированный код.

    ФайлОписание
    exDblFloat.hОпределяет псевдоним типа данных проекта для double, DBL_FLOAT. Simulink® использует PreLoadFcn коллбэк, заданный для модели, чтобы проанализировать этот файл заголовка и создать соответствующее Simulink.AliasType объект.
    exInDataMem.cВключает exInDataMem.h и задает переменную ex_input1.
    exInDataMem.hВключает exDbFloat.h и объявляет переменную ex_input1.
    exInDataLut.cexInDataLut.c включает exInDataLut.h и задает переменные ex_input2, ex_input3, и ex_input4.
    exInDataLut.hВключает exDbFloat.h и объявляет переменные ex_input2, ex_input3, и ex_input4.
    exCodeDefs.slddСловарь данных
    rtwdemo_configdefaults.slxПример модели.
  2. Откройте копию примера модели rtwdemo_configdefaults.Example model rtwdemo_configdefaults.

  3. В галерее Apps откройте приложение Embedded Coder.

Сконфигурируйте генерацию кода по умолчанию для данных

В этом примере показано, как использовать редактор Отображения для определения требований генерации кода для данных моделей. Модель использует скорости множества потоков выполнения и сконфигурирована для использования в одном экземпляре.

В этом примере приняты следующие требования к генерации кода для данных:

  • Используйте определение типа проекта DBL_FLOAT определено в заголовочном файле exDblFloat.h.

  • Получите ex_input1 элемента данных из файла заголовка exInDataMem.h. Данные используются для вычисления значения, хранящегося в памяти, а затем используются в состоянии if-else блока Switch.

  • Получите элементы данных ex_input2, ex_input3, и ex_input4 из файла заголовка exInDataLut.h. Данные используются в интерполяционных таблицах Table1 и Table2.

  • Данные, импортированные в модель из заголовочных файлов exInDataMem.h и exInDataLut.h имеет тип DBL_FLOAT, стандарт проекта.

  • Параметрический K1 должна быть настроена, чтобы включить калибровку.

  • Данные хранилища mode определяет данные, которые являются общими в модели. Блок Логический Оператор записывает в хранилище данных, и блок Rate Transition считывает из хранилища данных.

  • Элементы данных X представляет задержку для блока Unit Delay.

  • Сохраните данные, которые являются внутренними для модели, такие как задержка X, в разделе памяти, помеченном internalDataMem.

  • Экспорт объявлений выходных данных в файл заголовка exSysOut.h и определения для exSysOut.c.

  • Назовите переменные, представляющие входные и выходные порты в сгенерированном коде, как указано в этой таблице, чтобы они совпадали с именами переменных во внешних файлах заголовка и определения.

Несмотря на то, что модель использует отдельные образцы некоторых данных, пример конфигурирует настройки по умолчанию, чтобы продемонстрировать различные типы отображений. Когда вы добавляете блоки к модели, новые элементы данных получают отображения генерации кода по умолчанию.

Настройте настройки по умолчанию для корневых входных портов

Укажите внешний файл заголовка, который объявляет входные данные. Три из четырех корневых входных портов считывают вход из переменных, объявленных в заголовочном файле exInDataLut.h. Установите заголовочный файл как значение по умолчанию.

  1. Откройте rtwdemo_configdefaults модели. Сохраните копию в расположении с возможностью записи.

  2. Откройте приложение Embedded Coder.

  3. На вкладке C Code выберите Code Interface > Default Code Mappings. Откроется вкладка Data Defaults редактора отображений кода и Property Inspector.

  4. На вкладке Data Defaults разверните Inports and Outports. Затем выберите Inports .

  5. Установите класс памяти равным ImportFromFile.

  6. В Property Inspector установите Header File равным exInDataLut.h.

Сконфигурируйте настройки по умолчанию для параметров модели

Сконфигурируйте настройки по умолчанию для параметров рабочего пространства модели, которые вы хотите настроить.

  1. В редакторе Отображения перейдите на вкладку Data Defaults.

  2. На вкладке Data Defaults разверните Parameters.

  3. В строке для Model parameters щелкните текст 'Auto' will be inlined. Откроется диалоговое окно Параметры конфигурации модели (Model Configuration Parameters) на панели Code Generation > Optimization. Установите Default parameter behavior значение Tunable. Применить изменение и закрыть диалоговое окно. В редакторе Code Mappings текст справа от Model parameters теперь читается 'Auto' will be tunable.

  4. Чтобы включить определения и объявления глобальных переменных в сгенерированный код для параметров модели, установите класс памяти для категории Model parameters равным ExportedGlobal.

Определите раздел памяти для внутренних данных

Задайте раздел памяти для хранения модуля с задержкой X, данные, которые являются внутренними для модели.

  1. Откройте словарь Embedded Coder Dictionary, выбрав Code Interface > Embedded Coder Dictionary.

  2. В словаре Embedded Coder Dictionary перейдите на вкладку Memory Sections.

  3. Нажмите Add.

  4. В новой строке таблицы назовите новый раздел памяти internalDataMem. Также установите:

    • Pre Statement с #pragma start INTERNALDATA

    • Post Statement с #pragma end INTERNALDATA

    • Statements Surround с Group of variables

  5. Закройте словарь.

Для получения дополнительной информации смотрите Control Data и Function Placement in Memory путем вставки Pragmas.

Настройте настройки по умолчанию для внутренних данных

Настройте строение генерации кода по умолчанию для внутренних данных, чтобы включить раздел памяти internalDataMem.

  1. В редакторе Отображения перейдите на вкладку Data Defaults.

  2. На вкладке Data Defaults разверните Signals.

  3. Выберите категорию Signals, states, and internal data.

  4. В Property Inspector установите Memory Section равным internalDataMem.

Настройте параметры по умолчанию для Root Outport

Укажите внешние файлы заголовка и определения по умолчанию для переменных, в которые записывает выходы сгенерированный код.

  1. В редакторе Отображения перейдите на вкладку Data Defaults.

  2. На вкладке Data Defaults разверните Inports and Outports.

  3. Выберите категорию Outports.

  4. Установите класс памяти равным ExportToFile.

  5. В Property Inspector установите Header File равным exSysOut.h и Definition File к exSysOut.c.

Применение строений по умолчанию к отдельным элементам данных

Если вы явно не сопоставляете отдельные элементы данных с альтернативными настройками класса памяти, редактор Code Mappings предполагает, что класс памяти для элементов Auto. Когда класс памяти для элемента данных Autoгенератор кода может исключить или изменить представление соответствующего кода в целях оптимизации. Если оптимизация невозможна, генератор кода применяет строение модели по умолчанию.

  • Чтобы избежать оптимизации и заставить генератор кода использовать строение по умолчанию, установите класс памяти для отдельного элемента равным Model default.

  • Чтобы переопределить строение по умолчанию, задайте класс памяти, который удовлетворяет требованиям генерации кода для этого элемента данных.

В данном примере сконфигурируйте генератор кода, чтобы применить настройку класса памяти по умолчанию к этим элементам данных:

  • Входные порты In2, In3, и In4

  • Выходные Out1

  • Параметр модели K1

  • Конечные X

  1. В редакторе Отображения перейдите на вкладку Inports.

  2. Выберите строки для входных портов In2, In3, и In4. Затем для одного из выбранных входных портов установите класс памяти равным Model default: ImportFromFile. Класс памяти для трех выбранных входных портов изменяется на Model default: ImportFromFile.

  3. Перейдите на вкладку Outports. Для выходных Out1, установите класс памяти равным Model default: ExportToFile.

  4. Перейдите на вкладку Parameters. Разверните Model Parameters. Затем для K1 параметров, установите класс памяти равным Model default: ExportedGlobal.

  5. Перейдите на вкладку Signals/States. Разверните States. Для X состояний, установите класс памяти равным Model default: Default.

  6. Сохраните модель.

Сгенерируйте и проверьте код

Сгенерируйте код и проверьте сгенерированный код.

  • В файл rtwdemo_configdefaults.h, поиск #include операторы, которые включают заголовочные файлы, которые объявляют внешние входные данные.

    #include "exInDataMem.h"
    #include "exInDataLut.h"
    

  • Откройте файл rtwdemo_configdefaults.c. Код инициализирует переменную усиления K1 и использует переменную в функции шага модели exFast_step1.

    DBL_FLOAT K1 = 2.0;
    .
    .
    .
    void exFast_step1(void)
    {
      DBL_FLOAT rtb_Gain;
      
      rtb_Gain = K1 * look1_binlc(ex_input2, (&(rtTable1_bp01Data[0])),
        (&(rtTable1_tableData[0])), 10U);
    
      rtDWork.RateTransition_Buffer0 = rtb_Gain;
    }
      .
      .
      .
    }
  • В файловой rtwdemo_configdefaults.c, найти #pragma управляющие линии, которые определяют разделы памяти для INTERNALDATA (локальное хранилище данных, единичная задержка и константы).

    #pragma start INTERNALDATA
    
    D_Work rtDWork;
    
    #pragma end INTERNALDATA
    .
    .
    .
    #pragma start INTERNALDATA
    
    static RT_MODEL rtM_;
    
    #pragma end INTERNALDATA
    .
    .
    .
    pragma start INTERNALDATA
    
    extern D_Work rtDWork;
    
    #pragma end INTERNALDATA
    
  • Откройте файл exSysOut.c. Файл включает экспортированное определение данных для ex_output.

    #include "rtwdemo_configdefaults.h"
    
    DBL_FLOAT ex_output;
    
  • Откройте общие файловые exSysOut.h. Файл объявляет ex_output. Чтобы получить доступ к ex_outputвнешний код может включать этот заголовочный файл.

    extern DBL_FLOAT ex_output;
    

Сконфигурируйте генерацию кода по умолчанию для функций

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

Этот пример принимает следующие требования к генерации кода:

  • Сохраните сгенерированные функции инициализации и завершения в разделе памяти functionSlowMem и функции выполнения в разделе памяти functionFastMem.

  • Используйте правило именования exSlow_$N назвать initialize и terminate функций. Используйте правило именования exFast_$N для присвоения имени функциям выполнения.

Определите разделы памяти

Задайте два раздела памяти: functionSlowMem для инициализации и завершения функций и functionFastMem для выполнения функций.

  1. Откройте приложение Embedded Coder.

  2. Откройте словарь Embedded Coder Dictionary, выбрав Code Interface > Embedded Coder Dictionary.

  3. В словаре Embedded Coder Dictionary перейдите на вкладку Memory Sections.

  4. Нажмите Add.

  5. В новой строке таблицы назовите новый раздел памяти functionFastMem. Затем установите:

    • Pre Statement с #pragma start FASTMEM

    • Post Statement с #pragma end FASTMEM

  6. Еще раз нажмите Add. Назовите раздел памяти functionSlowMem. Затем установите:

    • Pre Statement с #pragma start SLOWMEM

    • Post Statement с #pragma end SLOWMEM

Определение шаблонов индивидуальной настройки функций

Чтобы сконфигурировать категории функций, задайте шаблоны индивидуальной настройки функций. Если вы не задаете шаблоны в словаре Embedded Coder, которые связаны с моделью, единственным доступным шаблоном является Default. Основываясь на требованиях, в словаре задайте два шаблона индивидуальной настройки функции: один для определения правила именования и раздела памяти для инициализации и завершения функций и один для определения правила именования и раздела памяти для функций выполнения.

  1. В словаре Embedded Coder Dictionary перейдите на вкладку Function Customization Templates.

  2. Нажмите Add.

  3. В новой строке таблицы назовите новый шаблон exFastFunction. Затем установите:

    • Function Name с exFast_$N. Это правило именования применяет префикс exFast_ к имени, которое идентифицирует имя генератора кода по умолчанию функции (для примера, initialize или step).

    • Memory Section с functionFastMem. Это отображение связывает раздел памяти, который вы определили в Задать разделы памяти с новым шаблоном.

  4. Еще раз нажмите Add. Назовите шаблон exSlowFunction. Затем установите:

    • Function Name с exSlow_$N.

    • Memory Section с functionSlowMem.

  5. Закройте словарь.

Сконфигурируйте настройки по умолчанию для функций

  1. На вкладке C Code щелкните Code Interface > Default Code Mappings.

  2. В редакторе Отображения перейдите на вкладку Function Defaults.

  3. Сконфигурируйте инициализацию и завершение функций точки входа. Для Initialize/Terminate категорий выберите шаблон exSlowFunction.

  4. Сконфигурируйте функции точки входа выполнения. Для Execution категорий выберите шаблон exFastFunction.

  5. Сохраните модель.

Сгенерируйте и проверьте код

  1. Сгенерируйте код.

  2. В представлении Code:

    • Откройте файл rtwdemo_configdefaults.c. Щелкните в поле Search. В меню перечислены сгенерированные функции точки входа:

      • exFast_step0 (вызывается периодически, каждые 0,5 секунды)

      • exFast_step1 (вызывается периодически, каждые 1 секунду)

      • exFast_step2 (вызывается периодически, каждые 1,5 секунды)

      • exSlow_initialize

    • Чтобы получить доступ к коду функции точки входа в rtwdemo_configdefaults.cщелкните имя функции. Проверьте pragma управляющие операторы, которые окружают код функции. Для примера:

      .
      .
      .
      #pragma start FASTMEM
      
      void exFast_step2(void)                /* Sample time: [1.5s, 0.0s] */
      {
         boolean_T rtb_DataStoreRead;
      
         rtb_DataStoreRead = ((ex_input1 > 10.0) || (ex_input1 < -10.0));
      
         rtDWork.RateTransition1_Buffer0 = rtb_DataStoreRead;
      }
      
      #pragma end FASTMEM
      
      #pragma start SLOWMEM
      
      void exSlow_initialize(void)
      {
         /* (no initialization code required) */
      }
      
      #pragma end SLOWMEM
      .
      .
      .
      
    • Откройте файл rtwdemo_configdefaults.h. Используйте Search для поиска #pragma управляющие линии, которые определяют разделы памяти для FASTMEM и SLOWMEM. Проверьте pragma операторы управления окружают объявления. Для примера:

      .
      .
      .
      #pragma start SLOWMEM
      
      extern void exSlow_initialize(void);
      
      #pragma end SLOWMEM
      #pragma start FASTMEM
      
      extern void exFast_step0(void);
      
      #pragma end FASTMEM
      .
      .
      .
      

Сконфигурируйте элементы модели для генерации кода с определениями, хранящимися в разделяемых данных

У вас есть опция настройки генерации данных по умолчанию и кода функции с определениями, которые настраиваются в словаре данных Simulink. Словарь данных позволяет совместно использовать определения кода между моделями. В этом примере показано, как изменить модель от использования определений кода в словаре Embedded Coder для конкретной модели до использования определений в словаре Embedded Coder, который находится в разделяемых данных. Если вы завершили примеры в Configure Default Code Generation for Data и Configure Default Code Generation for Functions, вы добавили эти определения кода в словарь Embedded Coder Dictionary, связанный с моделью rtwdemo_configdefaults.

  • Раздел памяти internalDataMem с Pre Statement установленным значением #pragma start INTERNALDATA и Post Statement установлено на #pragma end INTERNALDATA.

  • Раздел памяти functionFastMem с Pre Statement установленным значением #pragma start FASTMEM и Post Statement установлено на #pragma end FASTMEM.

  • Раздел памяти functionSlowMem с Pre Statement установленным значением #pragma start SLOWMEM и Post Statement установлено на #pragma end SLOWMEM.

  • Шаблон индивидуальной настройки функции exFastFunction с правилом именования функций exFast_$N и секцию памяти functionFastMem

  • Шаблон индивидуальной настройки функции exSlowFunction с правилом именования функций exSlow_$N и секцию памяти functionSlowMem

Обновите rtwdemo_configdefaults модели использовать те же определения кода в словаре данных exCodeDefs.sldd вместо определений в локальной модели Embedded Coder Dictionary.

Необходимо настроить окружение примера, как описано в Set Up Example Environment.

Ссылка модели на разделяемые данные

  1. В редакторе Simulink выберите Modeling > Link to Data Dictionary.

  2. В диалоговом окне Свойства, на вкладке External Data, перейдите к местоположению вашей копии файла словаря данных exCodeDefs и выберите этот файл.

  3. Нажмите Migrate data.

  4. В диалоговом окне Link Model to Data Dictionary нажмите Apply.

  5. В диалоговом окне «Миграция данных» нажмите кнопку Migrate. Когда миграция данных будет завершена, нажмите OK.

Просмотр содержимого словаря связанных данных

  1. В левом нижнем углу полотна модели щелкните значок Model data.

  2. Из списка источников данных моделей нажмите External Data.

  3. В Model Explorer на панели Model Hierarchy разверните узел exCodeDefs.

  4. Щелкните правой кнопкой мыши Embedded Coder Dictionary.

  5. Нажмите кнопку Open Embedded Coder Dictionary, которая появится.

  6. В словаре Embedded Coder Dictionary проверьте определения на вкладках Function Customization Templates и Memory Sections.

  7. Закройте словарь Embedded Coder.

Удалите определения Model Sourced Code из словаря Model Embedded Coder

  1. Откройте приложение Embedded Coder.

  2. На вкладке C Code выберите Code Interface > Embedded Coder Dictionary.

  3. Удалите определения кода, созданные локально в модели.

    • На вкладке Function Customization Templates выберите строки для exSlowFunction и exFastFunction у которых Source установлено на rtwdemo_configdefaults. Нажмите Remove.

    • На вкладке Memory Sections выберите строки для functionFastMem, functionSlowMem, и internalDataMem у которых Source установлено на rtwdemo_configdefaults. Нажмите Remove.

  4. Закройте словарь.

  5. Сохраните модель.

Сконфигурируйте категории по умолчанию для генерации кода

  1. На вкладке C Code выберите Code Interface > Default Code Mappings.

  2. В редакторе Отображения перейдите на вкладку Data Defaults.

  3. Разверните Signals. Выберите категорию Signals, states, and internal data.

  4. В Property Inspector установите Memory Section равным internalDataMem.

  5. Перейдите на вкладку Function Defaults.

    • Для категории Initialize/Terminate выберите шаблон индивидуальной настройки функции exSlowFunction.

    • Для категории Execution выберите шаблон exFastFunction.

  6. Сохраните модель.

  7. Сгенерируйте и проверьте код.

Для получения дополнительной информации о настройке словаря Embedded Coder, смотрите Задать классы памяти, Разделы памяти и Шаблоны функций для программной архитектуры.

Программно сконфигурируйте данные по умолчанию и генерацию кода функции

В этом примере показано, как сконфигурировать данные по умолчанию и генерацию кода функции, например, модель rtwdemo_configdefaultsПример использует программный интерфейс отображения по умолчанию, чтобы задать требования генерации кода для данных модели и функций. Используйте этот интерфейс для автоматизации строения или если вы предпочитаете программно конфигурировать модели. Для получения информации о конфигурировании данных по умолчанию и генерации кода функции с помощью редактора Code Mappings, смотрите Настройте Генерацию кода C по умолчанию для категорий элементов данных и функций.

Откройте модель

Модель rtwdemo_configdefaults использует множество потоков выполнения скорости и сконфигурирован для использования в одном экземпляре.

open_system('rtwdemo_configdefaults')

Требования к генерации кода

В данном примере это требования к генерации кода:

  • Импортируйте определение типа проекта для данных типа double, DBL_FLOAT, из заголовочного файла exDblFloat.h.

  • Импортируйте ex_input1 сигнала для вычисления значения, сохраненного в памяти и используемого в условии if-else в блоке Switch. Импортируйте данные сигнала из файла заголовка exInDataMem.h.

  • Импортируйте сигналы ex_input2, ex_input3, и ex_input4 для интерполяционных таблиц Table1 и Table2. Импортируйте данные сигнала из файла заголовка exInDataLut.h.

  • Данные, импортированные в модель из заголовочных файлов exInDataMem.h и exInDataLut.h имеет тип DBL_FLOAT, стандарт проекта.

  • Параметры UPPER, LOWER, K1, и K2 являются объектами параметров, хранящимися в рабочем пространстве модели. Представьте параметры как глобальные переменные в сгенерированном коде.

  • Элементы данных X представляет задержку для блока Unit Delay.

  • Сохраните данные, которые являются внутренними для модели, в разделе памяти internalDataMem.

  • Сохраните сгенерированные функции инициализации и завершения в разделе памяти functionSlowMem и функции выполнения в разделе памяти functionFastMem.

  • Используйте правило именования идентификаторов exSlow_$N назовите initialize и terminate функции точки входа. Используйте правило именования exFast_$N назвать функции выполнения для 5-секундной и 1,5-секундной периодических функций. Установите имя 1-секундной периодической функции равным exFast_1sec.

  • Экспорт объявлений выходных данных в файл заголовка exSysOut.h и определения для exSysOut.c.

В данном примере кто-то, например системный архитектор, ранее создал эти определения кода в словаре Embedded Coder, который является частью словаря данных Simulink exCodeDefs.sldd:

  • Разделы памяти internalDataMem, functionFastMem, и functionSlowMem.

  • Шаблоны индивидуальной настройки функций exFastFunction и exSlowFunction.

Получите отображения данных и кода функции для модели

Получите отображения кода, например rtwdemo_configdefaults модели путем определения имени модели в вызове функции coder.mapping.api.get. Функция возвращает объект, который представляет отображения кода для модели. Этот объект задается в качестве первого аргумента при последующих вызовах других функций в API.

Если отображения кода не существуют для модели, создайте объект отображений кода путем вызова coder.mapping.utils.create.

cm = coder.mapping.api.get('rtwdemo_configdefaults');

Установите релевантные комбинации категорий, свойств и значений

Установите соответствующие комбинации категорий, свойств и значений с вызовами на setDataDefaults и setFunctionDefaults. Первые два аргумента, которые вы задаете для этих функций, являются объектом отображений кода, возвращенным coder.mapping.api.get и имя категории данных или функций. В сложение вы задаете аргументы пары "имя-значение", которые задают информацию о строении по умолчанию, которую вы хотите задать, такие как свойства класса памяти и класса памяти.

В этом примере вы устанавливаете значение по умолчанию:

  • Класс памяти для блоков Inport, блоков Outport и параметров модели

  • Раздел памяти для внутренних данных (для примера, сигнальда и состояний блока)

  • Файлы заголовка и определения для блоков Inport и Outport

  • Шаблон индивидуальной настройки функции для инициализации, завершения и выполнения функций

% Configure data defaults
setDataDefault(cm,'Inports','StorageClass','ImportFromFile','HeaderFile','exInDataLut.h');
setDataDefault(cm,'Outports','StorageClass','ExportToFile','HeaderFile','exSysOut.h',...
    'DefinitionFile','exSysOut.c');
setDataDefault(cm,'ModelParameters','StorageClass','ExportedGlobal');
setDataDefault(cm,'InternalData','MemorySection','internalDataMem');

% Configure function defaults
setFunctionDefault(cm,'InitializeTerminate','FunctionCustomizationTemplate','exSlowFunction');
setFunctionDefault(cm,'Execution','FunctionCustomizationTemplate','exFastFunction');

Проверьте отображения по умолчанию

Проверьте отображения по умолчанию с вызовами на getDataDefaults и g etFunctionDefaults. Первые два аргумента, которые вы задаете для этих функций, являются объектом отображений кода, возвращенным coder.mapping.api.get и имя категории данных или функций. В сложение вы задаете имя строения информации, которую вы хотите вернуть функции, например имя класса памяти или класса памяти свойства.

В этом примере вы проверяете следующие настройки по умолчанию:

  • Класс памяти для блоков Inport, блоков Outport и параметров модели

  • Раздел памяти для внутренних данных (для примера, сигнальных данных и состояний блока)

  • Файлы заголовка и определения для блоков Inport и Outport

  • Шаблон индивидуальной настройки функции для инициализации, завершения и выполнения функций

% Verify default data configurations
defscInports = getDataDefault(cm,'Inports','StorageClass')
defscInports = 
'ImportFromFile'
defhfileInports = getDataDefault(cm,'Inports','HeaderFile')
defhfileInports = 
'exInDataLut.h'
defscOutport = getDataDefault(cm,'Outports','StorageClass')
defscOutport = 
'ExportToFile'
defhfileOutport = getDataDefault(cm,'Outports','HeaderFile')
defhfileOutport = 
'exSysOut.h'
defdffileOutport = getDataDefault(cm,'Outports','DefinitionFile')
defdffileOutport = 
'exSysOut.c'
defscParams = getDataDefault(cm,'ModelParameters','StorageClass')
defscParams = 
'ExportedGlobal'
defmemInternal = getDataDefault(cm,'InternalData','MemorySection')
defmemInternal = 
'internalDataMem'
% Verify default function configurations
deftempInitTerm = getFunctionDefault(cm,'InitializeTerminate','FunctionCustomizationTemplate')
deftempInitTerm = 
'exSlowFunction'
deftempExecution = getFunctionDefault(cm,'Execution','FunctionCustomizationTemplate')
deftempExecution = 
'exFastFunction'

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

Значение класса памяти для каждого элемента данных моделей устанавливается равным Auto, что означает, что генератор кода может исключить или изменить представление соответствующего кода в целях оптимизации. Если оптимизация невозможна, генератор кода применяет строение модели по умолчанию.

  • Чтобы избежать оптимизации и заставить генератор кода использовать строение по умолчанию, установите класс памяти равным Model default.

  • Чтобы переопределить строение по умолчанию, задайте класс памяти, соответствующий требованиям генерации кода для этого входного порта.

В данном примере вы конфигурируете генератор кода, чтобы применить настройку класса памяти по умолчанию к блокам Inport, блоку Output, параметрам модели и состоянию X для блока Unit Delay. Используйте find функция для получения имен элементов данных в модели различных категорий. Затем используйте значения, возвращенные find в вызовах к setInport, setOutport, setModelParameter, и setState для установки класса памяти на Model default. Используйте вызовы для getInport, getOutport, getModelParameter, и getState для проверки - параметры класса памяти.

В каждом из вызовов функции вы задаете код отображений объект, возвращенный coder.mapping.api.get. В сложение:

  • В вызове find вы задаете значение, указывающее информацию соответствия кода, которую вы хотите вернуть функции.

  • Область вызовов для setInport, setOutport, setModelParameter, и setState идентифицируйте элементы данных, которые вы хотите настроить, и аргумент пары "имя-значение", который задает информацию о строении, которую вы хотите задать, например, класс памяти или свойство класса памяти.

  • Область вызовов для getInport, getOutport, getModelParameter, и getState идентифицируйте элемент данных, для которого вы хотите вернуть строение информацию и тип информации, которую вы хотите вернуть функции.

input = find(cm,'Inports');
setInport(cm,input,'StorageClass','Model default');

output = find(cm,'Outports');
setOutport(cm,output,'StorageClass','Model default');

params = find(cm,'ModelParameters');
setModelParameter(cm,params,'StorageClass','Model default');

states = find(cm,'States');
setState(cm,states,'StorageClass','Model default');

scIn1 = getInport(cm,'In1','StorageClass')
scIn1 = 
'Model default'
scIn2 = getInport(cm,'In2','StorageClass')
scIn2 = 
'Model default'
scIn3 = getInport(cm,'In3','StorageClass')
scIn3 = 
'Model default'
scIn4 = getInport(cm,'In4','StorageClass')
scIn4 = 
'Model default'
scK1 = getModelParameter(cm,'K1','StorageClass')
scK1 = 
'Model default'
scTable2 = getModelParameter(cm,'Table2','StorageClass')
scTable2 = 
'Model default'
scK2 = getModelParameter(cm,'K2','StorageClass')
scK2 = 
'Model default'
scX = getState(cm,'rtwdemo_configdefaults/Delay','StorageClass')
scX = 
'Model default'

Переопределите настройку файла заголовка по умолчанию для Inport Block In1

Ранее вы устанавливали заголовочный файл по умолчанию для inports равным exInDataLut.h. Требования определяют, что вы импортируете данные для блока Inport In1 из файла заголовка exInDataMem.h.

Для Inport блочное In1, переопределите класс памяти по умолчанию на ImportFromFile и установите заголовочный файл равным exInDataMem.h с вызовом setInport. Вызов функции задает объект отображений кода, возвращенный coder.mapping.api.get, имя конфигурируемого блока Inport и аргументы пары "имя-значение", указывающие, что набор функций StorageClass на ImportFromFile и HeaderFile на exInDataMem.h.

setInport(cm,'In1','StorageClass','ImportFromFile','HeaderFile','exInDataMem.h');

Проверьте настройку файла заголовка

Проверьте обновленную настройку файла заголовка для блока Inport In1 с вызовом getInport.Функциональный вызов задает объект отображений кода, возвращенный coder.mapping.api.get, имя интересующего блока Inport и строения информацию для возврата.

hfileIn1 = getInport(cm,'In1','StorageClass')
hfileIn1 = 
'ImportFromFile'

Переопределите настройку имени функции по умолчанию для функции Step

Ранее вы устанавливали шаблон индивидуальной настройки функции по умолчанию для функций exeuction равным functionFastMem, which применяет правило именования exFast_$N к трехэтапным функциям, сгенерированным для модели. Требования определяют, что имя функции Periodic:D2, который имеет шаг расчета 1 seccond, назовите exFast_1sec.

Установите имя функции при вызове равным setFunction.Функциональный вызов задает объект отображений кода, возвращенный coder.mapping.api.get, источник функции, Periodic:D2 и аргумент пары "имя-значение", указывающий, что функция устанавливает имя функции равным exFast_1sec.

setFunction(cm,'Periodic:D2','FunctionName','exFast_1sec')

Проверьте настройку имени функции

Проверьте обновленное имя функции для функции выполнения Periodic:D2 с вызовом getFunction.Функциональный вызов задает объект отображений кода, возвращенный coder.mapping.api.get, функции интереса и имущественных FunctionName.

functionName = getFunction(cm,'Periodic:D2','FunctionName')
functionName = 
'exFast_1sec'

Связанные ссылки

Похожие темы