电竞比分网-中国电竞赛事及体育赛事平台

分享

Windows XP下超級終端與嵌入式開發(fā)板交互的一些技巧

 quasiceo 2015-07-30

Windows XP下超級終端與嵌入式開發(fā)板交互的一些技巧

一、簡介

超級終端是Windows操作系統(tǒng)自帶的一個(gè)通用的串行交互軟件,可以通過這個(gè)工具對路由器交換機(jī)等進(jìn)行配置。使用調(diào)制解調(diào)器、一條零調(diào)制解調(diào)電纜或以太網(wǎng)連接,再調(diào)用此程序能夠連接到其他計(jì)算機(jī)、Telnet 站點(diǎn)、公告板系統(tǒng) (BBS)、聯(lián)機(jī)服務(wù)和主機(jī)。我們可以用它來調(diào)試電路是否可行。 嵌入式開發(fā)板基本都有串口,可以通過超級終端與嵌入式系統(tǒng)的串口交互,使超級終端成為嵌入式系統(tǒng)的“顯示器”。 

  • 使用:開始→程序→附件→通訊→超級終端(可新建或者使用現(xiàn)有的連接對設(shè)備進(jìn)行配置);
  • 啟動(dòng)命令:hypertrm.exe。

二、超級終端的原理

  超級終端的原理并不復(fù)雜,它是將用戶的輸入隨時(shí)發(fā)向串口(采用TCP協(xié)議時(shí)是發(fā)往網(wǎng)口,這里只說串口的情況),但并不顯示輸入。它顯示的是從串口接收到的字符。所以,嵌入式系統(tǒng)的相應(yīng)程序應(yīng)該完成的任務(wù)便是:

  1. 將自己的啟動(dòng)信息、過程信息主動(dòng)發(fā)到運(yùn)行有超級終端的主機(jī);
  2. 將接收到的字符返回到主機(jī)(也就是回顯),同時(shí)發(fā)送需要,也可以遠(yuǎn)程管理服務(wù)器。

三、超級終端常用操作

 

超級終端應(yīng)用比較簡單,和一般的串口軟件差不多。
1、發(fā)送0x0C(12) :  清屏;
2、發(fā)送0x08(8) :將光標(biāo)退格(注意這并不刪除字符);
3、發(fā)送0x09(9) ;將光標(biāo)右移一個(gè)制表符(相當(dāng)于TAB鍵);
4、發(fā)送0x0D(13);將光標(biāo)移動(dòng)到行首;
5、發(fā)送0x0A(10)或0x0B(11);將光標(biāo)移動(dòng)到同一列的下一行;
6、發(fā)送0x0D跟0x0A,換行功能(回車和換行的問題后面會具體講解)。

四、常見問題和解決辦法

1、把超級終端最大化時(shí),那個(gè)實(shí)際屏幕還是沒有變化。

原因:"超級終端"的終端屏幕大小由所使用的字體大小決定。它將自行顯示為 24 行,每行為 80 或 132 個(gè)字符,字體為所選字體。
解決辦法:在超級終端的"查看"菜單上,選擇"字體"。如果想要較大的終端屏幕,就選擇較大的字體。如果想要較小的終端屏幕,就選擇較小的字體。

2、鍵入的信息沒有顯示在超級終端上。
原因:終端屏幕顯示的信息是來自遠(yuǎn)程計(jì)算機(jī)所發(fā)送的,而不是已輸入到本地計(jì)算機(jī)上的信息。為了查看所鍵入的信息,遠(yuǎn)程計(jì)算機(jī)必須可反饋輸入信息。這可能會在輸入信息與終端屏幕顯示信息之間存在時(shí)間滯后的問題。
解決辦法:請確保與遠(yuǎn)程計(jì)算機(jī)正確連接,并且遠(yuǎn)程計(jì)算機(jī)可以反饋用戶輸入信息(也就是遠(yuǎn)程計(jì)算機(jī)或嵌入式開發(fā)板將受到的信息再發(fā)送給本地計(jì)算機(jī))。


3、ANSI字符不能夠正確顯示。
原因:未使用終端字體。
解決辦法:在超級終端的"查看"菜單上,選擇"字體"。單擊"終端",然后選擇"確定"。

4、連接到遠(yuǎn)程計(jì)算機(jī)后,終端屏幕顯示無意義信息。
原因:未選擇正確的終端仿真類型。
解決辦法:在超級終端的"文件"菜單上,選擇"屬性"。選中"設(shè)置"選項(xiàng)卡。在"仿真"下拉框中,選擇遠(yuǎn)程計(jì)算機(jī)的終端類型。如果遠(yuǎn)程計(jì)算機(jī)類型沒有在下拉框中列出,則超級終端不支持該類型。


5、不能從終端刪除字符。
原因:所連接的遠(yuǎn)程計(jì)算機(jī)已經(jīng)控制了顯示在終端屏幕上的字符。遠(yuǎn)程計(jì)算機(jī)期望光標(biāo)能根據(jù)已發(fā)送到屏幕上的數(shù)據(jù)而定位到屏幕中的特定位置。如果在本地上改變該屏幕,那么就有可能以主機(jī)所不能預(yù)料或控制的方式,潛在地中斷了您與遠(yuǎn)程計(jì)算機(jī)之間交互操作。因此,超級終端不允許從屏幕上刪除字符。
解決辦法:不能。其實(shí)可以通過向遠(yuǎn)程計(jì)算機(jī)發(fā)送\b(退格)轉(zhuǎn)義符和空格來實(shí)現(xiàn)。
      

 

6、用CTRL+V不能將數(shù)據(jù)粘貼到終端屏幕。
原因:如果在該連接屬性的"終端鍵"進(jìn)行了設(shè)置,按 CTRL+V 將會給模擬器發(fā)送轉(zhuǎn)義序列。許多主機(jī)使用 CTRL+V 來導(dǎo)航它們的系統(tǒng)。
解決方案:可以將該設(shè)置更改到"Windows 鍵"中,然后 CTRL+V 就會正常運(yùn)作。如要更改,請單擊超級終端"文件"菜單中的"屬性"。單擊"設(shè)置"選項(xiàng)卡,然后單擊" Windows 鍵"單選按鈕。使用" Windows 鍵"設(shè)置時(shí),所有的功能鍵、箭頭鍵和控制鍵將在本地執(zhí)行。建議選項(xiàng)為:使用"終端鍵"設(shè)置,然后使用菜單進(jìn)行粘貼

五、回車符和換行符區(qū)別

首先介紹一下“回車”(carriage return)和“換行”(line feed)這兩個(gè)概念的來歷和區(qū)別。在計(jì)算機(jī)還沒有出現(xiàn)之前,有一種叫做電傳打字機(jī)(Teletype Model 33)的玩意,每秒鐘可以打10個(gè)字符。但是它有一個(gè)問題,就是打完一行換行的時(shí)候,要用去0.2秒,正好可以打兩個(gè)字符。要是在這0.2秒里面,又有新的字符傳過來,那么這個(gè)字符將丟失。于是,研制人員想了個(gè)辦法解決這個(gè)問題,就是在每行后面加兩個(gè)表示結(jié)束的字符。一個(gè)叫做“回車”,告訴打字機(jī)把打印頭定位在左邊界;另一個(gè)叫做“換行”,告訴打字機(jī)把紙向下移一行。這就是“換行”和“回車”的來歷,從它們的英語名字上也可以看出一二。      后來,計(jì)算機(jī)發(fā)明了,這兩個(gè)概念也就被般到了計(jì)算機(jī)上。那時(shí),存儲器很貴,一些科學(xué)家認(rèn)為在每行結(jié)尾加兩個(gè)字符太浪費(fèi)了,加一個(gè)就可以。于是,就出現(xiàn)了分歧:

 

  • Unix 系統(tǒng)里,每行結(jié)尾只有“<換行>”,即“\n”;
  • Windows系統(tǒng)里面,每行結(jié)尾是“ <回車><換行>”,即“\r\n”;
  • Mac系統(tǒng)里,每行結(jié)尾是“<回車>”,即“\r”。

 

一個(gè)直接后果是,Unix/Mac系統(tǒng)下的文件在Windows里打 開的話,所有文字會變成一行;而Windows里的文件在Unix/Mac下打開的話,在每行的結(jié)尾可能會多出一個(gè)^M符號。一些常見的轉(zhuǎn)義字符如下圖:

需要注意的是在Windows系統(tǒng)中回車鍵被當(dāng)做\r\n 的組合來使用,當(dāng)我們從鍵盤輸入回車鍵時(shí),Windows系統(tǒng)會把回車鍵當(dāng)做\r\n 來處理,Unix系統(tǒng)只會當(dāng)做\n 來處理,不管在什么系統(tǒng)中,都可以用\n來作為一行輸入結(jié)束的標(biāo)記,只是在編程時(shí)我們需要注意,在Windows系統(tǒng)中我們會讀到\r 這個(gè)字符,我們必須把\r和正常輸入的字符區(qū)別開來。

 

Windows與Unix文件格式是不同的,問題一般就是出在/r/n問題上。回車(CR)和換行(LF)符都是用來表示“下一行”的。而標(biāo)準(zhǔn)沒有規(guī)定要使用哪一個(gè)。于是產(chǎn)生了三種不同的用法:和windows采用回車+ 換行(CR+LG)表示下一行(亦即所謂的PC格式),UNIX采用換行符(LF)表示下一行,MAC機(jī)采用回車符(CR)表示下一行。當(dāng)在不同的系統(tǒng)間傳遞文件,就要涉及格式的轉(zhuǎn)換。

 

 

 

兩種文件格式之間的轉(zhuǎn)化

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

  1. while ( (ch = fgetc(in)) != EOF )  
  2. {  
  3.     if ( ch == '\n' )  
  4.         putchar('\r');  
  5.     putchar(ch);  
  6. }  

 

只要在Unix文件中出現(xiàn)的'\n'的之前加入一個(gè)'\r'字符就可以了

 

Unix <- Windows:'\n' <- '\r\n'
Windows到Unix的情況復(fù)雜點(diǎn),不能只是把從文件中讀出的'\r'去掉就可以了。因?yàn)閃indows文件中的文本行的末尾有時(shí)會內(nèi)嵌一個(gè)回車符號,這種情況在擊打式打印機(jī)中出現(xiàn)。所以在轉(zhuǎn)換前要判斷'\r'是否和'\n'同時(shí)出現(xiàn)。如果同時(shí)出現(xiàn),則去掉'\r',如果沒有同時(shí)出現(xiàn),保留'\n'。     

 

 

  1. cr_flag = 0;    /* No CR encountered yet */  
  2. while ( (ch = fgetc(in)) != EOF )  
  3. {  
  4.     if ( cr_flag && ch != '\n' ) {  
  5.     /* This CR did not preceed LF */  
  6.         putchar('\r');  
  7.     }  
  8.     if ( !(cr_flag = (ch == '\r')) )  
  9.         putchar(ch);  
  10. }  

六、超級終端中關(guān)于回車符合換行符的一些設(shè)置

以換行符作為發(fā)送行末尾(ASCII碼發(fā)送)

(超級終端 ->屬性 ->設(shè)置 ->ASCII碼設(shè)置 ->ASCII碼發(fā)送:以換行符作為發(fā)送行末尾),若勾選了,則發(fā)送的數(shù)據(jù)中有0D(\r)的,會在0D后添加0A(\n)。

 

 

 

 

 

以換行符作為傳入行末尾(ASCII碼接收)

(超級終端 ->屬性 ->設(shè)置 ->ASCII碼設(shè)置 ->ASCII碼發(fā)送:以換行符作為傳入行末尾),若勾選了,則接收的數(shù)據(jù)中有0D(\r)的,會在0D后添加0A(\n)。

外,還有一點(diǎn)需要注意,我們在使用printf輸出信息時(shí),比如“printf("ce123' CSDN blog.\n")”,這里面的\n是回車換行,因此通過串口將該字符串發(fā)送到超級終端時(shí)要在\n后面或者后面增加一個(gè)\r。

    本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多