黃強,白永斌,黃麒睿,周笑萌
(深圳大學計算機與軟件學院,深圳518060)
基于ARM+FPGA平臺的硬件實時操作系統(tǒng)※*
黃強,白永斌,黃麒睿,周笑萌
(深圳大學計算機與軟件學院,深圳518060)
目前嵌入式操作系統(tǒng)的應用越來越廣泛,不僅增強了系統(tǒng)的可靠性,而且提高了開發(fā)效率。但是,在對實時性要求較高的應用中,對于基于軟件實現(xiàn)的RTOS,單純依靠改進算法已不能使其實時性得到更大的提高。而硬件電路獨立于處理器運行,不占用處理器的處理時間,所節(jié)省的時間可用于執(zhí)行任務程序,所以基于硬件實現(xiàn)的操作系統(tǒng)可以使它的實時性和可靠性顯著提高。
時間觸發(fā)/事件觸發(fā);抖動;硬件調(diào)度器;HWOS
從20世紀80年代,國際已經(jīng)有一些IT組織和公司開始進行商用嵌入式實時操作系統(tǒng)和專業(yè)實時操作系統(tǒng)的研究。軟件實現(xiàn)的實時操作系統(tǒng),國外有 VxWorks、LynxOS、嵌入式Linux、TRON和μC/OS-II。
國外的研究目前主要集中在硬件操作系統(tǒng)的局部模塊,基于整體的硬件實時操作系統(tǒng)設計和實現(xiàn)方面的研究比較少,而實時操作系統(tǒng)的各個模塊之間有著復雜的信息交互和聯(lián)系。因此,實時操作系統(tǒng)的最優(yōu)軟硬件劃分以及實現(xiàn)一個硬件實時操作系統(tǒng)IP核值得深入研究。
國內(nèi)的軟件實時操作系統(tǒng)主要有兩類:一類是中國自主研發(fā)的實時操作系統(tǒng),比如開源的RT-Thread、電子科大和科銀公司開發(fā)的Delta OS等;另一類是基于國外操作系統(tǒng)二次開發(fā),比如中科紅旗Linux、深圳藍點Linux。
但是國內(nèi)目前的研究集中在任務調(diào)度和中斷處理的硬件化上面,任務間的通信和同步還有待研究。
鑒于國內(nèi)和國外的研究現(xiàn)狀,硬件實時操作系統(tǒng)只是實現(xiàn)了實時操作系統(tǒng)的一部分,這里設計的硬件實時操作系統(tǒng),可以替代傳統(tǒng)的小型嵌入式實時操作系統(tǒng),比如μC/OS、RTX、FreeRTOS等。
硬件實時操作系統(tǒng)是在ARM+FPGA的平臺上實現(xiàn)的,利用ARM的FSMC總線接口實現(xiàn)ARM和FPGA的連接,可以認為FPGA就是掛在總線上的一個外設,用寄存器的方式配置硬件實時操作系統(tǒng):在FPGA上實現(xiàn)搶占式調(diào)度器,以及基于此調(diào)度器的任務管理、信號量、消息郵箱、消息隊列、互斥信號量、事件標志組。在ARM上配置寄存器,執(zhí)行任務以及實現(xiàn)任務的上下文切換。這樣基本已經(jīng)完成一個小型嵌入式實時操作系統(tǒng)所需的所有組件。
硬件實時操作系統(tǒng)的基本配置是:同時支持創(chuàng)建8個任務、8個信號量、8個消息郵箱、8個消息隊列、8個互斥信號量、8個事件標志組,而想要支持更多的組件和任務,只需在FPGA上做擴展。圖1是硬件實時操作系統(tǒng)的狀態(tài)切換圖,圖2是硬件實時操作系統(tǒng)的主體框圖。
圖1 硬件實時操作系統(tǒng)狀態(tài)切換圖
圖2 硬件實時操作系統(tǒng)主體框圖
1.1 搶占式調(diào)度器
實現(xiàn)搶占式調(diào)度器要抓住3個關鍵點:
①當一個任務提交信號量,發(fā)送消息給一個高優(yōu)先級的任務時,當前的任務就會被停止,去執(zhí)行高優(yōu)先級的任務;
②每個時鐘節(jié)拍中斷,如果有高優(yōu)先級的任務就緒,則高優(yōu)先級任務會搶占低優(yōu)先級的任務;
③當ISR提交信號量或發(fā)送消息給一個更高優(yōu)先級的任務,中斷返回時,不會返回到當前任務,而是返回到高優(yōu)先級任務。
FPGA實現(xiàn)搶占式調(diào)度器的一個核心工作就是快速從任務就緒列表里查找到需要執(zhí)行的最高優(yōu)先級任務,這里采用優(yōu)先級編碼器來實現(xiàn),方法略——編者注。
這里要特別注意一點,空閑任務是永遠就緒的,其優(yōu)先級最低,沒有其他任務執(zhí)行時,就執(zhí)行空閑任務。
針對此硬件實時操作系統(tǒng),ARM上只需做好以下兩點:
①任務級任務切換,主要是實現(xiàn)高優(yōu)先級向低優(yōu)先級的任務切換;
②中斷級任務切換,在中斷退出的時候判斷是否有更高優(yōu)先級的任務就緒,如果有,就切換到高優(yōu)先級任務。
1.2 任務管理
任務管理部分主要實現(xiàn)任務的延時時間設置、任務掛起、任務恢復3個功能。對寄存器的描述略——編者注。
在FPGA部分通過設置Task_REG8=1可啟動任務管理,這里每個任務在FPGA上的實現(xiàn)都是一個單獨的進程,有助于充分發(fā)揮硬件實時操作系統(tǒng)的性能,而不是將所有的任務放到一個進程里實現(xiàn)。
ARM部分只需簡單地設置寄存器,就可完成對任務的設置。配置了任務寄存器以后,F(xiàn)PGA上相應的任務管理就會按照配置方式執(zhí)行,ARM端讀取HW_REG3寄存器就可以得到當前需要執(zhí)行的最高優(yōu)先級任務。
①任務掛起,也就是將任務從就緒列表中刪除
Task_REG3=0; //設置任務0
Task_REG2=0xffff; //將任務掛起
②任務恢復,也就是將任務加到就緒列表中
Task_REG3=0; //設置任務0
Task_REG2=0; //任務恢復
1.3 信號量
信號量是為了給共享資源建立一個標志,該標志表示該信號量共享資源的占用情況。寄存器描述略——編者注。
在FPGA信號量的實現(xiàn)中,硬件實時操作系統(tǒng)除了提供信號量所需的調(diào)度功能外,還提供信號量等待列表中最高優(yōu)先級任務的查找,采用優(yōu)先級編碼器實現(xiàn),ARM端讀取寄存器Sem_REG4得到等待列表中需要執(zhí)行的最高優(yōu)先級任務。
ARM部分主要提供以下3個函數(shù),用于信號量寄存器的初始化和實現(xiàn):
void OSSemCreate(uint16_t ucSemID,uint16_t uiSemCnt);//此函數(shù)用于初始化信號量
void OSSemPost(uint16_t ucSemID);//此函數(shù)用于釋放信號量
1.4 消息郵箱
消息郵箱主要用于兩個任務間消息的傳遞。寄存器描述略——編者注。
在FPGA部分消息郵箱的實現(xiàn)中,硬件實時系統(tǒng)除了提供消息郵箱所需的調(diào)度功能外,還提供消息郵箱等待列表中最高優(yōu)先級任務的查找,采用優(yōu)先級編碼器實現(xiàn),ARM端讀取寄存器Mbox_REG7得到等待列表中需要執(zhí)行的最高優(yōu)先級任務。
ARM部分主要提供以下3個函數(shù),用于消息郵箱寄存器的初始化和實現(xiàn):
void OSMboxCreate(uint16_t ucMboxID);//此函數(shù)用于初始化信號量,用于創(chuàng)建消息郵箱
void*OSMboxPend(uint16_t uiMboxID,uint16_t uiMboxTime,uint16_t uiPendTaskID); //此函數(shù)用于請求消息郵箱
OSMboxPost(uint16_t uiMboxID,void*Pmsg);//此函數(shù)用于發(fā)送消息
1.5 消息隊列
消息隊列的實現(xiàn)方法類似于消息郵箱,只不過對于消息隊列需要做一個環(huán)形隊列,用于消息的FIFO或LIFO,這里的環(huán)形隊列沒有在FPGA上實現(xiàn),用軟件實現(xiàn)會更加靈活一些,寄存器描述略——編者注。
在FPGA部分消息隊列的實現(xiàn)中,硬件實時系統(tǒng)除了提供消息隊列所需的調(diào)度功能外,還提供消息隊列等待列表中最高優(yōu)先級任務的查找,采用優(yōu)先級編碼器實現(xiàn),ARM端讀取寄存器Q_REG6得到等待列表中需要執(zhí)行的最高優(yōu)先級任務。
ARM部分主要提供以下3個函數(shù),用于消息隊列寄存器的初始化和實現(xiàn):
void OSQCreate(void**start,uint16_t uiSize,uint16_t uiQueueID); //用于創(chuàng)建消息隊列
void*OSQPend(uint16_t uiQID,uint16_t uiQTime,uint16_t uiPendTaskID); //用于請求消息隊列
uint8_t OSQPost(uint16_t uiQID,void*Pmsg);//用于發(fā)送消息
1.6 事件標志組
在實際的應用中,常常需要根據(jù)多個信號量組合作用的結果來決定任務的運行方式,為此提供了事件標志組。寄存器描述略——編者注。
在FPGA部分事件標志組的實現(xiàn)中,硬件實時系統(tǒng)除了提供事件標志組所需的調(diào)度功能外,還提供事件標志組等待列表中最高優(yōu)先級任務的查找,采用優(yōu)先級編碼器實現(xiàn),ARM端讀取寄存器Flag_REG1得到等待列表中需要執(zhí)行的最高優(yōu)先級任務。
ARM部分主要提供以下3個函數(shù),用于事件標志組寄存器的初始化和實現(xiàn):
void OSFlagCreate(uint16_t ucFlagID);//此函數(shù)用于初始化事件標志組
void OSFlagPend(uint16_t uiFlagID,uint16_t uiFlagTime,uint16_t uiPendTaskID,uint16_t uiFlag); //此函數(shù)用于請求事件標志
void OSFlagPost(uint16_t uiFlagID,uint16_t uiFlag);//此函數(shù)用于發(fā)送事件標志
1.7 互斥信號量
當?shù)蛢?yōu)先級的任務占有互斥信號量時,恰好此時高優(yōu)先級的任務要使用這個資源,那么硬件實時操作系統(tǒng)會提升低優(yōu)先級任務的優(yōu)先級,防止發(fā)生優(yōu)先級翻轉。寄存器描述略——編者注。
在FPGA部分互斥信號量的實現(xiàn)中,硬件實時系統(tǒng)除了提供互斥信號量所需的調(diào)度功能外,還提供互斥信號量等待列表中最高優(yōu)先級任務的查找,采用優(yōu)先級編碼器實現(xiàn),ARM端讀取寄存器Mutex_REG8得到等待列表中需要執(zhí)行的最高優(yōu)先級任務。
ARM部分主要提供以下3個函數(shù),用于互斥信號量寄存器的初始化和實現(xiàn):
void OSMutexCreate(uint16_t uiMutexID,uint8_t uNewPrioty);//此函數(shù)用于初始化互斥信號量
void OSMutexPend(uint16_t uiMutexID,uint16_t uiMutexTime,uint16_t ucPendTaskID); //此函數(shù)用于請求信號量
void OSMutexPost(uint16_t uiMutexID);//此函數(shù)用于釋放信號量
系統(tǒng)硬件平臺選用的是ARM+FPGA的方案,ARM采用的是ST公司STM32F103VET6,F(xiàn)PGA采用的是Altera公司的EP4CE6E22C8。
2.1 ARM和FPGA的FSMC通信
ARM和FPGA的硬件連接采用FSMC(Flexible Static Memory Controller)總線,如圖3所示。
圖3 FPGA和ARM硬件連接圖
FSMC支持多種存儲器的連接,比如SRAM、NAND Flash、NOR Flash和PSRAM,其與FPGA的通信采用類似SRAM的通信時序。
FPGA讀和寫操作程序略——編者注。
結合STM32手冊中寫操作的時序圖,F(xiàn)PGA端在片選信號NEx為低電平,讀信號NOE和寫信號NWE也是低電平的情況下完成對FPGA中數(shù)據(jù)的讀操作。這里采用類似串行通信的方法,設置每個ID號可以訪問8個16位的數(shù)據(jù)空間。舉例說明略——編者注。
2.2 系統(tǒng)時鐘節(jié)拍中斷
調(diào)度器的時鐘節(jié)拍是由FPGA產(chǎn)生的,每ms產(chǎn)生一次,ARM接收到FPGA發(fā)出的外部中斷信號以后,從外部中斷服務程序中讀取當前需要執(zhí)行的最高優(yōu)先級任務。
2.3 硬件實時操作系統(tǒng)初始化和配置
系統(tǒng)開始多任務以前,配置好每個任務的優(yōu)先級和堆??臻g,并配置好啟動任務。開始執(zhí)行任務寄存器初始化、信號量寄存器初始化、郵箱寄存器初始化、消息隊列寄存器初始化,過程略——編者注。
2.4 任務程序設計、任務間同步和通信程序設計
①任務的程序設計與小型嵌入式實時操作系統(tǒng)是一樣的,需要設計成死循環(huán),在合適的地方加入任務的切換,防止阻塞低優(yōu)先級任務的執(zhí)行。
static void AppTaskLEDb(void*p_arg){
while(1){
_Task_1();
OSTaskSw(0,300);
//延時300ms,并切換到別的任務執(zhí)行
}
}
中斷級的任務切換在Cortex-M3內(nèi)核上同任務級的任務切換函數(shù)是一樣的。
②任務間的同步和通信機制在使用上與普通的小型嵌入式實時操作系統(tǒng)相同,以信號量為例:
OSSemCreate(8,1); //創(chuàng)建二值信號量
OS_SemPend(SemID,0xffff,Task_ID); //添加用戶程序
OS_SemPost(SemID);
為了說明此硬件實時操作系統(tǒng)的性能,這里與μC/ OS-II、μC/OS-III、FreeRTOS、RTX以及embOS五個小型嵌入式實時操作系統(tǒng)做了對比,測試條件如下:①STM32F103VET6,Cortex-M3內(nèi)核,72 MHz;②軟件用MDK4.54,1級優(yōu)化,運行相同的任務;③大部分測試都是測10 000次,2 ms測試一次,然后求平均值。
鑒于這些RTOS在使用上還是有些詫異的,不可能統(tǒng)一測試條件,這里盡量保證在同一條件下測試。測試結果如表1所列。
通過測試,可以發(fā)現(xiàn)HWOS在某些方面相對于其他的RTOS表現(xiàn)不錯,但有些方面還有待改進。測試時曾用這個硬件實時操作系統(tǒng)提供的內(nèi)核服務,成功運行了UCGUI的多任務,說明HWOS具有較高的實用價值。
表1 5種RTOS測試結果
編者注:本文為期刊縮略版,全文見本刊網(wǎng)站www. mesnet.com.cn。
[1]Mooney III V,Lee J,Daleby A,et al.A Comparison of RTU Hardware RTOS with a Hardware/Software RTOS[C]//Design Automation Conferece(ASP_DAC'03),2003:683-688.
[2]Mooney III V,Blough D M.A Hardware-Software Real-time Operating System Framework for SoCs[J].IEEE Design and Test of Computers Magazine,2002,19(6):44-52.
[3]Melissa Vetromille,Luciano Ost,Cesara A.M.Marcon,et al. RTOS Scheduler Implemention in Hardare and Software for Real-time Application[C]//Proceedings of the Senventeenth IEEE International Workshop on Rapid System Protoryping (RSP 06),2006:163-168.
[4]Nakano T,Andy U,Itabashi M,et al.Hardware Implemention of a Real-time Operating System[J].Proceedings of the Twelfth TRON Project International Symposium IEEE Computer Society Press,1995(11):34-32.
[5]Nakano T,Andy U,Itabsshi M,et al.VLSI Implementation of a Real-time Operating System[J].Proceedings of the ASPDAC'97 Asia and South Pacific,1997(1):679-680.
[6]侯覓.基于硬件的實時任務管理器的研究[D].上海:上海交通大學,2007:20-35.
[7]王傳福,周學海.提高硬件多線程處理器性能的方法[J].計算機工程,2007,33(4):239-241.
[8]Chen Tianshou,Wu Xinglian,Hu Wei.Research on OS-Aware Embedded Power-saving Architectre[C]//The 2rd Joint Conference on Harmonious Human Machine Environment,2006:52-59.
Hardware Real-time Operating System Based on ARM and FPGA※
Huang Qiang,Bai Yongbin,Huang Qirui,Zhou Xiaomeng
(College of Computer Science and Software Engineering,Shenzhen University,Shenzhen 518060,China)
Embedded operating system is used more and more widely,which not only improves the reliability of the system but also improves the development efficiency.The RTOS based on software is used for the applications that demand higher real-time,however the improved algorithm can not increase the real-time greatly.Because the hardware circuit is independent of the processor,and do not take up the processing time,so the saved time can execute the task program.The operating system based hardware implementation can make real-time and reliability improved significantly.
time trigger/event trigger;jitter;hardware scheduler;HWOS
TP368.2
A
薛士然
2014-11-01)
深圳市科技基礎研究項目JCYJ20120613112757342。