1 RTOS 簡述
實時操作系統(tǒng)(RTOS)是指當(dāng)外界事件或者數(shù)據(jù)產(chǎn)生時,能夠接受并以足夠快的速度予以處理,處理的結(jié)果又能在規(guī)定的時間內(nèi)來控制生產(chǎn)過程或?qū)μ幚硐到y(tǒng)能夠做出快速響應(yīng),調(diào)度一切可利用的資源完成實時任務(wù),并控制所有實時任務(wù)協(xié)調(diào)一致運行的操作系統(tǒng)。主要特點是提供及時響應(yīng)和考可靠性。
在服務(wù)器、個人電腦、手機上運行的操作系統(tǒng),譬如Windows和Linux,強調(diào)在一處理器上能運行更多任務(wù)。此類操作系統(tǒng)的代碼均具有一定規(guī)模,并且不一定能保證實時性。而對于處理器硬件資源有限,對實時性又有特殊要求的嵌入式應(yīng)用領(lǐng)域,就需要一種代碼規(guī)模適中,實時性好的操作系統(tǒng)。
實時性可以分為硬實時和軟實時。硬實時的功能是必須在給定時間內(nèi)完成操作,如果不能完成將可能導(dǎo)致嚴(yán)重后果。比如汽車安全氣囊觸發(fā)機制就是一個很好的硬實時的例子,在撞擊后安全氣囊必須在給定時間內(nèi)彈出,如果響應(yīng)時間超出給定時間,可能使駕駛員受到嚴(yán)重傷害。
對于軟實時,一個典型的實例是IPTV數(shù)字電視機頂盒,需要實時的解碼視頻流,如果丟失了一個或幾個視頻幀,視頻品質(zhì)也不會相差多少。軟實時系統(tǒng)從統(tǒng)計角度來說,一個任務(wù)有確定的執(zhí)行時間,事件在截止時間到來之前也能得到處理,即使違反截止時間也不會帶來致命的錯誤。
2 常用實時操作系統(tǒng)概述
常用的實時操作系統(tǒng)(RTOS)有以下幾種:FreeRTOS、VxWorks、uc/os-II、uclinuxeCos、RT-Thread和SylixOS等。下面分別對這幾種RTOS進行介紹說明。
SylixOS:
— — 翼輝SylixOS實時操作系統(tǒng)是一款功能全面、穩(wěn)定可靠、易于開發(fā)的國產(chǎn)實時系統(tǒng)平臺。其解決方案覆蓋網(wǎng)絡(luò)設(shè)備、國防安全、工業(yè)自動化、軌道交通、電力、醫(yī)療、航空航天等諸多領(lǐng)域。SylixOS是國內(nèi)唯一一款支持SMP的大型實時操作系統(tǒng)。翼輝開發(fā)嵌入式操作系統(tǒng)SylixOS始于2006年,至今在軍工領(lǐng)域已有眾多項目或產(chǎn)品基于SylixOS進行開發(fā),例如雷達(dá)、彈載飛控系統(tǒng)、星載任務(wù)計算機、機載火控系統(tǒng)、計重收費與超限檢測儀、火災(zāi)報警系統(tǒng)、特種車輛與船用發(fā)動機狀態(tài)顯示器、潛艇蓄電池監(jiān)控系統(tǒng)、輪式裝甲車實時監(jiān)控系統(tǒng)等,其中大部分產(chǎn)品都要求7*24小時不間斷運行,當(dāng)前很多SylixOS系統(tǒng)節(jié)點已不間斷運行超過5萬小時(6年)。
RT-Thread:
— — RT-Thread是一款主要由中國開源社區(qū)主導(dǎo)開發(fā)的開源實時操作系統(tǒng)(許可證GPLv2)。實時線程操作系統(tǒng)不僅是一個單一的實時操作系統(tǒng)內(nèi)核,它也是一個完整的應(yīng)用系統(tǒng),包含了實時、嵌入式系統(tǒng)相關(guān)的各個組件:TCP/IP協(xié)議棧、文件系統(tǒng)、libc接口、圖形用戶界面等。RT-Thread擁有良好的軟件生態(tài),支持市面上所有主流的編譯工具如GCC、Keil、IAR等,工具鏈完善、友好,支持各類標(biāo)準(zhǔn)接口,如POSIX、CMSIS、C++應(yīng)用環(huán)境、Javascript執(zhí)行環(huán)境等,方便開發(fā)者移植各類應(yīng)用程序。商用支持所有主流MCU架構(gòu),如ARMCortex-M/R/A、MIPS、X86、Xtensa、Andes、C-Sky、RISC-V,幾乎支持市場上所有主流的MCU和Wi-Fi芯片
FreeRTOS:— —有關(guān)FreeRTOS見第3章。
VxWorks:
— — 由美國WindRiver公司于1983年推出的一款實時操作系統(tǒng)。由于其良好的持續(xù)發(fā)展能力,高性能內(nèi)核以及友好的開發(fā)環(huán)境,因此在嵌入式系統(tǒng)領(lǐng)域占有一席之地。VxWorks由400多個相對獨立、短小精悍的目標(biāo)模塊組成,用戶可根據(jù)需要進行配置和裁剪,在通信、軍事、航天、航空等領(lǐng)域應(yīng)用廣泛。
uc/os-II:
— —前身是uc/os,最早由1992年美國嵌入式專家Jean J.Labrosse在《嵌入式系統(tǒng)編程》雜志上發(fā)表,其主要特點有公開源代碼,代碼結(jié)構(gòu)清晰明了,注釋詳盡,組織有條理,可移植性好,可裁剪,可固化。
Uclinux:
— — 是由Lineo公司主推的開放源代碼的操作系統(tǒng),主要針對目標(biāo)處理器沒有存儲管理單元的嵌入式系統(tǒng)而設(shè)計的。Uclinux從Linux2.0/2.4內(nèi)核派生而來,擁有Linux的絕大部分特性,通常用于內(nèi)存很少的嵌入式操作系統(tǒng)。其主要特點有體積小、穩(wěn)定、良好的移植性、優(yōu)秀的網(wǎng)絡(luò)功能等。
eCos:
— — 含義為嵌入式可配置操作系統(tǒng),主要用于消費電子、電信、車載設(shè)備、手持設(shè)備等低成本和便攜式應(yīng)用。其最顯著的特點為可配置性,可以在源碼級別實現(xiàn)對系統(tǒng)的配置和裁剪,還可安裝第三方組件擴展系統(tǒng)功能。
3 FreeRTOS 簡介
由于RTOS需要占用一定系統(tǒng)資源,只有少數(shù)RTOS支持在小內(nèi)存的MCU上運行,F(xiàn)reeRTOS是一款迷你型實時操作系統(tǒng)內(nèi)核,功能包括:任務(wù)管理、時間管理、信號量、消息隊列、內(nèi)存管理等功能,可基本滿足較小系統(tǒng)的需要。相對于VxWorks、uc/os-II等商業(yè)操作系統(tǒng),F(xiàn)reeRTOS完全免費,具有源碼公開、可移植、可裁剪、任務(wù)調(diào)度靈活等特點,可以方便地移植到各種MCU上運行,其突出的特性如下。
免費開源。完全可以放心作為商業(yè)用途。
文檔資源齊全。在FreeRTOS官網(wǎng)上能下載到內(nèi)核文件及詳細(xì)的介紹資料。
安全性高。SafeRTOS基于FreeRTOS而來,經(jīng)過安全認(rèn)證的RTOS,近年來在歐美較為流行,支持搶占式和合作式任務(wù)切換模式,代碼精簡,核心由3個C文件組成,可支持65536個任務(wù)。因此其開源免費版本FreeRTOS在安全性方面也應(yīng)該擁有一定保障。
市場使用率高。從2011年開始,F(xiàn)reeRTOS市場使用率持續(xù)高速增長,根據(jù)EEtimes雜志市場報告顯示,F(xiàn)reeRTOS使用率名列前茅,如圖3-1所示,2017年FreeRTOS市場占有率為20%,排名第二。
內(nèi)核文件簡單。內(nèi)核相關(guān)文件僅由3個C文件組成,全部圍繞任務(wù)調(diào)度展開,功能專一,便于理解與學(xué)習(xí)。
圖3-1 2017年各種操作系統(tǒng)的使用數(shù)量統(tǒng)計
4 蜂鳥E203移植FreeRTOS
本節(jié)介紹如何在HBird-E-SDK環(huán)境下移植一個簡單的FreeROTS示例。用戶可以以此為基礎(chǔ)進行豐富和完善,開發(fā)更多的復(fù)雜示例。
有關(guān)HBird-E-SDK環(huán)境的快速上手請參見《蜂鳥E203快速上手介紹》,有關(guān)HBird-E-SDK系統(tǒng)性的詳細(xì)介紹請參見中文書籍《RISC-V架構(gòu)與嵌入式開發(fā)入門指南》的第11章。
4.1HBird-E-SDK中FreeRTOS程序代碼結(jié)構(gòu)
在HBird-E-SDK環(huán)境中,F(xiàn)reeRTOS示例程序的相關(guān)代碼結(jié)構(gòu)如下所示。
Makefile為主控制腳本,其代碼片段如下:
4.2FreeRTOS原理和移植介紹
由于RTOS需要占用一定系統(tǒng)資源,只有少數(shù)RTOS支持在小內(nèi)存的MCU上運行,F(xiàn)reeRTOS是一款迷你型實時操作系統(tǒng)內(nèi)核,功能包括:任務(wù)管理、時間管理、信號量、消息隊列、內(nèi)存管理等功能,可基本滿足較小系統(tǒng)的需要。相對于VxWorks、uc/os-II等商業(yè)操作系統(tǒng),F(xiàn)reeRTOS完全免費,具有源碼公開、可移植、可裁剪、任務(wù)調(diào)度靈活等特點、可以方便地移植到各種MCU上運行。
4.2.1RTOS操作系統(tǒng)的基本原理
傳統(tǒng)裸機程序是一個大while循環(huán),將所有事情看作一個任務(wù),順序執(zhí)行代碼,遇到中斷發(fā)生則響應(yīng)中斷(可能發(fā)生中斷嵌套),響應(yīng)完中斷后會繼續(xù)之前被中斷的任務(wù),其過程如圖4-1所示。
圖4-1 裸機程序的過程
而在RTOS中,將所有事情分成各個模塊,每一個模塊的內(nèi)容看作一個任務(wù),任務(wù)的執(zhí)行順序是靈活的,根據(jù)相應(yīng)的調(diào)度算法管理任務(wù)的運行,靈活性比裸機程序強,其過程如圖4-2所示。
圖4-2 RTOS程序的過程
FreeRTOS中的調(diào)度算法分為時間片調(diào)度算法和搶占式調(diào)度,在FreeRTOS的FreeRTOSConfig.h文件中配置如下:
即使不配置configUSE_TIME_SLICING為1,F(xiàn)reeRTOS也會默認(rèn)開啟時間片調(diào)度。時間片調(diào)度算法和搶占式調(diào)度的特點簡述如下:
時間片調(diào)度算法:每一個任務(wù)給予固定的執(zhí)行時間,時間結(jié)束后進入調(diào)度器,由調(diào)度器切換到下一個任務(wù),在默認(rèn)所有任務(wù)優(yōu)先級相同情況下,輪流執(zhí)行所有任務(wù)。
搶占式調(diào)度需要設(shè)置任務(wù)優(yōu)先級,在進入調(diào)度器后,調(diào)度器選擇處于就緒態(tài)中優(yōu)先級最高的任務(wù)作為下一個執(zhí)行的任務(wù)。高優(yōu)先級任務(wù)可以搶占低優(yōu)先級任務(wù),發(fā)生搶占時需要有能進入調(diào)度器的操作,調(diào)度器是任務(wù)切換的唯一實體。
4.2.2 FreeRTOS源碼解析和移植介紹
在HBird-E-SDK環(huán)境中,F(xiàn)reeRTOS源代碼和蜂鳥E203移植相關(guān)的代碼結(jié)構(gòu)如下所示。
如上所示,F(xiàn)reeRTOS的代碼層次結(jié)構(gòu)分明,用戶只需要修改三個文件名為“port*”的源代碼,完成基本的中斷和異常的底層移植,即可完成對于FreeRTOS的移植。
蜂鳥E203移植FreeRTOS操作系統(tǒng)時,實現(xiàn)固定時間切換任務(wù)的操作由內(nèi)核自帶的mtime計時器中斷支持,可以設(shè)置為每隔一個固定的時間段發(fā)生一次計時器中斷(稱之為System Tick),在中斷處理函數(shù)中進入調(diào)度器切換下一個任務(wù)。在port.c文件中mtime計時器設(shè)置代碼如下:
更多移植代碼詳情,請用戶自行參見三個文件名為“port*”的源代碼。
4.2.3任務(wù)與中斷的關(guān)系
FreeRTOS的任務(wù)和中斷的優(yōu)先級關(guān)系是移植FreeRTOS的難點,需要被正確的理解,否則程序會運行出錯:
任務(wù)總是可以被中斷打斷,任務(wù)之間具有的優(yōu)先級,但是與“中斷的優(yōu)先級”沒有關(guān)系,這兩種優(yōu)先級是相互獨立的。
不調(diào)用任何FreeRTOSAPI函數(shù)的中斷,可以設(shè)置為任意的“中斷優(yōu)先級”,并且允許嵌套。
在FreeRTOSConfig.h中預(yù)先定義configMAX_SYSCALL_INTERRUPT_PRIORITY的值,調(diào)用API函數(shù)的中斷優(yōu)先級只能設(shè)置為不大于該值,支持嵌套,但是會被內(nèi)核延遲。
關(guān)于FreeRTOS的任務(wù)優(yōu)先級和中斷優(yōu)先級如何設(shè)置,以及FreeRTOS的更多詳細(xì)信息,請用戶自行查閱相關(guān)FreeRTOS手冊學(xué)習(xí)。
4.3運行FreeRTOS
FreeRTOS示例可運行于HBird-E-SDK環(huán)境中,使用《蜂鳥E203快速上手介紹》中描述的運行方法按照如下步驟運行:
// 注意:確保在HBIRD-E-SDK中正確的安裝了RISC-V GCC工具鏈,請參見《蜂鳥E203快速上手介紹》了解其詳情。
// 步驟一:參照《蜂鳥E203快速上手介紹》中描述的方法,編譯FreeRTOS示例程序,使用如下命令:
make software PROGRAM=FreeRTOSv9.0.0NANO_PFLOAT=0
// 步驟二:參照《蜂鳥E203快速上手介紹》中描述的方法,將編譯好的FreeRTOS程序下載至FPGA原型開發(fā)板中,使用如下命令:
make upload PROGRAM=FreeRTOSv9.0.0
// 步驟三:參照《蜂鳥E203快速上手介紹》中描述的方法,在FPGA原型開發(fā)板上運行FreeRTOS程序:
// 由于示例程序?qū)⑿枰ㄟ^UART打印結(jié)果到主機PC的顯示屏上。參考《蜂鳥E203快速上手介紹》所述方法將串口顯示電腦屏幕設(shè)置好,使得程序的打印信息能夠顯示在電腦屏幕上。由于步驟二已經(jīng)將程序燒寫進FPGA開發(fā)板的Flash之中,因此每次按MCU開發(fā)板的RESET按鍵,則處理器復(fù)位開始執(zhí)行FreeRTOS程序,并將RISC-V字符串打印至主機PC的串口顯示終端上。
-
FPGA
+關(guān)注
關(guān)注
1629文章
21729瀏覽量
602978 -
操作系統(tǒng)
+關(guān)注
關(guān)注
37文章
6801瀏覽量
123283 -
開發(fā)板
+關(guān)注
關(guān)注
25文章
5032瀏覽量
97371
原文標(biāo)題:蜂鳥FPGA開發(fā)板全知道篇4:移植FreeRTOS
文章出處:【微信號:real_farmer,微信公眾號:硅農(nóng)亞歷山大】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論