TLC интерпретирует выходной язык, который является общим языком программирования, и можно использовать его как таковой. Важно, однако, помнить, что TLC был разработан для одной цели: преобразовывать файл
в сгенерированный код. Таким образом выходной язык обеспечивает много функций, которые полезны для этой задачи, но не обеспечивает некоторые функции, которые обеспечивают другие языки как C и C++.model.rtw
Вы можете найти некоторые следующие общие примеры программирования полезными, чтобы ознакомить себя с основными построениями, используемыми в TLC.
Типичный пример “Hello World” довольно прост на выходном языке. Введите следующее в файле с именем hello.tlc
:
%selectfile STDOUT Hello, World
Чтобы запустить эту программу TLC, ввести
tlc hello.tlc
в подсказке MATLAB®.
Этот простой скрипт иллюстрирует некоторые важные концепции, лежащие в основе цели (и следовательно проект) TLC. Поскольку основная цель TLC должна сгенерировать код, это выводится (или поток) ориентированный. Это дает возможность обрабатывать буферы текста и выводить их легко. В вышеупомянутом скрипте директива %selectfile
говорит TLC отправлять любой после текста, который это генерирует или не распознает устройству стандартного вывода. Синтаксис, который распознает TLC, начинается с символа %
. Поскольку Hello, World
не распознан, он отправляется непосредственно в вывод. Вы могли легко изменить выходное место назначения, чтобы быть файлом. Не открывайте поток STDOUT
, но выбирайте, чтобы записать в Командное окно.
%openfile foo = "foo.txt" %openfile bar = "bar.txt" %selectfile foo This line is in foo. %selectfile STDOUT Line has been output to foo. %selectfile bar This line is in bar. %selectfile NULL_FILE This line will not show up anywhere. %selectfile STDOUT About to close bar. %closefile bar %closefile foo
Можно переключиться между буферами на сообщения состояния дисплея. Семантика этих трех директив %openfile
, %selectfile
и %closefile
дана в Директивах компилятора Выходного языка.
Отсутствие явных описаний типа для переменных является другой функцией TLC. См. Компилятор Выходного языка (Simulink Coder) для получения дополнительной информации о неявных типах данных переменных.
Одно из построений, наиболее относящихся к генерации кода из файла
, является записью. record подобен структуре в C или записи в Паскале. Синтаксис объявления записиmodel.rtw
%createrecord recVar { ... field1 value1 ... field2 value2 ... ... fieldN valueN ... }
где recVar
является именем объявляемой записи, fieldi
является строкой, и valuei
является соответствующим значением TLC.
Записи могли вложить записи или подзаписи, в них. Файлом
является по существу один большой именованный model.rtw
CompiledModel
записи, содержа уровни подзаписей.
В отличие от MATLAB, TLC требует что вы явным образом определения функции load, не расположенные в том же конечном файле. В MATLAB строка A = myfunc(B)
заставляет MATLAB автоматически искать и загружать файл MATLAB или файл MEX под названием myfunc
. TLC требует, чтобы вы в частности включали файл, который задает функцию с помощью директивы %addincludepath
.
TLC предоставляет директиву %with
, которая упрощает записи использования. См. Директивы компилятора Выходного языка.
Формат и структура файла
подвержены изменениям от одного релиза генератора кода другому.model.rtw
Чтение записи в из файла изменяемо, как другие записи, которые вы объявляете в программе. CompiledModel
записи изменяется много раз во время генерации кода. CompiledModel
является глобальной записью в файле
. Это содержит переменные, используемые для генерации кода, такие как model.rtw
NumNonvirtSubsystems
, NumBlocks
. Это также добавлено во время генерации кода со многими новыми переменными, опциями и подзаписями.
Функции, такие как LibGetFormattedBlockPath
, обеспечиваются в библиотеках TLC, расположенных в (открытом)
. Для полного списка доступных функций обратитесь к Справочному руководству по библиотеке Функции TLC на Компиляторе Выходного языка (Simulink Coder).matlabroot/rtw/c/tlc/lib/*.tlc
Чтобы присвоить значение полю записи, необходимо использовать qualified variable expression. Квалифицированное переменное выражение ссылается на переменную в одной из следующих форм:
Идентификатор
Квалифицированная переменная, сопровождаемая “.
”, сопровождаемым идентификатором, такой как
var[2].b
Квалифицированная переменная, сопровождаемая выражением в скобках такой как
var[expr]
В TLC возможно создать то, что называется alias к записи. Псевдонимы подобны указателям на структуры в C. Можно создать несколько псевдонимов к одной записи. Модификации к искаженной записи видимы к каждому месту, которое содержит псевдоним.
Следующий фрагмент кода иллюстрирует использование псевдонимов:
%createrecord foo { field 1 } %createrecord a { } %createrecord b { } %createrecord c { } %addtorecord a foo foo %addtorecord b foo foo %addtorecord c foo { field 1 } %% notice we are not changing field through a or b. %assign foo.field = 2 ISALIAS(a.foo) = %<ISALIAS(a.foo)> ISALIAS(b.foo) = %<ISALIAS(b.foo)> ISALIAS(c.foo) = %<ISALIAS(c.foo)> a.foo.field = %<a.foo.field> b.foo.field = %<b.foo.field> c.foo.field = %<c.foo.field> %% note that c.foo.field is unchanged
Сохранение этого скрипта как record_alias.tlc
и вызов его с
tlc -v record_alias.tlc
производит вывод
ISALIAS(a.foo) = 1 ISALIAS(b.foo) = 1 ISALIAS(c.foo) = 0 a.foo.field = 2 b.foo.field = 2 c.foo.field = 1
Когда в функции, возможно создать псевдоним к локально созданной записи, которая является в функции. Если псевдоним возвращен в функцию, это остается допустимым даже после выхода из функции, как в следующем примере:
%function func(value) Output %createrecord foo { field value } %createrecord a { foo foo } ISALIAS(a.foo) = %<ISALIAS(a.foo)> %return a.foo %endfunction %assign x = func(2) ISALIAS(x) = %<ISALIAS(x)> x = %<x> x.field = %<x.field>
Сохранение этого скрипта как alias_func.tlc
и вызов его с
tlc -v alias_func.tlc
производит вывод
ISALIAS(a.foo) = 1 ISALIAS(x) = 1 x = { field 2 } x.field = 2
Пока существует некоторая ссылка на запись через псевдоним, та запись не удалена. Это позволяет записям использоваться в качестве возвращаемых значений от функций.