TLC编码惯例
这些指南可以帮助你在每个目标文件应用编程风格一致。
标识符以大写字母开始
标识符的文件从一个大写字母开始。例如,
NumModelInputs 1 NumModelOutputs 2 NumNonVirtBlocksInModel 42 DirectFeedthrough是的NumContStates 10
因为一个的名字
标识符可以提升为父范围,包含一块记录的名字
标识符应该开始以一个大写字母的名称。例如,一个块可能包含
块{::RWork [4,0]: NumRWorkDefines 4 RWorkDefine{名称“TimeStampA”宽度1 StartIndex 0}}
因为的名字
标识符在RWorkDefine
记录被提升为PrevT
在其母范围,它必须以一个大写字母开始。的推广的名字
标识符到父块范围目前正在做的参数
,RWorkDefine
,IWorkDefine
,PWorkDefine
块记录。
目标语言编译器分配指令(%分配
)生成一个警告如果你赋值为“不合格”标识符代码生成器。例如,
%分配TID = 1
产生一个错误,因为TID
不合格的标识符块
。然而,一个“合格”的任务并不生成一个警告。例如,
%分配块。TID = 1
不会产生一个警告,因为作业包含一个限定符。因此目标语言编译器假定程序员有意修改一个标识符。
全局变量作业以大写字母开始
全球薄层色谱变量赋值应以大写字母开始。一个全局变量是一个系统目标文件中声明的变量(grt.tlc
,mdlwide.tlc
,mdlhdr.tlc
,mdlbody.tlc
,mdlreg.tlc
,或mdlparam.tlc
),或者在一个函数使用操作符。全球作业代码生成器变量具有相同的范围。全球TLC变量中定义的一个例子
mdlwide.tlc
是
%分配InlineParameters = 1
全球参考函数的一个例子
% foo()函数void %分配:GlobalIdx =:: endfunction GlobalIdx + 1%
局部变量分配以小写字母开始
当地的薄层色谱变量赋值应该以小写字母开始。当地TLC变量是一个内部变量分配一个函数。例如,
%分配numBlockStates = ContStates [0]
功能块中声明的开始。薄层色谱文件Fcn
当你声明一个函数在一个block.tlc
文件,它应该开始Fcn
。例如,
%函数FcnMyBlockFunc (…)
不要硬编码变量定义在commonsetup.tlc吗
因为代码生成器使用的变量和基于使用生成的代码,您应该使用直接访问例程,而不是使用一个变量。例如,您不应该在薄层色谱中使用以下文件:
x = % < tInf >;
你应该使用
x = % < LibRealNonFinite(正)>;
类似地,而不是使用% < tTID >
,使用% < LibTID () >
。函数的完整列表,请参阅TLC函数库参考目标语言编译器。
金宝app®编码器™全局变量入手rt
和金宝app仿真软件编码器全局函数入手rt_
。
避免全局变量命名模块开始rt
或rt_
因为他们可能冲突金宝app仿真软件编码器全局变量和函数。这些薄层色谱中声明的变量commonsetup.tlc
。
本公约在目标文件创建一致的变量。例如,获得块包含以下输出
函数。
指出关于这个TLC代码
一个。 | 每个块的代码部分始于一个注释指定块类型和名称。 |
b。 | 包括一个空行后立即结束的函数来创建一致的间距在输出代码块。 |
c。 | 尽量保持在80列每行函数的横幅。你可能会建立一个80列顶部的注释行每个函数。作为一个例子,看看 |
d。 | 为了一致性,使用变量 |
e。 | 使用变量 |
f。 | 循环控制变量,命名时使用 |
例子:输出
函数gain.tlc
%辊sigIdx = RollRegions lcv = RollThreshold,…,“滚”,rollVars
例子:InitializeConditions
函数linblock.tlc
%辊xidx = [0: nStates-1], xlcv = RollThreshold,…,“滚”,rollVars
条件包含库文件
目标语言编译器函数库文件是有条件地包含在保护代码,这样你就可以多次使用引用它们%包括
不担心,如果他们之前已经被包括在内。遵循这种做法TLC创建的库文件。
公约是使用一个变量名称相同的文件名,大写字母和下划线连接两端。所以,一个文件命名customlib.tlc
应变量_CUSTOMLIB_
保护它。
作为一个例子,主要目标语言编译器函数库,funclib.tlc
,包含这个TLC代码来防止多个包含:
%如果存在(“_FUNCLIB_”) = = 0%分配_FUNCLIB_ = 1。% endif % % _FUNCLIB_
代码的防守
作为薄层色谱的代码生成可用于引用模型在不可预知的情况下,不承担太多的关于名称空间。例如,当编写TLC代码块和添加类型定义
,保护如果/ def
,就像下面的例子说明了:
% openfile tmpBuff ifndef RESOLUTION_TYPEDEF typedef enum {LO_RES, HI_RES}决议;typedef struct {res的决议;int8_T价值;}数据;#定义RESOLUTION_TYPEDEF # endif / * RESOLUTION_TYPEDEF * / % closefile tmpBuff % < LibCacheTypedefs (tmpBuff) >;