В этом разделе содержится информация о структуре целевого файла системы, инструкции по настройке целевого файла системы и базовое учебное пособие, которое поможет создать целевой файл скелетной системы.
Системный целевой файл управляет этапом создания кода в процессе построения. Системный целевой файл также позволяет управлять представлением целевого файла конечному пользователю. Системный целевой файл обеспечивает
Определения переменных, которые являются фундаментальными для процесса построения, например, значение для CodeFormat Переменная TLC
Основная точка входа в TLC-программу верхнего уровня, генерирующую код
Целевая информация для отображения в обозревателе системных целевых файлов
Механизм определения специфичных для цели опций генерации кода (и других параметров, связанных с процессом построения) и их отображения в диалоговом окне Параметры конфигурации (Configuration Parameters)
Механизм наследования опций от другой цели (например, цели Embedded Real-Time (ERT))
Обратите внимание, что, хотя системный целевой файл является TLC-файлом, он содержит встроенный код MATLAB ®. Перед созданием или изменением системного целевого файла необходимо получить рабочее знание TLC и языка MATLAB. Компилятор и сценарии целевого языка в сравнении с функциями описывают функции и синтаксис языков TLC и MATLAB.
При чтении этого раздела может потребоваться обратиться к системным целевым файлам, поставляемым с генератором кода. Большинство этих файлов хранятся в целевых папках в (открыто). Дополнительные целевые файлы системы хранятся в matlabroot/rtw/c (открыто).matlabroot/toolbox/rtw/targets
Системный целевой файл должен находиться в папке по пути MATLAB, чтобы целевой файл отображался в обозревателе системных целевых файлов и вызывался в процессе построения. Следуйте соглашениям о расположении и именовании системных целевых файлов и связанных с ними целевых файлов, приведенным в разделе Соглашения об именовании папок и файлов.
Этот раздел является руководством по структуре и содержимому системного целевого файла. В следующем списке показана общая структура системного целевого файла. Обратите внимание, что это не полный список кодов системного целевого файла. Список состоит из выдержек из каждого раздела, которые составляют системный целевой файл.
%%----------------------------
%% Header Comments Section
%%----------------------------
%% SYSTLC: Example Real-Time Target
%% TMF: my_target.tmf MAKE: make_rtw
%% Initial comments contain directives for STF Browser.
%% Documentation, date, copyright, and other info may follow.
...
%selectfile NULL_FILE
...
%%----------------------------
%% TLC Configuration Variables Section
%%----------------------------
%% Assign code format, language, target type.
%%
%assign CodeFormat = "Embedded-C"
%assign TargetType = "RT"
%assign Language = "C"
%%
%%----------------------------
%% TLC Program Entry Point
%%----------------------------
%% Call entry point function.
%include "codegenentry.tlc"
%%
%%----------------------------
%% (OPTIONAL) Generate Files for Build Process
%%----------------------------
%include "mytarget_genfiles.tlc"
%%----------------------------
%% RTW_OPTIONS Section
%%----------------------------
/%
BEGIN_RTW_OPTIONS
%% Define rtwoptions structure array. This array defines target-specific
%% code generation variables, and controls how they are displayed.
rtwoptions(1).prompt = 'example code generation options';
...
rtwoptions(6).prompt = 'Show eliminated blocks';
rtwoptions(6).type = 'Checkbox';
...
%----------------------------------------%
% Configure RTW code generation settings %
%----------------------------------------%
...
%%----------------------------
%% rtwgensettings Structure
%%----------------------------
%% Define suffix text for naming build folder here.
rtwgensettings.BuildDirSuffix = '_mytarget_rtw'
%% Callback compatibility declaration
rtwgensettings.Version = '1';
%% (OPTIONAL) target inheritance declaration
rtwgensettings.DerivedFrom = 'ert.tlc';
%% (OPTIONAL) other rtwGenSettings fields...
...
END_RTW_OPTIONS
%/
%%----------------------------
%% targetComponentClass - MATHWORKS INTERNAL USE ONLY
%% REMOVE NEXT SECTION FROM USER_DEFINED CUSTOM TARGETS
%%----------------------------
/%
BEGIN_CONFIGSET_TARGET_COMPONENT
targetComponentClass = 'Simulink.ERTTargetCC';
END_CONFIGSET_TARGET_COMPONENT
%/При создании пользовательского целевого объекта на основе существующего системного целевого файла необходимо удалить targetComponentClass раздел (ограниченный директивами BEGIN_CONFIGSET_TARGET_COMPONENT и END_CONFIGSET_TARGET_COMPONENT). Этот раздел предназначен для использования целей, разработанных внутри MathWorks.
Эти строки в начале файла форматируются как комментарии TLC. Они предоставляют необходимую информацию обозревателю системных целевых файлов и процессу построения. Обратите внимание, что перед другими комментариями или инструкциями TLC необходимо поместить комментарии браузера в начало файла.
Наличие комментариев позволяет генератору кода обнаруживать целевые системные файлы. При открытии обозревателя системных целевых файлов генератор кода сканирует путь MATLAB для файлов TLC с отформатированными комментариями заголовка. Комментарии содержат следующие директивы:
SYSTLC: дескриптор, отображаемый в браузере.
TMF: имя файла make шаблона (TMF), используемого в процессе построения. При выборе целевого объекта это имя файла отображается в поле Шаблон makefile на панели Создание кода (Code Generation) диалогового окна Параметры конфигурации (Configuration Parameters).
MAKE: make для использования в процессе построения. При выборе целевого объекта эта команда отображается в поле Make command панели Code Generation диалогового окна Configuration Parameters.
Следующие комментарии заголовка от .matlabroot/rtw/c/ert/ert.tlc
%% SYSTLC: Embedded Coder TMF: ert_default_tmf MAKE: make_rtw %% SYSTLC: Create Visual C/C++ Solution File for Embedded Coder\ %% TMF: RTW.MSVCBuild MAKE: make_rtw . . .
Каждый комментарий может содержать не более двух строк.
Если не указать TMF в целевом системном файле, файл по-прежнему действителен. Изменение значения дляTemplateMakefile вместо этого можно использовать функцию обратного вызова, указанную в rtwgensettings.SelectCallback.
Также можно использовать функцию обратного вызова, указанную в rtwgensettings.SelectCallback для изменения значения параметров внешнего режима, ExtMode, ExtModeTransport, ExtModeMexFile, или ExtModeIntrfLevel.
В комментариях к заголовку можно указать несколько групп директив. Каждая такая группа отображается в обозревателе системных целевых файлов как отдельная целевая конфигурация. В приведенном выше примере первые две строки кода определяют конфигурацию по умолчанию целевого объекта ERT. Следующие две строки указывают конфигурацию, которая создает и строит решение Microsoft ® Visual C++ ® (.sln) файл. На рисунке ниже показано, как эти конфигурации отображаются в обозревателе системных целевых файлов.

Пример настраиваемых комментариев заголовка см. в разделе Создание пользовательской целевой конфигурации.
В этом разделе системного целевого файла назначаются глобальные переменные TLC, относящиеся к общему процессу генерации кода.
Для встроенного целевого объекта в большинстве случаев следует просто использовать глобальные настройки переменных TLC, используемые целевым объектом ERT (ert.tlc). Особенно важно, чтобы системный целевой файл использовал 'Embedded-C' значение для CodeFormat Переменная TLC и использует соответствующую rtwgensettings.DerivedFrom = 'ert.tlc' в RTW_OPTIONS раздел файла TLC. Убедитесь, что значения назначены следующим переменным:
CodeFormat: CodeFormat Переменная TLC выбирает сгенерированные элементы кода. 'Embedded-C' значение для этой переменной используется целевым объектом ERT. Цель на основе ERT должна указывать 'Embedded-C' в качестве значения для CodeFormat. Этот выбор предназначен для производственного кода, минимального использования памяти, статического распределения памяти и упрощенного интерфейса с сгенерированным кодом.
Для получения информации о других значениях для CodeFormat Переменная TLC, см. Сравнение поддержки системных целевых файлов по продуктам.
Language: Единственное допустимое значение: C, что обеспечивает поддержку C или C++ создание кода в соответствии с параметром конфигурации TargetLang.
TargetType: Генератор кода определяет символы препроцессора RT и NRT для отличия кода моделирования от кода реального времени. Эти символы используются при условной компиляции. TargetType переменная определяет, RT или NRT определяется.
Большинство целей предназначены для создания кода в реальном времени. Они присваивают TargetType следующим образом.
%assign TargetType = "RT"
Некоторые цели, такие как цель эталонного моделирования модели, цель ускоренного моделирования, цель RSim и цель S-функции, генерируют код только для использования в режиме, отличном от реального времени. Такие цели присваиваются TargetType следующим образом.
%assign TargetType = "NRT"
Процесс генерации кода обычно начинается с codegenentry.tlc. Системный целевой файл вызывает codegenentry.tlc следующим образом.
%include "codegenentry.tlc"
Примечание
codegenentry.tlc и файлы TLC более низкого уровня предполагают, что CodeFormat, TargetType, и Language были назначены. Установите эти переменные перед включением codegenentry.tlc.
При необходимости внедрения функций генерации кода для конкретных целей следует включить файл TLC. mytarget_genfiles.tlc в системном целевом файле. Этот файл предоставляет механизм для выполнения пользовательского кода TLC до и после вызова codegenentry.tlc. Сведения об этом механизме см. в разделе
Использование mytarget_genfiles.tlc для примера пользовательского кода TLC для выполнения после точки входа генерации основного кода.
Целевая разработка и процесс построения для получения общей информации о процессе построения и сведений о других узлах настройки процесса построения.
Другим способом настройки процесса генерации кода является вызов функций более низкого уровня (обычно вызываемых codegenentry.tlc) непосредственно и включать собственные функции TLC на каждом этапе процесса. Такой подход следует применять с осторожностью. Дополнительные сведения см. в разделе Файлы TLC.
Функции нижнего уровня, вызываемые codegenentry.tlc являются
genmap.tlc: сопоставляет имена блоков с соответствующими целевыми файлами блоков, зависящими от языка.
commonsetup.tlc: настройка глобальных переменных.
commonentry.tlc: запускает процесс создания кода.
RTW_OPTIONS раздел ограничен директивами:
/% BEGIN_RTW_OPTIONS . . . END_RTW_OPTIONS %/
Первая часть RTW_OPTIONS раздел определяет массив rtwoptions конструкции. Эта структура рассматривается в разделе Использование rtwoptions для отображения пользовательских параметров цели.
Вторая часть RTW_OPTIONS раздел определяет rtwgensettingsструктура, определяющая имя папки построения и другие параметры процесса создания кода. Дополнительные сведения см. в разделе Структура rtwgensettings rtwgensettings.
Последняя часть системного целевого файла определяет rtwgensettings структура. В этой структуре хранится информация, записанная в и используется процессом построения. model.rtwrtwgensettings области, представляющие наибольший интерес для целевых разработчиков,
rtwgensettings.Version: Используйте это свойство для включения rtwoptions обратные вызовы и для использования API обратного вызова в rtwgensettings.SelectCallback.
Примечание
Чтобы использовать обратные вызовы, необходимо установить:
rtwgensettings.Version = '1';
Добавьте приведенную выше инструкцию в раздел Configure RTW code generation settings системного целевого файла.
rtwgensettings.DerivedFrom: Это поле структуры определяет целевой системный файл, от которого должны наследоваться опции. См. раздел Наследование параметров целевого объекта.
rtwgensettings.SelectCallback: Это поле структуры определяет SelectCallback функция. Необходимо установить rtwgensettings.Version = '1'; или ваш обратный вызов будет проигнорирован. SelectCallback связан с целевым объектом, а не с его отдельными опциями. SelectCallback функция запускается при выполнении следующих действий:
Загрузите модель.
Обновите все настройки конфигурации в диалоговом окне «Параметры конфигурации».
Создайте модель.
SelectCallback полезна для настройки (или отключения) параметров конфигурации, специфичных для целевого объекта.
Следующий код устанавливает SelectCallback функция:
rtwgensettings.SelectCallback = 'my_select_callback_handler(hDlg,hSrc)';
Аргументы для SelectCallback функция (hDlg, hSrc) являются дескрипторами личных данных, используемых функциями API обратного вызова.
Примечание
Если вы разработали пользовательский целевой объект и хотите, чтобы он был совместим со ссылкой на модель, необходимо реализовать SelectCallback для объявления совместимости ссылок на модель. См. раздел Ссылка на модель поддержки.
rtwgensettings.ActivateCallback: это свойство задает ActivateCallback функция. ActivateCallback активируется при изменении активного набора конфигурации модели. Это может произойти во время загрузки модели, а также при изменении пользователем активного набора конфигурации.
Следующий код устанавливает ActivateCallback функция:
rtwgensettings.ActivateCallback = 'my_activate_callback_handler(hDlg,hSrc)';
Аргументы для ActivateCallback функция (hDlg,hSrc) являются дескрипторами личных данных, используемых функциями API обратного вызова.
rtwgensettings.PostApplyCallback: это свойство задает PostApplyCallback функция. PostApplyCallback функция запускается, когда пользователь нажимает кнопку Apply (Применить) или OK (OK) после редактирования опций в диалоговом окне Configuration Parameters (Параметры конфигурации). PostApplyCallback вызывается после того, как изменения были применены к набору конфигурации.
Следующий код устанавливает PostApplyCallback функция:
rtwgensettings.PostApplyCallback = 'my_postapply_callback_handler(hDlg,hSrc)';
Аргументы для PostApplyCallback функция (hDlg, hSrc) являются дескрипторами личных данных, используемых функциями API обратного вызова.
rtwgensettings.BuildDirSuffix: Большинство целевых объектов определяют суффикс имени папки, определяющий папки построения, созданные целевым объектом. Процесс построения добавляет суффикс, определенный в rtwgensettings.BuildDirSuffix в поле к имени модели, чтобы сформировать имя папки сборки. Например, при определении rtwgensettings.BuildDirSuffix следующим образом
rtwgensettings.BuildDirSuffix = '_mytarget_rtw'
папки построения названы .model_mytarget_rtw
Настройка сгенерированного кода с помощью TLC описывает дополнительные переменные генерации кода TLC. Конечные пользователи целевого объекта могут назначить эти переменные путем ввода команды MATLAB формы.
set_param(modelName,'TLCOptions','-aVariable=val');
(Дополнительные сведения см. в разделе Определение TLC для создания кода.)
Однако предпочтительным подходом является назначение этих переменных в системном целевом файле с использованием инструкций формы:
%assign Variable = val
Для удобства чтения рекомендуется добавить такие назначения в раздел системного целевого файла после комментария Настройка параметров генерации кода RTW.
Важные сведения о целевом файле системы и других изменениях, которые могут потребоваться для поддержки ссылочных функций модели генератора кода, см. в разделе Ссылка на модель поддержки.
Параметры, отображаемые на панели Создание кода (Code Generation) в диалоговом окне Параметры конфигурации (Configuration Parameters), можно настроить rtwoptions структура в целевом системном файле.
Поля rtwoptions структура определяет переменные и связанные элементы пользовательского интерфейса, которые будут отображаться в диалоговом окне Параметры конфигурации (Configuration Parameters). Использование rtwoptions можно определить параметры, зависящие от цели, отображаемые в диалоговом окне, и упорядочить параметры по категориям. Можно также записать функции обратного вызова, чтобы указать способ обработки этих опций.
При открытии панели Создание кода (Code Generation) rtwoptions сканируется структурный массив и отображаются перечисленные опции. Каждая опция представлена назначенным элементом интерфейса пользователя (флажок, поле редактирования, меню или кнопка), который отображает текущее значение опции.
Элементы пользовательского интерфейса могут находиться в состоянии enabled (включено) или disabled (недоступно). Если опция включена, пользователь может изменить ее значение. Если опция отключена, используется значение по умолчанию, и пользователь не может изменить значение опции.
Вы также можете использовать rtwoptions структурный массив для определения специальных элементов, не являющихся пользовательскими, которые вызывают выполнение функций обратного вызова, но которые не отображаются на панели «Создание кода». См. раздел Элементы, не относящиеся к пользовательскому интерфейсу.
Элементы rtwoptions структурный массив организован в группы. Каждая группа позиций начинается с элемента заголовка типа Category. Поле по умолчанию для Category заголовок должен содержать количество оставшихся элементов в категории.
Category за заголовком следуют параметры, отображаемые на панели «Создание кода». За заголовком в каждой категории следует один или несколько элементов определения опции.
Каждая категория целевых опций соответствует параметрам, перечисленным в разделе Создание кода (Code Generation) диалогового окна Параметры конфигурации (Configuration Parameters).
Таблица rtwoptions Structure Fields Summary суммирует поля rtwoptions структура.
Пример структуры rtwoptions. Следующее rtwoptions структура выводится из примера целевого файла системы, . Код определяет matlabroot/toolbox/rtw/rtwdemos/rtwoptions_demo/usertarget.tlcrtwoptions структурный массив. Для поля по умолчанию первого (заголовка) элемента установлено значение 4, указывая количество элементов, следующих за заголовком.
rtwoptions(1).prompt = 'userPreferred target options (I)';
rtwoptions(1).type = 'Category';
rtwoptions(1).enable = 'on';
rtwoptions(1).default = 4; % number of items under this category
% excluding this one.
rtwoptions(1).popupstrings = ''; % At the first item, user has to
rtwoptions(1).tlcvariable = ''; % initialize all supported fields
rtwoptions(1).tooltip = '';
rtwoptions(1).callback = '';
rtwoptions(1).makevariable = '';
rtwoptions(2).prompt = 'Execution Mode';
rtwoptions(2).type = 'Popup';
rtwoptions(2).default = 'Real-Time';
rtwoptions(2).popupstrings = 'Real-Time|UserDefined';
rtwoptions(2).tlcvariable = 'tlcvariable1';
rtwoptions(2).tooltip = ['See this text as tooltip'];
rtwoptions(3).prompt = 'Log Execution Time';
rtwoptions(3).type = 'Checkbox';
rtwoptions(3).default = 'on';
rtwoptions(3).tlcvariable = 'RL32LogTETModifier';
rtwoptions(3).tooltip = ['']; % no tooltip
rtwoptions(4).prompt = 'Real-Time Interrupt Source';
rtwoptions(4).type = 'Popup';
rtwoptions(4).default = 'Timer';
rtwoptions(4).popupstrings = 'Timer|5|6|7|8|9|10|11|12|13|14|15';
rtwoptions(4).tlcvariable = 'tlcvariable3';
rtwoptions(4).callback = 'usertargetcallback(hDlg, hSrc, ''tlcvariable3'')';
rtwoptions(4).tooltip = [''];
rtwoptions(4).tooltip = ['See TLC file for how to use reserved '...
' keyword ''hDlg'', and ''hSrc''.'];
...
rtwoptions(5).prompt = 'Signal Logging Buffer Size in Doubles';
rtwoptions(5).type = 'Edit';
rtwoptions(5).default = '100000';
rtwoptions(5).tlcvariable = 'tlcvariable2';
rtwoptions(5).tooltip = [''];Первый элемент добавляет панель userPreferred target options (I) в разделе Code Generation в диалоговом окне Configuration Parameters. На панели отображаются параметры, определенные в rtwoptions(2), rtwoptions(3), rtwoptions(4), и rtwoptions(5).

Если требуется определить большое количество опций, можно определить несколько Category группы в одном системном целевом файле.
Обратите внимание на rtwoptions структура и обратные вызовы записаны в коде MATLAB, хотя они встроены в файл TLC. Проверка синтаксиса rtwoptions определения структуры и код, команды можно выполнять в подсказке MATLAB, копируя и вставляя их в окно команд MATLAB.
Дополнительные сведения usertarget.tlc и примеры файлов обратного вызова, поставляемых с ним, см. в разделе Пример целевого файла системы с настраиваемыми rtwoptions. Дополнительные примеры специфичных для цели rtwoptions определения, см. файлы в разделе target.tlc (открыто).matlabroot/rtw/c
rtwoptions Structure Fields Summary перечисляет поля rtwoptions структура.
Сводка по полям структуры rtwoptions
| Имя поля | Описание |
|---|---|
| Примеры использования обратного вызова см. в разделе Пример целевого файла системы с настраиваемыми rtwoptions. |
| Не использовать
Примеры использования обратного вызова см. в разделе Пример целевого файла системы с настраиваемыми rtwoptions. |
| Значение опции по умолчанию (пусто, если |
| Должно быть |
| Маркер makefile шаблона (если имеется), связанный с параметром. |
modelReferenceParameterCheck | Указывает, должна ли опция иметь одно и то же значение в ссылочной модели и ее родительской модели. Если это поле не указано или имеет значение 'on' значения опций должны быть одинаковыми. Если поле указано и имеет значение 'off' значения опций могут отличаться. См. раздел Управление соглашением о значении опции конфигурации. |
| Элемент, который не отображается, но используется для вызова обратного вызова закрытия или открытия. См. раздел Элементы, не относящиеся к пользовательскому интерфейсу. |
| Не использовать Примеры использования обратного вызова см. в разделе Пример целевого файла системы с настраиваемыми rtwoptions. |
| Если 'rt_|_rt|none' |
| Метка для параметра. |
| Имя переменной TLC, связанной с опцией. |
| Текст справки, отображаемый при наведении курсора мыши на элемент. |
| Тип элемента: |
Элементы, не относящиеся к пользовательскому интерфейсу. Элементы rtwoptions массив с типом NonUI существуют исключительно для вызова обратных вызовов. A NonUI не отображается в диалоговом окне «Параметры конфигурации». Вы можете использовать NonUI если требуется выполнить обратный вызов, не связанный с элементом интерфейса пользователя, при открытии или закрытии диалогового окна. Пример см. в следующем разделе, Пример целевого файла системы с настраиваемыми rtwoptions.
Примечание
Значение по умолчанию элемента типа NonUI или Edit определяет набор значений, допустимых для этого элемента.
Если значением по умолчанию является '0' или '1':
Для типа NonUI, элемент сохраняет логическое значение.
Для типа Edit, элемент хранит значение типа int32.
Если значение по умолчанию содержит целое число, отличное от '0' или '1', элемент хранит значение типа int32.
Если значение по умолчанию не содержит целое число, элемент вычисляется как символьный вектор.
В качестве примера использования функции обратного вызова для файла MATLAB приведен рабочий целевой файл системы. rtwoptions структура для отображения и обработки пользовательских параметров на панели «Создание кода». Примеры совместимы с API обратного вызова.
Примеры целевых файлов находятся в папке (открытые):
matlabroot/toolbox/rtw/rtwdemos/rtwoptions_demo
Примеры целевых файлов включают:
usertarget.tlcПример целевого файла системы. В этом файле показано, как определять пользовательские меню, флажки и редактировать поля. Файл также иллюстрирует использование обратных вызовов.
usertargetcallback.m: Обратный вызов файла MATLAB, вызываемый меню.
См. примеры файлов при чтении этого раздела. Пример целевого файла системы, usertarget.tlc: иллюстрирует использование rtwoptions для отображения следующих пользовательских целевых параметров:
Меню Режим выполнения.
Флажок Время выполнения журнала.
Меню «Источник прерываний в реальном времени». Меню выполняет обратный вызов, определенный во внешнем файле. usertargetcallback.m. Переменная TLC, связанная с меню, передается в обратный вызов, который отображает текущее значение меню.
Поле редактирования Размер буфера регистрации сигналов в двойном формате.
Попробуйте изучить код примера, взаимодействуя с параметрами цели примера в диалоговом окне Параметры конфигурации (Configuration Parameters). Для взаимодействия с целевым файлом примера:
Сделать (открыть) рабочую папку.matlabroot/toolbox/rtw/rtwdemos/rtwoptions_demo
Откройте модель по своему выбору.
Откройте диалоговое окно «Параметры конфигурации» и выберите панель «Создание кода».
Нажмите кнопку Обзор. Откроется Обозреватель системных целевых файлов (System Target File Browser). Выбрать usertarget.tlc. Затем нажмите кнопку ОК.
Обратите внимание, что панель «Создание кода» содержит пользовательскую вложенную вкладку: userPreferred target options (I).
При взаимодействии с опциями этой категории и открытии и закрытии диалогового окна «Параметры конфигурации» просмотрите сообщения, отображаемые в окне команд MATLAB. Эти сообщения печатаются из кода в системном целевом файле или из обратного вызова из системного целевого файла.
ert.tlc предоставляет базовый набор параметров генерации кода Embedded Coder ®. Если цель основана наert.tlc, системный целевой файл обычно должен наследовать опции, определенные в ERT.
Используйте rtwgensettings.DerivedFrom в поле rtwgensettings для определения целевого системного файла, из которого будут наследоваться опции. Для использования этого механизма необходимо преобразовать пользовательский целевой объект следующим образом.
Установите rtwgensettings.DerivedFrom значение поля, как в следующем примере:
rtwgensettings.DerivedFrom = 'stf.tlc';
где stf - имя системного целевого файла, от которого должны наследоваться опции. Например:
rtwgensettings.DerivedFrom = 'ert.tlc';
Когда диалоговое окно «Параметры конфигурации» выполняет эту строку кода, оно включает опции из stf.tlc автоматически. Если stf.tlc является внутренним системным целевым файлом MathWorks, преобразованным в новую компоновку, в диалоговом окне отображаются унаследованные опции с использованием новой компоновки.
Обработка неподдерживаемых параметров. Если целевой объект не поддерживает все параметры, унаследованные от ert.tlc, необходимо обнаружить неподдерживаемые параметры и вывести предупреждение или сообщение об ошибке. В некоторых случаях, если пользователь выбрал вариант, который целевой объект не поддерживает, может потребоваться прервать процесс построения. Например, если целевой объект не поддерживает параметр «Создать пример основной программы», процесс построения не должен быть продолжен, если выбран этот параметр.
Несмотря на то, что конечный объект может не поддерживать все унаследованные параметры ERT, необходимо сохранить параметры ERT на панели Создание кода (Code Generation) диалогового окна Параметры конфигурации (Configuration Parameters). Не удаляйте неподдерживаемые параметры из rtwoptions структура в целевом файле системы. Параметры должны находиться в диалоговом окне для сканирования генератором кода при выполнении оптимизации.
Например, может потребоваться запретить пользователям отключать функцию Single output/update. Может показаться целесообразным удалить эту опцию из диалогового окна и просто назначить переменную TLC CombineOutputUpdateFcns кому on. Однако если опция не включена в диалоговое окно, генератор кода предполагает, что функции вывода и обновления не должны объединяться. В результате генерируется менее эффективный код.
В следующих разделах содержится информация о методах настройки целевого файла системы, в том числе:
Вызов пользовательского кода TLC из системного целевого файла
Подходы к поддержке нескольких сред разработки
Примечания по обновлению целевого системного файла
При необходимости внедрения функций генерации кода для конкретных целей рекомендуется включить в системный целевой файл TLC. mytarget_genfiles.tlc.
После того как системный целевой файл установит требуемую среду TLC, необходимо включить codegenentry.tlc для запуска стандартного процесса создания кода.
mytarget_genfiles.tlc обеспечивает механизм для выполнения пользовательского кода TLC после основной точки входа генерации кода. См. раздел Использование mytarget_genfiles.tlc.
С помощью mytarget_genfiles.tlc. mytarget_genfiles.tlc (необязательно) полезен в качестве файла хранилища, из которого можно вызывать целевые TLC-файлы, генерирующие дополнительные файлы в процессе сборки. Например, конечный объект может создавать вложенные файлы или файлы проектов для среды разработки или сценарии команд для отладчика для автоматической загрузки.
Затем процесс построения может вызвать эти сгенерированные файлы либо непосредственно из процесса создания, либо после создания исполняемого файла. Это делается с помощью , как описано в разделе Настройка процесса построения с помощью файла STF_make_rtw_hook.STF_make_rtw_hook.m
Следующий код TLC показывает пример mytarget_genfiles.tlc файл.
%selectfile NULL_FILE %assign ModelName = CompiledModel.Name %% Create Debugger script %assign model_script_file = "%<ModelName>.cfg" %assign script_file = "debugger_script_template.tlc" %if RTWVerbose %selectfile STDOUT ### Creating %<model_script_file> %selectfile NULL_FILE %endif %include "%<script_file>" %openfile bld_file = "%<model_script_file>" %<CreateDebuggerScript()> %closefile bld_file
В этом разделе описываются функции утилит, которые можно использовать для обнаружения и разрешения значений псевдонимов или устаревших значений при тестировании пользовательских значений для целевого типа устройства (ProdHWDeviceTypeи библиотека замены кода (CodeReplacementLibrary).
RTW.isHWDeviceTypeEq. Чтобы проверить, представляют ли два значения типа оконечного устройства одно и то же аппаратное устройство, вызовите следующую функцию:
result = RTW.isHWDeviceTypeEq(type1,type2)
где и type1 - векторы символов, содержащие значения или псевдонимы типа целевого устройства.type2
RTW.isHWDeviceTypeEq функция возвращает true, если и type1 - векторы символов, представляющие одно и то же аппаратное устройство. Например, следующий вызов возвращает значение true:type2
RTW.isHWDeviceTypeEq('Specified','Generic->Custom')Описание параметра типа оконечного устройства ProdHWDeviceType, см. информацию командной строки для параметров панели «Реализация оборудования» «Поставщик устройства» и «Тип устройства».
RTW.resolveHWDeviceType. Для возврата значения типа устройства для аппаратного устройства, заданного значением, которое может быть псевдонимом или устаревшим значением, вызовите следующую функцию:
result = RTW.resolveHWDeviceType(type)
где - вектор символов, содержащий значение или псевдоним типа целевого устройства.type
RTW.resolveHWDeviceType функция возвращает значение типа устройства. Например, оба следующих вызова возвращаются 'Generic->Custom':
RTW.resolveHWDeviceType('Specified')
RTW.resolveHWDeviceType('Generic->Custom')Описание параметра типа оконечного устройства ProdHWDeviceType, см. информацию командной строки для параметров панели «Реализация оборудования» «Поставщик устройства» и «Тип устройства».
RTW.isTflEq. Чтобы проверить, представляют ли два имени библиотеки замены кода (CRL) один и тот же CRL, вызовите следующую функцию:
result = RTW.isTflEq(name1,name2)
где и name1 - векторы символов, содержащие значения CRL или псевдонимы.name2
RTW.isTflEq функция возвращает true, если и name1 - векторы символов, представляющие одну и ту же библиотеку замены кода. Например, следующий вызов возвращает значение true:name2
RTW.isTflEq('GNU','GNU C99 extensions')Для описания CodeReplacementLibrary , см. раздел Библиотека замены кода.
RTW.resolveTflName. Чтобы вернуть значение CRL для библиотеки замены кода, учитывая значение, которое может быть псевдонимом или устаревшим значением, вызовите следующую функцию:
result = RTW.resolveTflName(name)
где - символьный вектор, содержащий значение CRL или псевдоним.name
RTW.resolveTflName функция возвращает значение библиотеки замены кода, на которую ссылается ссылка. Например, оба следующих вызова возвращаются 'GNU C99 extensions':
RTW.resolveTflName('GNU')
RTW.resolveTflName('GNU C99 extensions')Для описания CodeReplacementLibrary , см. раздел Библиотека замены кода.
Целевой объект может потребовать поддержки нескольких сред разработки (например, двух или более кросс-компиляторов) или нескольких режимов генерации кода (например, создание двоичного исполняемого файла вместо создания файла проекта для компилятора).
Одним из подходов к этому требованию является внедрение нескольких целевых системных файлов. Каждый целевой системный файл вызывает файл создания шаблона для среды разработки. Это означает предоставление двух отдельных целевых показателей.
Обновление пользовательского целевого файла системы может повлиять на значения опций загружаемой модели, в которой используется обновленный целевой файл системы. Если параметр отключен, в обновленном системном целевом файле используется значение по умолчанию для этого параметра. Если модель имеет другое значение для этой опции, при загрузке модели с обновленным системным целевым файлом значение из модели отбрасывается, а системный целевой файл использует значение по умолчанию.
Это учебное пособие может дополнять примеры целевых руководств, описанных в разделе Примеры пользовательских целевых руководств. Для введения и файлов примеров сначала попробуйте использовать целевые объекты примера.
В этом учебном пособии описывается процесс создания целевого объекта на основе ERT. my_ert_target. В этом упражнении показано несколько задач, типичных для создания пользовательского целевого объекта:
Настройка целевых папок и изменение пути MATLAB.
Внесение изменений в стандартный системный целевой файл и TMF таким образом, чтобы пользовательский целевой файл был виден в обозревателе системных целевых файлов, наследует параметры ERT, отображает параметры целевого файла и генерирует код с помощью компилятора на основе хоста по умолчанию.
Тестирование процесса построения с использованием пользовательского целевого объекта с использованием простой модели, включающей встроенную S-функцию.
В ходе этого упражнения будет реализована оперативная, но скелетная цель на основе ERT. Этот целевой объект может быть полезен в качестве отправной точки при полной реализации пользовательского встроенного целевого объекта.
В следующих разделах создается скелетная цель. my_ert_target. Целевой объект наследует и поддерживает стандартные опции целевого объекта ERT и отображает дополнительные параметры для целевого объекта в диалоговом окне Параметры конфигурации (Configuration Parameters) (см. раздел Параметры для целевого объекта для my_ert_target).
Целевые параметры для my_ert_target

my_ert_target поддерживает построение на основе цепочки инструментов, генерирование кода и исполняемых файлов, которые выполняются в хост-системе. my_ert_target использует lcc компилятор на платформе Microsoft Windows ®. Выбранный компилятор легко доступен и распространяется вместе с генератором кода. На платформе Microsoft Windows можно настроить другой компилятор lcc временно в качестве компилятора по умолчанию с помощью следующей команды MATLAB:
mex -setup
Программа отображает ссылки на поддерживаемые компиляторы, установленные на компьютере. Щелкните значок lcc ссылка.
Примечание
В системах Linux ® убедитесь, что установлен компилятор Си. Если да, то для выполнения этого упражнения можно использовать синтаксис папки Linux.
my_ert_target может также поддерживать сборки на основе шаблона makefile. Дополнительные сведения об использовании этого целевого объекта с подходом makefile шаблона см. в разделе Создание MakeFile шаблона на основе ERT.
Вы можете протестировать my_ert_target с моделью, совместимой с целевым объектом ERT (см. раздел Настройка целевого файла системы). Генерируемые программы работают идентично генерируемым ERT программам.
Чтобы упростить тестирование цели, выполните тестирование с помощью targetmodelочень простая модель с фиксированным шагом (см. Создание тестовой модели и S-функции). S-функциональный блок в targetmodel использует исходный код из timestwo и создает полностью встроенный код. Для дальнейшего обсуждения см. S-Function Examples and Inline S-Functions with TLC timestwo пример S-функции.
Создайте папки для хранения целевых файлов и добавьте их в путь MATLAB в соответствии с рекомендуемыми правилами (см. раздел Соглашения по именованию папок и файлов). Также создается папка для хранения тестовой модели, S-функции и сгенерированного кода.
В этом примере предполагается, что целевая папка и папка модели расположены в папке. c:/work. Не помещайте целевые папки и папки модели в дерево папок MATLAB (то есть в или под папка).matlabroot
Чтобы создать папки и сделать их доступными, выполните следующие действия.
Создайте целевую корневую папку, my_ert_target. В окне команд MATLAB на платформе Windows введите:
cd c:/work mkdir my_ert_target
В целевой корневой папке создайте подпапку для хранения целевых файлов.
mkdir my_ert_target/my_ert_target
Добавьте эти папки в путь MATLAB.
addpath c:/work/my_ert_target addpath c:/work/my_ert_target/my_ert_target
Создайте папку, my_targetmodel, для хранения тестовой модели, S-функции и сгенерированного кода.
mkdir my_targetmodel
Создайте системный целевой файл для цели путем копирования и изменения стандартного системного целевого файла для цели ERT. Затем проверьте системный целевой файл путем просмотра нового целевого файла в обозревателе системных целевых файлов и в диалоговом окне «Параметры конфигурации».
Редактирование целевого файла системы. Чтобы изменить системный целевой файл, выполните следующие действия.
Измените рабочую папку на папку, созданную в окне «Создание конечных папок».
cd c:/work/my_ert_target/my_ert_target
Размещение копии в matlabroot/rtw/c/ert/ert.tlcc:/work/my_ert_target/my_ert_target и переименовать его в my_ert_target.tlc. Файл ert.tlc является системным целевым файлом для цели ERT.
Открытый my_ert_target.tlc в текстовом редакторе по вашему выбору.
Настройте системный целевой файл, заменив строки комментариев заголовка директивами, которые делают системный целевой файл видимым в обозревателе системных целевых файлов и определяют связанный TMF. make и файл интерфейса внешнего режима (при наличии). Дополнительные сведения об этих директивах см. в разделе Комментарии к заголовку.
Заменить комментарии заголовка в my_ert_target.tlc со следующими комментариями заголовка.
%% SYSTLC: My ERT-based Target TMF: my_ert_target_lcc.tmf MAKE: make_rtw
Файл my_ert_target.tlc наследует стандартные опции ERT, используя механизм, описанный в разделе Наследование целевых опций. Следовательно, существующие rtwoptions определение структуры является излишним. Отредактируйте раздел RTW_OPTIONS таким образом, чтобы он включал только следующий код.
/% BEGIN_RTW_OPTIONS %----------------------------------------% % Configure RTW code generation settings % %----------------------------------------% rtwgensettings.BuildDirSuffix = '_ert_rtw'; END_RTW_OPTIONS %/
Удаление кода после окончания RTW_OPTIONS раздел, который ограничен директивами BEGIN_CONFIGSET_TARGET_COMPONENT and END_CONFIGSET_TARGET_COMPONENT. Этот код предназначен только для внутренних разработчиков MathWorks.
Изменить суффикс папки построения в rtwgenSettings структура в соответствии с соглашениями, описанными в rtwgensettings Structure.
Установка суффикса в виде символьного вектора для _my_ert_target пользовательская цель, изменить строку
rtwgensettings.BuildDirSuffix = '_ert_rtw'
кому
rtwgensettings.BuildDirSuffix = '_my_ert_target_rtw'
Изменение rtwgenSettings структура для наследования опций от цели ERT и объявления совместимости версии 14 или более поздней, как описано в rtwgensettings Structure. Добавьте следующий код в rtwgenSettings определение:
rtwgensettings.DerivedFrom = 'ert.tlc'; rtwgensettings.Version = '1';
Добавить rtwoptions структура, которая определяет целевую категорию опций с тремя флажками сразу после BEGIN_RTW_OPTIONS директива. Следующий код показывает полный RTW_OPTIONS раздел, включая предыдущий rtwgenSettings изменения.
/%
BEGIN_RTW_OPTIONS
rtwoptions(1).prompt = 'My Target Options';
rtwoptions(1).type = 'Category';
rtwoptions(1).enable = 'on';
rtwoptions(1).default = 3; % number of items under this category
% excluding this one.
rtwoptions(1).popupstrings = '';
rtwoptions(1).tlcvariable = '';
rtwoptions(1).tooltip = '';
rtwoptions(1).callback = '';
rtwoptions(1).makevariable = '';
rtwoptions(2).prompt = 'Demo option 1';
rtwoptions(2).type = 'Checkbox';
rtwoptions(2).default = 'off';
rtwoptions(2).tlcvariable = 'DummyOpt1';
rtwoptions(2).makevariable = '';
rtwoptions(2).tooltip = ['Demo option1 (non-functional)'];
rtwoptions(2).callback = '';
rtwoptions(3).prompt = 'Demo option 2';
rtwoptions(3).type = 'Checkbox';
rtwoptions(3).default = 'off';
rtwoptions(3).tlcvariable = 'DummyOpt2';
rtwoptions(3).makevariable = '';
rtwoptions(3).tooltip = ['Demo option2 (non-functional)'];
rtwoptions(3).callback = '';
rtwoptions(4).prompt = 'Demo option 3';
rtwoptions(4).type = 'Checkbox';
rtwoptions(4).default = 'off';
rtwoptions(4).tlcvariable = 'DummyOpt3';
rtwoptions(4).makevariable = '';
rtwoptions(4).tooltip = ['Demo option3 (non-functional)'];
rtwoptions(4).callback = '';
%----------------------------------------%
% Configure RTW code generation settings %
%----------------------------------------%
rtwgensettings.BuildDirSuffix = '_my_ert_target_rtw';
rtwgensettings.DerivedFrom = 'ert.tlc';
rtwgensettings.Version = '1';
rtwgensettings.SelectCallback = 'enableToolchainCompliant(hSrc, hDlg)';
%SelectCallback provides toolchain approach support, but requires custom function
%Omit this SelectCallback if using the template makefile approach
END_RTW_OPTIONS
%/Сохранить изменения в my_ert_target.tlc и закройте файл.
Создать функцию, соответствующую схеме инструментов. Для включения построений с использованием подхода toolchain создается функция, соответствующая SelectCallback рядом с концом целевого файла пользовательской системы. Эта функция задает свойства соответствия последовательности инструментов.
function enableToolchainCompliant(hSrc, hDlg) % The following parameters enable toolchain compliance. slConfigUISetVal(hDlg, hSrc, 'UseToolchainInfoCompliant', 'on'); slConfigUISetVal(hDlg, hSrc, 'GenerateMakefile','on'); % The following parameters are not required for toolchain compliance. % But, it is recommended practice to set these default values and % disable the parameters (as shown). slConfigUISetVal(hDlg, hSrc, 'RTWCompilerOptimization','off'); slConfigUISetVal(hDlg, hSrc, 'MakeCommand','make_rtw'); slConfigUISetEnabled(hDlg, hSrc, 'RTWCompilerOptimization',false); slConfigUISetEnabled(hDlg, hSrc, 'MakeCommand',false); hSrc.refreshDialog; end
Примечание
Если используется подход makefile шаблона, не вызывайте функцию enabling toolchain-compliance из системного целевого файла. Вместо этого используйте информацию в разделе Создание MakeFile шаблона на основе ERT.
Просмотр целевого файла системы. На этом этапе можно проверить, что целевой объект наследует и отображает параметры ERT следующим образом:
Создайте новую модель.
Откройте Обозреватель моделей (Model Explorer) или диалоговое окно Параметры конфигурации (Configuration Parameters).
Выберите панель «Создание кода».
Нажмите кнопку Обзор (Browse), чтобы открыть браузер Системный целевой файл (System Target File).
В браузере файлов прокрутите список целевых объектов, чтобы найти новый целевой объект. my_ert_target.tlc. (На этом шаге предполагается, что путь MATLAB содержит c:/work/my_ert_target/my_ert_target, как было установлено ранее в разделе Создание целевых папок.)
Выбрать My ERT-based Target и нажмите кнопку ОК.

На панели Создание кода (Code Generation) теперь показано, что модель настроена для my_ert_target.tlc цель. Появятся поля конфигурации «Системный целевой файл», «Язык», «Схема инструментов» и «Построение»:

Выберите панель «Параметры конечного объекта». Целевой объект отображает три флажка, определенных в rtwoptions структура.

Выберите панель Создание кода (Code Generation) и снова откройте Обозреватель системных целевых файлов (System Target File Browser).
Выберите цель Embedded Coder (встроенный кодер) (ert.tlc). Цель отображает стандартные опции ERT.
Закройте модель. Вам не нужно его сохранять.
Системный целевой файл для скелетного целевого файла завершен. При использовании подхода, основанного на цепочке инструментов, можно вызвать процесс сборки для целевого объекта.
Если вы предпочитаете использовать подход makefile шаблона, ссылка на TMF, my_ert_target_lcc.tmf, в комментариях заголовка системного целевого файла предотвращает вызов процесса сборки для целевого файла до тех пор, пока не будет создан TMF-файл. Сначала необходимо создать my_ert_target_lcc.tmf файл.
Если используется подход makefile цепочки инструментов с пользовательским целевым объектом, совместимым с цепью инструментов, пропустите шаги, которые применяются к подходу makefile шаблона. (Пропустить этот раздел.)
Если используется подход makefile шаблона, выполните шаги, которые применяются к файлу makefile шаблона, и не вызывайте функцию, которая обеспечивает соответствие последовательности инструментов из системного целевого файла, которая описана в разделе Создание целевого файла на основе ERT, совместимого с системой Toolchain.
Создайте файл макета шаблона для цели путем копирования и изменения предоставленного файла макета шаблона ERT. Выберите файл создания шаблона, который лучше всего подходит для цели. В этом примере используется ert_lcc64.tmf, но вы также можете использовать ert_vcx64.tmf или ert_unix.tmf.
Убедитесь, что для рабочей папки по-прежнему установлена целевая папка, созданная ранее в окне «Создание целевых папок».
c:/work/my_ert_target/my_ert_target
Размещение копии в matlabroot/toolbox/coder/compile/tmf/ert_lcc64.tmfc:/work/my_ert_target/my_ert_target и переименовать его my_ert_target_lcc.tmf. Файл ert_lcc64.tmf - файл создания шаблона для компилятора ERT для компилятора LCC.
Открытый my_ert_target_lcc.tmf в текстовом редакторе.
Изменить SYS_TARGET_FILE параметр, чтобы ссылка на файл для .tlc файл создан в make файл. Изменение строки
SYS_TARGET_FILE = any
кому
SYS_TARGET_FILE = my_ert_target.tlc
Сохранить изменения в my_ert_target_lcc.tmf и закройте файл.
Теперь конечный объект может генерировать код и создавать исполняемый файл на основе хоста. В следующих разделах описывается создание тестовой модели и тестирование процесса построения с помощью my_ert_target.
В этом разделе описывается создание простой тестовой модели для последующего использования при создании кода:
Задайте для рабочей папки значение c:/work/my_targetmodel.
cd c:/work/my_targetmodel
В оставшейся части этого учебного пособия: my_targetmodel предполагается рабочей папкой. Конечный объект записывает выходные файлы процесса создания кода в папку построения в рабочей папке. При создании встроенного кода для timestwo S-функция, процесс сборки ищет реализацию TLC S-функции в рабочей папке.
Скопируйте следующие файлы C и TLC для timestwo S-функция для рабочей папки:
matlabroot/toolbox/simulink/simdemos/simfeatures/src/timestwo.c
matlabroot/toolbox/simulink/simdemos/simfeatures/tlc_c/timestwo.tlc
Построить timestwo MEX-файл в c:/work/my_targetmodel.
mex timestwo.c
Создайте следующую модель с помощью блока S-Function из библиотеки пользовательских функций Simulink ®. Сохраните модель в рабочей папке какtargetmodel.

Дважды щелкните блок S-Function, чтобы открыть диалоговое окно «Параметры блока». Введите имя S-функции timestwo. Нажмите кнопку ОК. Теперь блок привязан к timestwo MEX-файл.
Откройте обозреватель моделей или диалоговое окно Параметры конфигурации (Configuration Parameters) и выберите панель Решатель (Solver).
Задайте для параметра Тип решателя значение fixed-step и нажмите «Применить».
Сохраните модель.
Откройте область и запустите моделирование. Убедитесь, что timestwo S-функция умножает свой вход на 2,0.
Сохранить targetmodel модель открыта для использования в следующем разделе, в котором создается код с использованием тестовой модели.
В этом разделе выполняется настройка targetmodel для my_ert_target пользовательский целевой объект и используйте целевой объект для создания кода и создания исполняемого файла:
В диалоговом окне «Параметры конфигурации» выберите панель «Создание кода».
Щелкните Обзор (Browse), чтобы открыть Обозреватель системных целевых файлов (System Target File Browser).
В браузере выберите My ERT-based Target и нажмите кнопку ОК.
В диалоговом окне «Параметры конфигурации» теперь отображается панель «Создание кода» для my_ert_target.
Выберите панель Создание кода > Отчет и выберите опцию Создать отчет о создании кода.
Щелкните Применить (Apply) и сохраните модель. Модель настроена для my_ert_target.
Создайте модель. Если построение завершается успешно, в окне команд MATLAB отображается следующее сообщение.
### Created executable: ../targetmodel.exe ### Successful completion of build procedure for model: targetmodel
Рабочая папка содержит targetmodel.exe файл и папку построения, targetmodel_my_ert_target_rtw, который содержит сгенерированный код и другие файлы. Рабочая папка также содержит slprj , используется внутри процесса построения.
Генератор кода также создает отчет о создании кода.
Чтобы просмотреть созданный код, на вкладке C Code щелкните View Code. На панели «Содержимое» отчета о создании кода нажмите кнопку targetmodel.c ссылка.
В targetmodel.c, найдите функцию шага модели, targetmodel_step. Соблюдайте следующий код.
/* S-Function Block: <Root>/S-Function */ /* Multiply input by two */ targetmodel_B.SFunction = targetmodel_B.SineWave * 2.0;
Наличие этого кода подтверждает, что my_ert_target пользовательская цель создала встроенное вычисление выходных данных для блока S-Function в модели.