Этот раздел предоставляет информацию о структуре системного конечного файла, инструкций для настройки системного конечного файла и основного примера, который помогает вам создать скелетный конечный файл системы.
Системный конечный файл управляет этапом генерации кода процесса сборки. Системный конечный файл также позволяет вам управлять представлением своей цели конечному пользователю. Системный конечный файл обеспечивает
Определения переменных, которые являются основным принципом процесса сборки, такого как значение для CodeFormat
Переменная TLC
Основная точка входа к программе TLC верхнего уровня, которая генерирует код
Целевая информация для отображения в Системном Браузере Конечного файла
Механизм для определения целевых опций генерации кода (и другие параметры, связанные с процессом сборки) и для отображения их в диалоговом окне Configuration Parameters
Механизм для наследования опций от другой цели (таких как цель Встроенного в реальном времени (ERT))
Обратите внимание на то, что, несмотря на то, что системный конечный файл является файлом Компилятора выходного языка (TLC), он содержит, встроил код MATLAB®. Прежде, чем создать или изменить системный конечный файл, необходимо получить практическое знание TLC и языка MATLAB. Компилятор Выходного языка и Скрипты по сравнению с Функциями (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), чтобы использовать во время процесса сборки. Когда цель выбрана, это имя файла отображено в поле make-файла Шаблона панели Code Generation диалогового окна Configuration Parameters.
СДЕЛАЙТЕ: 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
) файл. Фигура ниже показов, как эти настройки появляются в Системном Браузере Конечного файла.
Смотрите Создают Пользовательскую Целевую Настройку для примера индивидуально настраиваемых комментариев заголовка.
Этот раздел системного конечного файла присваивает глобальные переменные 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
. Системный конечный файл invokes 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
функция инициирована когда вы:
Загрузите модель.
Обновите любые параметры конфигурации в диалоговом окне 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, описывает дополнительные переменные генерации кода TLC. Конечные пользователи цели могут присвоить эти переменные путем ввода команды MATLAB формы
set_param(modelName,'TLCOptions','-aVariable=val');
(Для получения дополнительной информации смотрите, Задают TLC для Генерации кода.)
Однако предпочтительный подход должен присвоить эти переменные в системных операторах использования конечного файла формы:
%assign Variable = val
Для удобочитаемости мы рекомендуем, чтобы вы добавили такие присвоения в разделе системного конечного файла после комментария Configure RTW code generation settings.
Смотрите, что Модель поддержки Ссылается для важной информации о системном конечном файле и других модификациях, которые вы, возможно, должны сделать, чтобы поддерживать модель генератора кода ссылка на функции.
Используя 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.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 перечисляют поля 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. Эти сообщения распечатаны из кода в системном конечном файле, или от коллбэков, вызванных от системного конечного файла.
ert.tlc
обеспечивает основной набор опций генерации кода Embedded Coder®. Если ваша цель основана на ert.tlc
, ваш системный конечный файл должен обычно наследовать опции, заданные в 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
структура в системном конечном файле. Опции должны быть в диалоговом окне, которое будет отсканировано генератором кода, когда это выполняет оптимизацию.
Например, можно хотеть препятствовать тому, чтобы пользователи выключили опцию функции выхода/обновления Single. Может казаться разумным удалить эту опцию из диалогового окна и просто присвоить переменную 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, которые генерируют дополнительные файлы как часть вашего целевого процесса сборки. Например, ваша цель может создать подmake-файлы или файлы проекта для среды разработки или командные сценарии для отладчика, чтобы сделать автоматические загрузки.
Процесс сборки может затем вызвать эти сгенерированные файлы или непосредственно от сделать процесса или после того, как исполняемый файл будет создан. Это сделано с
механизм, как описано в Настраивают Процесс сборки с Файлом 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
, смотрите информацию о командной строке для поставщика Устройства параметров панели 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
параметр, смотрите заменяющую библиотеку Кода.
RTW.resolveTflName. Чтобы возвратить значение CRL для заменяющей библиотеки кода, учитывая значение, которое может быть псевдонимом или устаревшим значением, вызывают следующую функцию:
result = RTW.resolveTflName(name)
где
вектор символов, содержащий значение CRL или псевдоним.name
RTW.resolveTflName
функция возвращает значение заменяющей библиотеки кода, на которую ссылаются. Например, следующие вызовы оба возвращают 'GNU C99 extensions'
:
RTW.resolveTflName('GNU') RTW.resolveTflName('GNU C99 extensions')
Для описания CodeReplacementLibrary
параметр, смотрите заменяющую библиотеку Кода.
Ваша цель может потребовать поддержки нескольких сред разработки (например, двух или больше кросс-компиляторов) или нескольких режимов генерации кода (например, генерируя бинарный исполняемый файл по сравнению с генерацией файла проекта для вашего компилятора).
Один подход к этому требованию должен реализовать несколько системных конечных файлов. Каждый системный конечный файл вызывает make-файл шаблона для среды разработки. Это составляет обеспечение двух отдельных целей.
Обновление вашего пользовательского системного конечного файла может повлиять на значения опции модели, которую вы загружаете, который использует обновленный системный конечный файл. Если вы отключаете опцию, обновленный системный конечный файл использует значение по умолчанию в той опции. Если модель имеет различное значение для той опции, когда вы загружаете модель с обновленным системным конечным файлом, значение из модели отбрасывается, и системный конечный файл использует значение по умолчанию вместо этого.
Этот пример может добавить целевые руководства в качестве примера, описанные в Демонстрационных Пользовательских Целях. Для введения и файлов в качестве примера, попробуйте цели в качестве примера сначала.
Этот пример провел вас по процессу создания основанной на 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® убедитесь, что у вас есть установленный компилятор C. Если так, можно использовать синтаксис папки Linux, чтобы завершить это осуществление.
my_ert_target
может также поддержать шаблон основанные на make-файле сборки. Для получения дополнительной информации об использовании этой цели с подходом make-файла шаблона смотрите, Создают Основанный на ERT TMF.
Можно протестировать my_ert_target
с моделью, которая совместима с целью ERT (см., Конфигурируют Системный Конечный файл (Embedded Coder)). Сгенерированные программы действуют тождественно к сгенерированным программам ERT.
Чтобы упростить тестирование вашей цели, протестируйте с targetmodel
, очень простая модель фиксированного шага (см., Создает Тестовую модель и S-функцию). Блок s-function в targetmodel
использует исходный код от timestwo
пример, и генерирует полностью встроенный код. Смотрите Примеры S-функции (Simulink) и Встройте S-функции с 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. Затем подтвердите системный конечный файл путем просмотра новой цели в Системном Браузере Конечного файла и в диалоговом окне Configuration Parameters.
Редактирование Системного Конечного файла. Чтобы отредактировать системный конечный файл, используйте эти шаги:
Измените свою рабочую папку в папку, которую вы создали в Создании Целевых Папок.
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
команда и режим 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
около конца пользовательского системного конечного файла. Эта функция устанавливает свойства для податливости набора инструментальных средств.
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-файла шаблона, не используете вызов податливости набора инструментальных средств включения функции от вашего системного конечного файла. Вместо этого используйте информацию в, Создают Основанный на ERT TMF.
Просмотр Системного Конечного файла. На данном этапе можно проверить, что цель наследовала и отображает опции 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.
Закройте модель. Вы не должны сохранять его.
Системный конечный файл для скелетной цели завершен. Если вы используете подход набора инструментальных средств, вы готовы вызвать процесс сборки для своей цели.
Если вы предпочитаете использовать подход make-файла шаблона, ссылку на TMF, my_ert_target_lcc.tmf
, в системе комментарии заголовка конечного файла препятствуют тому, чтобы вы вызвали процесс сборки для своей цели, пока файл TMF не существует. Во-первых, необходимо создать my_ert_target_lcc.tmf
файл.
Если вы используете подход make-файла набора инструментальных средств с набором инструментальных средств совместимая пользовательская цель, не используете шаги, которые применяются к подходу make-файла шаблона. (Пропустите этот раздел.)
Если вы используете шаблонный подход make-файла, выполняете шаги, применяющиеся к TMF, и не используете вызов податливости набора инструментальных средств включения функции из вашего системного файла конечного файла, который описан в, Создают Основанный на ERT, Набор инструментальных средств Совместимый Системный Конечный файл.
Создайте TMF для своей цели путем копирования и изменения стандартного ERT TMF для компилятора LCC:
Убедитесь, что ваша рабочая папка все еще установлена в папку конечного файла, которую вы создали ранее в Создании Целевых Папок.
c:/work/my_ert_target/my_ert_target
Поместите копию
в matlabroot
/rtw/c/ert/ert_lcc.tmfc:/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
принят, чтобы быть рабочей папкой. Ваша цель пишет выходные файлы процесса генерации кода в папку сборки в рабочей папке. Когда встроенный код сгенерирован для timestwo
S-функция, процесс сборки ищет реализацию TLC S-функции в рабочей папке.
Скопируйте следующий C и файлы TLC для timestwo
S-функция к вашей рабочей папке:
Создайте timestwo
Файл MEX в c:/work/my_targetmodel
.
mex timestwo.c
Создайте следующую модель, с помощью Блока s-function от библиотеки Simulink® User-Defined Functions. Сохраните модель в своей рабочей папке как targetmodel
.
Дважды кликните Блок s-function, чтобы открыть диалоговое окно Block Parameters. Введите S-имя-функции timestwo
. Нажать ОК. Блок теперь связан с timestwo
Файл MEX.
Откройте Model Explorer или диалоговое окно Configuration Parameters и выберите панель Решателя.
Установите Тип решателя на fixed-step
и нажмите Apply.
Сохраните модель.
Откройте осциллограф и запустите симуляцию. Проверьте что timestwo
S-функция умножает свой вход на 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
папка, используемая внутренне процессом сборки.
Генератор кода также создает отчет генерации кода.
Чтобы просмотреть сгенерированный код, на вкладке 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 в модели.