個人資料
歸檔
正文

TCLTK-OpenOCD

(2021-02-01 09:59:14) 下一個

1.TckTk

https://www.tutorialspoint.com/tcl-tk

https://www.tcl.tk/man/  

http://jim.tcl.tk/fossil/doc/trunk/Tcl_shipped.html#OperatorPrecedence  

https://www.cnblogs.com/qianlifeng/archive/2011/03/05/1971663.html 

語言簡介
         Tcl是一種很通用的腳本語言,它幾乎在所有的平台上都可以解釋運行,功能強大。是tool command language的縮寫,發音為 "tickle”。 實際上包含了兩個部分:一個語言和一個庫。 首先,Tcl是一種簡單的腳本語言,主要使用於發布命令給一 些互交程序如文本編輯器、調試器和shell。它有一個簡單的語法 和很強可擴充性,Tcl可以創建新的過程以增強其內建命令的能力。其次,Tcl是一個庫包,可以被嵌入應用程序,Tcl的庫包含了一個分析器、用於執行內建命令的例程和可以使你擴充(定義新的 過程)的庫函數。應用程序可以產生Tcl命令並執行,命令可以由用戶產生,也可以從用戶接口的一個輸入中讀取(按鈕或菜單等)。 但Tcl庫收到命令後將它分解並執行內建的命令,經常會產生遞歸的調用。
學習動機
         因為需要研究NS2無線路由協議,其中ns2的模擬使用tcl來寫的,如果tcl不搞懂的話就沒法看懂,所以還是來係統的學習一下。另外不得不抱怨一句ns2真是夠折磨人的,相當的考驗人的 耐心~~……真不知道最後能不能達到導師的要求,先厚著臉皮做吧。
環境安裝
     到這裏下載運行程序:http://www.newhua.com/soft/63285.htm,運行的界麵見下圖:
基本語法
1.命令結構:
commandName arguments。每條命令之間通過換行或者;隔開。例如:
1
2
set foo 0
set bar 1;
2.注釋:
使用#注釋,不過要注意的是下麵的注釋是錯誤的:
1
set foo 0 #這個是注釋
因為tcl解析器總是認為一條命令應該以換行或者分號結束,其他的在同一行中都認為是參數。所以正確的應該是:
1
set foo 0; #這個是注釋
其實對於習慣於.net編程的人來說每行末尾加個;應該是理所當然的事情,所以這個對我們應該沒有什麽不習慣的。
4.變量
tcl可以定義兩種類型的變量:變量和數組。
變量:在tcl變量不需要聲明就可以直接賦值。給變量賦值的例子:
1
2
set ba 1;
set ma “qian li feng”;#加引號的作用是為了告訴編譯器包括空格
          
         取得變量的值可以在對應的變量名前麵加$來取得,例如:      
1
puts $ba;  #表示打印出ba的值
 
數組:數組也不需要聲明,直接賦值,例如:
1
2
set qian(0) 1;
set qian(1) 2;
         一個比較有意思的地方是數組下標可以不按照順序來寫,也不一定是數字,可以是字符串。例如:
1
2
3
set qian(123) f;
set qian(6789) fs;
set qian(good) yes;
         我們可以使用puts $qian(123);的形式來獲得數組的內容。當然tcl數組也支持多維數組,聲明形式為:
1
set qian(1,1,1,1,1) fs; #隨便多少維
         如果我們要查看某個已經賦值的數組的信息,可以使用parray命令:如:     
1
parray qian;   #將打印出qian數組的所有信息
 5.字符串操作
string 命令基本語法如下(這裏的string1,string2可以是字符串也可以是變量,option是下列選項之一)  
1
string option string1 string2;
 
option的操作選項:
  compare 按照字典的排序方式進行比較。根據string1 <,=,>string2分別返回-1,0,1
  first 返回string2中第一次出現string1的位置,如果沒有出現string1則返回-1
  last 和first相反
  trim 從string1中刪除開頭和結尾的出現在string2中的字符
  tolower 返回string1中的所有字符被轉換為小寫字符後的新字符串
  toupper 返回string1中的所有字符串轉換為大寫後的字符串
  length 返回string1的長度
例子:
1
string length $qian;  #將返回變量qian的長度
6.數字操作
因為tcl中隻有一個string類型的變量,所以當要操作數字進行運算的時候,tcl提供了incr和expr兩個操作數。
 
incr的基本用法為:
incr variable integer(variable必須為數字)
  例如我要將一個數字加3
1
2
set a 3;
incr a 3; #將a加3,如果要減3,則為 incr a –3;
  默認的incr a等同於.net裏麵的a++的意思,即本身自增1。
 
expr的基本語法為:
1
expr function number
  expr是為了提供更加複雜的操作而設計的一個語法,比如運算乘除法等等。在執行算術操作的時候必須將expr命令放在算術操作之前。例如:
1
2
set a 20; set b 4;
set c [expr $a/$b]; #此時的c的值為5
  除此之外,expr還能夠識別一些函數及其返回值如下:
  abs(x) x的絕對值
  round(x) x舍入後得到的整數值
  sin(x) x的正弦
  …………………………………..
  舉個例子:
1
set a [expr sin(0.3)]; #計算0.3的正弦
7.轉義
在tcl中可以使用{}將需要轉義的字符串括起來。例如:
1
2
set a 5;
set b {$a};  #此時b的值為”$a“,而不是5。
8.流控製
if 控製流
  基本語法:
1
2
3
4
5
if { 表達式 } {
     #運算;
else {
    #其他運算;
}
  需要注意的是if….else,if……elseif…中的else,elseif必須要和if的後麵一個{在同一行。
 
switch控製流:
  基本語法:
1
2
3
4
5
6
switch $x {
  
  數值1 { 操作1 ;}            
 
  數值2 { 操作2 ;}
}
9.循環
tcl提供三種循環命令,分別為:for,foreach,while。此外tcl還提供兩個循環控製命令。注意:這個三個命令中的程序塊的開始花括號必須要和三個命令同一行。
 
while基本語法:
  while {條件} { 程序塊 }
 
foreach 將在一組變元中進行循環,並且每次都將執行他的循環體。基本結構:
  foreach variable {items} {block}
  這裏的variable是變量的名字,便於block中使用。舉例:
1
2
3
4
5
foreach element {0 m n b v} {
       switch $element {
             # 判斷element的值
     }
}
 
for是最常用的循環。其基本結構為:
  for {initialization} {condition} {increment} {body}
  例如: 
1
for {set i 0} {$i < 10} {incr i} {puts $i;} #將打印出0到9

2.Openocd

https://www.olimex.com/Products/ARM/JTAG/_resources/ARM-USB-OCD_and_OCD_H_manual.pdf  

https://www.olimex.com/Products/ARM/JTAG/_resources/ARM-USB-OCD_and_OCD_H_manual.pdf

 

[ 打印 ]
閱讀 ()評論 (0)
評論
目前還沒有任何評論
登錄後才可評論.