- 相關(guān)推薦
RTLinux下的一種實(shí)時(shí)應(yīng)用通信機(jī)制
摘要:RTLinux實(shí)時(shí)應(yīng)用程序的開發(fā)模式;詳細(xì)說明兩種在實(shí)時(shí)模塊與非實(shí)時(shí)模塊之間進(jìn)行通信的主要通信接口的實(shí)現(xiàn)和使用方式;提出一種將以上兩種接口有機(jī)結(jié)合的實(shí)時(shí)應(yīng)用內(nèi)部通信機(jī)制,并通過實(shí)驗(yàn)證該方法的可操作性。實(shí)時(shí)性是多任務(wù)嵌入式系統(tǒng)的基本特征之一,主要表現(xiàn)為對(duì)重要性各不相同的任務(wù)進(jìn)行統(tǒng)籌兼顧的合理調(diào)度能力。根據(jù)應(yīng)用系統(tǒng)對(duì)時(shí)限要求的嚴(yán)格程度又分為軟實(shí)時(shí)和硬實(shí)時(shí)。
RTLinux作為Linux最為通用的幾種硬實(shí)時(shí)擴(kuò)展之一,表現(xiàn)了良好的硬實(shí)時(shí)性。同時(shí),為了更有效地為各種實(shí)時(shí)應(yīng)用服務(wù),提供了多種與Linux中非實(shí)時(shí)進(jìn)行通信的接口,主要有共享內(nèi)存、RT_FIFO和線程信號(hào)驅(qū)動(dòng)機(jī)制,三者的應(yīng)用重點(diǎn)各不相同。其中前兩種較為常用[1]。由于不的實(shí)現(xiàn)機(jī)理,這兩種接口的應(yīng)用范疇各有側(cè)重。經(jīng)過實(shí)踐,筆者認(rèn)為將以上兩種接口有機(jī)地結(jié)合,利用共享內(nèi)存?zhèn)魉痛笕萘、?duì)讀/寫時(shí)序要求不高的數(shù)據(jù)信息;同時(shí),利用RT_FIFO輔助實(shí)現(xiàn)對(duì)該共享內(nèi)存的同步控制,能夠綜合兩者的優(yōu)勢(shì),是RTLinux下一種十分有效的實(shí)時(shí)應(yīng)用通信模式。
1 RTLinux的結(jié)構(gòu)和應(yīng)用程序開發(fā)模式
作為Linux的硬實(shí)時(shí)擴(kuò)展,RTLinux一個(gè)重要的計(jì)準(zhǔn)則在于:盡可能多地利用Linux內(nèi)核所能提供的功能[2]。
顯示、記錄、設(shè)備初始化、阻塞式動(dòng)態(tài)資源分配和模塊化內(nèi)核管理等無實(shí)時(shí)要求或者與硬實(shí)時(shí)性要求相悖的服務(wù)均由Linux提供。RTLinux內(nèi)核則主要為實(shí)時(shí)任務(wù)提供對(duì)硬件的直接訪問,使得它們具有最小的延遲和最優(yōu)先的處理器利用權(quán)。
基于以上準(zhǔn)則,RTLinux中的實(shí)時(shí)應(yīng)用程序開發(fā)通常具有一個(gè)通用的模式,如圖1所示。按照運(yùn)行環(huán)境和對(duì)實(shí)時(shí)要求的嚴(yán)格程度分為實(shí)時(shí)和非實(shí)時(shí)兩個(gè)模塊。非實(shí)時(shí)模塊的功能包括結(jié)果數(shù)據(jù)顯示。用戶交互、數(shù)據(jù)存儲(chǔ)等;實(shí)時(shí)模塊主要負(fù)責(zé)響應(yīng)數(shù)據(jù)采集外設(shè)的中斷,結(jié)果數(shù)據(jù)的采集。兩者通過RT_FIFO或者共享內(nèi)存進(jìn)行通信,組成一個(gè)完整的實(shí)時(shí)數(shù)據(jù)采集程序。
2 RTLinux中的兩種通信接口
RTLinux提供了RT_FIFO和共享內(nèi)存兩種標(biāo)準(zhǔn)通信接口,用于實(shí)時(shí)任務(wù)和非實(shí)時(shí)任務(wù)之間的交互。
2.1 RT_FIFO
RT_FIFO(First-In-First-Out,先進(jìn)先出)是一種提案隊(duì)列機(jī)制組織的字符設(shè)備。在Linux文件系統(tǒng)中,主設(shè)備號(hào)為150。一個(gè)系統(tǒng)平臺(tái)中能夠同加載FIFO的模塊數(shù)RTF_NO定義在rt_fifo_new.c中,一般為64,在文件系統(tǒng)中分別對(duì)慶設(shè)備文件/dev/rtf0..63。在系統(tǒng)資源允許的情況下,一個(gè)用戶進(jìn)程所能同時(shí)使用的FIFO數(shù)和每個(gè)FIFO的容量是沒限制的。
RT_FIFO具有如下特征:
*隊(duì)列中的數(shù)據(jù)傳送采用數(shù)據(jù)流形式,必須自行定義數(shù)據(jù)邊界監(jiān)測(cè)機(jī)制,尤其對(duì)于不定長度數(shù)據(jù)的傳輸。
*具備完善的同步阻塞機(jī)制,利用同一FIFO進(jìn)行通信的兩進(jìn)程間無需自行增加同步控制。
*一種點(diǎn)對(duì)點(diǎn)的通信通道,不支持單生產(chǎn)者、多消費(fèi)者的使用模式。
作為一個(gè)完善的隊(duì)列模塊,RT_FIFO的使用簡便易行,具體實(shí)現(xiàn)主要包括創(chuàng)建、讀/寫操作、釋放三個(gè)步驟。在Linux文件系統(tǒng)中,RT_FIFO是一個(gè)字符設(shè)備文件,所以在非實(shí)時(shí)線程中訪問RT_FIFO時(shí),使用標(biāo)準(zhǔn)的字符設(shè)備讀/寫函數(shù)即可(read、write、open、close,etc)。以上函數(shù)的調(diào)用方式均為阻塞式調(diào)用:當(dāng)FIFO中有數(shù)據(jù)可讀時(shí),立即返回;否則,會(huì)陷入無限等待之中。
從RT進(jìn)程中訪問RT_FIFO,所涉及到的RTLAPI如下:
#include
【RTLinux下的一種實(shí)時(shí)應(yīng)用通信機(jī)制】相關(guān)文章:
基于RTLinux的實(shí)時(shí)控制系統(tǒng)03-20
用Borland C 3.1實(shí)現(xiàn)外設(shè)與Windows應(yīng)用程序?qū)崟r(shí)通信03-21
PPLive通信機(jī)制與流量識(shí)別研究03-07
圖像實(shí)時(shí)傳輸技術(shù)在我院中的應(yīng)用03-18
ERP環(huán)境下的成本實(shí)時(shí)監(jiān)控系統(tǒng)03-21
實(shí)時(shí)超聲造影在肝臟疾病診斷中的應(yīng)用03-08
淺談地鐵通信系統(tǒng)構(gòu)成與相關(guān)移動(dòng)通信的應(yīng)用12-04