Этот раздел предоставляет информацию о структуре системного конечного файла (STF), инструкций для настройки STF и основного примера, который помогает вам произвести скелетный STF.
Системный конечный файл (STF) управляет этапом генерации кода процесса сборки. STF также позволяет вам управлять представлением своей цели конечному пользователю. STF обеспечивает
Определения переменных, которые являются основным принципом процесса сборки, такого как значение для переменной CodeFormat
TLC
Основная точка входа к программе TLC верхнего уровня, которая генерирует код
Целевая информация для отображения в Системном Браузере Конечного файла
Механизм для определения целевых опций генерации кода (и другие параметры, связанные с процессом сборки) и для отображения их в диалоговом окне Configuration Parameters
Механизм для наследования опций от другой цели (таких как цель Встроенного в реальном времени (ERT))
Обратите внимание на то, что, несмотря на то, что STF является файлом Компилятора выходного языка (TLC), он содержит, встроил код MATLAB®. Прежде, чем создать или изменить STF, необходимо получить практическое знание TLC и языка MATLAB. Компилятор Выходного языка (Simulink Coder) и Скрипты по сравнению с Функциями (MATLAB) описывает функции и синтаксис и TLC и языков MATLAB.
При чтении этого раздела можно хотеть обратиться к STFs, которому предоставляют генератор кода. Большинство этих файлов хранится в целевых папках под (открытым)
. Дополнительные STFs хранятся под matlabroot/rtw/c
(открытым)
.matlabroot/toolbox/rtw/targets
STF должен быть расположен в папке на пути MATLAB для цели, которая будет отображена в Системном Браузере Конечного файла и вызвана в процессе сборки. Следуйте за местоположением и соглашениями о присвоении имен для STFs и связанных конечных файлов, данных в Соглашениях о присвоении имен Папки и Файла.
Этот раздел является руководством по структуре и содержимому STF. Следующий листинг показывает общую структуру STF. Обратите внимание на то, что это не полный листинг кода STF. Листинг состоит из выборок от каждого из разделов, которые составляют STF.
%%---------------------------- %% 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 %/
Если вы создаете пользовательскую цель на основе существующего STF, необходимо удалить раздел targetComponentClass
(ограниченный директивами BEGIN_CONFIGSET_TARGET_COMPONENT
и END_CONFIGSET_TARGET_COMPONENT
). Этот раздел резервируется для использования целей, разработанных внутренне MathWorks.
Эти строки во главе файла отформатированы, как комментирует TLC. Они предоставляют запрошенную информацию Системному Браузеру Конечного файла и процессу сборки. Обратите внимание на то, что необходимо поместить комментарии браузера во главе файла перед другими комментариями или операторами TLC.
Присутствие комментариев позволяет генератору кода обнаружить STFs. Когда Системный Браузер Конечного файла открыт, генератор кода сканирует путь MATLAB для файлов TLC, которые отформатировали комментарии заголовка. Комментарии содержат следующие директивы:
SYSTLC: дескриптор, который появляется в браузере.
TMF: Имя make-файла шаблона (TMF), чтобы использовать во время процесса сборки. Когда цель выбрана, это имя файла отображено в поле (Simulink Coder) make-файла Шаблона панели 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
в системном конечном файле, файл все еще допустим. Чтобы изменить значение для theTemplateMakefile
параметра, можно вместо этого использовать функцию обратного вызова, заданную rtwgensettings.SelectCallback
.
Можно также использовать функцию обратного вызова, заданную rtwgensettings.SelectCallback
, чтобы изменить значение для параметров режима external mode, ExtMode
, ExtModeTransport
, ExtModeMexFile
или ExtModeIntrfLevel
.
Можно задать больше чем одну группу директив в комментариях заголовка. Каждая такая группа отображена как различная целевая настройка в Системном Браузере Конечного файла. В вышеупомянутом примере первые две строки кода задают настройку по умолчанию цели ERT. Следующие две строки задают настройку, которая создает и создает Microsoft® Visual C ++® Решение (.sln
) файл. Фигура ниже показов, как эти настройки появляются в Системном Браузере Конечного файла.
Смотрите Создают Пользовательскую Целевую Настройку для примера индивидуально настраиваемых комментариев заголовка.
Этот раздел STF присваивает глобальные переменные TLC, которые относятся к полному процессу генерации кода.
Для целевого процессора в большинстве случаев необходимо просто использовать глобальные настройки переменной TLC, используемые целью ERT (ert.tlc
). Особенно важно, чтобы ваши STF использовали значение 'Embedded-C'
для переменной CodeFormat
TLC, и использует соответствующий rtwgensettings.DerivedFrom = 'ert.tlc'
в разделе RTW_OPTIONS
файла TLC. Проверьте, что значения присвоены следующим переменным:
CodeFormat
: переменная CodeFormat
TLC выбирает функции сгенерированного кода. Значение 'Embedded-C'
для этой переменной используется целью ERT. Ваша основанная на ERT цель должна задать 'Embedded-C'
как значение для CodeFormat
. Этот выбор разработан для производственного кода, минимального использования памяти, выделения статического ЗУ и упрощенного интерфейса к сгенерированному коду.
Для получения информации о других значениях для переменной CodeFormat
TLC смотрите, Сравнивают Системную Поддержку Конечного файла Через продукты (Simulink Coder).
Language
: единственным допустимым значением является C
, который включает поддержку C
или генерации кода C++
, как задано параметром конфигурации TargetLang
.
TargetType
: генератор кода задает символы препроцессора RT
и NRT
, чтобы отличить код симуляции от кода в реальном времени. Эти символы используются в условной компиляции. Переменная TargetType
определяет или RT
, или NRT
задан.
Большинство целей предназначается, чтобы сгенерировать код в реальном времени. Они присваивают TargetType
можно следующим образом.
%assign TargetType = "RT"
Некоторые цели, такие как цель симуляции модели - ссылки, ускорили цель симуляции, цель RSim и цель S-функции, сгенерируйте код для использования в недействительное время только. Такие цели присваивают TargetType
можно следующим образом.
%assign TargetType = "NRT"
Процесс генерации кода обычно начинается с codegenentry.tlc
. STF invokes codegenentry.tlc
можно следующим образом.
%include "codegenentry.tlc"
codegenentry.tlc
и файлы TLC низшего уровня принимают, что CodeFormat
, TargetType
и Language
были присвоены. Установите эти переменные прежде включая codegenentry.tlc
.
Если необходимо реализовать целевые опции генерации кода, необходимо включать файл TLC mytarget_genfiles.tlc
в STF. Этот файл обеспечивает механизм для выполнения пользовательского кода TLC до и после вызова codegenentry.tlc
. Для получения информации об этом механизме смотрите
Используя mytarget_genfiles.tlc для примера пользовательского кода TLC для выполнения после основной точки входа генерации кода.
Целевая Разработка и Процесс сборки для получения общей информации о процессе сборки, и для получения информации о других рычагах индивидуальной настройки процесса сборки.
Другой способ настроить процесс генерации кода состоит в том, чтобы вызвать функции низшего уровня (обычно вызванный codegenentry.tlc
) непосредственно и включать ваши собственные функции TLC в каждый этап процесса. Этот подход должен быть проявлен с осторожностью. См. Файлы TLC (Simulink Coder) для получения дополнительной информации.
Функции низшего уровня, вызванные 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
.
Итоговая часть STF задает структуру rtwgensettings
. Эта структура хранит информацию, которая пишется в файл
и используется процессом сборки. Поля model.rtw
rtwgensettings
большей части интереса предназначаться для разработчиков
rtwgensettings.Version
: Используйте это свойство включить коллбэки rtwoptions
и использовать API Коллбэка в rtwgensettings.SelectCallback
.
Чтобы использовать коллбэки, необходимо установить:
rtwgensettings.Version = '1';
Добавьте оператор выше в раздел Configure RTW code generation settings системного конечного файла.
rtwgensettings.DerivedFrom
: Это поле структуры задает системный конечный файл, от которого должны быть наследованы опции. См. Наследовавшиеся Целевые Опции.
rtwgensettings.SelectCallback
: Это поле структуры задает функцию SelectCallback
. Необходимо установить rtwgensettings.Version = '1';
, или коллбэк будет проигнорирован. SelectCallback
сопоставлен с целью, а не с любой из ее отдельных опций. Функция SelectCallback
инициирована когда вы:
Загрузите модель.
Обновите любые параметры конфигурации в диалоговом окне Configuration Parameters.
Создайте модель.
Функция 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 после редактирования опций в диалоговом окне 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 (Simulink Coder), описывает дополнительные переменные генерации кода TLC. Конечные пользователи цели могут присвоить эти переменные путем ввода команды MATLAB формы
set_param(modelName,'TLCOptions','-aVariable=val');
(Для получения дополнительной информации смотрите, Задают TLC для Генерации кода (Simulink Coder).)
Однако предпочтительный подход должен присвоить эти переменные в STF использование операторов формы:
%assign Variable = val
Для удобочитаемости мы рекомендуем, чтобы вы добавили такие присвоения в разделе STF после комментария Configure RTW code generation settings.
Смотрите, что Модель поддержки Ссылается для важной информации о STF и других модификациях, которые вы, возможно, должны сделать, чтобы поддерживать модель генератора кода ссылка на функции.
Используя rtwoptions, чтобы Отобразить Пользовательские Целевые Опции
Системный Конечный файл в качестве примера С Индивидуально настраиваемым rtwoptions
Вы управляете опциями, чтобы отобразиться в панели Code Generation в диалоговом окне Configuration Parameters путем настройки структуры rtwoptions
в системном конечном файле.
Поля структуры rtwoptions
задают переменные и сопоставленные элементы пользовательского интерфейса, которые будут отображены в диалоговом окне Configuration Parameters. Используя массив структур rtwoptions
, можно задать целевые опции, отображенные в диалоговом окне, и организовать опции в категории. Можно также записать функции обратного вызова, чтобы задать, как эти опции обрабатываются.
Когда панель Code Generation открывается, массив структур rtwoptions
сканируется, и перечисленные опции отображены. Каждая опция представлена элементом интерфейса назначенного пользователя (флажок, поле редактирования, меню или кнопка), который отображает текущее значение опции.
Элементы пользовательского интерфейса могут быть в активированном, или отключенное (появляется, потускнел), состояние. Если опция включена, пользователь может изменить значение опции. Если опция отключена, опция использует значение по умолчанию, и пользователь не может изменить значение опции.
Можно также использовать массив структур rtwoptions
, чтобы задать специальные элементы NonUI, которые заставляют функции обратного вызова выполняться, но которые не отображены в панели Code Generation. Смотрите Элементы NonUI.
Элементы массива структур rtwoptions
организованы в группы. Каждая группа элементов начинается с элемента заголовка типа Category
. Поле по умолчанию заголовка Category
должно содержать количество остающихся элементов в категории.
Заголовок Category
сопровождается опциями, которые будут отображены на панели Code Generation. Заголовок в каждой категории сопровождается одним или несколькими элементами определения опции.
Каждая категория целевых опций соответствует опциям, перечисленным под Code Generation в диалоговом окне Configuration Parameters.
Таблица rtwoptions Полевые Сводные данные Структуры суммирует поля структуры rtwoptions
.
Пример rtwoptions Структура. Следующая структура rtwoptions
выбирается от системного конечного файла в качестве примера,
. Код задает массив структур matlabroot/toolbox/rtw/rtwdemos/rtwoptions_demo/usertarget.tlc
rtwoptions
. Поле по умолчанию первого (заголовок), элемент установлен в 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 перечисляют поля структуры rtwoptions
.
Полевые Сводные данные Структуры rtwoptions
Имя поля | Описание |
---|---|
| Для примеров использования коллбэка смотрите Системный Конечный файл В качестве примера С Индивидуально настраиваемым rtwoptions. |
| Не используйте
Для примеров использования коллбэка смотрите Системный Конечный файл В качестве примера С Индивидуально настраиваемым rtwoptions. |
| Значение по умолчанию опции (пустой, если |
| Должен быть |
| Обработайте лексему make-файла по шаблону (если таковые имеются) сопоставленный с опцией. |
modelReferenceParameterCheck | Задает, должна ли опция иметь то же значение в модели, на которую ссылаются, и ее родительской модели. Если это поле не задано или имеет значение 'on' , значения опции должны быть тем же самым. Если поле задано и имеет значение 'off' , значения опции могут отличаться. См. соглашение о Значении Параметра конфигурации Управления. |
| Элемент, который не отображен, но используется, чтобы вызвать близкий или открытый коллбэк. Смотрите Элементы NonUI. |
| Не используйте Для примеров использования коллбэка смотрите Системный Конечный файл В качестве примера С Индивидуально настраиваемым rtwoptions. |
| Если 'rt_|_rt|none' |
| Маркируйте для опции. |
| Имя переменной TLC сопоставлено с опцией. |
| Помогите тексту, отображенному, когда мышь будет по элементу. |
| Тип элемента: |
Элементы NonUI. Элементы массива rtwoptions
, которые имеют тип NonUI
, существуют только, чтобы вызвать коллбэки. Элемент NonUI
не отображен в диалоговом окне Configuration Parameters. Можно использовать элемент NonUI
, если вы хотите выполнить коллбэк, который не сопоставлен с элементом пользовательского интерфейса, когда диалоговое окно открывается или закрывается. Смотрите следующий раздел, Системный Конечный файл В качестве примера С Индивидуально настраиваемым rtwoptions для примера.
Значение по умолчанию элемента типа, NonUI
или Edit
определяют множество значений, допускало тот элемент.
Если значением по умолчанию является '0'
или '1'
:
Для типа NonUI
элемент хранит булево значение.
Для типа Edit
элемент хранит значение типа int32
.
Если значение по умолчанию содержит целое число кроме '0'
или '1'
, элемент хранит значение типа int32
.
Если значение по умолчанию не содержит целое число, элемент оценен как вектор символов.
Рабочий системный конечный файл, с функциями обратного вызова файла MATLAB, был обеспечен как пример того, как использовать структуру rtwoptions
, чтобы отобразить и обработать пользовательские опции на панели Code Generation. Примеры совместимы с API коллбэка.
Конечные файлы в качестве примера находятся в (открытой) папке:
matlabroot/toolbox/rtw/rtwdemos/rtwoptions_demo
Конечные файлы в качестве примера включают:
usertarget.tlc
: системный конечный файл в качестве примера. Этот файл иллюстрирует, как задать пользовательские меню, флажки и поля редактирования. Файл также иллюстрирует использование коллбэков.
usertargetcallback.m
: коллбэк файла MATLAB вызывается меню.
Обратитесь к файлам в качестве примера при чтении этого раздела. Системный конечный файл в качестве примера, usertarget.tlc
: иллюстрирует использование rtwoptions
, чтобы отобразить следующие пользовательские целевые опции:
Меню Execution Mode.
Флажок Log Execution Time.
Меню Real-Time Interrupt Source. Меню выполняет коллбэк, заданный во внешнем файле, usertargetcallback.m
. Переменная TLC, сопоставленная с меню, передается в коллбэку, который отображает текущее значение меню.
Сигнал поля редактирования Журналирование Buffer Size в Удваивается.
Попытайтесь изучить пример кода при взаимодействии с целевыми опциями в качестве примера в диалоговом окне Configuration Parameters. Взаимодействовать с конечным файлом в качестве примера,
Сделайте
(открытым) ваша рабочая папка.matlabroot/toolbox/rtw/rtwdemos/rtwoptions_demo
Откройте модель по вашему выбору.
Откройте диалоговое окно Configuration Parameters и выберите панель Code Generation.
Нажмите Browse. Системный Браузер Конечного файла открывается. Выберите usertarget.tlc
. Затем нажмите ОК.
Заметьте, что панель Code Generation содержит пользовательскую подзакладку: userPreferred предназначаются для опций (I).
Когда вы взаимодействуете с опциями в этой категории и открываете и закрываете диалоговое окно Configuration Parameters, наблюдаете сообщения, отображенные в Окне Команды MATLAB. Эти сообщения распечатаны из кода в STF, или от коллбэков, вызванных от STF.
ert.tlc
обеспечивает основной набор опций генерации кода Embedded Coder®. Если ваша цель основана на ert.tlc
, ваш STF должен обычно наследовать опции, заданные в ERT.
Используйте поле rtwgensettings.DerivedFrom
в структуре rtwgensettings
, чтобы задать системный конечный файл, от которого должны быть наследованы опции. Необходимо преобразовать пользовательскую цель, чтобы использовать этот механизм можно следующим образом.
Установите значение поля rtwgensettings.DerivedFrom
как в следующем примере:
rtwgensettings.DerivedFrom = 'stf.tlc';
где stf
является именем системного конечного файла, от которого должны быть наследованы опции. Например:
rtwgensettings.DerivedFrom = 'ert.tlc';
Когда диалоговое окно Configuration Parameters выполняет эту строку кода, оно включает опции от stf.tlc
автоматически. Если stf.tlc
является MathWorks внутренний системный конечный файл, который был преобразован в новое размещение, диалоговое окно отображается наследованные опции с помощью нового размещения.
Обработка Неподдерживаемых Опций. Если ваша цель не поддерживает все опции, наследованные от ert.tlc
, необходимо обнаружить неподдерживаемые настройки опции и отобразить предупреждающее сообщение или сообщение об ошибке. В некоторых случаях, если пользователь выбрал опцию, ваша цель не поддерживает, вы, возможно, должны прервать процесс сборки. Например, если ваша цель не поддерживает Генерировать пример основная опция программы, процессу сборки нельзя позволить продолжить, если та опция выбрана.
Даже при том, что ваша цель не может поддержать, все наследовали опции ERT, требуется, что опции ERT сохраняются в панели Code Generation диалогового окна Configuration Parameters. Просто не удаляйте неподдерживаемые опции из структуры rtwoptions
в STF. Опции должны быть в диалоговом окне, которое будет отсканировано генератором кода, когда это выполняет оптимизацию.
Например, можно хотеть препятствовать тому, чтобы пользователи выключили опцию функции вывода/обновления Single. Может казаться разумным удалить эту опцию из диалогового окна и просто присвоить переменную TLC CombineOutputUpdateFcns
on
. Однако, если опция не включена в диалоговое окно, генератор кода принимает, что выводит и обновляют функции, не должны быть объединены. Менее эффективный код сгенерирован в результате.
Следующие разделы включают информацию о методах для настройки вашего STF, включая:
Как вызвать пользовательский код TLC от вашего STF
Подходы к поддержке нескольких сред разработки
Факторы для того, когда вы обновляете свой STF
Если необходимо реализовать целевые опции генерации кода, мы рекомендуем, чтобы STF включали файл TLC mytarget_genfiles.tlc
.
Если ваш STF настроил необходимую среду TLC, необходимо включать codegenentry.tlc
, чтобы запустить стандартный процесс генерации кода.
mytarget_genfiles.tlc
обеспечивает механизм для выполнения пользовательского кода TLC после основной точки входа генерации кода. Смотрите Используя mytarget_genfiles.tlc.
Используя mytarget_genfiles.tlc. (дополнительный) mytarget_genfiles.tlc
полезен как центральный файл, из которого можно вызвать целевые файлы TLC, которые генерируют дополнительные файлы как часть вашего целевого процесса сборки. Например, ваша цель может создать подmake-файлы или файлы проекта для среды разработки или командные сценарии для отладчика, чтобы сделать автоматические загрузки.
Процесс сборки может затем вызвать эти сгенерированные файлы или непосредственно от сделать процесса или после того, как исполняемый файл будет создан. Это сделано с механизмом
, как описано в Настраивают Процесс сборки с Файлом STF_make_rtw_hook (Simulink Coder).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
смотрите информацию о командной строке для поставщика Устройства параметров панели Hardware Implementation (Simulink) и Тип устройства (Simulink).
RTW.resolveHWDeviceType. Чтобы возвратить значение типа устройства для аппаратного устройства, учитывая значение, которое может быть псевдонимом или устаревшим значением, вызывают следующую функцию:
result = RTW.resolveHWDeviceType(type)
где
является вектором символов, содержащим значение типа целевого устройства или псевдоним.type
Функция RTW.resolveHWDeviceType
возвращает значение типа устройства устройства. Например, следующие вызовы оба возвращают 'Generic->Custom'
:
RTW.resolveHWDeviceType('Specified') RTW.resolveHWDeviceType('Generic->Custom')
Для описания опции типа целевого устройства ProdHWDeviceType
смотрите информацию о командной строке для поставщика Устройства параметров панели Hardware Implementation (Simulink) и Тип устройства (Simulink).
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
смотрите заменяющую библиотеку Кода (Simulink Coder).
RTW.resolveTflName. Чтобы возвратить значение CRL для заменяющей библиотеки кода, учитывая значение, которое может быть псевдонимом или устаревшим значением, вызывают следующую функцию:
result = RTW.resolveTflName(name)
где
является вектором символов, содержащим значение CRL или псевдоним.name
Функция RTW.resolveTflName
возвращает значение заменяющей библиотеки кода, на которую ссылаются. Например, следующие вызовы оба возвращают 'GNU C99 extensions'
:
RTW.resolveTflName('GNU') RTW.resolveTflName('GNU C99 extensions')
Для описания параметра CodeReplacementLibrary
смотрите заменяющую библиотеку Кода (Simulink Coder).
Ваша цель может потребовать поддержки нескольких сред разработки (например, двух или больше кросс-компиляторов) или нескольких режимов генерации кода (например, генерируя бинарный исполняемый файл по сравнению с генерацией файла проекта для вашего компилятора).
Один подход к этому требованию должен реализовать несколько STFs. Каждый STF вызывает make-файл шаблона для среды разработки. Это составляет обеспечение двух отдельных целей.
Обновление вашего пользовательского STF может повлиять на значения опции модели, которую вы загружаете, который использует обновленный STF. Если вы отключаете опцию, обновленный STF использует значение по умолчанию для той опции. Если модель имеет различное значение для той опции, когда вы загружаете модель с обновленным STF, значение из модели отбрасывается, и STF использует значение по умолчанию вместо этого.
Этот пример может добавить целевые руководства в качестве примера, описанные в Демонстрационных Пользовательских Целях. Для введения и файлов в качестве примера, попробуйте цели в качестве примера сначала.
Этот пример провел вас по процессу создания основанной на ERT цели, my_ert_target
. Это осуществление иллюстрирует несколько задач, которые типичны для создания пользовательской цели:
Подготовка целевых папок и изменение пути MATLAB.
Создание модификаций к стандартному STF и 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® убедитесь, что у вас есть установленный компилятор C. Если так, можно использовать синтаксис папки Linux, чтобы завершить это осуществление.
my_ert_target
может также поддержать шаблон основанные на make-файле сборки. Для получения дополнительной информации об использовании этой цели с подходом make-файла шаблона смотрите, Создают Основанный на ERT TMF.
Можно протестировать my_ert_target
с моделью, которая совместима с целью ERT (см., Конфигурируют Системный Конечный файл). Сгенерированные программы действуют тождественно к сгенерированным программам ERT.
Чтобы упростить тестирование вашей цели, теста с targetmodel
, очень простая модель фиксированного шага (см., Создает Тестовую модель и S-функцию). Блок s-function в targetmodel
использует исходный код от примера timestwo
и генерирует полностью встроенный код. Смотрите Примеры S-функции (Simulink) и Встройте S-функции с TLC (Simulink Coder) для дальнейшего обсуждения S-функции timestwo
в качестве примера.
Создайте папки, чтобы хранить конечные файлы и добавить их в путь 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
Создайте STF для своей цели путем копирования и изменения стандартного STF для цели ERT. Затем подтвердите STF путем просмотра новой цели в Системном Браузере Конечного файла и в диалоговом окне Configuration Parameters.
Редактирование STF. Чтобы отредактировать STF, используйте эти шаги:
Измените свою рабочую папку на папку, которую вы создали в Создании Целевых Папок.
cd c:/work/my_ert_target/my_ert_target
Поместите копию
в matlabroot/rtw/c/ert/ert.tlc
c:/work/my_ert_target/my_ert_target
и переименуйте его к my_ert_target.tlc
. Файл ert.tlc
является STF для цели ERT.
Откройте my_ert_target.tlc
в текстовом редакторе по вашему выбору.
Настройте STF, заменив строки с комментариями заголовка на директивы, которые делают ваше видимое STF в Системном Браузере Конечного файла и задают связанный TMF, команду make
и файл интерфейса режима external mode (если таковые имеются). Для получения дополнительной информации об этих директивах, см. Комментарии Заголовка.
Замените комментарии заголовка в 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.
Чтобы установить суффикс на вектор символов для _my_ert_target
пользовательская цель, измените строку
rtwgensettings.BuildDirSuffix = '_ert_rtw'
к
rtwgensettings.BuildDirSuffix = '_my_ert_target_rtw'
Измените структуру rtwgenSettings
, чтобы наследоваться, опции от ERT предназначаются и объявляют Релиз 14 или более позднюю совместимость, как описано в Структуре rtwgensettings. Добавьте следующий код в определение 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
и закройте файл.
Создайте Функцию ToolchainCompliant. Чтобы включить сборки с помощью подхода набора инструментальных средств, вы создаете функцию, которая соответствует SelectCallback
около конца пользовательского STF. Эта функция устанавливает свойства для соответствия набора инструментальных средств.
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); end
Если вы используете подход make-файла шаблона, не используете вызов соответствия набора инструментальных средств включения функции из вашего файла STF. Вместо этого используйте информацию в, Создают Основанный на ERT TMF.
Просмотр STF. На данном этапе можно проверить, что цель наследовала и отображает опции ERT можно следующим образом:
Создайте новую модель.
Откройте Model Explorer или диалоговое окно Configuration Parameters.
Выберите панель Code Generation.
Нажмите Browse, чтобы открыть Системный браузер Конечного файла.
В файловом браузере просмотрите список путем прокрутки целей, чтобы найти новую цель, my_ert_target.tlc
. (Этот шаг принимает, что ваш путь MATLAB содержит c:/work/my_ert_target/my_ert_target
, как ранее установлено в Создании Целевых Папок.)
Выберите My ERT-based Target
и нажмите ОК.
Панель Code Generation теперь показывает, что модель сконфигурирована для цели my_ert_target.tlc
. System target file, Язык, Набор инструментальных средств и поля Конфигурации сборки должны появиться:
Выберите панель My Target Options. Целевые компьютеры три опции флажка заданы в структуре rtwoptions
.
Выберите панель Code Generation и вновь откройте Системный Браузер Конечного файла.
Выберите цель Embedded Coder (ert.tlc
). Целевые компьютеры стандартные опции ERT.
Закройте модель. Вы не должны сохранять его.
STF для скелетной цели завершен. Если вы используете подход набора инструментальных средств, вы готовы вызвать процесс сборки для своей цели.
Если вы предпочитаете использовать подход make-файла шаблона, ссылку на TMF, my_ert_target_lcc.tmf
, в комментариях заголовка STF препятствует тому, чтобы вы вызвали процесс сборки для своей цели, пока файл TMF не существует. Во-первых, необходимо создать файл my_ert_target_lcc.tmf
.
Если вы используете подход make-файла набора инструментальных средств с набором инструментальных средств совместимая пользовательская цель, не используете шаги, которые применяются к подходу make-файла шаблона. (Пропустите этот раздел.)
Если вы используете шаблонный подход make-файла, выполняете шаги, применяющиеся к TMF, и не используете вызов соответствия набора инструментальных средств включения функции из вашего файла STF, который описан в, Создают Основанный на ERT, Набор инструментальных средств Совместимый STF.
Создайте TMF для своей цели путем копирования и изменения стандартного ERT TMF для компилятора LCC:
Убедитесь, что ваша рабочая папка все еще установлена в папку конечного файла, которую вы создали ранее в Создании Целевых Папок.
c:/work/my_ert_target/my_ert_target
Поместите копию
в matlabroot/rtw/c/ert/ert_lcc.tmf
c:/work/my_ert_target/my_ert_target
и переименуйте его my_ert_target_lcc.tmf
. Файл ert_lcc.tmf
является специфичным для компилятора make-файлом шаблона 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
принят, чтобы быть рабочей папкой. Ваша цель пишет выходные файлы процесса генерации кода в папку сборки в рабочей папке. Когда встроенный код сгенерирован для S-функции timestwo
, процесс сборки ищет реализацию TLC S-функции в рабочей папке.
Скопируйте следующий C и файлы TLC для S-функции timestwo
к вашей рабочей папке:
Создайте файл MEX timestwo
в c:/work/my_targetmodel
.
mex timestwo.c
Создайте следующую модель, с помощью Блока s-function от библиотеки Simulink® User-Defined Functions. Сохраните модель в своей рабочей папке как targetmodel
.
Дважды кликните Блок s-function, чтобы открыть диалоговое окно Block Parameters. Введите S-имя-функции timestwo
. Нажать ОК. Блок теперь связан с файлом MEX timestwo
.
Откройте Model Explorer или диалоговое окно Configuration Parameters и выберите панель Решателя.
Установите Тип решателя на fixed-step
и нажмите Apply.
Сохраните модель.
Откройте осциллограф и запустите симуляцию. Проверьте, что S-функция timestwo
умножает свой вход на 2,0.
Сохраните модель targetmodel
открытой для использования в следующем разделе, в котором вы генерируете код с помощью тестовой модели.
В этом разделе вы конфигурируете targetmodel
для my_ert_target
пользовательская цель и используете цель, чтобы сгенерировать код и создать исполняемый файл:
Откройте диалоговое окно Configuration Parameters и выберите панель Code Generation.
Нажмите Browse, чтобы открыть Системный Браузер Конечного файла.
В Браузере выберите My ERT-based Target
и нажмите ОК.
Диалоговое окно Configuration Parameters теперь отображается панель Code Generation для my_ert_target
.
Выберите Code Generation> панель Report и выберите опцию Create code generation report.
Нажмите 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
, используемую внутренне процессом сборки.
Генератор кода также создает и отображает отчет генерации кода.
Чтобы просмотреть сгенерированный типовой кодекс, перейдите к окну отчета генерации кода. В панели Содержимого щелкните по ссылке 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 в модели.