在工業(yè)控制領(lǐng)域,很多時(shí)候?qū)ο到y(tǒng)實(shí)時(shí)性的要求較高,下面就通過英創(chuàng)公司的EM9160(內(nèi)核為Linux-2.6)和EM9280(內(nèi)核為L(zhǎng)inux-3.9)工控主板,對(duì)Linux的不同版本2.6和3.9進(jìn)行實(shí)時(shí)性的探究,對(duì)它們分別測(cè)試,得出測(cè)試結(jié)果,通過實(shí)驗(yàn)數(shù)據(jù)說明Linux-2.6和Linux-3.9在實(shí)時(shí)性方面的差別。
實(shí)時(shí)性的一個(gè)重要參數(shù)就是任務(wù)的響應(yīng)延遲時(shí)間,它包含了其它幾個(gè)重要的實(shí)時(shí)性參數(shù)(中斷潛伏期時(shí)間,調(diào)度潛伏期時(shí)間等),任務(wù)響應(yīng)延遲時(shí)間越短,說明任務(wù)對(duì)外部事件的響應(yīng)速度越快,實(shí)時(shí)性也就越好。
本次測(cè)試就是針對(duì)任務(wù)的響應(yīng)延遲時(shí)間進(jìn)行的,使用串口接收整包數(shù)據(jù)然后解包得到數(shù)據(jù),再對(duì)數(shù)據(jù)打包回發(fā)。測(cè)量出串口接收端RX接收數(shù)據(jù)完畢到發(fā)出端TX開始發(fā)送數(shù)據(jù)的時(shí)間間隔,并對(duì)EM9160和EM9280的測(cè)試結(jié)果進(jìn)行比較。
測(cè)試中,使用一塊工控主板通過串口向測(cè)試使用的EM9160和EM9280每秒發(fā)送一個(gè)9字節(jié)的整包數(shù)據(jù)。
測(cè)試中通訊數(shù)據(jù)包定義如下:
0x55 | 0xaa | DestAddr | SourceAddr | DatLen | Dat0 | … | Datn | checksum |
測(cè)試得出的時(shí)間間隔包括兩段,串口RX端接受數(shù)據(jù)完畢至系統(tǒng)響應(yīng)數(shù)據(jù)的延遲時(shí)間和處理數(shù)據(jù)的時(shí)間。這里的處理數(shù)據(jù)非常簡(jiǎn)單,讀取數(shù)據(jù)解包,再打包回發(fā),所用時(shí)間僅為10us不到。所以,測(cè)量出的時(shí)間間隔主要是系統(tǒng)響應(yīng)串口接收數(shù)據(jù)的延遲時(shí)間。
由于測(cè)量任務(wù)的響應(yīng)延遲時(shí)間不同于一般的時(shí)間參數(shù)測(cè)量,它要求很高的時(shí)間測(cè)量精度(至少微秒級(jí))。所以,測(cè)試中采用示波器作為測(cè)試工具,分別測(cè)出在接受處理數(shù)據(jù)時(shí)串口RX端和TX端的波形,觀察波形之間的時(shí)間間隔,就能精確的測(cè)量出串口收發(fā)數(shù)據(jù)的時(shí)間間隔。
根據(jù)上面所闡述的,在EM9160和EM9280工控主板上分別進(jìn)行Linux系統(tǒng)對(duì)任務(wù)響應(yīng)延遲的測(cè)量。
測(cè)試所用程序的一些主要部分;
首先配置并打開串口:
rc = m_Serial.OpenPort( 2, 115200, '8', '1', 'N');
這里為打開ttyS2,波特率115200,8位字符長(zhǎng)度掩碼,1位停止位,無奇偶校驗(yàn)。
數(shù)據(jù)的接收采用建立一個(gè)單獨(dú)線程的方式,在線程中調(diào)用select()函數(shù)等待數(shù)據(jù),當(dāng)接受到數(shù)據(jù)以后,對(duì)數(shù)據(jù)處理,要進(jìn)行相應(yīng)解包,檢驗(yàn)和的驗(yàn)證,并且回發(fā):
pthread_create(&m_thread,&attr,(void *(*) (void *))&ReceiveThreadFunc, (void*)this );
串口發(fā)送數(shù)據(jù)需要經(jīng)過打包處理:
int CSerial::WritePort(unsigned char *Buf, int len ,int fd)
對(duì)該例程感興趣的客戶可以點(diǎn)此下載該例程完整代碼。
在EM9160和EM9280上面都使用同樣的程序進(jìn)行測(cè)試。
基于EM9160平臺(tái),對(duì)Linux-2.6的測(cè)試結(jié)果:
橙色線CH1的波形是串口接收端RX的波形,藍(lán)色線CH2的波形是串口發(fā)送端TX的波形,波形橫軸每一格的單位為2.5ms。測(cè)試波形的截圖如下。
通過對(duì)以上四張圖波形的觀察,可以發(fā)現(xiàn),EM9160工控主板在Linux-2.6的環(huán)境下,系統(tǒng)等任務(wù)的響應(yīng)延遲是一個(gè)范圍值,最短時(shí)間在1ms左右,最長(zhǎng)時(shí)間已經(jīng)超過了10ms。
下面來看基于EM9280平臺(tái),對(duì)Linux-3.9的測(cè)試結(jié)果:
橙色線CH1的波形是串口接收端RX的波形,藍(lán)色線CH2的波形是串口發(fā)送端TX的波形。波形橫軸每一格的單位為250us,測(cè)試波形的截圖如下。
通過對(duì)這三張圖中波形的分析,可以看出,在EM9280工控主板在Linux-3.9的環(huán)境下波形很穩(wěn)定,系統(tǒng)對(duì)任務(wù)的響應(yīng)延遲時(shí)間在1MS以內(nèi)。能夠滿足對(duì)實(shí)時(shí)性的較高要求。
分析實(shí)驗(yàn)數(shù)據(jù),可以發(fā)現(xiàn),Linux-3.9對(duì)任務(wù)的響應(yīng)延遲時(shí)間能夠保持在1ms之內(nèi),而Linux-2.6對(duì)任務(wù)的響應(yīng)延遲時(shí)間最短時(shí)間在1ms左右,但是最長(zhǎng)時(shí)間卻達(dá)到了10ms左右。通過對(duì)比,可以得出Linux-3.9相對(duì)于Linux-2.6在實(shí)時(shí)性上有相對(duì)較大的提升。
本次測(cè)試采用的波特率是115200,這樣可以盡可能的減少數(shù)據(jù)傳輸時(shí)間和接收與發(fā)送超時(shí)的影響,與系統(tǒng)的響應(yīng)時(shí)間對(duì)比,能夠顯現(xiàn)出實(shí)時(shí)性的特點(diǎn)。對(duì)于較慢的波特率,比如9600,4800等,數(shù)據(jù)傳輸本身較慢,等待數(shù)據(jù)傳輸和超時(shí)的時(shí)間也較長(zhǎng),可能一次數(shù)據(jù)傳輸完成的時(shí)間和系統(tǒng)響應(yīng)的時(shí)間已經(jīng)相差不大或者超過系統(tǒng)響應(yīng)時(shí)間,這種情況下,Linux-2.6已經(jīng)能夠滿足實(shí)時(shí)性的要求。但是當(dāng)客戶的傳輸速率較快而且對(duì)實(shí)時(shí)性的要求較高時(shí),建議選用內(nèi)核為L(zhǎng)inux-3.9的工控主板進(jìn)行相關(guān)開發(fā),能夠滿足需求。
-
Linux
+關(guān)注
關(guān)注
87文章
11312瀏覽量
209739 -
嵌入式主板
+關(guān)注
關(guān)注
7文章
6085瀏覽量
35406
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論