⑴ 定時器指令的數據類型有多少位
大多數是二進制數, 16位或32位。
也有的是BCD碼格式的(16位)
具體要看是哪一品牌的PLC
(專業從事 自動化控制系統 電氣設計、編程、技術培訓)
三菱PLC,松下PLC,西門子S7-200/s7-200SMART /s-300/s7-400/s7-1500(T)
觸摸屏,博圖WinCC)
⑵ xmodem ymodem 主要區別
內容提要:本文描述了使用XMOMDEM文件傳輸協議的通信程序設計,該設計為具有FLASH 存儲器的嵌入式系統提供了和PC機上超級終端軟體之間的文件傳輸功能,在PC機上不安裝專用通信軟體情況下,實現程序在板升級、數據在板定製等,給現場調試和維護帶來方便。另外,本文也描述了基於狀態矩陣的通信軟體編程方法。
關 鍵 字: XMODEM 文件下載 FSM 狀態矩陣
1 設計目的與用途
2 XMODEM協議介紹
3 協議分層與層間介面
3.1 協議分層
3.2 鏈路層和物理層間的介面
3.3 鏈路層和應用層間的介面
4 分層協議實現
4.1 協議的OS平台
4.2 應用層軟體實現
4.3 鏈路層軟體實現
4.4 物理層軟體實現
5 軟體移植
6 軟體調試方法
參考文獻
附錄1:XMODEM協議通信的異常情況列表
附錄2:XMODEM協議的狀態轉移表
附錄3:源代碼文件列表
附錄4:完整源代碼
1 設計目的與用途
嵌入式系統的程序代碼一般存放在FLASH存儲器或者OTP存儲器中,後者實際上是一種一次性可編程的EPROM,成本低,適合於批量大的產品使用,但程序寫入後不能修改,使用FLASH的優點是程序可以隨時在板更換,這種特點給現場調試和軟體升級、修改帶來極大方便。
對印製板上FLASH編程有幾種方法,原始的方法是使用編程器,由於要將晶元取下,十分不便,也有一些廠家生產的處理器通過JTAG介面或者串口連接到PC機上(如PHILIPS公司的P89C51RD),可以實現處理器內部FLASH的在板編程,但需要專用下載編程軟體(一般由晶元生產廠商提供),無法對處理器外部的FLASH進行編程。
使用XMODEM協議進行程序下載是目前很多產品通用的做法,比如CISCO公司的路由器產品,HUAWEI公司的ISDN終端產品,這種方法使用WINDOWS自帶的超級終端軟體來傳送文件,無需安裝專用軟體。只要在目標板上增加一斷實現XMODEM協議的代碼,就可以方便地實現程序或者數據文件的下載了。在下文中,就敘述XMODEM協議程序的實現方法。
圖表 1:目標板程序由二部分組成:下載程序和應用程序
2 XMODEM協議介紹
XMODEM協議是最早出現的2台計算機間通過RS232非同步串口進行文件傳輸的通信協議標准,相對於YMODEM,ZMODEM等其他文件傳送協議來說,XMODEM協議實現簡單,適合於那些存儲器有限的場合。
XMODEM文件發送方將文件分解成128位元組的定長數據塊,每發送一個數據塊,等待對方應答後才發送下一個數據塊,數據校驗採用垂直累加和校驗,也可以採用16位的CRC校驗。屬於簡單ARQ(自動請求重發)協議,所以也適合於2線制的半雙工的RS485網路中使用。
2.1 術語
在具體敘述XMODEM協議的具體內容前,我們先給出協議用到的術語縮寫。
術語 數值 含義 備注
十進制 十六進制
SOH 1 01H 數據塊開始
EOT 4 04H 發送結束
ACK 6 06H 認可響應
NAK 21 15H 不認可響應 對於CRC校驗的協議軟體,本信號用字母「C」(43H)代替。
DLE 16 10H 中止數據連接
X-on 17 11H 數據傳送啟動 當通信雙方的速度不一致時,可採用該字元來調節通信速度,比如接收方速度太慢而導致接收緩沖器滿時,發送「X-off」給發送方,使發送方暫停發送數據。相當於RS232介面的DSR,CTS等信號。
X-off 19 13H 數據傳送停止
SYN 22 16H 同步
CAN 24 18H 撤銷傳送
圖表 2:XMODEM協議的控制字元
上表中各個縮寫也是標准ASCII碼的一個字元,在XMODEM協議中需要使用這些字元來表達協議的狀態。而其基本含義如表中所述。
2.2 數據幀格式與文件分解
XMODEM協議每次傳送的數據幀長度為132位元組,其中文件數據佔128位元組,其他4個位元組分別為開始標志,塊序號,塊序號的補碼和校驗位元組。其中開始標志,塊序號,塊序號的補碼位於數據塊開始, 校驗位元組位於數據塊結尾,如:
偏移 位元組數 名稱 描述 說明
名稱 數值(HEX)
0 1 SOH 01 起始位元組標志
1 1 Seq 1~FFh 塊序號
2 1 cmpl FFH-seq 塊序號的補碼
3 128 data ? 文件內容數據
131 1 csum ? 垂直累加和校驗 1:XMODEM協議允許使用2種校驗碼。2:校驗碼只從128位元組的數據進行計算後得出,頭部3個位元組不參加校驗和運算。
2 CRC ? 16位循環冗餘校驗
圖表 3:XMODEM協議的數據幀格式
如果文件長度不是128位元組的整數倍,最後一個數據塊的有效內容必然小於幀長,剩下部分需要用其他數據來填充,XMODEM建議使用「CTRL-Z」(=26(01aH)),這種情況下,接收方如何區別該幀中屬於文件的內容和填充的內容呢?
如果傳送的文件是只包含字母、數字和可顯示符號的文本文件(例如C程序源代碼文件),那麼根據內容本身接收方是可以區分的(「26」不是字母或者數字的ASCII碼),如果傳送的是任意數值的二進制文件(如程序目標碼),則接收方是無法區分文件內容和填充內容。
重要提示:XMODEM協議不能保證接收方接收的文件長度和發送方完全一致,接收方所接收的文件數據長度總是128位元組的整數倍,比發送文件的實際長度要大1到127位元組。多出的內容位於文件結尾處。
XMODEM協議的這種缺點對於用於嵌入式系統的程序代碼下裝沒有實際影響,處理器不會將填充內容當作代碼執行,只要程序存儲器的容量足夠,能存儲接收的所有數據就可以了。如果將XMODEM協議用於資料庫下裝,應當考慮多餘內容的影響,一般標准資料庫文件中均有表示資料庫尺寸、欄位數、記錄數等資料庫結構參數,所以也不會把填充內容當作資料庫的記錄本身。
同樣,對於漢字型檔這種資料庫,使用XMODEM協議來下載也不會產生問題。
2.3 校驗演算法
校驗碼是對發送數據進行某種計算得到的編碼,為了防止數據在發送途中某些位發生錯誤,各種數據通信協議規定發送方除了發送應用數據外,還要發送校驗碼,而數據接收方則根據同樣演算法從收到的應用數據中計算出校驗碼,並和發送方發送的校驗碼比較,如相等,才認為收到了正確的數據。
在XMODEM協議中,可使用垂直累加和或者CRC校驗,使用CRC校驗的通信軟體可以自動從CRC校驗自動切換到累加和校驗模式。在本應用中,我們使用垂直累加和校驗。
累加和校驗碼是將所有發送數據的和按位元組累加,保留其最低位元組作為校驗碼,例如,發送的3個位元組數據分別為255(FFh),5(05h),6(06h), 則:
1 1 1 1 1 1 1 1 FFH
0 0 0 0 0 1 0 1 05H
0 0 0 0 0 1 1 0 06H
1 0 0 0 0 1 0 1 0 -> 0000 1010
將高位丟棄後,得到累加和校驗碼為0Ah(10)。在上例中,如果原來數據在途中發生了變化,如FFH變為FEH,06H變為07H, 05H未變,則接收方所計算的校驗碼為:
接收 發送
1 1 1 1 1 1 1 0 FEH <- FFH
0 0 0 0 0 1 0 1 05H < - 05H
0 0 0 0 0 1 1 1 07H <- 06H
1 0 0 0 0 1 0 1 0 -> 0000 1010
校驗碼也為0AH。可見,在數據中有2位改變時,接收方所計算的校驗碼仍然與發送方一致,這種校驗方式不能檢測偶數位的誤碼。
XMODEM協議的校驗碼只對數據幀中的128位元組數據進行計算後得出,頭部3個位元組不參加校驗和運算。
2.4 XMODEM協議的啟動
XMODEM協議開始是文件接收方發出「NAK」位元組,文件發送方在收到該信號後發送數據幀,雙方開始正常通信過程。而文件發送方進入XMODEN協議後,等待對方發送」NAK」,如果等待時間超過60秒,則退出本次通信。
接收方發出「NAK」後,如果10秒後對方還沒有發送第一個數據幀,則重復發送「NAK」,這種重復次數最多允許10次,仍然沒有收到第一個數據塊,則退出本次通信。
(A):發送方軟體延遲100秒以上工作導致不能啟動協議
(B):接收方軟體延遲60秒發送」NAK」信號導致不能啟動協議
圖表 4 XMODEM協議不能啟動的2種情況
在嵌入式系統通過PC機來下載軟體的應用中,嵌入式系統軟體是文件接收方,PC機超級終端軟體是文件發送方。按照協議規定,嵌入式系統 的通信軟體進入XMODEM協議狀態後,PC機軟體必須在100秒內進入協議狀態(即執行超級終端的XMODEM文件傳輸功能),反之,後者先進入協議狀態,前者必須在60秒內進入協議狀態,顯然,通過人工來操作,這種時間差有些緊張。解決辦法只有加長嵌入式系統載入軟體的啟動等待時間,這種修改不會引起協議理解的歧義。
重要提示:為了發送和接收方能夠更容易啟動XMODEM協議,在設計中,將延長嵌入式系統下載軟體的啟動延時時間,在以下的代碼中,將這種延時時間改為600秒(10分鍾)。或者將等待時間設置為無限長,一致發出」NAK」信號,直到PC機上的超級終端軟體運行為止。
2.5 XMODEM的正常傳輸過程
中給出了一次正常的XMODEM通信中收發雙方的通信過程。
圖 5:沒有差錯的文件傳輸過程
文件接收方每收到一個數據幀後,如沒有校驗差錯、序號差錯等情況,均發送一個「ACK」字元作為應答,發送方在收到應答後才開始發送下一個字元,如此反復,直到文件內容傳送完畢,發送方傳送「EOT」字元表示傳送完成,發送方收到後再次以「ACK」回應,至此,整個文件傳輸過程就結束了。
2.6 XMODEM協議的中止
在通信進行過程中,雙方中的任意一方如果希望中止本次通信,可以發送「CAN」字元給對方,現在很多XMODEM協議軟體要求發送2個」CAN」字元來實現,
協議軟體的主動中止通信一般是人為發起的,例如按下超級終端軟體的「取消」按鈕。或者通過拔碼開關來控制嵌入式系統的下載軟體退出通信。
2.7 XMODEM協議的異常處理
在通信過程中,總是要出現各種異常情況,比如通信線路的突然中斷,一方機器停電而導致軟體中止執行等;通信軟體必須能夠檢測這些錯誤,並作出合理的處理。在前面的協議啟動一節中已經涉及到了錯誤檢測的問題,XMODEM對錯誤的規定很詳細,共計有8種情況,協議文本沒有說明是如何引起的,中給出了可能原因,
在嵌入式系統中,考慮到下載軟體一般均有人操作的,也可不考慮錯誤處理,這樣實現實現代碼會減小。在本文中,考慮到協議的完整性,考慮了各種錯誤的處理。
2.8 CRC校驗與累加和校驗方式的切換
XMODEM協議要求支持CRC校驗的通信軟體也能支持累加和校驗,這樣就可以和那些只支持累加和校驗的軟體進行通信,如果文件接收方只支持累加和,而發送方可支持CRC,接收方發送啟動信號為「NAK」,發送方收到後自動按累加和方式發送數據幀;如果相反,接收方支持CRC,而發送方支持累加和,接收方首先發出字母「C」來作為啟動信號,這時接收方應不理睬此信號,發送方在3秒後繼續發送信號「C」,共三次未收到應答後,改為發送「NAK」信號,表示使用累加和方式進行通信了。
如果通信雙方均採用CRC校驗,上述通信握手信號「NAK」用字母「C來代替,其他過程同上。
因為PC機超級終端軟體支持CRC模式,嵌入式系統作為文件接收方,只要發送「NAK」信號就能使對方自動按照校驗和方式通信了。
3 協議分層與層間介面
3.1 協議分層
我們將協議代碼分成3層:物理層,鏈路層和協議應用層。物理層用於控制UART器件,鏈路層處理XMODEM協議,應用層負責將收到的單個128位元組數據塊組合成一個完成的數據塊,並寫入程序存儲器緩沖區。這種分層,在程序移植時只要修改和硬體相關的物理層、應用層代碼,無需修改實現XMODEM協議的鏈路層代碼。
層與層之間通過消息來通信,XMODEM協議沒有規定分層結構和層間消息格式,這里將鏈路層與應用層之間、鏈路層和物理層之間的消息格式統一規定如下:
typedef struct {
int len; /* 消息內容長度,即Message中的內容位元組數 */
char mType; /* 層間消息類型, */
char Message[MAX_ MESSAGE_LEN]; /* 消息內容, 由發送進程填寫 */
} MessageOfLayer;
考慮到XMODEM數據幀為132位元組,定義常量「MAX_MESSAGE_LEN」為132位元組,按OSI標准,層間消息原語有數據請求、數據指示、響應、證實4種類型。給出了A方發送數據,B方接收數據時的層間消息類型圖 6: 單向數據傳送的層間消息順序:①②③④
消息1,2是承載實際數據的數據幀,消息3,4是傳送過程中的應答幀,表明數據已經正確傳送,必須說明的是,在發送數據的證實消息3不是從對方發出的,物理層在發送出數據後,立即向上一層發出證實消息。
在實際應用中,處理正常的數據傳送所需要的消息外,也需要定義一些控制管理消息,下面具體說明層間消息類型和作用。
3.2 鏈路層和物理層間的介面
n 數據請求:該消息用於向物理層發送XMODEM幀數據,包括132位元組的文件數據幀和NAK,ACK,CAN單位元組信號幀等,下載軟體只是接收文件,不需要發送132位元組的文件數據幀。
n 數據證實:物理層收到鏈路層的數據請求幀後,送到UART的緩沖器中,等發送緩沖器為空後,表明該位元組數據發送完成,向鏈路層發送證實消息,鏈路層接收到此消息後,就可以發送下一個位元組,實際上物理層傳送是一個無連接,證實消息不是由接收方產生的,不能表明對方已經正確接收到數據,而只表明已經發出數據。物理層協議一般也不提供有應答的傳輸機制。
n 數據指示:物理層在接收緩沖器滿後,將數據發送給鏈路層。
除了以上3個消息外,物理層和應用層之間還有以下2個消息:
n 啟動電路:由鏈路層向物理層發出,物理層在收到該協議後將串口進行初始化。
n 電路出錯:由物理層向鏈路層發出,用於報告物理層在數據傳送過程中的錯誤。
「數據響應」消息在本應用中不使用。
3.3 鏈路層和應用層間的介面
鏈路層和應用層之間的數據傳輸消息有二個:
n 數據塊指示:由鏈路層收到一個XMODEM協議幀(128位元組)後向應用層發出,應用層收到數據幀後寫入flash memory(PC版本寫入文件)。
n 數據塊塊響應:應用層收到XMODEM數據幀後,並寫入flash memory(PC版本寫入文件)後向鏈路層發出的響應信號。鏈路層收到響應後,向文件發送方發出「ACK」信號。
其他管理控制消息定義了3個:
n 協議啟動:應用層通知鏈路層啟動XMODEM協議。
n 通信結束:鏈路層在收到對方的EOT信號後向應用層發出,應用層收到此消息後,可以轉入應用程序入口,從而執行應用程序。
n 通信中止:鏈路層因為各種情況無法繼續進行XMODEM傳輸時向應用層傳送該消息,應用層收到此消息後,丟棄已經收到的數據,發出通信錯誤指示。
4 分層協議實現
4.1 協議的OS平台
為了實現分層協議,使用中的非搶先式操作系統作為軟體平台,各層分別作為一個進程。
4.2 應用層軟體實現
嵌入式系統下載軟體只接收代碼文件,對於協議中作為文件發送方的處理代碼可不編寫,應用層的任務是接收鏈路層的數據包,根據收到數據包的先後次序寫入程序存儲器,在PC機上模擬實現時,我們將數據存放在一個緩沖區內,完成後寫入文件中,使用windiff軟體和發送文件進行比較,以判斷代碼的是否正確。
應用層的進程初始化代碼的作用是:
n 擦除程序存儲器所使用的FLASH MEMORY(在本例中按29F010來編寫代碼)。
n 啟動一個10秒定時器,10秒後通知鏈路層啟動XMODEM協議。
n
⑶ 如何使用Xmodem傳輸交換機系統文件
內容提要:本文描述了使用XMOMDEM文件傳輸協議的通信程序設計,該設計為具有FLASH存儲器的嵌入式系統提供了和PC機上超級終端軟體之間的文件傳輸功能,在PC機上不安裝專用通信軟體情況下,實現程序在板升級、數據在板定製等,給現場調試和維護帶來方便。另外,本文也描述了基於狀態矩陣的通信軟體編程方法。關鍵字:XMODEM文件下載FSM狀態矩陣1設計目的與用途2XMODEM協議介紹3協議分層與層間介面3.1協議分層3.2鏈路層和物理層間的介面3.3鏈路層和應用層間的介面4分層協議實現4.1協議的OS平台4.2應用層軟體實現4.3鏈路層軟體實現4.4物理層軟體實現5軟體移植6軟體調試方法參考文獻附錄1:XMODEM協議通信的異常情況列表附錄2:XMODEM協議的狀態轉移表附錄3:源代碼文件列表附錄4:完整源代碼1設計目的與用途嵌入式系統的程序代碼一般存放在FLASH存儲器或者OTP存儲器中,後者實際上是一種一次性可編程的EPROM,成本低,適合於批量大的產品使用,但程序寫入後不能修改,使用FLASH的優點是程序可以隨時在板更換,這種特點給現場調試和軟體升級、修改帶來極大方便。對印製板上FLASH編程有幾種方法,原始的方法是使用編程器,由於要將晶元取下,十分不便,也有一些廠家生產的處理器通過JTAG介面或者串口連接到PC機上(如PHILIPS公司的P89C51RD),可以實現處理器內部FLASH的在板編程,但需要專用下載編程軟體(一般由晶元生產廠商提供),無法對處理器外部的FLASH進行編程。使用XMODEM協議進行程序下載是目前很多產品通用的做法,比如CISCO公司的路由器產品,HUAWEI公司的ISDN終端產品,這種方法使用WINDOWS自帶的超級終端軟體來傳送文件,無需安裝專用軟體。只要在目標板上增加一斷實現XMODEM協議的代碼,就可以方便地實現程序或者數據文件的下載了。在下文中,就敘述XMODEM協議程序的實現方法。圖表1:目標板程序由二部分組成:下載程序和應用程序2XMODEM協議介紹XMODEM協議是最早出現的2台計算機間通過RS232非同步串口進行文件傳輸的通信協議標准,相對於YMODEM,ZMODEM等其他文件傳送協議來說,XMODEM協議實現簡單,適合於那些存儲器有限的場合。XMODEM文件發送方將文件分解成128位元組的定長數據塊,每發送一個數據塊,等待對方應答後才發送下一個數據塊,數據校驗採用垂直累加和校驗,也可以採用16位的CRC校驗。屬於簡單ARQ(自動請求重發)協議,所以也適合於2線制的半雙工的RS485網路中使用。2.1術語在具體敘述XMODEM協議的具體內容前,我們先給出協議用到的術語縮寫。術語數值含義備注十進制十六進制SOH101H數據塊開始EOT404H發送結束ACK606H認可響應NAK2115H不認可響應對於CRC校驗的協議軟體,本信號用字母「C」(43H)代替。DLE1610H中止數據連接X-on1711H數據傳送啟動當通信雙方的速度不一致時,可採用該字元來調節通信速度,比如接收方速度太慢而導致接收緩沖器滿時,發送「X-off」給發送方,使發送方暫停發送數據。相當於RS232介面的DSR,CTS等信號。X-off1913H數據傳送停止SYN2216H同步CAN2418H撤銷傳送圖表2:XMODEM協議的控制字元上表中各個縮寫也是標准ASCII碼的一個字元,在XMODEM協議中需要使用這些字元來表達協議的狀態。而其基本含義如表中所述。2.2數據幀格式與文件分解XMODEM協議每次傳送的數據幀長度為132位元組,其中文件數據佔128位元組,其他4個位元組分別為開始標志,塊序號,塊序號的補碼和校驗位元組。其中開始標志,塊序號,塊序號的補碼位於數據塊開始,校驗位元組位於數據塊結尾,如:偏移位元組數名稱描述說明名稱數值(HEX)01SOH01起始位元組標志11Seq1~FFh塊序號21cmplFFH-seq塊序號的補碼3128data?文件內容數據1311csum?垂直累加和校驗1:XMODEM協議允許使用2種校驗碼。2:校驗碼只從128位元組的數據進行計算後得出,頭部3個位元組不參加校驗和運算。2CRC?16位循環冗餘校驗圖表3:XMODEM協議的數據幀格式如果文件長度不是128位元組的整數倍,最後一個數據塊的有效內容必然小於幀長,剩下部分需要用其他數據來填充,XMODEM建議使用「CTRL-Z」(=26(01aH)),這種情況下,接收方如何區別該幀中屬於文件的內容和填充的內容呢?如果傳送的文件是只包含字母、數字和可顯示符號的文本文件(例如C程序源代碼文件),那麼根據內容本身接收方是可以區分的(「26」不是字母或者數字的ASCII碼),如果傳送的是任意數值的二進制文件(如程序目標碼),則接收方是無法區分文件內容和填充內容。重要提示:XMODEM協議不能保證接收方接收的文件長度和發送方完全一致,接收方所接收的文件數據長度總是128位元組的整數倍,比發送文件的實際長度要大1到127位元組。多出的內容位於文件結尾處。XMODEM協議的這種缺點對於用於嵌入式系統的程序代碼下裝沒有實際影響,處理器不會將填充內容當作代碼執行,只要程序存儲器的容量足夠,能存儲接收的所有數據就可以了。如果將XMODEM協議用於資料庫下裝,應當考慮多餘內容的影響,一般標准資料庫文件中均有表示資料庫尺寸、欄位數、記錄數等資料庫結構參數,所以也不會把填充內容當作資料庫的記錄本身。同樣,對於漢字型檔這種資料庫,使用XMODEM協議來下載也不會產生問題。2.3校驗演算法校驗碼是對發送數據進行某種計算得到的編碼,為了防止數據在發送途中某些位發生錯誤,各種數據通信協議規定發送方除了發送應用數據外,還要發送校驗碼,而數據接收方則根據同樣演算法從收到的應用數據中計算出校驗碼,並和發送方發送的校驗碼比較,如相等,才認為收到了正確的數據。在XMODEM協議中,可使用垂直累加和或者CRC校驗,使用CRC校驗的通信軟體可以自動從CRC校驗自動切換到累加和校驗模式。在本應用中,我們使用垂直累加和校驗。累加和校驗碼是將所有發送數據的和按位元組累加,保留其最低位元組作為校驗碼,例如,發送的3個位元組數據分別為255(FFh),5(05h),6(06h),則:->00001010將高位丟棄後,得到累加和校驗碼為0Ah(10)。在上例中,如果原來數據在途中發生了變化,如FFH變為FEH,06H變為07H,05H未變,則接收方所計算的校驗碼為:接收發送11111110FEH00001010校驗碼也為0AH。可見,在數據中有2位改變時,接收方所計算的校驗碼仍然與發送方一致,這種校驗方式不能檢測偶數位的誤碼。XMODEM協議的校驗碼只對數據幀中的128位元組數據進行計算後得出,頭部3個位元組不參加校驗和運算。2.4XMODEM協議的啟動XMODEM協議開始是文件接收方發出「NAK」位元組,文件發送方在收到該信號後發送數據幀,雙方開始正常通信過程。而文件發送方進入XMODEN協議後,等待對方發送」NAK」,如果等待時間超過60秒,則退出本次通信。接收方發出「NAK」後,如果10秒後對方還沒有發送第一個數據幀,則重復發送「NAK」,這種重復次數最多允許10次,仍然沒有收到第一個數據塊,則退出本次通信。(A):發送方軟體延遲100秒以上工作導致不能啟動協議(B):接收方軟體延遲60秒發送」NAK」信號導致不能啟動協議圖表4XMODEM協議不能啟動的2種情況在嵌入式系統通過PC機來下載軟體的應用中,嵌入式系統軟體是文件接收方,PC機超級終端軟體是文件發送方。按照協議規定,嵌入式系統的通信軟體進入XMODEM協議狀態後,PC機軟體必須在100秒內進入協議狀態(即執行超級終端的XMODEM文件傳輸功能),反之,後者先進入協議狀態,前者必須在60秒內進入協議狀態,顯然,通過人工來操作,這種時間差有些緊張。解決法只有加長嵌入式系統載入軟體的啟動等待時間,這種修改不會引起協議理解的歧義。重要提示:為了發送和接收方能夠更容易啟動XMODEM協議,在設計中,將延長嵌入式系統下載軟體的啟動延時時間,在以下的代碼中,將這種延時時間改為600秒(10分鍾)。或者將等待時間設置為無限長,一致發出」NAK」信號,直到PC機上的超級終端軟體運行為止。2.5XMODEM的正常傳輸過程中給出了一次正常的XMODEM通信中收發雙方的通信過程。圖5:沒有差錯的文件傳輸過程文件接收方每收到一個數據幀後,如沒有校驗差錯、序號差錯等情況,均發送一個「ACK」字元作為應答,發送方在收到應答後才開始發送下一個字元,如此反復,直到文件內容傳送完畢,發送方傳送「EOT」字元表示傳送完成,發送方收到後再次以「ACK」回應,至此,整個文件傳輸過程就結束了。2.6XMODEM協議的中止在通信進行過程中,雙方中的任意一方如果希望中止本次通信,可以發送「CAN」字元給對方,現在很多XMODEM協議軟體要求發送2個」CAN」字元來實現,協議軟體的主動中止通信一般是人為發起的,例如按下超級終端軟體的「取消」按鈕。或者通過拔碼開關來控制嵌入式系統的下載軟體退出通信。2.7XMODEM協議的異常處理在通信過程中,總是要出現各種異常情況,比如通信線路的突然中斷,一方機器停電而導致軟體中止執行等;通信軟體必須能夠檢測這些錯誤,並作出合理的處理。在前面的協議啟動一節中已經涉及到了錯誤檢測的問題,XMODEM對錯誤的規定很詳細,共計有8種情況,協議文本沒有說明是如何引起的,中給出了可能原因,在嵌入式系統中,考慮到下載軟體一般均有人操作的,也可不考慮錯誤處理,這樣實現實現代碼會減小。在本文中,考慮到協議的完整性,考慮了各種錯誤的處理。2.8CRC校驗與累加和校驗方式的切換XMODEM協議要求支持CRC校驗的通信軟體也能支持累加和校驗,這樣就可以和那些只支持累加和校驗的軟體進行通信,如果文件接收方只支持累加和,而發送方可支持CRC,接收方發送啟動信號為「NAK」,發送方收到後自動按累加和方式發送數據幀;如果相反,接收方支持CRC,而發送方支持累加和,接收方首先發出字母「C」來作為啟動信號,這時接收方應不理睬此信號,發送方在3秒後繼續發送信號「C」,共三次未收到應答後,改為發送「NAK」信號,表示使用累加和方式進行通信了。如果通信雙方均採用CRC校驗,上述通信握手信號「NAK」用字母「C來代替,其他過程同上。因為PC機超級終端軟體支持CRC模式,嵌入式系統作為文件接收方,只要發送「NAK」信號就能使對方自動按照校驗和方式通信了。3協議分層與層間介面3.1協議分層我們將協議代碼分成3層:物理層,鏈路層和協議應用層。物理層用於控制UART器件,鏈路層處理XMODEM協議,應用層負責將收到的單個128位元組數據塊組合成一個完成的數據塊,並寫入程序存儲器緩沖區。這種分層,在程序移植時只要修改和硬體相關的物理層、應用層代碼,無需修改實現XMODEM協議的鏈路層代碼。層與層之間通過消息來通信,XMODEM協議沒有規定分層結構和層間消息格式,這里將鏈路層與應用層之間、鏈路層和物理層之間的消息格式統一規定如下:typedefstruct{intlen;/*消息內容長度,即Message中的內容位元組數*/charmType;/*層間消息類型,*/charMessage[MAX_MESSAGE_LEN];/*消息內容,由發送進程填寫*/}MessageOfLayer;考慮到XMODEM數據幀為132位元組,定義常量「MAX_MESSAGE_LEN」為132位元組,按OSI標准,層間消息原語有數據請求、數據指示、響應、證實4種類型。給出了A方發送數據,B方接收數據時的層間消息類型圖6:單向數據傳送的層間消息順序:①②③④消息1,2是承載實際數據的數據幀,消息3,4是傳送過程中的應答幀,表明數據已經正確傳送,必須說明的是,在發送數據的證實消息3不是從對方發出的,物理層在發送出數據後,立即向上一層發出證實消息。在實際應用中,處理正常的數據傳送所需要的消息外,也需要定義一些控制管理消息,下面具體說明層間消息類型和作用。3.2鏈路層和物理層間的介面n數據請求:該消息用於向物理層發送XMODEM幀數據,包括132位元組的文件數據幀和NAK,ACK,CAN單位元組信號幀等,下載軟體只是接收文件,不需要發送132位元組的文件數據幀。n數據證實:物理層收到鏈路層的數據請求幀後,送到UART的緩沖器中,等發送緩沖器為空後,表明該位元組數據發送完成,向鏈路層發送證實消息,鏈路層接收到此消息後,就可以發送下一個位元組,實際上物理層傳送是一個無連接,證實消息不是由接收方產生的,不能表明對方已經正確接收到數據,而只表明已經發出數據。物理層協議一般也不提供有應答的傳輸機制。n數據指示:物理層在接收緩沖器滿後,將數據發送給鏈路層。除了以上3個消息外,物理層和應用層之間還有以下2個消息:n啟動電路:由鏈路層向物理層發出,物理層在收到該協議後將串口進行初始化。n電路出錯:由物理層向鏈路層發出,用於報告物理層在數據傳送過程中的錯誤。「數據響應」消息在本應用中不使用。3.3鏈路層和應用層間的介面鏈路層和應用層之間的數據傳輸消息有二個:n數據塊指示:由鏈路層收到一個XMODEM協議幀(128位元組)後向應用層發出,應用層收到數據幀後寫入flashmemory(PC版本寫入文件)。n數據塊塊響應:應用層收到XMODEM數據幀後,並寫入flashmemory(PC版本寫入文件)後向鏈路層發出的響應信號。鏈路層收到響應後,向文件發送方發出「ACK」信號。其他管理控制消息定義了3個:n協議啟動:應用層通知鏈路層啟動XMODEM協議。n通信結束:鏈路層在收到對方的EOT信號後向應用層發出,應用層收到此消息後,可以轉入應用程序入口,從而執行應用程序。n通信中止:鏈路層因為各種情況無法繼續進行XMODEM傳輸時向應用層傳送該消息,應用層收到此消息後,丟棄已經收到的數據,發出通信錯誤指示。4分層協議實現4.1協議的OS平台為了實現分層協議,使用中的非搶先式操作系統作為軟體平台,各層分別作為一個進程。4.2應用層軟體實現嵌入式系統下載軟體只接收代碼文件,對於協議中作為文件發送方的處理代碼可不編寫,應用層的任務是接收鏈路層的數據包,根據收到數據包的先後次序寫入程序存儲器,在PC機上模擬實現時,我們將數據存放在一個緩沖區內,完成後寫入文件中,使用windiff軟體和發送文件進行比較,以判斷代碼的是否正確。應用層的進程初始化代碼的作用是:n擦除程序存儲器所使用的FLASHMEMORY(在本例中按29F010來編寫代碼)。n啟動一個10秒定時器,10秒後通知鏈路層啟動XMODEM協議。n
⑷ CAN匯流排標准格式數據幀的最小位數為多少,最大位數又為多少
標准格式數據幀包括:1位幀起始位,11位ID位+1IRQ位,8個控制位,8位元組的數據位,2位元組的CRC校驗位,7個終止位(記得不一定全面)同時有碼流控制功能,即位填充功能.當出現4個相同電平的位時,會在中間插入1個不同的位.碼流填...
⑸ 關於計算機導論的問題: 為什麼學習如何操作定長數字很重要
定長數字是計算機運輸的基礎,掌握這些有助於了解更深層次的理論。
C語言中定義數組後,系統會按定義數組大小分配空間,例如:int a
則分配10個int型大小的空間,如果定義數組為int a[ n ],n為變數,則系統不知道你需要多大的空間,所以無法分配。
對一塊數據用三個不同的密鑰進行三次加密,強度更高; RC2和 RC4:用變長密鑰對大量數據進行加密,比 DES 快; IDEA(International Data Encryption Algorithm)國際數據加密演算法,使用 128 位密鑰提供非常強的安全性。
(5)定長數據塊記錄格式有多少位擴展閱讀:
字母可以保存到這種數據類型里。州名縮寫就是定長數據類型的一個例子,因為所有的縮寫都是兩個字母組成的。
在定長數據類型里,通常使用空格來填充數量不足的字元。舉例來說,如果欄位長度是10,而輸入的數據只有5位,那麼剩餘5位就會被記錄為空格。填充空格確保了欄位里每個值都具有相同的長度。
⑹ oracle數據類型
按類型分為:字元串類型、數字類型、日期類型、LOB類型、LONG RAW& RAW類型、ROWID & UROWID類型。
在講敘字元串類型前,先要講一下編碼。字元串類型的數據可依編碼方式分成資料庫字元集(CHAR/VARCHAR2/CLOB/LONG)和國際字元集(NCHAR/NVARCHAR2/NCLOB)兩種。資料庫中的字元串數據都通過字元集將字元轉換為數字後(二進制),才存儲到數據塊中。通過不同的編碼集轉換,即便是相同的字元,也可能會轉換成不同的二進制編碼。這也是產生亂碼的原因。資料庫的編碼格式一般是在創建資料庫時指定的。當然也可以修改資料庫的編碼。
一 字元串類型
1.1:CHAR類型 CHAR(size [BYTE | CHAR])
CHAR類型,定長字元串,會用空格填充來達到其最大長度。非NULL的CHAR(12)總是包含12位元組信息。CHAR欄位最多可以存儲2,000位元組的信息。如果創建表時,不指定CHAR長度,則默認為1。另外你可以指定它存儲位元組或字元,例如 CHAR(12 BYTYE) CHAR(12 CHAR).一般來說默認是存儲位元組
注意:資料庫的NLS_CHARACTERSET 為AL32UTF8,即一個漢字佔用三到四個位元組。如果NLS_CHARACTERSET為ZHS16GBK,則一個字元佔用兩個位元組。
1.2: NCHAR類型
這是一個包含UNICODE格式數據的定長字元串。NCHAR欄位最多可以存儲2,000位元組的信息。它的最大長度取決於國家字元集。
1.3 VARCHAR類型
不要使用VARCHAR數據類型。使用VARCHAR2數據類型。
1.4: VARCHAR2類型
變長字元串,與CHAR類型不同,它不會使用空格填充至最大長度。VARCHAR2最多可以存儲4,000位元組的信息。
1.5: NVARCHAR2類型
這是一個包含UNICODE格式數據的變長字元串。 NVARCHAR2最多可以存儲4,000位元組的信息。
二. 數字類型
2.1 NUMBER類型
NUMBER(P,S)是最常見的數字類型,可以存放數據范圍為10130~10126(不包含此值),需要1~22位元組(BYTE)不等的存儲空間。
P 是Precison的英文縮寫,即精度縮寫,表示有效數字的位數,最多不能超過38個有效數字
S是Scale的英文縮寫,可以使用的范圍為-84~127。Scale為正數時,表示從小數點到最低有效數字的位數,它為負數時,表示從最大有效數字到小數點的位數
下面是官方文檔的示例
Actual Data Specified As Stored As
123.89 NUMBER 123.89
123.89 NUMBER(3) 124
123.89 NUMBER(6,2) 123.89
123.89 NUMBER(6,1) 123.9
123.89 NUMBER(3) 124
123.89 NUMBER(4,2) exceeds precision
123.89 NUMBER(6,-2) 100
.01234 NUMBER(4,5).01234
.00012 NUMBER(4,5) .00012
.000127 NUMBER(4,5) .00013
.0000012 NUMBER(2,7) .0000012
.00000123 NUMBER(2,7) .0000012
1.2e-4 NUMBER(2,5) 0.00012
1.2e-5 NUMBER(2,5) 0.00001
2.2 INTEGER類型
INTEGER是NUMBER的子類型,它等同於NUMBER(38,0),用來存儲整數。若插入、更新的數值有小數,則會被四捨五入。
2.3 浮點數
Oracle 資料庫提供了專為浮點數的兩種數值數據類型:
BINARY_FLOAT
BINARY_FLOAT 是 32 位、 單精度浮點數字數據類型。可以支持至少6位精度,每個 BINARY_FLOAT 的值需要 5 個位元組,包括長度位元組。
BINARY_DOUBLE
BINARY_DOUBLE 是為 64 位,雙精度浮點數字數據類型。每個 BINARY_DOUBLE 的值需要 9 個位元組,包括長度位元組。
在數字的列中,浮點數有小數精度。在 BINARY_FLOAT 或 BINARY_DOUBLE 的列中,浮點數有二進制的精度。二進制浮點數支持的特殊值無窮大和 NaN (不是數字)。
2.5 FLOAT類型
FLOAT類型也是NUMBER的子類型。
Float(n),數 n 指示位的精度,可以存儲的值的數目。N 值的范圍可以從 1 到 126。若要從二進制轉換為十進制的精度,請將 n 乘以 0.30103。要從十進制轉換為二進制的精度,請用 3.32193 乘小數精度。126 位二進制精度的最大值是大約相當於 38 位小數精度。
三. 日期類型
日期類型用於存儲日期數據,但是並不是使用一般的格式(2012-08-08)直接存儲到資料庫的。
3.1 DATE類型
DATE是最常用的數據類型,日期數據類型存儲日期和時間信息。雖然可以用字元或數字類型表示日期和時間信息,但是日期數據類型具有特殊關聯的屬性。為每個日期值,Oracle 存儲以下信息: 世紀、 年、 月、 日期、 小時、 分鍾和秒。一般佔用7個位元組的存儲空間。
3.2 TIMESTAMP類型
這是一個7位元組或12位元組的定寬日期/時間數據類型。它與DATE數據類型不同,因為TIMESTAMP可以包含小數秒,帶小數秒的TIMESTAMP在小數點右邊最多可以保留9位
3.3 TIMESTAMP WITH TIME ZONE類型
這是TIMESTAMP類型的變種,它包含了時區偏移量的值
3.4 TIMESTAMP WITH LOCAL TIME ZONE類型
3.5 INTERVAL YEAR TO MOTH
3.6 INTERVAL DAY TO SECOND
四. LOB類型
內置的LOB數據類型包括BLOB、CLOB、NCLOB、BFILE(外部存儲)的大型化和非結構化數據,如文本、圖像、視屏、空間數據存儲。BLOB、CLOB、NCLOB類型
4.1 CLOB 數據類型
它存儲單位元組和多位元組字元數據。支持固定寬度和可變寬度的字元集。CLOB對象可以存儲最多 (4 gigabytes-1) * (database block size) 大小的字元
4.2 NCLOB 數據類型
它存儲UNICODE類型的數據,支持固定寬度和可變寬度的字元集,NCLOB對象可以存儲最多(4 gigabytes-1) * (database block size)大小的文本數據。
4.3 BLOB 數據類型
它存儲非結構化的二進制數據大對象,它可以被認為是沒有字元集語義的比特流,一般是圖像、聲音、視頻等文件。BLOB對象最多存儲(4 gigabytes-1) * (database block size)的二進制數據。
4.4 BFILE 數據類型
二進制文件,存儲在資料庫外的系統文件,只讀的,資料庫會將該文件當二進制文件處理
五. RAW & LONG RAW類型
5.1 LONG類型
它存儲變長字元串,最多達2G的字元數據(2GB是指2千兆位元組, 而不是2千兆字元),與VARCHAR2 或CHAR 類型一樣,存儲在LONG 類型中的文本要進行字元集轉換。ORACLE建議開發中使用CLOB替代LONG類型。支持LONG 列只是為了保證向後兼容性。CLOB類型比LONG類型的限制要少得多。 LONG類型的限制如下:
1.一個表中只有一列可以為LONG型。(Why?有些不明白)
2.LONG列不能定義為主鍵或唯一約束,
3.不能建立索引
4.LONG數據不能指定正則表達式。
5.函數或存儲過程不能接受LONG數據類型的參數。
6.LONG列不能出現在WHERE子句或完整性約束(除了可能會出現NULL和NOT NULL約束)
5.2 LONG RAW 類型,能存儲2GB 的原始二進制數據(不用進行字元集轉換的數據)
5.3 RAW類型
用於存儲二進制或字元類型數據,變長二進制數據類型,這說明採用這種數據類型存儲的數據不會發生字元集轉換。這種類型最多可以存儲2,000位元組的信息
六. ROWID & UROWID類型
在資料庫中的每一行都有一個地址。然而,一些錶行的地址不是物理或永久的,或者不是ORACLE資料庫生成的。
例如,索引組織錶行地址存儲在索引的葉子,可以移動。
例如,外部表的ROWID(如通過網關訪問DB2表)不是標準的ORACLE的rowid。
ORACLE使用通用的ROWID(UROWIDs)的存儲地址的索引組織表和外表。索引組織表有邏輯urowids的,和國外表的外urowids。UROWID這兩種類型的存儲在ROWID偽(堆組織的表的物理行id)。
創建基於邏輯的rowid在表中的主鍵。邏輯的rowid不會改變,只要主鍵不改變。索引組織表的ROWID偽UROWID數據類型。你可以訪問這個偽列,你會堆組織表的ROWID偽(即使用一個SELECT …ROWID語句)。如果你想存儲的rowid索引組織表,那麼你就可以定義一列的表型UROWID到列檢索值的ROWID偽。
⑺ 存放在磁碟上的信息,一般是以什麼形式存放的
碟片的上下兩面都能記錄信息,通常把磁碟片表面稱為記錄面。記錄面上一系列同心圓稱為磁軌。每個碟片表面通常有幾十到幾百個磁軌,每個磁軌又分為若干個扇區。
磁軌的編址是從外向內依次編號,最外一個同心圓叫0磁軌,最裡面的一個同心圓叫n磁軌,n磁軌裡面的圓面積並不用來記錄信息。扇區的編號有多種方法,可以連續編號,也可間隔編號。磁碟記錄面經這樣編址後,就可用n磁軌m扇區的磁碟地址找到實際磁碟上與之相對應的記錄區。除了磁軌號和扇區號之外,還有記錄面的面號,以說明本次處理是在哪一個記錄面上。例如對活動頭磁碟組來說,磁碟地址是由記錄面號(也稱磁頭號)、磁軌號和扇區號三部分組成。
在磁軌上,信息是按區存放的,每個區中存放一定數量的字或位元組,各個區存放的字或位元組數是相同的。為進行讀/寫操作,要求定出磁軌的起始位置,這個起始位置稱為索引。索引標志在感測器檢索下可產生脈沖信號,再通過磁碟控制器處理,便可定出磁軌起始位置。
磁碟存儲器的每個扇區記錄定長的數據,因此讀/寫操作是以扇區為單位一位一位串列進行的。每一個扇區記錄一個記錄塊。數據在磁碟上的記錄格式如下:
每個扇區開始時由磁碟控制器產生一個扇標脈沖。扇標脈沖的出現即標志一個扇區的開始。兩個扇標脈沖之間的一段磁軌區域即為一個扇區(一記錄塊)。每個記錄塊由頭部空白段、序標段、數據段、校驗欄位及尾部空白段組成。其中空白段用來留出一定的時間作為磁碟控制器的讀寫准備時間,序標被用來作為磁碟控制器的同步定時信號。序標之後即為本扇區所記錄的數據。數據之後是校驗字,它用來校驗磁碟讀出的數據是否正確。
⑻ 什麼是塊數據
數據塊是一組或按順序連續排列在一起的幾組記錄,是主存儲器與輸入、輸出設備或外存儲器之間進行傳輸的一個數據單位。是數據的物理記錄,與數據的邏輯記錄(邏輯上有聯系,在存儲器上佔有一組鄰接單元的數據單位)之間的對應關系有3種方式:①一個塊即為一個記錄;②一個塊包含若干個邏輯記錄;③一個邏輯記錄佔有幾個塊。數據塊的大小可以是固定的或是可變的,塊與塊之間有間隙。設計數據塊大小,受到多方面因素的影響,包括輸入、輸出效率,存儲空間代價以及計算機應用特點等。
在 text 、ntext 和 image 數據中,數據塊是應用程序和 SQL Server 2000 實例之間一次傳輸的數據單元。該術語還適用於這些數據類型的存儲單元。在磁帶備份文件中,數據塊是物理 I/O 的單元。
⑼ 誰來幫忙解答下計算機組成原理的幾道考題
運算器、存儲器、控制器、輸入/輸出設備
運算器:用來完成算術運算和邏輯運算,並將運算的中間結果暫存在運算器內。
存儲器:用來存放數據和程序。
控制器:用來控制、指揮程序和數據的輸入、運行以及處理運算結果。
輸入設備用來將人們熟悉的信息形式轉換為機器能識別的信息形式,常見的有鍵盤、滑鼠等。
輸出設備可將機器運算結果轉換為人們熟悉的信息形式,如列印機、顯示器輸出等。
4、四組每組2片