Эти инструкции могут помочь вам применять стиль программирования в каждом конечном файле последовательно.
Идентификаторы в файле начинаются с прописной буквы. Например,
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 в Компиляторе Выходного языка.
Глобальные переменные Simulink® Coder™ запускаются с rt и глобальные функции Simulink Coder запускаются с
rt_.
Постарайтесь не называть глобальные переменные в модулях, которые запускаются с rt или rt_ потому что они могут конфликтовать с глобальными переменными Simulink Coder и функциями. Эти переменные TLC объявляются в commonsetup.tlc.
Это соглашение создает сопоставимые переменные в конечных файлах. Например, блок Gain содержит следующий Outputs функция.

| a. | Секция кода для каждого блока начинается с комментария, задающего тип блока и имя. |
| b. | Включайте пустую строку сразу после конца функции, чтобы создать сопоставимый интервал между блоками в выходном коде. |
| c. | Попытайтесь остаться в рамках 80 столбцов на строку для функционального баннера. Вы можете настроить 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Файлы библиотеки функции Компилятора Выходного языка условно включены с защитным кодом, таким образом, можно сослаться на них многократно использование %include не вызывая беспокойство, были ли они ранее включены. Примените эту практику для файлов библиотеки TLC, которые вы создаете.
Соглашение состоит в том, чтобы использовать переменную с тем же именем как основное имя файла, верхний регистр и с символами нижнего подчеркивания, присоединенными в обоих концах. Так, файл с именем customlib.tlc должен иметь переменную _CUSTOMLIB_ защита его.
Как пример, основная библиотека функции Компилятора Выходного языка, 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)>;