0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

為什么要學(xué)習(xí)TTL腳本

科技綠洲 ? 來源:黑貓學(xué)長 ? 作者:黑貓學(xué)長 ? 2023-11-24 16:00 ? 次閱讀

2.1 TTL背景

所謂 TTL, 其實是 Tera Term Language 的縮寫, 也就是 Tera Term 的專用腳本語言. 那么 Tera Term(Wiki)是個什么東西呢? 其實就是個終端(Terminal), 也就是說跟什么 XSehll, SecureCRT, Putty 之類的東西差不多一個意思.

Tera Term 是日本人搞出來的東西. 其實僅僅就這個 Tera Term 來說我覺得一點并不好用, 完全比不上 Xshell. 不過關(guān)鍵就在于它有它自己的腳本語言 Tera Term Language 啊. 有了自己的腳本語言加持以后, 這個終端瞬間化身自動化利器, 可以提前設(shè)計好各種操作, 剩下的就讓終端自動運行好了.

Tera Term 這個東西本身我就不多介紹了, 只要到 Tera Term Open Source Project 下載安裝即可. 寫好的腳本雙擊以后是會自動調(diào)用這個工具的. 接下來的內(nèi)容將會介紹 TTL 的語法和使用.

TTL腳本是為tera term這個軟件服務(wù)的。tera term加載TTL腳本后,會自動運行腳本,然后執(zhí)行腳本里的命令。

2.2 為什么要學(xué)習(xí)TTL腳本

對于嵌入式開發(fā)人員來說,串口工具想必大家再熟悉不過。通常使用串口工具給開發(fā)板下發(fā)命令、接收log,亦或是連接遠(yuǎn)程終端,而這都需要我們手動控制。試想,下發(fā)一條命令可以手動,那下發(fā)1000條命令呢?

嵌入式開發(fā)中,有這么一款廣泛使用的串口工具——Tera Term,其內(nèi)置TTL腳本語言,該語言語法豐富但又簡單易學(xué)。通過TTL腳本,即可實現(xiàn)串口工具自動化測試。當(dāng)然,其功能遠(yuǎn)不止于此,但凡會用到串口工具的地方,都可以通過TTL腳本來滿足自己自動化需求。例如自動連接遠(yuǎn)程終端、自動執(zhí)行遠(yuǎn)程終端腳本、分析串口工具中顯示的log、統(tǒng)計測試項是否成功等等。

2小時學(xué)會一個串口自動化腳本語言,半天即可熟練掌握,讓你更快速更高效地完成嵌入式項目開發(fā)。最少的時間掌握一個終生受益的技能,這會讓你變得比大多數(shù)嵌入式工程師更厲害。

Part3數(shù)據(jù)類型

TTL語言(TeraTerm Language)總共只有四種數(shù)據(jù)類型,分別為Integer、Character string、Integer Array、String Array。

Part4注釋

; 分號后面是注釋

; 分號開始的行是注釋行

var = 0 ; 這里分號右邊開始也算注釋

Part5 字面量

  • 支持正數(shù)負(fù)數(shù), 不支持浮點數(shù)
    123
    -11
  • $開始的數(shù)字是16進(jìn)制
    $3a
    $10F
  • 字符串’Hello, world’“I can’t do that”“漢字也支持”
  • #開頭的是ASCII碼值字符, 也就是#后的數(shù)字查ASCII碼表對應(yīng)的是哪個字符就是哪個字符
    #65 ; 文字 “A”
    #$41 ; 文字 “A”
    #13 ; CR 文字
  • 字符串可以直接拼接
    ‘cat readme.txt’#13#10 ; 相當(dāng)于 “cat readme.txtrn”
    ‘a(chǎn)bc’#$0d#$0a’def’#$0d#$0a’ghi’

Part6 變量

變量包括用戶自定義變量和系統(tǒng)變量兩部分. 下面將分別介紹一下。

6.1 自定義變量

定義變量無需指定類型, 直接使用 變量名 = 值 的語法即可.

注意:賦值時候=右邊的“10”或’10’表示字符串,10才表示數(shù)字,例如cycle =“10”和cycle = 10是不一樣的,一個是字符串,一個是數(shù)字。

  • 定義普通變量
    _var = ‘valid’ ; 下劃線開始的變量名合法。
    var = “valid” ; 使用雙引號也可以
    var_1 = 1 ; 這是一個數(shù)字
    var_2 = ‘str’ ; 這是一個字符串
  • 定義數(shù)組及賦值
    intdim a 3 ; int數(shù)組
    a[0] = 1
    a[1] = 2
    a[2] = 3
    strdim s 3 ; str數(shù)組
    s[0] = ‘1’
    s[1] = ‘2’
    s[2] = ‘3’

6.2 系統(tǒng)變量

TTL 預(yù)置使用了一些系統(tǒng)變量, 寫腳本的時候注意不要占用。 閱讀腳本的時候要注意這些是系統(tǒng)變量, 是作為系統(tǒng)函數(shù)返回值而存在的。

常見:
inputstr ; waitln等函數(shù)的接收到的值存放于此
matchstr ; strmatch等函數(shù)的值存放于此
param1 ; 調(diào)用腳本時候傳入的第一個參數(shù)
params ; 調(diào)用腳本時候傳入的所有參數(shù)的數(shù)組
result ; waitln等函數(shù)執(zhí)行的結(jié)果code存放于此
timeout ; 超時時間

具體請查看 Tera Term 的幫助文件:https://ttssh2.osdn.jp/manual/4/en/macro/syntax/variables.html

如何查看系統(tǒng)變量?

TTl腳本中貌似沒有printf之類的函數(shù),可以直接輸出某個變量的值到底是多少。那如果寫代碼過程中想要看看其中某個變量的值是多少該怎么辦呢?

其實可以轉(zhuǎn)變思路,將想要打印的變量直接寫入文件中就可以了。圖片

Part7流程控制

TTL 也支持基本的流程控制操作;

7.1 do, loop

; 循環(huán)10次
i = 10
dowhile i > 0
  i = i - 1
loop

7.2 while, endwhile

; 循環(huán)10次
i = 10
while i > 0
  i = i - 1
endwhile

7.3 until, enduntil

; 循環(huán)10次
i = 1
until i > 10
  i = i + 1
enduntil

7.4 for, next

; 循環(huán)10for i 110
  sendln 'abc'
next

; 循環(huán)5for i 51
  sendln 'abc'
next

7.5 if, then, elseif, else, endif

if a = 1 then
  b = 1
  c = 2
  d = 3
endif

if i < 0 then
  i = 0
else
  i = i + 1
endif

if i = 1 then
  c = '1'
elseif i = 2 then
  c = '2'
elseif i = 3 then
  c = '3'
else
  c = '?'
endif

7.6 break, continue

  • break
while1
  recvln
  strcompare inputstr "OK"
  if result = 0 then
    break
  else
    sendln "abc..."
  endif
endwhile
  • continue

a = 0
b = 0
while a < 5
  a = a + 1
  if a > 2 then
    continue
  endif
  b = b + 1
endwhile

sprintf2 var "a=%d b=%d" a b
dispstr var; a=5 b=2

Part8子過程

TTL 可以定義一些子過程, 方便重復(fù)調(diào)用. 但是沒有返回值, 不能稱之為函數(shù)。

定義子過程首先要了解 label 標(biāo)簽

; 冒號開始的是標(biāo)簽
: I_am_a_label  	; 這就是一個標(biāo)簽

可以這樣定義和調(diào)用子過程:

messagebox "I'm in main.""test"
; 跳轉(zhuǎn)到":sub"
call sub
  messagebox "Now I'm in main""test"
end

; 子過程具體定義
:sub
  messagebox "Now I'm in sub""test"
  return  ; 返回到主體

子過程以return返回。標(biāo)簽后面沒有return,說明不是子過程,只是標(biāo)簽。標(biāo)簽也建議用end結(jié)束。

Part9常見用法

下面介紹一些 TTL 腳本中的常見寫法。

9.1 連接服務(wù)器

使用 connect 命令, 而且有不少其他命令必須在連接服務(wù)器后才能使用:
connect ‘hostname:22 /ssh /2 /auth=password /user=username /passwd=password’

9.2 執(zhí)行給定命令

sendln date ; 向遠(yuǎn)端服務(wù)器上發(fā)送 date 命令以及 CR, 即執(zhí)行該命令

9.3 等待特定字符

wait ‘**’ ‘#’ ; 等待遠(yuǎn)端服務(wù)器屏幕上出現(xiàn) ** 或者 #. 未出現(xiàn)則一直等待. 該等待超時時間由系統(tǒng)變量 timeout 控制, 若為 0 則無超時時間, 即無限期等待

9.4 拼接字符串

使用 sprintf2 直接定義變量. 其中 %s 是占位符, 被字符串后面跟的變量替換.
hostname = ‘your_hostname’
username = ‘your_username’
password = ‘your_password’
sprintf2 server ‘%s:22 /ssh /2 /auth=password /user=%s /passwd=%s’ hostname username password

直接聲明變量并在后面添加字符串.
hostname = ‘your_hostname’
msg = hostname
strconcat msg ‘:22 /ssh /2 /auth=password /user=’
strconcat msg username
strconcat msg ’ /passwd=’
strconcat msg password

9.5 保存服務(wù)器操作日志

getdir logdir ; 獲取當(dāng)前腳本所在路徑
changedir logdir ; 調(diào)整日志文件夾路徑到當(dāng)前路徑
logfile = “operation.log” ; 日志文件名
logopen logfile 0 0 1 ; 打開日志文件用于寫入
logwrite “first line in log file”#13#10 ; 向日志文件中寫入"first line in log filern", 其中 #13#10 的意思就是 CRLF

Part10include包含其他文件

include ‘1.ttl’
即:將1.ttl里面的內(nèi)容包含到本TTL腳本中。

Part11常用命令

參考鏈接:

  • tera term的ttl腳本使用方法:https://blog.csdn.net/f2157120/article/details/99822653
  • 官方TTL命令參考:https://ttssh2.osdn.jp/manual/4/en/macro/command/index.html

常用命令直接參考官方命令介紹即可,非常清晰明了,此處就不一一列出。只列出部分易錯/重要的命令。

11.1 fileopen

如果文件不存在,則創(chuàng)建該文件并打開。

11.2 changedir

注意和setdir的區(qū)別,兩個命令都是改變路徑,那么到底有什么區(qū)別呢?

chagedir改變的是Tera Term的路徑。setdir改變的是MACRO的路徑。

那這時候又有問題了,什么是Tera Term的路徑,什么是MACRO路徑?

File names specified for the communication commands (e.g. kmtsend) are based on the current directory for Tera Term.

File names specified for other commands (e.g. fileopen) are based on the current directory for MACRO.

可能看到這里還是不太清楚Tera Term的路徑和MACRO的路徑區(qū)別,也不要擔(dān)心,在有的命令中,會用到路徑的時候,會講明是哪個路徑,如下:

圖片

11.3 filereadln

格式:filereadln

注意環(huán)境變量result的值:

如果當(dāng)讀取一行的時候發(fā)現(xiàn)指針已經(jīng)到達(dá)文件末尾,result被設(shè)置為1。而不是讀取了一行后發(fā)現(xiàn)在指針到達(dá)文件末尾,就返回1,切記??!

如果文件中僅僅包含一個新行,那么strvar的值是空的,result被置為0.

11.4 Strtrim

格式:strtrim

功能:刪除strval字符串中開頭和結(jié)尾出現(xiàn)的trimchars字符串

注意:

  1. 如果在strval字符串中間出現(xiàn)的trimchars,不會被移除,只會移除中間或者結(jié)尾出現(xiàn)的所有trimchars字符串。
  2. 如果strval字符串開頭或者結(jié)尾出現(xiàn)了trimchars字符串中一部分的字符,也會被移除。
  3. 如果strval字符串開頭或者結(jié)尾連續(xù)出現(xiàn)了幾個rimchars字符串,則都會被移除。

例子:

src = “YEE_ONLY YEE_ONLY verify YEE_ONLY test YEE_ONL YEE_ONLY”
strtrim src 'YEE_ONLY ’
messagebox src ‘result’

顯示結(jié)果為:verify YEE_ONLY test

11.5 gettime

例子:

gettime starttime “%Y%m%d-%H%M%S”
%Y%m%d-%H%M%S到底是什么時間格式呢?

參考鏈接即可知道:https://baike.baidu.com/item/strftime/9569073?fr=aladdin

Part12如何運行ttl腳本

有兩種方式運行ttl腳本:

  • ttermpro軟件加載TTL腳本圖片

通過 Mcro 選擇自己需要加載的ttl腳本即可。

  • TTPMACRO.EXE軟件加載ttl腳本

在安裝tera term軟件時候,安裝路徑不僅有ttermpro.exe軟件,還有ttpmacro.exe軟件,打開ttpmacro.exe軟件加載ttl腳本即可。圖片

Part13ttermpro軟件使用方法

13.1 中文顯示亂碼

如圖所示,ttermpro軟件連接虛擬機,顯示中文有亂碼:圖片如下設(shè)置即可:

圖片圖片

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 自動化測試
    +關(guān)注

    關(guān)注

    0

    文章

    201

    瀏覽量

    26884
  • TTL
    TTL
    +關(guān)注

    關(guān)注

    7

    文章

    497

    瀏覽量

    70061
  • 終端
    +關(guān)注

    關(guān)注

    1

    文章

    1106

    瀏覽量

    29799
  • 腳本
    +關(guān)注

    關(guān)注

    1

    文章

    387

    瀏覽量

    14811
  • 串口工具
    +關(guān)注

    關(guān)注

    1

    文章

    9

    瀏覽量

    7851
收藏 人收藏

    評論

    相關(guān)推薦

    【RT-Thread學(xué)習(xí)筆記】結(jié)合案例學(xué)習(xí)調(diào)試shell腳本

    【shell編程掃盲系列】結(jié)合真實案例學(xué)習(xí)如何調(diào)試shell腳本
    的頭像 發(fā)表于 07-29 03:32 ?2059次閱讀
    【RT-Thread<b class='flag-5'>學(xué)習(xí)</b>筆記】結(jié)合案例<b class='flag-5'>學(xué)習(xí)</b>調(diào)試shell<b class='flag-5'>腳本</b>

    shell腳本編程想學(xué)習(xí)的可以看看

    一本關(guān)于shell腳本編程的書籍,想學(xué)習(xí)的可以看看
    發(fā)表于 10-15 11:06

    Linux系統(tǒng)學(xué)習(xí)之路---腳本體會

    。方便別的使用與維護(hù)。就拿腳本的開頭幾行來說。做好功能,版本的信息,作者還有溝通的方式, 最重要的是,一些比較特殊的環(huán)境變量。 要說明。每個人的電腦環(huán)境都不一樣。 這一點十分重。做好合理的注釋說明信息
    發(fā)表于 01-28 20:51

    Perl 腳本語言學(xué)習(xí)是什么

    Perl 腳本語言學(xué)習(xí)是什么
    發(fā)表于 03-12 06:13

    TTL/ECL,TTL/ECL是什么意思

    TTL/ECL,TTL/ECL是什么意思 TTL電路發(fā)展簡史: TTL電路是晶體管-晶體管邏輯電路的英文縮寫(Transister-Transister-Logic),是數(shù)字集成
    發(fā)表于 03-08 11:12 ?9501次閱讀

    什么是腳本

    什么是腳本,腳本是什么意思,腳本錯誤是什么意思電子發(fā)燒友深入為大家講解了腳本相關(guān)知識
    發(fā)表于 12-07 10:36 ?2799次閱讀

    scripts【各類編程腳本

    scripts【各類編程腳本】,好東西,喜歡的朋友可以下載來學(xué)習(xí)。
    發(fā)表于 02-18 16:29 ?0次下載

    TTL與COMS的區(qū)別

    電子專業(yè)單片機相關(guān)知識學(xué)習(xí)教材資料——TTL與COMS
    發(fā)表于 08-22 16:18 ?0次下載

    Linux Bash腳本進(jìn)階教程學(xué)習(xí)

    你可以在腳本頭部使用set -o verbose和set -o xtrace來永久指定-v和-o。當(dāng)在遠(yuǎn)程機器上執(zhí)行腳本時,這樣做非常有用,用它來輸出遠(yuǎn)程信息。
    的頭像 發(fā)表于 05-01 17:45 ?3774次閱讀
    Linux Bash<b class='flag-5'>腳本</b>進(jìn)階教程<b class='flag-5'>學(xué)習(xí)</b>

    嵌入式和物聯(lián)網(wǎng)的shell腳本學(xué)習(xí)指南之shell腳本入門免費下載

    本文檔的主要內(nèi)容詳細(xì)技術(shù)的是嵌入式和物聯(lián)網(wǎng)的shell腳本學(xué)習(xí)指南之shell腳本入門免費下載。
    發(fā)表于 09-11 17:15 ?20次下載
    嵌入式和物聯(lián)網(wǎng)的shell<b class='flag-5'>腳本</b><b class='flag-5'>學(xué)習(xí)</b>指南之shell<b class='flag-5'>腳本</b>入門免費下載

    FPGA學(xué)習(xí)面對什么問題

    FPGA學(xué)習(xí)多練習(xí),多仿真,signaltapII是很好的工具,可以看到每個信號的真實值。
    的頭像 發(fā)表于 01-15 16:55 ?1259次閱讀

    什么是腳本腳本程序學(xué)習(xí)

    腳本中編寫VB腳本代碼??梢韵笫褂孟到y(tǒng)函數(shù)一樣使用項目中完成的腳本。創(chuàng)建腳本時,確定其型號并定義傳送參數(shù)。“Function”類型的腳本
    的頭像 發(fā)表于 05-11 10:39 ?6680次閱讀
    什么是<b class='flag-5'>腳本</b>?<b class='flag-5'>腳本</b>程序<b class='flag-5'>學(xué)習(xí)</b>

    解析TTL與CMOS的優(yōu)缺點

    TTL邏輯家族使用雙極晶體管來執(zhí)行邏輯功能,CMOS使用場效應(yīng)晶體管。盡管CMOS比TTL更靈敏,但它的功耗通常小得多。CMOS和TTL并不是真正的可互換的,隨著低功耗CMOS芯片的
    的頭像 發(fā)表于 10-16 11:08 ?1.8w次閱讀

    TTL與CMOS電平的標(biāo)準(zhǔn)與區(qū)別

    TTL器件輸出低電平小于0.8V,高電平大于2.4V。輸入,低于1.2V就認(rèn)為是0,高于2.0就認(rèn)為是1。于是TTL電平的輸入低電平的噪聲容限就只有(0.8-0)/2=0.4V,高
    的頭像 發(fā)表于 08-22 10:10 ?1.2w次閱讀

    TTL電平學(xué)習(xí)筆記

    實現(xiàn)輸出電平在0/1之間變換,需要三極管的數(shù)量最少只需要一個,而TTL電路使用了4個三極管,用較多的器件去實現(xiàn)相同的功能,必定要有性能上的提升,否則這種電路設(shè)計就是一種浪費。對于TTL電路而言,使用成倍的器件需要換來的性能包括
    的頭像 發(fā)表于 09-21 17:03 ?905次閱讀
    <b class='flag-5'>TTL</b>電平<b class='flag-5'>學(xué)習(xí)</b>筆記