主要内容

代码生成概念

TLC解释目标语言,这是一般的编程语言,您可以使用它。但是,要记住TLC是一个目的设计的:转换A模型.rtw文件到生成的代码。因此,目标语言提供了许多对此任务有用的功能,但不提供其他语言如C和C ++提供的一些功能。

您可能会发现以下一些有用的常规编程示例可让您熟悉TLC中使用的基本构造。

输出流

典型的“Hello World”的例子是在目标语言相当简单。在一档名为键入以下hello.tlc.

%选择文件STDOUT你好,世界

运行此TLC程序,键入

TLC hello.tlc

在MATLAB®迅速的。

这个简单的脚本说明了TLC的目的(并因此设计)的一些重要概念。由于TLC的主要目的是生成代码,因此输出(或流)取向。它可以轻松处理文本缓冲区并轻松输出。在上面的剧本中,%选择文件指令告诉TLC发送它生成的任何以下文本或无法识别到标准输出设备。TLC识别的语法识别开始于特点。因为你好世界无法识别,它是直接发送到输出。你可以很容易地改变输出目的地是一个文件。不要打开stdout.流,而是选择写命令窗口。

%OPENFILE富= “foo.txt的” %OPENFILE栏= “跳回到bar.txt” %选择文件FOO这条线是在FOO。%选择文件STDOUT线已输出到foo中。%选择文件酒吧这条线是在巴。%选择文件NULL_FILE这条线将不会出现在任何地方。%选择文件STDOUT即将关闭酒吧。%closefile酒吧%closefile FOO

您可以缓冲区之间切换显示状态信息。这三个指令的语义%打开文件%选择文件, 和%closefile.给出了目标语言编译器指令

变量类型

缺少变量的显式类型声明是TLC的另一个功能。看目标语言编译器有关可变的内隐数据类型的更多信息。

记录

与生成代码最相关的构建体之一模型.rtw文件是一个记录。一种记录是类似于C的结构或​​在帕斯卡的记录。记录声明的语法

%createrecord recvar {... field1 value1 ... field2 valuge2 ... ... ... fieldn valuen ...}

在哪里recvar.被记录的名字被宣布,田野是一个字符串,和valuei是相应的TLC值。

记录可以在其中包含嵌套记录或子字母。这模型.rtw文件本质上是一个大的记录,命名compledmodel.,含有级别的次规集。

与MATLAB不同,TLC要求您显式加载不在同一目标文件中的函数定义。在matlab,这条线a = myfunc(b)导致MATLAB自动搜索并加载名为MATLAB文件或MEX文件myfunc.。TLC要求您专门包含使用该文件的文件使用%AddincludePath.指示。

TLC提供%和使用记录有助于的指令。看目标语言编译器指令

笔记

格式和结构的模型.rtw文件可能会从代码生成器的一个版本到另一个版本的更改。

从文件中读取的记录是可变的,如在程序中声明的其他记录。记录compledmodel.代码生成过程中被修改许多次。compledmodel.是全球记录模型.rtw文件。它包含用于代码生成的变量,如numnonvirtsubsystems.NumBlocks。它也在代码生成中附加,其中包含许多新的变量,选项和子字母。

如功能LibGetFormattedBlockPath在TLC库中提供matlabroot./rtw/c/tlc/lib/*.tlc.打开)。有关可用功能的完整列表,请参阅TLC函数库参考上目标语言编译器

将值分配给记录字段

要为记录字段分配值,必须使用a合格的可变表达式。一个合格的可变表达的引用是以下列形式之一的变量:

  • 标识符

  • 一个合格的变量,然后是“”后面的标识符,如

    变种[2] .B
  • 一个合格的变量,后面是一个括号的表达式,如

    var [expr]

记录别名

在TLC中,可以创建所谓的别名至创纪录的。别名类似于指针到C.您可以创建多个别名到一个记录结构。修改的别名记录,是每个拥有一个别名地方可见。

下面的代码段示出了使用别名:

%createrecord FOO {字段1}%createrecord一个{}%createrecord B {}%createrecord 13 C {}%addtorecord一个Foo FOO%addtorecord b FOO FOO%addtorecordÇFOO {字段1} %%通知我们不通过改变场或b。%分配foo.field = 2 ISALIAS(a.foo)=% ISALIAS(b.foo)=% ISALIAS(c.foo)=% a.foo.field =% b.foo.field =% c.foo.field =% %%音符这c.foo.field不变

将此脚本保存为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

在函数内时,可以创建一个别名到函数内的本地创建的记录。如果别名从函数返回,即使在退出函数后,它仍然有效,如下例所示:

%函数func(value)输出%createrecord foo {field值}%createrecord a {foo foo} isalias(a.foo)=%%return a.foo%端函数%aquary x = func(2)Isalias(x)=% x =% x.field =%

将此脚本保存为alias_func.tlc.与调用它

tlc -v alias_func.tlc.

产生输出

Isalias(a.foo)= 1个Isalias(x)= 1 x = {字段2} x.field = 2

只要有过一个别名一些参考的记录,该记录不会被删除。这样的记录将被用作从函数的返回值。

相关话题