<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 如何進(jìn)行基于Linux的嵌入式RTOS研究?

如何進(jìn)行基于Linux的嵌入式RTOS研究?

作者: 時(shí)間:2018-08-06 來(lái)源:網(wǎng)絡(luò ) 收藏

1.引言

本文引用地址:http://dyxdggzs.com/article/201808/385564.htm

從上世紀八十年代開(kāi)始,開(kāi)始出現各種各樣的商用操作系統,這些操作系統大部分都是為專(zhuān)用或通用系統而開(kāi)發(fā),如VxWorks、Windows  CE、pSOS、Palm OS、OS-9、LynxOS、QNX、LYNX  等,它們的優(yōu)點(diǎn)是為用戶(hù)提供良好的開(kāi)發(fā)環(huán)境,提高了應用系統的開(kāi)發(fā)效率,運行效率高、實(shí)時(shí)性好,缺點(diǎn)是價(jià)格昂貴且源代碼封閉。這就不僅影響了開(kāi)發(fā)者的積極性,而且使得整個(gè)產(chǎn)品的成本急劇上升。

結合國內實(shí)情,系統需要的是一套高度簡(jiǎn)練、界面友好、質(zhì)量可靠、應用廣泛、易開(kāi)發(fā)、多任務(wù)、價(jià)格低廉的實(shí)時(shí)操作系統。

產(chǎn)品的開(kāi)發(fā)中,有必要尋找一種廉價(jià)的嵌入式實(shí)時(shí)操作系統,以降低產(chǎn)品的開(kāi)發(fā)成本和系統復雜度。由于的具備的諸多優(yōu)點(diǎn),對進(jìn)行適當的改造后作為廉價(jià)的嵌入式實(shí)時(shí)操作系統是一個(gè)值得探討的、具有實(shí)際意義的問(wèn)題。

2.的特點(diǎn)

Linux是個(gè)與生俱來(lái)的網(wǎng)絡(luò )操作系統,成熟而且穩定。Linux是源代碼開(kāi)放軟件,不存在黑箱技術(shù),任何人都可以修改它,或者用它開(kāi)發(fā)自己的產(chǎn)品。  Linux系統是可以定制的,系統內核目前已經(jīng)可以做得很小。一個(gè)帶有中文系統及圖形化界面的核心程序也可以做到不足1MB,而且同樣穩定。Linux作為一種可裁減的軟件平臺系統,是發(fā)展嵌入式產(chǎn)品的絕佳資源,遍布全球的眾多Linux愛(ài)好者又能給予Linux開(kāi)發(fā)者強大的技術(shù)支持。因此,Linux作為廉價(jià)的嵌入式實(shí)時(shí)操作系統的選擇,是非常有發(fā)展前途的。

(1)與硬件芯片的緊密結合

嵌入式Linux的一大特點(diǎn)是:與硬件芯片(如SOC等)的緊密結合。它不是一個(gè)純軟件的Linux系統,而比一般操作系統更加接近于硬件。嵌入式Linux的進(jìn)一步發(fā)展,逐步地具備了嵌入式的一切特征:實(shí)時(shí)性及與嵌入式處理器的緊密結合。

(2)開(kāi)放的源代碼

嵌入式Linux的另一大特點(diǎn)是:代碼的開(kāi)放性。代碼的開(kāi)放性是與后PC時(shí)代的智能設備的多樣性相適應的。代碼的開(kāi)放性主要體現在源代碼可獲得上,Linux代碼開(kāi)發(fā)就像是&ldquo;集市式&rdquo;開(kāi)發(fā),任意選擇并按自己的意愿整合出新的產(chǎn)品。

對于嵌入式Linux,事實(shí)上是把BIOS層的功能實(shí)現在Linux的driver層。目前,在Linux領(lǐng)域,已經(jīng)出現了專(zhuān)門(mén)為L(cháng)inux操作系統定制的自由軟件的BIOS代碼,并在多款主板上實(shí)現此類(lèi)的BIOS層功能。

3.RT-Linux的實(shí)現機理

RT-Linux對Linux內核進(jìn)行改造,將Linux內核工作環(huán)境做了一些變化,如圖1所示:

從上圖可以看出,在Linux內核和硬件中斷的地方,加上了一個(gè)RT-Linux內核的控制。Linux的控制信號都要先交給RT-Linux內核先進(jìn)行處理。在RT-Linux內核中實(shí)現了一個(gè)虛擬中斷機制,Linux本身永遠不能屏蔽中斷,它發(fā)出的中斷屏蔽信號和打開(kāi)中斷信號都修改成向RT-  Linux發(fā)送一個(gè)信號。如在Linux里面使用&ldquo;sti&rdquo;和&ldquo;cli&rdquo;宏指令來(lái)屏蔽和使能中斷,是通過(guò)向x86處理器發(fā)送一個(gè)指令,而RT-Linux  修改了這些宏指令,使得只是讓RT-Linux里面的某些標記做了修改而已。對所有的中斷,分成Linux中斷和實(shí)時(shí)中斷兩類(lèi),如果RT-Linux內核收到的中斷信號是普通Linux中斷,那就設置一個(gè)標志位;如果是實(shí)時(shí)中斷,就繼續向硬件發(fā)出中斷。在RT  Linux中執行sti將中斷打開(kāi)之后,那些設置了標志位表示的Linux中斷就繼續執行。因此,cli并不能禁止RT  Linux內核的運行,卻可以用來(lái)中斷Linux。Linux不能中斷自己,而RT-Linux可以。

RT-Linux的設計原則:在實(shí)時(shí)內核模塊中的工作盡量少,如果能在Linux中完成而不影響實(shí)時(shí)性能的話(huà),就盡量在Linux中完成。因此,RTLinux內核盡量做的簡(jiǎn)單,在  RT-Linux內核中,不應該等待資源,也不需要使用共享旋轉鎖(SpinLock),實(shí)時(shí)任務(wù)和Linux進(jìn)程間的通信也是非阻塞的,從來(lái)不用等待進(jìn)隊列和出隊列的數據。

RT-Linux將系統和設備的初始化交給了Linux完成,對動(dòng)態(tài)資源的申請和分配也交給了Linux。RT-Linux使用靜態(tài)分配的內存來(lái)完成硬實(shí)時(shí)任務(wù),因為在沒(méi)有內存資源的時(shí)候,被阻塞的線(xiàn)程不可能具有硬實(shí)時(shí)能力。

4.改變Linux內核的體系結構

Linux的內核體系采用的是Monolithic,在這種體系結構中,內核的所有部分都集中在一起,而且所有的部件在一起編譯連接。這樣雖然能使系統的各部分直接溝通,有效地縮短任務(wù)之間的切換時(shí)間,提高了系統的響應速度,實(shí)時(shí)性好并提高了CPU的利用率,但在系統比較大的時(shí)候體積也比較大,與嵌入式系統容量小、資源有限的特點(diǎn)不符合。而另外一種內核體系結構  MicroKernel,  在內核中只包括了一些基本的內核功能如創(chuàng )建和刪除任務(wù)、任務(wù)調度、內存管理和中斷處理等部分,而文件系統、網(wǎng)絡(luò )協(xié)議棧等部分都是在用戶(hù)內存空間運行。這種結構雖然執行效率不如Monolithic內核,但大大減小了內核的體積,同時(shí)也極大地方便了整個(gè)系統的升級、維護和移植,因此更能滿(mǎn)足嵌入式系統的特點(diǎn)需要。為此,為使嵌入式Linux的應用更加廣泛,可以考慮將Linux目前的Monolithic內核結構中的部分結構改造成MicroKernel體系結構。通過(guò)這種折中辦法,可以使得到的Linux既具有很好的實(shí)時(shí)性,又能滿(mǎn)足嵌入式系統體積小的要求。

5.RT-Linux的編程接口(API)及編程方法示例

(1)RTLinux的編程和控制接口(API)

通過(guò)使用RTLinux的編程和控制接口(API),可以提供對實(shí)時(shí)任務(wù)的創(chuàng )建和刪除、任務(wù)的調度和控制等功能。API函數主要有如下幾類(lèi):

1)中斷控制API函數;2)時(shí)鐘控制和獲取;3)線(xiàn)程的創(chuàng )建和刪除;4)POSIX方式的驅動(dòng)接口;5)FIFO設備驅動(dòng)程序;6)串口驅動(dòng)程序的API函數;7)mbuff驅動(dòng)API函數;8)浮點(diǎn)運算API函數。

(2) RTLinux的編程方法示例

該程序的原理是測出在RT-Linux中進(jìn)行實(shí)時(shí)任務(wù)調度過(guò)程中調度需要花費時(shí)間的多少。算法如下:

/*實(shí)時(shí)任務(wù)端*/

對于每500個(gè)周期

等待上一個(gè)周期的任務(wù)完成

獲得當前時(shí)間和上次周期任務(wù)完成時(shí)間的差,就是調度的時(shí)間

循環(huán)

向FIFO輸出500個(gè)周期中完成的最大值和最小值。

/*應用程序端*/

讀取FIFO設備,獲取最大值和最小值

在屏幕上打印出來(lái)

這種編程方法是進(jìn)行RT  Linux編程的通用方法,將一個(gè)任務(wù)分為實(shí)時(shí)部分和非實(shí)時(shí)部分,在實(shí)時(shí)部分完成的是實(shí)時(shí)任務(wù);在非實(shí)時(shí)部分主要是完成顯示等不需要實(shí)時(shí)的功能。程序的體系結構如下所示:    


上一頁(yè) 1 2 下一頁(yè)

關(guān)鍵詞: Linux 嵌入式 RTOS

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>