Эти рекомендации помогут последовательно применять стиль программирования в каждом целевом файле.
Идентификаторы в файле начинаются с прописной буквы. Например,
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.
Это соглашение создает согласованные переменные во всех целевых файлах. Например, блок усиления содержит следующее: Outputs функция.

| a. | Раздел кода для каждого блока начинается с комментария, определяющего тип и имя блока. |
| b. | Включите пустую строку сразу после окончания функции для создания согласованного интервала между блоками в выходном коде. |
| c. | Старайтесь оставаться в пределах 80 столбцов на строку для баннера функции. В верхней части каждой функции можно настроить 80 строк комментария к столбцу. В качестве примера см. |
| d. | Для обеспечения непротиворечивости используйте переменные |
| э. | Использовать переменную |
| 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)>;