Code Mappings Editor – C

Ассоциируйте элементы модели с определениями кода

Описание

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

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

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

  • Data Defaults

  • Function Defaults

  • Functions

  • Inports

  • Outports

  • Parameters

  • Data Stores

  • Signals/States

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

Прежде чем вы сможете сконфигурировать сигнал для генерации кода, добавьте сигнал к отображениям кода модели. Добавьте и удалите сигналы из отображений кода путем паузы на эллипсисе, который появляется выше или ниже сигнальной линии, чтобы открыть панель действий. Нажмите кнопку Add Signal или Remove Signal. Эти кнопки также доступны в редакторе Отображения на вкладке Signals/States.

Откройте Редактор отображений кода - C

Выполните одно из следующих действий:

  • Откройте Embedded Coder® Приложение. На вкладке C Code выберите Code Interface > Default Code Mappings или Code Interface > Individual Element Code Mappings.

  • Откройте приложение Embedded Coder на вкладке C Code, в левом нижнем углу Simulink® В окне Editor щелкните вкладку Code Mappings - C.

  • В холсте модели окна Редактор щелкните элемент управления перспективой в правом нижнем углу и выберите Code. Затем перейдите на вкладку Code Mappings - C.

Примеры

Сконфигурируйте генерацию кода для блоков Root Inport и Outport

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

Настройте пример Окружения
  1. Скопируйте файлы внешнего кода в папку с возможностью записи.

    copyfile(fullfile(matlabroot,'toolbox','rtw','rtwdemos','roll_input_data.c'));
    copyfile(fullfile(matlabroot,'toolbox','rtw','rtwdemos','roll_input_data.h'));
    copyfile(fullfile(matlabroot,'toolbox','rtw','rtwdemos','roll_heading_mode.c'));
    copyfile(fullfile(matlabroot,'toolbox','rtw','rtwdemos','roll_heading_mode.h'));
  2. Откройте rtwdemo_roll модели. Сохраните копию модели в папке, где вы скопировали файлы внешнего кода.

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

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

Сконфигурируйте генератор кода так:

  • Используйте файлы заголовков roll_input_data.h объявить переменные, представляющие блоки Inport модели.

  • Представьте переменные для блоков Outport модели как отдельные глобальные переменные.

  • Задайте выходные переменные в roll_output_data.c и объявить их в roll_output_data.h.

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

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

  2. На вкладке Data Defaults, под Inports and Outports, выберите строку для Inports. Затем установите класс памяти равным ImportFromFile.

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

  4. Установите класс памяти для категории Outports элемента модели на ExportToFile.

  5. Установите Header File значение roll_output_data.h и Definition File к roll_output_data.c.

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

  2. Заставьте генератор кода использовать строение по умолчанию для inports, класса памяти ImportFromFile с внешним файлом заголовка roll_input_data.h. Нажмите клавишу Ctrl и выберите входные порты. Для одного из выбранных входных портов установите класс памяти равным Model default: ImportFromFile. Редактор обновляет настройку класса памяти для выбранных входных портов.

Переопределение отображений по умолчанию

Переопределите исходное расположение по умолчанию для переменной inport HDG_Mode. Эта переменная объявлена во внешнем файле roll_heading_mode.h.

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

  2. Выберите HDG_Mode строка.

  3. Установите Storage Class значение ImportFromFile.

  4. В Property Inspector в разделе Code установите Header File равным roll_heading_mode.h.

  5. Сконфигурируйте генератор кода, чтобы получить имена переменных в коде для блоков Inport, которые совпадают с именами переменных во внешних файлах roll_input_data.h и roll_heading_mode.h. На вкладке Inports выберите каждый Inport блок и в Property Inspector установите Identifier на имя блока. Если для класса памяти задано значение, отличное от Autoнеобходимо задать значение для свойства Identifier класса памяти.

Включите внешние исходные файлы в генерацию кода и процесс сборки

Включите внешние исходные файлы roll_input_data.c и roll_heading_mode.c в процессе генерации кода и сборки. Установите параметр конфигурации модели Source files равным roll_input_data.c roll_heading_mode.c.

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

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

Сгенерируйте код и проверьте, что код, сгенерированный для блоков Inport и Output, появляется, как вы ожидаете.

  • rtwdemo_roll.h включает эти заголовочные файлы, сопоставленные с классами памяти:

    #include "roll_output_data.h"
    #include "roll_input_data.h"
    #include "roll_heading_mode.h"
    
  • roll_heading_mode.c включает roll_heading_mode.h и задает переменную HDG_Mode.

    #include "roll_heading_mode.h"
    
    boolean_T HDG_Mode;
  • roll_input_data.c задает переменные, объявленные в roll_input_data.h.

    #include "roll_input_data.h"
    
    boolean_T AP_Eng;
    real32_T HDG_Ref;
    real32_T Rate_FB;
    real32_T Phi;
    real32_T Psi;
    real32_T TAS;
    real32_T Turn_Knob;
  • roll_output_data.c включает это определение экспортированных данных:

    real32_T Ail_Cmd;
  • roll_output_data.h включает это экспортированное объявление данных:

    extern real32_T Ail_Cmd;

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

По умолчанию генератор кода использует правило именования идентификаторов $R$N для присвоения имени функциям точки входа. $R - имя корневой модели. $N - имя функции, например initialize, step, и terminate. Чтобы интегрировать сгенерированный код с существующим внешним кодом или соответствовать стандартам именования или руководствам, можно настроить правило именования по умолчанию. В этом примере показано, как добавить текстовую строку myproj_ как префикс к $R$. Корректировка правила именования по умолчанию может сэкономить время, особенно для многоскоростных моделей, для которых генератор кода производит уникальную step функция для каждой скорости.

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

  2. Откройте приложение Embedded Coder. Откроется вкладка C Code, которая включает редактор Code Mappings.

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

Создайте шаблон индивидуальной настройки функции, который задает правило именования myproj_$R$N.

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

  2. Перейдите на вкладку Function Customization Templates.

  3. Нажмите Add.

  4. В Name столбце новой строки таблицы назовите новый шаблон myproj_FunctionTemplate.

  5. В Function Name столбце введите правило именования myproj_$R$N.

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

Сконфигурируйте отображения по умолчанию
  1. На вкладке C Code выберите Code Interface > Default Code Mappings.

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

  3. Для категорий Initialize/Terminate и Execution функций измените шаблон индивидуальной настройки функции по умолчанию с Default на myproj_FunctionTemplate.

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

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

Сгенерируйте код и проверьте имена функции точки входа.

void myproj_rtwdemo_multirate_multitasking_step0(void) /* Sample time: [1.0s, 0.0s] */
{
  (rtM->Timing.RateInteraction.TID0_1)++;
  if ((rtM->Timing.RateInteraction.TID0_1) > 1) {
       rtM->Timing.RateInteraction.TID0_1 = 0;
  }

  if (rtM->Timing.RateInteraction.TID0_1 == 1) {
      rtDW.RateTransition = rtDW.RateTransition_Buffer0;
  }
      rtY.Out2 = 2.0 * rtDW.RateTransition + rtU.In1_1s;
      rtY.Out1 = (3.0 * rtDW.RateTransition + rtU.In1_1s) * 5.0 + rtY.Out2;
}

/* Model step function for TID1 */
void myproj_rtwdemo_multirate_multitasking_step1(void) /* Sample time: [2.0s, 0.0s] */
{
  rtDW.RateTransition_Buffer0 = rtDW.Integrator_DSTATE;
  rtDW.Integrator_DSTATE += 2.0 * rtU.In2_2s;
}

void myproj_rtwdemo_multirate_multitasking_initialize(void)
{
  /* (no initialization code required) */
}

void myproj_rtwdemo_multirate_multitasking_terminate(void)
{
  /* (no terminate code required) */
}

Настройка отдельных функций точки входа

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

Настройка окружения
  1. Скопируйте файлы внешнего кода в папку с возможностью записи.

    copyfile(fullfile(matlabroot,'toolbox','rtw','rtwdemos','roll_input_data.c'));
    copyfile(fullfile(matlabroot,'toolbox','rtw','rtwdemos','roll_input_data.h'));
    copyfile(fullfile(matlabroot,'toolbox','rtw','rtwdemos','roll_heading_mode.c'));
    copyfile(fullfile(matlabroot,'toolbox','rtw','rtwdemos','roll_heading_mode.h'));
  2. Откройте rtwdemo_roll модели. Сохраните копию модели в папке, где вы скопировали файлы внешнего кода.

  3. Откройте Embedded Coder приложения. Откроется вкладка C Code, которая включает в себя редактор Кода Отображений.

Настройка функций точки входа
  1. На вкладке C Code выберите Code Interface > Individual Element Code Mappings.

  2. Перейдите на вкладку Functions.

  3. Настройте имя функции step (execution). В столбце Function Name введите имя roll_run.

  4. Настройка аргументов step функция. Откройте диалоговое окно строения для step щелкните гиперссылку прототипа в столбце Function Preview.

  5. Выберите Configure arguments for Step function prototype.

  6. Чтобы открыть таблицу, в которой отображаются строения по умолчанию для аргументов, нажмите Get Default.

  7. Настройте аргументы:

    • В раскрывающемся списке C return argument выберите Ail_Cmd.

    • Для каждого порта в поле C Identifier Name удалите arg_ префикс из их имен по умолчанию.

    • Для HDG_Mode Inport, из выпадающего списка C Type Qualifier, выберите Pointer. В C Identifier Name поле смените имя на HDG_Mode_Ptr

  8. Щелкните Apply и проверьте, что прототип функции отражает изменения.

  9. Проверьте изменения нажатием кнопки Validate.

  10. Нажмите OK.

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

  2. Проверьте обновления в сгенерированном файле C rtwdemo_roll.c. Как найти обновленную step функция (roll_run), используйте поле Search.

  3. Выберите step функция для проверки его прототипа.

    real32_T roll_run(real32_T Phi, real32_T Psi, real32_T Rate_FB, real32_T TAS,
                      boolean_T AP_Eng, boolean_T *HDG_Mode_Ptr, real32_T HDG_Ref,
                      real32_T Turn_Knob)

Похожие примеры

Параметры

Значения по умолчанию для данных

Называет категорию элементов данных моделей Simulink. Класс памяти, заданный для категории, применяется к элементам этой категории на протяжении всей модели.

Категория элемента моделиОписание
InportsВходные порты корневого уровня модели, такие как блоки Inport и In Bus Element.
Вспомогательные портыВыходные порты корневого уровня модели, такие как блоки Outport и Out Bus Element.
Сигналы, состояния и внутренние данныеЭлементы данных, которые являются внутренними для модели, такие как выходные сигналы блоков, дискретные состояния блока, хранилища данных и сигналы пересечения нулем.
Общие локальные хранилища данныхData Store Memory блоки, которые имеют параметры блоков Share across model instances установленные. Эти хранилища данных доступны только в модели, где они определены. Значение хранилища данных разделяется между образцами модели.
Глобальные данныеДанные хранятся, которые заданы сигнальным объектом в базовом рабочем пространстве или в словаре данных. Эти хранилища данных могут использоваться несколькими моделями в приложении. Чтобы просмотреть и сконфигурировать эти хранилища данных в редакторе Отображения, нажмите Refresh ссылка справа от имени категории. При нажатии на эту ссылку обновляется диаграмма модели.
Аргументы параметра моделиПараметры в рабочем пространстве модели, которые вы конфигурируете как аргументы модели. Эти параметры доступны в блоке модели, чтобы позволить каждому образцу модели предоставить свое собственное значение. Чтобы задать параметр в качестве аргумента модели, установите флажок Model Data Editor Parameters > Argument >.
Параметры моделиПараметры, которые заданы в модели, такие как параметры в рабочем пространстве модели. Исключает аргументы модели.
Внешние параметрыПараметры, которые вы определяете как объекты в базовом рабочем пространстве или в словаре данных. Эти параметры могут использоваться несколькими моделями в приложении. Чтобы просмотреть и сконфигурировать эти параметры в редакторе Отображения, нажмите Refresh ссылка справа от имени категории. При нажатии на эту ссылку обновляется диаграмма модели.
Константы

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

  • Значение является массивом, большим, чем порог разворачивания цикла.

  • Адрес значения необходим в коде.

Редактор Отображения представляет допустимые опции класса памяти для данной категории. Опции могут включать:

  • Неопределенный класс памяти (Default). Генератор кода помещает код для категории элементов данных в стандартные структуры, такие как B_, ExtY_, ExtU_, DW_, и P_. См. раздел Структуры данных в сгенерированном коде.

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

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

  • Класс памяти, заданный в словаре Embedded Coder.

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

Значения функции по умолчанию

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

Категория функции моделиОписание
Инициализация/завершениеФункции точки входа для инициализации и завершения
ВыполнениеФункции точки входа для инициирования выполнения и сброса
Общая утилитаОбщие служебные функции

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

Функции

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

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

Назовите, что генератор кода дает функцию модели.

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

Inports

Определяет корневой блок Inport или элемент блока In Bus Element (для примера, InBus1.signal1) в модели. Если элемент разрешается к объекту данных, редактор Отображения отображает значок resolve-to-signal-object справа от имени источника и разрешает строение на основе того, является ли параметр класса памяти для элемента Auto. Если класс памяти Autoэлемент данных принимает строение кода, которую задает объект данных. Редактор меняет текст отображения в столбце Storage Class на From signal object: далее указывается имя класса памяти объекта данных. Если класс памяти не Autoэлемент данных принимает строение, заданную в редакторе Отображения.

Определение, которое генератор кода использует для определения свойств, таких как внешний вид и местоположение, для кода, который он генерирует для корневого входного порта. Смотрите раздел «Выбор класса памяти для управления представлением данных в сгенерированном коде».

Вспомогательные порты

Определяет блок Outport корневого уровня или элемент блока Out Bus Element (для примера OutBus1.signal1) в модели. Если элемент разрешается к объекту данных, редактор Отображения отображает значок resolve-to-signal-object справа от имени источника и разрешает строение на основе того, является ли параметр класса памяти для элемента Auto. Если класс памяти Autoэлемент данных принимает строение кода, которую задает объект данных. Редактор меняет текст отображения в столбце Storage Class на From signal object: далее указывается имя класса памяти объекта данных. Если класс памяти не Autoэлемент данных принимает строение, заданную в редакторе Отображения.

Определение, которое генератор кода использует для определения свойств, таких как внешний вид и местоположение, для кода, который он генерирует для корневого выхода. Смотрите раздел «Выбор класса памяти для управления представлением данных в сгенерированном коде».

Параметры

Определяет параметр в модели. Если элемент разрешается к объекту данных, редактор Отображения отображает значок resolve-to-parameter-object справа от имени источника и разрешает строение на основе того, является ли параметр класса памяти для элемента Auto. Если класс памяти Autoэлемент данных принимает строение кода, которую задает объект данных. Редактор меняет текст отображения в столбце Storage Class на From parameter object: далее указывается имя класса памяти объекта данных. Если класс памяти не Autoэлемент данных принимает строение, заданную в отображениях кода.

Типы элементов параметра перечислены в этой таблице.

Тип Параметра элементаОписание
Аргумент параметра моделиБлокируйте параметр в рабочем пространстве модели, который вы конфигурируете как аргумент модели. Параметр доступен в блоке модели, чтобы позволить каждому образцу модели предоставить свое собственное значение. Чтобы задать параметр в качестве аргумента модели, установите флажок Model Data Editor Parameters > Argument >.
Параметр моделиПараметр, который задан в модели, такой как параметр в рабочем пространстве модели. Исключает аргументы модели.
Внешний параметрПараметр, который вы задаете как объект в базовом рабочем пространстве или в словаре данных. Эти параметры могут использоваться несколькими моделями в приложении. Эта группировка параметров появляется в редакторе только в том случае, если модель использует такой элемент. Чтобы просмотреть и сконфигурировать эти параметры в редакторе Отображения, нажмите Refresh ссылка справа от имени категории. При нажатии на эту ссылку обновляется диаграмма модели.

Определение, которое генератор кода использует для определения свойств, таких как внешний вид и местоположение, для кода, который он генерирует для параметра. Для внешних параметров, после клика по Refresh ссылка справа от имени категории, скомпилированный класс памяти (для примера, класс памяти, настроенный для внешнего параметра) появляется в правой части столбца Storage Class. Смотрите раздел «Выбор класса памяти для управления представлением данных в сгенерированном коде».

Хранилища данных

Определяет хранилище данных в модели. Если элемент разрешается к объекту данных, редактор Отображения отображает значок resolve-to-signal-object справа от имени источника и разрешает строение на основе того, является ли параметр класса памяти для элемента Auto. Если класс памяти Autoэлемент данных принимает строение кода, которую задает объект данных. Редактор меняет текст отображения в столбце Storage Class на From signal object: далее указывается имя класса памяти объекта данных. Если класс памяти не Autoэлемент данных принимает строение, заданную в отображениях кода.

Типы элементов хранилища данных перечислены в этой таблице.

Тип элемента хранилища данныхОписание
Локальное хранилище данныхХранилище данных, доступное из любого места иерархии модели, которое находится на уровне или ниже уровня, на котором определяется хранилище данных. Можно задать локальное хранилище данных графически в модели путем включения блока Data Store Memory или путем создания объекта сигнала (синтезированного хранилища данных) в рабочем пространстве модели.
Общее локальное хранилище данныхData Store Memory блок, который имеет параметры блоков Share across model instances установленный. Эти хранилища данных доступны только в модели, где они определены. Значение хранилища данных разделяется между образцами модели. Эта группировка хранилищ данных появляется в редакторе только в том случае, если такой элемент существует в модели.
Глобальные данныеХранилище данных, которое определяется сигнальным объектом в базовом рабочем пространстве или в словаре данных. Эти хранилища данных могут использоваться несколькими моделями в приложении. Эти хранилища данных не конфигурируются в отображениях кода. После нажатия кнопки обновления они отображаются в редакторе Отображения в доступном только для чтения состоянии в целях просмотра или учета. Эта группировка хранилищ данных появляется в редакторе только в том случае, если модель использует такой элемент. Чтобы просмотреть и сконфигурировать эти хранилища данных в редакторе Отображения, нажмите Refresh ссылка справа от имени категории. При нажатии на эту ссылку обновляется диаграмма модели.

Имена локальных и общих локальных хранилищ данных появляются в формате block-name: data-store-name.

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

Определение, которое генератор кода использует для определения свойств, таких как внешний вид и местоположение, для кода, который он производит для хранилища данных. Для глобальных хранилищ данных после клика по Refresh ссылка справа от имени категории, скомпилированный класс памяти (для примера, класс памяти, настроенный для глобальных данных хранилища) появляется в правой части столбца Storage Class. Смотрите раздел «Выбор класса памяти для управления представлением данных в сгенерированном коде».

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

Сигналы/состояния

Определяет сигнальную линию или состояние в модели. Если элемент разрешается к объекту данных, редактор Code Mappings отображает значок resolve -to-signal-object справа от имени источника и разрешает строение на основе того, является ли параметр класса памяти для элемента Auto. Если класс памяти Autoэлемент данных принимает строение кода, которую задает объект данных. Редактор меняет текст отображения в столбце Storage Class на From signal object: далее указывается имя класса памяти объекта данных. Если класс памяти не Autoэлемент данных принимает строение, заданную в редакторе Отображения.

В редакторе Отображения перечислены:

  • Именованные сигналы и состояния при помощи имени элемента данных

  • Неназванные сигналы при помощи source-block формата: port-number

  • Состояния, используемые в нескольких блоках при использовании формата block-name: state-name

Чтобы сконфигурировать отдельную сигнальную линию в редакторе Code Mappings для модели, сначала необходимо добавить сигнал к отображениям. См. «Конфигурирование данных сигнала для генерации кода C».

Определение, которое генератор кода использует для определения свойств, таких как внешний вид и местоположение, для кода, который он генерирует для сигнальной линии или состояния. Смотрите раздел «Выбор класса памяти для управления представлением данных в сгенерированном коде».

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

Введенный в R2018a