exponenta event banner

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

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

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

Настройка примерной среды

  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. В коллекции приложений откройте приложение Embedded Coder.

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

В этом примере показано, как с помощью редактора сопоставлений кодов задать требования к созданию кода для данных модели. Модель использует несколько скоростей выполнения и настроена для использования в одном экземпляре.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  3. На вкладке Код C выберите Интерфейс кода > Сопоставления кодов по умолчанию. Откроется вкладка «Значения по умолчанию» редактора сопоставлений кода и инспектор свойств.

  4. На вкладке «Параметры данных по умолчанию» разверните узлы «Порты ввода» и «Порты вывода». Затем выберите Inports.

  5. Задайте для класса хранения значение ImportFromFile.

  6. В инспекторе свойств задайте для параметра «Файл заголовка» значение exInDataLut.h.

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

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

  1. В редакторе сопоставлений кодов перейдите на вкладку «Значения по умолчанию».

  2. На вкладке «Значения по умолчанию» разверните узел «Параметры».

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

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

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

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

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

  2. В словаре встроенного кодера перейдите на вкладку «Разделы памяти».

  3. Нажмите "Добавить".

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

    • Предварительная выписка по #pragma start INTERNALDATA

    • Проводка выписки по #pragma end INTERNALDATA

    • Заявления окружают Group of variables

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

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

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

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

  1. В редакторе сопоставлений кодов перейдите на вкладку «Значения по умолчанию».

  2. На вкладке «Значения по умолчанию» разверните узел «Сигналы».

  3. Выберите категорию Сигналы, состояния и внутренние данные.

  4. В инспекторе свойств задайте для параметра «Раздел памяти» значение internalDataMem.

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

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

  1. В редакторе сопоставлений кодов перейдите на вкладку «Значения по умолчанию».

  2. На вкладке «Параметры данных по умолчанию» разверните узлы «Порты ввода» и «Порты вывода».

  3. Выберите категорию «Выходы».

  4. Задайте для класса хранения значение ExportToFile.

  5. В инспекторе свойств задайте для параметра «Файл заголовка» значение exSysOut.h и файл определения для 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. Перейдите на вкладку «Выходы». Для аутпорта Out1, задайте для класса хранения значение Model default: ExportToFile.

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

  5. Перейдите на вкладку Signals/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. В словаре встроенного кодера перейдите на вкладку «Разделы памяти».

  4. Нажмите "Добавить".

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

    • Предварительная выписка по #pragma start FASTMEM

    • Проводка выписки по #pragma end FASTMEM

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

    • Предварительная выписка по #pragma start SLOWMEM

    • Проводка выписки по #pragma end SLOWMEM

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

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

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

  2. Нажмите "Добавить".

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

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

    • Раздел памяти для functionFastMem. Это сопоставление связывает раздел памяти, определенный в разделе Определение разделов памяти, с новым шаблоном.

  4. Нажмите кнопку Добавить еще раз. Назовите шаблон exSlowFunction. Затем установите:

    • Имя функции для exSlow_$N.

    • Раздел памяти для functionSlowMem.

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

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

  1. На вкладке Код C щелкните Интерфейс кода > Сопоставления кодов по умолчанию.

  2. В редакторе сопоставлений кодов перейдите на вкладку «Параметры функции по умолчанию».

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

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

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

Создание и проверка кода

  1. Создать код.

  2. В представлении «Код»:

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

      • 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. Использовать поиск для поиска #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 Dictionary, связанный с моделью rtwdemo_configdefaults.

  • Раздел памяти internalDataMem с предварительным отчетом, установленным в значение #pragma start INTERNALDATA и Разнести выписку #pragma end INTERNALDATA.

  • Раздел памяти functionFastMem с предварительным отчетом, установленным в значение #pragma start FASTMEM и Разнести выписку #pragma end FASTMEM.

  • Раздел памяти functionSlowMem с предварительным отчетом, установленным в значение #pragma start SLOWMEM и Разнести выписку #pragma end SLOWMEM.

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

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

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

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

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

  1. В редакторе Simulink выберите «Моделирование» > «Связь со словарем данных».

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

  3. Щелкните Перенос данных.

  4. В диалоговом окне «Связать модель с словарем данных» нажмите кнопку «Применить».

  5. В диалоговом окне «Перенос данных» нажмите «Перенос». По завершении миграции данных нажмите кнопку ОК.

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

  1. В левом нижнем углу холста модели щелкните значок Данные модели (Model data).

  2. В списке источников данных модели щелкните Внешние данные (External Data).

  3. В обозревателе моделей на панели «Иерархия моделей» разверните узел exCodeDefs.

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

  5. Нажмите кнопку Открыть словарь встроенного кодера.

  6. В словаре встроенного кодера просмотрите определения на вкладках Шаблоны настройки функций и Разделы памяти.

  7. Закройте словарь встроенного кодера.

Удаление определений кода модели из словаря встроенного кодера модели

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

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

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

    • На закладке Шаблоны адаптации функций выберите строки для exSlowFunction и exFastFunction для которых установлено значение Source rtwdemo_configdefaults. Нажмите кнопку Удалить.

    • На вкладке «Разделы памяти» выберите строки для functionFastMem, functionSlowMem, и internalDataMem для которых установлено значение Source rtwdemo_configdefaults. Нажмите кнопку Удалить.

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

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

Настройка категорий по умолчанию для создания кода

  1. На вкладке Код C выберите Интерфейс кода > Сопоставления кодов по умолчанию.

  2. В редакторе сопоставлений кодов перейдите на вкладку «Значения по умолчанию».

  3. Разверните раздел «Сигналы». Выберите категорию Сигналы, состояния и внутренние данные.

  4. В инспекторе свойств задайте для параметра «Раздел памяти» значение internalDataMem.

  5. Перейдите на вкладку «Параметры функции по умолчанию».

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

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

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

  7. Создание и просмотр кода.

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

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

В этом примере показано, как настроить генерацию данных по умолчанию и кода функции, например, модель rtwdemo_configdefaultsВ примере используется интерфейс программирования отображения по умолчанию для определения требований к генерации кода для данных и функций модели. Этот интерфейс используется для автоматизации конфигурации или для программной настройки моделей. Сведения о настройке генерации данных по умолчанию и кода функции с помощью редактора сопоставлений кодов см. в разделе Настройка генерации кода 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.

Например, кто-то, например системный архитектор, ранее создал эти определения кода в словаре встроенного кодера, который является частью словаря данных 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

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

% 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 и 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

Ранее для файла заголовка по умолчанию для ввода было установлено значение exInDataLut.h. Требования определяют импорт данных для блока ввода 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'

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

Ранее был установлен шаблон настройки функции по умолчанию для функций выполнения functionFastMem, which применяет правило именования exFast_$N к трем пошаговым функциям, созданным для модели. Требования указывают, что имя функции Periodic:D2, который имеет время выборки 1 сек. быть назван 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'

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

Связанные темы