Windows XP下超级终端与嵌入式开发板交互的一些技巧

长平狐 发布于 2013/06/03 14:52
阅读 167
收藏 0

Windows XP下超级终端与嵌入式开发板交互的一些技巧

嵌入式开发交流群280352802,欢迎加入!

一、简介

超级终端是Windows操作系统自带的一个通用的串行交互软件,可以通过这个工具对路由器交换机等进行配置。使用调制解调器、一条零调制解调电缆或以太网连接,再调用此程序能够连接到其他计算机、Telnet 站点、公告板系统 (BBS)、联机服务和主机。我们可以用它来调试电路是否可行。 嵌入式开发板基本都有串口,可以通过超级终端与嵌入式系统的串口交互,使超级终端成为嵌入式系统的“显示器”。 

  • 使用:开始→程序→附件→通讯→超级终端(可新建或者使用现有的连接对设备进行配置);
  • 启动命令:hypertrm.exe。

二、超级终端的原理

超级终端的原理并不复杂,它是将用户的输入随时发向串口(采用TCP协议时是发往网口,这里只说串口的情况),但并不显示输入。它显示的是从串口接收到的字符。所以,嵌入式系统的相应程序应该完成的任务便是:
  1. 将自己的启动信息、过程信息主动发到运行有超级终端的主机;
  2. 将接收到的字符返回到主机(也就是回显),同时发送需要,也可以远程管理服务器。

三、超级终端常用操作

超级终端应用比较简单,和一般的串口软件差不多。
1、发送0x0C(12) :  清屏;
2、发送0x08(8) :将光标退格(注意这并不删除字符);
3、发送0x09(9) ;将光标右移一个制表符(相当于TAB键);
4、发送0x0D(13);将光标移动到行首;
5、发送0x0A(10)或0x0B(11);将光标移动到同一列的下一行;
6、发送0x0D跟0x0A,换行功能(回车和换行的问题后面会具体讲解)。

四、常见问题和解决办法

1、把超级终端最大化时,那个实际屏幕还是没有变化。

原因:"超级终端"的终端屏幕大小由所使用的字体大小决定。它将自行显示为 24 行,每行为 80 或 132 个字符,字体为所选字体。
解决办法:在超级终端的"查看"菜单上,选择"字体"。如果想要较大的终端屏幕,就选择较大的字体。如果想要较小的终端屏幕,就选择较小的字体。

2、键入的信息没有显示在超级终端上。
原因:终端屏幕显示的信息是来自远程计算机所发送的,而不是已输入到本地计算机上的信息。为了查看所键入的信息,远程计算机必须可反馈输入信息。这可能会在输入信息与终端屏幕显示信息之间存在时间滞后的问题。
解决办法:请确保与远程计算机正确连接,并且远程计算机可以反馈用户输入信息(也就是远程计算机或嵌入式开发板将受到的信息再发送给本地计算机)。


3、ANSI字符不能够正确显示。
原因:未使用终端字体。
解决办法:在超级终端的"查看"菜单上,选择"字体"。单击"终端",然后选择"确定"。

4、连接到远程计算机后,终端屏幕显示无意义信息。
原因:未选择正确的终端仿真类型。
解决办法:在超级终端的"文件"菜单上,选择"属性"。选中"设置"选项卡。在"仿真"下拉框中,选择远程计算机的终端类型。如果远程计算机类型没有在下拉框中列出,则超级终端不支持该类型。


5、不能从终端删除字符。
原因:所连接的远程计算机已经控制了显示在终端屏幕上的字符。远程计算机期望光标能根据已发送到屏幕上的数据而定位到屏幕中的特定位置。如果在本地上改变该屏幕,那么就有可能以主机所不能预料或控制的方式,潜在地中断了您与远程计算机之间交互操作。因此,超级终端不允许从屏幕上删除字符。
解决办法:不能。其实可以通过向远程计算机发送\b(退格)转义符和空格来实现。
      


6、用CTRL+V不能将数据粘贴到终端屏幕。
原因:如果在该连接属性的"终端键"进行了设置,按 CTRL+V 将会给模拟器发送转义序列。许多主机使用 CTRL+V 来导航它们的系统。
解决方案:可以将该设置更改到"Windows 键"中,然后 CTRL+V 就会正常运作。如要更改,请单击超级终端"文件"菜单中的"属性"。单击"设置"选项卡,然后单击" Windows 键"单选按钮。使用" Windows 键"设置时,所有的功能键、箭头键和控制键将在本地执行。建议选项为:使用"终端键"设置,然后使用菜单进行粘贴

五、回车符和换行符区别

首先介绍一下“回车”(carriage return)和“换行”(line feed)这两个概念的来历和区别。在计算机还没有出现之前,有一种叫做电传打字机(Teletype Model 33)的玩意,每秒钟可以打10个字符。但是它有一个问题,就是打完一行换行的时候,要用去0.2秒,正好可以打两个字符。要是在这0.2秒里面,又有新的字符传过来,那么这个字符将丢失。于是,研制人员想了个办法解决这个问题,就是在每行后面加两个表示结束的字符。一个叫做“回车”,告诉打字机把打印头定位在左边界;另一个叫做“换行”,告诉打字机把纸向下移一行。这就是“换行”和“回车”的来历,从它们的英语名字上也可以看出一二。      后来,计算机发明了,这两个概念也就被般到了计算机上。那时,存储器很贵,一些科学家认为在每行结尾加两个字符太浪费了,加一个就可以。于是,就出现了分歧:

  • Unix 系统里,每行结尾只有“<换行>”,即“\n”;
  • Windows系统里面,每行结尾是“ <回车><换行>”,即“\r\n”;
  • Mac系统里,每行结尾是“<回车>”,即“\r”

一个直接后果是,Unix/Mac系统下的文件在Windows里打 开的话,所有文字会变成一行;而Windows里的文件在Unix/Mac下打开的话,在每行的结尾可能会多出一个^M符号。一些常见的转义字符如下图:

需要注意的是在Windows系统中回车键被当做\r\n 的组合来使用,当我们从键盘输入回车键时,Windows系统会把回车键当做\r\n 来处理,Unix系统只会当做\n 来处理,不管在什么系统中,都可以用\n来作为一行输入结束的标记,只是在编程时我们需要注意,在Windows系统中我们会读到\r 这个字符,我们必须把\r和正常输入的字符区别开来。

Windows与Unix文件格式是不同的,问题一般就是出在/r/n问题上。回车(CR)和换行(LF)符都是用来表示“下一行”的。而标准没有规定要使用哪一个。于是产生了三种不同的用法:和windows采用回车+ 换行(CR+LG)表示下一行(亦即所谓的PC格式),UNIX采用换行符(LF)表示下一行,MAC机采用回车符(CR)表示下一行。当在不同的系统间传递文件,就要涉及格式的转换。

两种文件格式之间的转化

Unix -> Windows:'\n' -> '\r\n'      

while ( (ch = fgetc(in)) != EOF )
{
	if ( ch == '\n' )
		putchar('\r');
	putchar(ch);
}

只要在Unix文件中出现的'\n'的之前加入一个'\r'字符就可以了

Unix <- Windows:'\n' <- '\r\n'
Windows到Unix的情况复杂点,不能只是把从文件中读出的'\r'去掉就可以了。因为Windows文件中的文本行的末尾有时会内嵌一个回车符号,这种情况在击打式打印机中出现。所以在转换前要判断'\r'是否和'\n'同时出现。如果同时出现,则去掉'\r',如果没有同时出现,保留'\n'。     

cr_flag = 0;    /* No CR encountered yet */
while ( (ch = fgetc(in)) != EOF )
{
	if ( cr_flag && ch != '\n' ) {
	/* This CR did not preceed LF */
		putchar('\r');
	}
	if ( !(cr_flag = (ch == '\r')) )
		putchar(ch);
}

六、超级终端中关于回车符合换行符的一些设置

以换行符作为发送行末尾(ASCII码发送)

(超级终端 ->属性 ->设置 ->ASCII码设置 ->ASCII码发送:以换行符作为发送行末尾),若勾选了,则发送的数据中有0D(\r)的,会在0D后添加0A(\n)。


以换行符作为传入行末尾(ASCII码接收)

(超级终端 ->属性 ->设置 ->ASCII码设置 ->ASCII码发送:以换行符作为传入行末尾),若勾选了,则接收的数据中有0D(\r)的,会在0D后添加0A(\n)。

外,还有一点需要注意,我们在使用printf输出信息时,比如“printf("ce123' CSDN blog.\n")”,这里面的\n是回车换行,因此通过串口将该字符串发送到超级终端时要在\n后面或者后面增加一个\r。


原文链接:http://blog.csdn.net/ce123/article/details/8174285
加载中
返回顶部
顶部