国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

構建基于RTLinux的嵌入式系統研究與開發

發布時間:2010-9-20 12:05    發布者:eetech
關鍵詞: RTLinux , 嵌入式系統
Linux或經過簡單改進的Linux都是不能運行實時任務,這是因為Linux的“公平”時間分配的調度算法要保證分配給每一個用戶程序占用CPU時間,然而實時任務對執行時間要求很嚴格,如每隔200ns從傳感器取樣的實時任務。Linux系統的虛擬內存的內存管理使得任何用戶進程的頁面在任何時刻都能被交換到硬盤或外存儲器中,這樣在Linux中將需要的頁面返回到RAM中也需要花費一段不確定的時間。另外,對任務執行的時間和任務完成時間都是沒有精確的可預知性的。Linux操作系統的“天生”缺陷使得Linux無法滿足實時嵌入式系統的實時系統要求。在本文中我們主要討論實時操作系統RTLinux和Linux有機集成在一起,構成了一個全新的實時系統。  

RTLinux的實現機理  

RTLinux是美國新墨西哥州大學計算機科學系VictorYodaiken和Micae Brannanov開發的。它在Linux內核的下層實現了一個簡單的實時內核,而Linux本身作為這個實時內核的優先級最低的任務,所有的實時任務的優先級都高于Linux系統本身的以及Linux系統下的一般任務。RTLinux的體系結構如圖1所示。  



RTLinux的設計思想是:應用硬件的實時約束將實時程序分割成短小簡單的部分,較大部分承擔較復雜的任務。根據這一原則,將應用程序分為硬實時和程序2個部分。硬件實時部分被作為實時任務來執行,并從外部設備拷貝數據到一個叫做實時有名管道(RTFIFO)的特殊I/O端口;程序主要部分作為標準Linux進程來執行。它將從RTFIFO中讀取數據,然后顯示并存儲到文件中,實時部分將被寫入內核。設計實時有名管道是為了使實時任務在讀和寫數據時不被阻塞。圖2所示的是實時有名管道結構圖。



RTLinux通過對標準Linux內核進行改造,將Linux內核工作環境作了一些變化。如圖2所示,在Linux進程和硬件中斷之間,本來由Linux內核完全控制,現在在Linux內核和硬件中斷的地方加上了一個RTLinux內核的控制。Linux的控制信號都要先交給RTLinux內核進行處理。在RTLinux內核中實現了一個虛擬中斷機制,Linux本身永遠不能屏蔽中斷,它發出的中斷屏蔽信號和打開中斷信號都修改成向RTLinux發送一個信號。如在Linux里面使用“SI”和“CLI”宏指令,讓RTLinux里面的某些標記做了修改。也就是說將所有的中斷分成Linux中斷和實時中斷兩類。如果RTLinux內核接收到的中斷信號是普通Linux中斷,那就設置一個標志位;如果是實時中斷,就繼續向硬件發出中斷。在RTLinux中執行STI將中斷打開之后,那些設置了標志位表示的Linux中斷就繼續執行,因此,CLI并不能禁止RTLinux內核的運行,卻可以用來中斷Linux。Linux不能中斷自己,而RTLinux可以。  

這里體現了RTLinux設計過程中的原則:在實時模塊中的工作量盡量少,如果能在Linux中完成而不影響實時性能的話,就盡量在Linux中完成,因此,RTLinux內核可以盡量做得簡單。在RTLinux內核中,不應該等待資源,也不需要使用共享旋轉鎖。實時任務和Linux進程之間的通信也是非阻塞的,從來不用等待進隊列和出隊列的數據。RTLinux將系統和設備的初始化交給了Linux 完成,對動態資源的申請和分配也交給了Linux。  

RTLinux使用靜態分配的內存來完成硬件實時任務,因為在沒有內存資源的時候,被阻塞的線程是不可能具有實時能力的。  

輕量級TCP/IP協議棧IwIP向RTLinux的移植

IwIP概述  

lwIP是瑞典計算機科學研究所(SICS)的計算機與網絡結構實驗室(CNA)的AdamDunkel設計的一個小型的獨立的TCP/IP協議棧。lwIPTCP/IP協議棧設計的思想是:在保持完整的TCP/IP協議棧的前提下最大限度的降低其所需的資源,以適應只有十幾KbytesRAM和40Kbytes左右的ROM的嵌入式系統。IwIP協議棧包含了IP,IPv6,ICMP,UDP和TCP等協議。  

IwIP協議棧不是像TCP/IP網絡協議那樣分不同層次,每一層分別負責不同的通訊功能。IwIP設計的初衷是應用于嵌入式系統,嵌入式系統通常有較強的實時性和內存容量有限等特點,因此IwIP在網絡協議棧中不是完全遵守網絡協議棧的分層體系結構進行設計的。例如應用層為了提高實時性,它并沒有遵守“上層調用下層提供的服務,下層向上層提供服務”這個協議分層設計的原則,而是應用層和其下層共享系統內部的緩沖區,從而節省應用程序與下層協議之間的數據復制所需的系統開支。  

IwIP除了上面提到的TCP/IP協議棧外,它還包含了一些應用支撐模塊。這些支撐模塊是操作系統抽象層模塊(sys_archmodule)、內存管理模塊、網絡功能接口模塊和校驗和計算模塊。這些模塊中,除了操作系統抽象層外,其他模塊都是相互獨立的。IwIP棧向RTLinux上的移植的關鍵點就是將它新增的對操作系統函數調用和數據結構添加或集成到操作系統抽象層模塊中。這樣,操作系統抽象層向其他調用它的模塊提供統一的API接口,使得系統的移植與具體的硬件系統無關,降低了系統移植的復雜性。操作系統抽象層提供的外部應用接口中包括了諸如線程管理、定時器管理以及中斷管理等系統資源管理接口。由于該部分內容在很多書籍和資料中都已經做了很詳盡的論述,在此不再做詳細闡述了。

RTLinux中的網絡驅動程序的設計  

網絡驅動程序的功能主要是賦予本機網絡IP地址、掩碼、網關地址和收發網絡數據包等。IwIP包含有網絡接口驅動程序,但是這些驅動程序是針對標準Linux系統的,而非RTLinux的,因此我們有要將這些網絡接口驅動程序進行適當的改造以適用于RTLinux系統。在RTLinux系統中,我們是利用前面提到的RTFIFO對網絡接口驅動程序進行功能擴展和性能改進。這樣,Linux系統和RTLinux系統就像2個獨立的系統。  

RTLinux中進程之間、內核與進程之間都是通過信號(signal)進行相互通信的。信號是基于POS2IX標準,RTLinux的設備驅動程序也是基于POSIX標準,它可以調用標準的文件操作函數如open,read,write,close等。但是基于POSIXb標準的信號存在一個問題,那就是每次進程只能接收一個信號,后續的信號無法被接收,網絡驅動程序的這種“串行”處理網絡數據包的方式和網絡上數據包傳輸的突發性的特點對嵌入式系統是一個很大的障礙和威脅。因為嵌入式系統的內存是極其有限的資源,上述那種處理方式很容易造成系統緩沖區滿負荷從而導致系統內存溢出,更壞的后果可能是導致整個系統的崩潰。在研究了上述問題后,筆者借鑒了標準Linux系統中實時信號(Linux內核沒有利用實時信號)的特點,提出了將數據包接收處理線程注冊到網絡驅動程序中,當有數據包到達時,網絡驅動程序即刻通知該線程去接收抵達的數據包。同時,在添加一個全程變量,用來跟蹤記錄當前被掛起的信號數目。這樣既可以提高系統的處理接收數據包的實時性能,同時又解決了POSIX標準中信號接收的問題。這個處理機制的代碼實現也是很簡單的,其部分主要代碼如下所示。  

do{
read(fd,(void3)&receive,1546);
}while(dec_pendent_signals());
上面那段代碼中的dec_pendent_signals函數的功能流程大致如下:
intDec_pendent_signals()
{……
stop_interrupt(…);關中斷
if(pendent_signals==1)retval=0;
pendentsignals;接收并處理被掛起的信號對列里的一個信號allow_inerrupt(…);
開中斷
……}  

中斷處理程序  

網絡接口中斷處理程序也同樣存在前面提到的問題,即當驅動程序正在處理一個數據包接收中斷時,后續數據包到達時網卡產生的硬件中斷都無法被驅動程序接收到。筆者在此提出了一個較為合理的解決方案。在網卡驅動程序初始化時,驅動程序給網卡分配一個指向系統內存的指針,這個指針是個單循環指針鏈表。此設計的好處在于當有數據包到達時,網卡可以將數據包緩存在這片系統內存中,并將相應的標志位置位。當該數據包被上層應用成功接收后,該標志位也復位。下面這段代碼是用直觀的程序語言進行描述的。  

while(next_UPD->UpPkStatus&UPLOADED){  

receive_packet();}  

代碼中的UPLOADED就是上面提到的標志位。我們可以用更直觀的圖例描述這個解決方案,如圖3所示(圖3中的UPD表示接收包描述符,即Upload Packet Descriptors)。  



從圖3我們可以看出:系統能否最大限度的降低丟包率,在很大程度上取決于接收數據緩沖區的容量。一方面,嵌入式系統的內存是很寶貴也很有限的資源,另一方面,系統能否正常工作以及性能穩定在很大程度上又決定于內存資源的合理布局與分配。就網絡接口而言,考慮到網絡中多播和組播數據包的存在,網絡接口需要把他們都接收下來,然后判斷該數據包是否是發給自己的。由于網絡中這樣的多播和組播數據包在所有傳輸的數據包中占有很大部分比例,因此,倘若網絡接口沒有及時處理收到的數據包,該數據包就可能被后續到達的數據所覆蓋。因此,如何從兩者中找到一個折衷的方案是在實踐過程中,針對具體的系統做不同的設計。

結束語  

計算機與通信技術日新月異,尤其在因特網方面,將RTLinux應用在針對實時嵌入式系統的研究與開發也越來越受到人們的關注。本文中我們比較詳細的介紹了將IwIP移植到RTLinx的過程,并就RTLinux下的網絡驅動程序設計作了比較深入的研究與實踐。實時嵌入式系統是當前的研究與實踐的一個熱點,有許多問題亟需解決,本文只是冰山上的一角,希望能拋磚引玉。
本文地址:http://m.qingdxww.cn/thread-28138-1-1.html     【打印本頁】

本站部分文章為轉載或網友發布,目的在于傳遞和分享信息,并不代表本網贊同其觀點和對其真實性負責;文章版權歸原作者及原出處所有,如涉及作品內容、版權和其它問題,我們將根據著作權人的要求,第一時間更正或刪除。
您需要登錄后才可以發表評論 登錄 | 立即注冊

廠商推薦

  • Microchip視頻專區
  • 使用SAM-IoT Wx v2開發板演示AWS IoT Core應用程序
  • 使用Harmony3加速TCP/IP應用的開發培訓教程
  • 集成高級模擬外設的PIC18F-Q71家族介紹培訓教程
  • 探索PIC16F13145 MCU系列——快速概覽
  • 貿澤電子(Mouser)專區

相關視頻

關于我們  -  服務條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯系我們
電子工程網 © 版權所有   京ICP備16069177號 | 京公網安備11010502021702
快速回復 返回頂部 返回列表
主站蜘蛛池模板: 涩涩涩在线视频| 午夜国产精品福利在线观看| 亚洲图片色| 18日本人XXXXXX18| 国产亚洲视频在线播放香蕉| 性夜影院爽黄A爽免费动漫| 欧美日中文字幕| 色站综合| 香蕉国产综合久久猫咪| 亚洲天堂成人在线| 国模啪啪久久久久久久| 宿舍BL 纯肉各种PLAY H| 羞羞的影院| 日韩a一级欧美一级在线播放 | 日本三级黄色大片| 亚洲欧美成人综合在线| 日本高清在线视频www色下载| 色欲都市| a级毛片黄免费a级毛片| 麻豆沈芯语| 午夜欧美精品久久久久久久| 日韩亚洲一区中文字幕在线| 字幕网中文aⅴ资源站| 一个人的免费影院| 国产精品亚洲精品爽爽| 色呦呦人人视频| 亚洲欧美人成综合导航| 性网站视频| 在线观看中文字幕2021| 国产欧美一区二区三区在线看| 亚洲中文字幕乱码熟女在线| 亚洲国产精品一区二区第四页| 香蕉毛片a| 又大又硬又猛又黄又湿又爽| 噜噜噜在线AV免费观看看| 永久精品视频无码一区 | 人人看97| 深夜视频在线播放| 办公室韩国电影免费完整版| 青青草AV国产精品| 奇米888在线看奇米999|