admin管理员组

文章数量:1534201

2024年6月14日发(作者:)

Tera Term 宏语言介绍

终端模拟器提供了一种通过本地主机的键盘和显示器来控制远程主机的手段。在嵌入式开发中,终端模拟器(Terminal

Emulator)是经常用到的一种必不可少的工具。例如支持串口的Hyber Terminal 和Minicom, 支持网络连接的PUTTY

等。

而Tera Term (也称为TT), 无疑是其中的佼佼者。作为一款Window上的虚拟终端工具,它同时支持串口连接和网络

连接,而对于网络连接它支持Telnet和SSH协议。

最关键的是Tera Term支持自己的脚本语言,即TTL(Tera Term Language)。该语言语法丰富而且简单易学,同时Tera

Term 支持命令行操作,两者结合起来可以满足各种自动化方面的需求。

软件准备

(1)从/forum/下载最新的tera term 软件。

(2)在Windows PC 上安装tera term。注意tera term 只有Windows版本。

(3) 安装完毕,在安装目录中会产生几个重要的应用程序:

◊ ttermpro,这是tera term 的主应用程序, 该程序包含一个主窗口及菜单。主窗口显示输入命令和输出结果,通过

菜单可以设置连接属性、字体颜色等。

◊ TTLEdit, TTL脚本的编辑和调试工具。

◊ ttpmacro, TTL脚本的解析器。

硬件连接

通过串口或网线将本地主机和远程主机相连。在ttermpro中设置端口属性,使其建立连通。例如对于串口连接,

打开Setup->Serial Port, 设置端口、波特率等, 如下图:

设置成功后,重新启动远程主机,应该可以在ttermpro中看到输出信息。

第一个TTL程序

现在我们编写第一个TTL程序。

(1)编辑代码

打开TTLEdit, 输入如下代码:

关于上面的代码:

◊ connect

TTL

中的一个命令,其作用是建立与远程主机的连接。参数

/C=6

表示通过串口

6

进行通信,参数

/Baud=115200

则设置其波特率。根据不同的主机环境(串口号和波特率不同),需要设置不同的参数值

◊ sendln

也是

TTL

的一个命令,其作用是输出一个字符串并以换行符结尾。在

TTL

中字符串用单引号或双引号引用

◊ end

表示从当前脚本中退出,它可以出现在脚本中的任何位置。

上面的代码很简单,就是进入

开发板的目录

/bin

中,并列出其中所有的文件。

保存上述代码为my_。其实像其他脚本语言一样,TTL也可以在任何你喜欢的编辑器中编写,只不过TTLEdit

能够识别TTL的关键字,帮助你及时的发现代码中的问题。

(2)运行脚本

TTL是脚本语言,不需要编译而直接运行。有三种运行方式:

◊ 在TTLEdit中,选择Actions->Run 或 Run To Cursor,如果选择“Run To Cursor”,程序会运行到光标所在的行为止,

我们可以利用这个功能进行单不调试。

◊ 在Tera Term主程序中,选择Control->Macro, 然后选定脚本。

◊ 在Windows的命令行中,进入tera term安装目录,运行" c:my_"

运行结果如下图所示:

需要注意的是Tera Term不支持多窗口操作,如果采用前两种运行方式,需要关闭所有已经打开的TT主窗口, 否

则会报连接错误。

至此,我们完成一个自动输入命令并执行的小程序。在后面我们还会研究TTL的一些复杂应用。

现在我们结合实例,看看tera term 宏语言的一些具体应用。

在嵌入式Linux环境中,经常需要将内核和文件系统下载到板子上,其过程一般如下:

首先重新启动开发板,uboot开始运行,出现“Hit any key to stop autoboot”,如果用户在10秒钟内没有按任何键,

则系统进入自启动过程,否则进入uboot命令界面,然后依次输入下载和写入命令(如tftp, nand write等)。

下面这段代码实现的就是在uboot启动后,出现“Hit any key to stop autoboot”时,模拟用户输入,中断自启动模

式,进入uboot命令界面:

上述代码解释如下:

(1)命令wait等待字符串,等待时间由timeout指定,这是tera term中的一个系统变量。timeout的单位为秒,如

果timeout小于0,则无限等待。

(2)result也是TT的一个系统变量,记录最近一条TT命令的返回结果,例如在上面的代码中,result记录wait的返

回结果,如果result为0,则表示发生了timeout;如果result为1,表示等到指定的字符串。不同命令的返回结果有不

同的值和含义,具体的需要参看Tera Term的帮助文档。

(3)TT支持跳转语句goto, 可以跳转到任意的标记行(标记行是以冒号“:”开头的代码行)

(4)Tera Term宏语言不区分大小写, 例如result可以写成ReSulT, endif也可以写成EndIF,都是正确的。

(5)这个程序应该在开发板重启之前运行,否则可能错过字符串“autoboot”而造成死等的情况。

接着我们利用Tera Teram宏语言处理更加复杂的情况。

下面的截图是在tera term中手工输入的两条命令,含义如下:

(1) 用tftp下载文件my_fs,写入DDR中,其写入地址为0x1000000。在tftp 完成下载后,系统将会输出文件的大小

(2) 将文件从DDR中写入NAND中,写入的大小就是在上一条命令执行完毕后显示的大小。图中红色圈中所示。

利用tera term宏语言可以自动处理上述过程,其难点是如何从第一条命令的输出中文件长度(ac00000),以使第二

条命令正常运行, 代码如下:

有关代码说明如下:

(1)在TT宏语言中,注释行以分号“;”标识

(2)命令waitln是等待包含指定字符串的一行,它与wait的区别在于,waitln在等到字符串后不是马上返回,而是

一直得到出现换行符;而且在waitln返回后,将接受到的完整一行存放在系统变量inputstr中。

(3)TT宏语言提供了丰富的字符串处理命令:

strcompare:字符串比较

strconcat: 字符串连接

strcopy: 字符串拷贝

strlen: 字符串长度

strscan: 搜索子串

而且它们的用法与C语言中相应的函数十分类似。上面的例子就是通过两次strscan调用得到字符串“ac00000”在

整个一行中的起始位置,然后调用strcopy将子串取出以备用。

(4)有关TT宏语言函数自定,语法等更详细的信息,可以参考其自带的帮助文件。

文件操作实例

Tera Term 支持文件操作。设想一种应用场景:有多条命令需要执行,而且这些命令的内容是确定的,(即不存在

/s/blog_中的情况),则可以先将这些命令保存到一个文件中,然后依次

读出这些命令并执行之,代码如下:

代码解释如下:

(1)fileopen 将打开一个文件,句柄存在一个临时变量f_h中。在Tera Term中变量不需要事先定义。

(2)filereadln 将从文件句柄中读取一行(即一条命令),存放到变量line中。如果读到文件尾,则result的值为

1

(3)发送命令并等待命令返回,然后通过goto,继续读下一条命令。

可以看出,这种方式的代码更加简单,且逻辑更加清楚。除了代码中出现的一些文件操作,Tera Term还支持文件

拷贝,文件创建,文件删除,文件写入,文件定位(seek)等。

日志文件实例

另外, Tera Term 还提供了另外一种文件操作:日志文件(log), 其用法如下:

需要说明的是:

(1)logwrite写入字符串,但不是自动添加一个换行符,#13#10是TT中的换行符。

(2)与一般的文件操作不同,日志文件函数logxxxxxx中不需要指定文件句柄

(3)文件操作(包括日志文件操作)可以用于在TT脚本中增加调试信息。

(4)一旦打开调用logopen打开了一个日志文件,则Tera Term 就会自动的将所有的接收的串口信息输出到该文

件中,除非用户调用logpause,具体用法如下面的例子。

日志文件的另一中使用方式是通过在connect命令中增加参数/L指定。代码如下:

关于上述代码, 说明如下:

(1)当串口中接受到“Starting divers lanuch”时,暂停log写入(调用logpause函数)

(2)当串口中接受到“Finish divers lanuch”时,重新启动log写入(调用logstart函数)

(3)通过这种方式,可以实现有选择的记录输出信息。例如这个例子就是忽略所有driver启动时的输出信息。

本文标签: 命令文件字符串需要操作