Эти инструкции могут помочь вам последовательно применять стиль программирования в каждом целевом файле.
Идентификаторы в файле начинаются с заглавной буквы. Для примера,
NumModelInputs 1 NumModelOutputs 2 NumNonVirtBlocksInModel 42 DirectFeedthrough yes NumContStates 10
Потому что Name идентификатор может быть повышен в родительские возможности, блокировать записи, которые содержат Name идентификатор должен начинать имя с заглавной буквы. Для примера блок может содержать
Block {
:
:
RWork [4, 0]
:
NumRWorkDefines 4
RWorkDefine {
Name "TimeStampA"
Width 1
StartIndex 0
}
}Потому что Name идентификатор в RWorkDefine запись повышается до PrevT в родительских возможностях, она должна начинаться с заглавной буквы. Продвижение Name идентификатор в родительские возможности в настоящее время сделан для Parameter, RWorkDefine, IWorkDefine, и PWorkDefine блокировать записи.
Директива назначения компилятора целевого языка (%assign) генерирует предупреждение, если вы присвоите значение «неквалифицированному» идентификатору генератора кода. Для примера,
%assign TID = 1
приводит к ошибке, поскольку TID идентификатор не квалифицирован по Block. Однако «квалифицированное» назначение не генерирует предупреждение. Для примера,
%assign Block.TID = 1
не генерирует предупреждение, поскольку назначение содержит квалификатор. Поэтому компилятор целевого языка принимает, что программист намеренно изменяет идентификатор.
Назначения глобальных переменных TLC должны начинаться с заглавных букв. Глобальная переменная является переменной, объявленной в системном целевом файле (grt.tlc, mdlwide.tlc, mdlhdr.tlc, mdlbody.tlc, mdlreg.tlc, или mdlparam.tlc), или в рамках функции, которая использует
оператор. Глобальные назначения имеют те же возможности, что и переменные генератора кода. Пример глобальной переменной TLC, заданный в mdlwide.tlc является
%assign InlineParameters = 1
Примером глобальной ссылки в функции является
%function foo() void %assign ::GlobalIdx = ::GlobalIdx + 1 %endfunction
Назначения локальных переменных TLC должны начинаться с строчных букв. Локальная переменная TLC является переменной, назначенной внутри функции. Для примера,
%assign numBlockStates = ContStates[0]
Когда вы объявляете функцию внутри block.tlc файл, он должен начинаться с Fcn. Для примера,
%function FcnMyBlockFunc(...)
Поскольку генератор кода отслеживает использование переменных и генерирует код на основе использования, вы должны использовать стандартные программы доступа вместо того, чтобы непосредственно использовать переменную. Для примера не следует использовать следующее в файле TLC:
x = %<tInf>;
Вы должны использовать
x = %<LibRealNonFinite(inf)>;
Точно так же вместо использования %<tTID>, использовать %<LibTID()>. Полный список функций см. в разделе Ссылки библиотеки функций TLC в Компилятор Target Language.
Simulink® Coder™ глобальные переменные начинаются с rt и глобальные функции Simulink Coder начинаются с
rt_.
Избегайте имен глобальных переменных в модулях, которые начинаются с rt или rt_ поскольку они могут конфликтовать с глобальными переменными и функциями Simulink Coder. Эти переменные TLC объявлены в commonsetup.tlc.
Это соглашение создает согласованные переменные во всех целевых файлах. Например, блок Gain содержит следующее Outputs функция.

| a. | Секция кода для каждого блока начинается с комментария, задающего тип и имя блока. |
| б. | Включите пустую линию сразу после окончания функции, чтобы создать последовательный интервал между блоками в коде выхода. |
| c. | Попытайтесь оставаться в пределах 80 столбцов на линию для баннера функции. Можно настроить строку с комментариями столбца в верхней части каждой функции. В качестве примера см. |
| d. | Для непротиворечивости используйте переменные |
| e. | Используйте переменную |
| f. | При наименовании переменных управления циклом используйте |
Output функция в gain.tlc%roll sigIdx = RollRegions, lcv = RollThreshold, ...
block, "Roller", rollVarsInitializeConditions функция в linblock.tlc%roll xidx = [0:nStates-1], xlcv = RollThreshold,...
block, "Roller", rollVarsФайлы библиотеки функций Target Language Compiler по условию включены в защитный код, поэтому вы можете ссылаться на них несколько раз, используя %include не беспокоясь, были ли они ранее включены. Следуйте этой практике для файлов библиотеки TLC, которые вы создаете.
Условие состоит в том, чтобы использовать переменную с таким же именем, как и базовое имя файла, верхний регистр и с подчеркиванием, присоединенным на обоих концах. Итак, файл с именем customlib.tlc должна иметь переменную _CUSTOMLIB_ охранять его.
В качестве примера - основная библиотека функций Target Language Compiler, funclib.tlc, содержит этот код TLC для предотвращения многократного включения:
%if EXISTS("_FUNCLIB_") == 0
%assign _FUNCLIB_ = 1
.
.
.
%endif %% _FUNCLIB_Поскольку код, который генерирует TLC, может использоваться в ссылочных моделях в непредсказуемых контекстах, не берите слишком много о пространствах имен. Для примера при записи кода TLC для блока и добавлении typedef, охраняйте его с if/def, как проиллюстрирован следующий пример:
%openfile tmpBuff
#ifndef RESOLUTION_TYPEDEF
typedef enum { LO_RES, HI_RES } Resolution;
typedef struct { Resolution res; int8_T value; } Data;
#define RESOLUTION_TYPEDEF
#endif /* RESOLUTION_TYPEDEF */
%closefile tmpBuff
%<LibCacheTypedefs(tmpBuff)>;