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