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