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

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

Вы, должно быть, настроили среду в качестве примера, как описано в Настроенной Среде В качестве примера.

Настройте среду в качестве примера

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

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

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

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

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

Этот пример принимает эти требования генерации кода для данных:

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

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

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

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

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

  • Хранилище данных mode задает данные, которые совместно используются в модели. Блок Logical Operator пишет в хранилище данных, и блок Rate Transition читает из хранилища данных.

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

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

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

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

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

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

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

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

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

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

  4. Во вкладке theData Defaults расширьте Inports and Outports. Затем выберите Inports.

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

  6. В Property Inspector, набор Header File к exInDataLut.h.

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

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

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

  2. Во вкладке theData Defaults расширьте Parameters.

  3. В строке для Model parameters кликните по тексту 'Auto' will be inlined. Диалоговое окно Model Configuration Parameters открывается к Code Generation> панель Optimization. Установите Default parameter behavior на Tunable. Примените изменение и закройте диалоговое окно. В редакторе Отображений Кода текст направо of Model parameters теперь читает 'Auto' will be tunable.

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

Раздел Define Memory для внутренних данных

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

  1. Откройте Словарь Embedded Coder путем выбора Code Interface> Embedded Coder Dictionary.

  2. В Словаре Embedded Coder кликните по вкладке Memory Sections.

  3. Нажмите Add.

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

    • Pre Statement к #pragma start INTERNALDATA

    • Post Statement к #pragma end INTERNALDATA

    • Statements Surround к Group of variables

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

Для получения дополнительной информации смотрите Данные об Управлении и Функциональное Размещение в Памяти Вставкой Прагм.

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

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

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

  2. Во вкладке theData Defaults расширьте Signals.

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

  4. В Property Inspector, набор Memory Section к internalDataMem.

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

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

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

  2. Во вкладке theData Defaults расширьте Inports and Outports.

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

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

  5. В Property Inspector, набор Header File к exSysOut.h и Definition File к exSysOut.c.

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

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

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

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

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

  • Inports 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;
    

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

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

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

  • Сгенерированное хранилище инициализирует и отключает функции в разделе memory functionSlowMem и выполнение функционирует в разделе memory functionFastMem.

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

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

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

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

  2. Откройте Словарь Embedded Coder путем выбора Code Interface> Embedded Coder Dictionary.

  3. В Словаре Embedded Coder кликните по вкладке Memory Sections.

  4. Нажмите Add.

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

    • Pre Statement к #pragma start FASTMEM

    • Post Statement к #pragma end FASTMEM

  6. Нажмите Add снова. Назовите раздел memory functionSlowMem. Затем набор:

    • Pre Statement к #pragma start SLOWMEM

    • Post Statement к #pragma end SLOWMEM

Задайте функциональные шаблоны настройки

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

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

  2. Нажмите Add.

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

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

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

  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, который находится в словаре разделяемых данных. Если вы завершились, примеры в Конфигурируют Генерацию кода По умолчанию для Данных и Конфигурируют Генерацию кода По умолчанию для Функций, вы добавили эти определения кода Словарю Embedded Coder, сопоставленному с моделью rtwdemo_configdefaults.

  • Раздел Memory internalDataMem с набором Pre Statement к #pragma start INTERNALDATA и набор Post Statement к #pragma end INTERNALDATA.

  • Раздел Memory functionFastMem с набором Pre Statement к #pragma start FASTMEM и набор Post Statement к #pragma end FASTMEM.

  • Раздел Memory functionSlowMem с набором Pre Statement к #pragma start SLOWMEM и набор Post Statement к #pragma end SLOWMEM.

  • Функциональный шаблон настройки exFastFunction с функцией, называющей правило exFast_$N и раздел memory functionFastMem

  • Функциональный шаблон настройки exSlowFunction с функцией, называющей правило exSlow_$N и раздел memory functionSlowMem

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

Вы, должно быть, настроили среду в качестве примера, как описано в Настроенной Среде В качестве примера.

Соедините модель со словарем разделяемых данных

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

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

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

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

  5. В диалоговом окне Migrate Data нажмите 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 рассмотрите определения во вкладках Memory Sections и Function Customization Templates.

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

Удалите полученные определения кода модели из словаря 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Пример.The использует значение по умолчанию, сопоставляющее интерфейс программирования, чтобы задать требования генерации кода для данных модели и функций. Используйте тот интерфейс, чтобы автоматизировать настройку, или если вы предпочитаете конфигурировать программно модели. Для получения информации о конфигурировании данных по умолчанию и функциональной генерации кода при помощи редактора Отображений Кода, смотрите, Конфигурируют генерацию кода C По умолчанию для Категорий Элементов данных и Функций.

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

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

open_system('rtwdemo_configdefaults')

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

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

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

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

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

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

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

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

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

  • Сгенерированное хранилище инициализирует и отключает функции в разделе memory functionSlowMem и выполнение функционирует в разделе memory 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, блоков Выходного порта и параметров модели

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

  • Заголовок и файлы определения для блоков 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 и getFunctionDefaults. Первые два аргумента, которые вы задаете для этих функций, являются объектом отображений кода, возвращенным coder.mapping.api.get и имя данных или функциональной категории. Кроме того, вы задаете имя конфигурационной информации, которую вы хотите, чтобы функция возвратила, такие как имя класса памяти или свойства класса памяти.

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

  • Класс памяти для блоков Inport, блоков Выходного порта и параметров модели

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

  • Заголовок и файлы определения для блоков 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'

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

Ранее вы устанавливаете заголовочный файл по умолчанию для импорта в 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Вызов функции.The задает объект отображений кода, возвращенный coder.mapping.api.get, имя блока Inport интереса и конфигурационная информация, чтобы возвратиться.

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

Замените установку имени функции по умолчанию для ступенчатой функции

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

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

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

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

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

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

Ссылки по теме

Похожие темы