?

基于ARM+FPGA平臺的硬件實時操作系統※*

2015-08-15 06:28黃強白永斌黃麒睿周笑萌
單片機與嵌入式系統應用 2015年4期
關鍵詞:信號量寄存器列表

黃強,白永斌,黃麒睿,周笑萌

(深圳大學計算機與軟件學院,深圳518060)

基于ARM+FPGA平臺的硬件實時操作系統※*

黃強,白永斌,黃麒睿,周笑萌

(深圳大學計算機與軟件學院,深圳518060)

目前嵌入式操作系統的應用越來越廣泛,不僅增強了系統的可靠性,而且提高了開發效率。但是,在對實時性要求較高的應用中,對于基于軟件實現的RTOS,單純依靠改進算法已不能使其實時性得到更大的提高。而硬件電路獨立于處理器運行,不占用處理器的處理時間,所節省的時間可用于執行任務程序,所以基于硬件實現的操作系統可以使它的實時性和可靠性顯著提高。

時間觸發/事件觸發;抖動;硬件調度器;HWOS

引言

從20世紀80年代,國際已經有一些IT組織和公司開始進行商用嵌入式實時操作系統和專業實時操作系統的研究。軟件實現的實時操作系統,國外有 VxWorks、LynxOS、嵌入式Linux、TRON和μC/OS-II。

國外的研究目前主要集中在硬件操作系統的局部模塊,基于整體的硬件實時操作系統設計和實現方面的研究比較少,而實時操作系統的各個模塊之間有著復雜的信息交互和聯系。因此,實時操作系統的最優軟硬件劃分以及實現一個硬件實時操作系統IP核值得深入研究。

國內的軟件實時操作系統主要有兩類:一類是中國自主研發的實時操作系統,比如開源的RT-Thread、電子科大和科銀公司開發的Delta OS等;另一類是基于國外操作系統二次開發,比如中科紅旗Linux、深圳藍點Linux。

但是國內目前的研究集中在任務調度和中斷處理的硬件化上面,任務間的通信和同步還有待研究。

鑒于國內和國外的研究現狀,硬件實時操作系統只是實現了實時操作系統的一部分,這里設計的硬件實時操作系統,可以替代傳統的小型嵌入式實時操作系統,比如μC/OS、RTX、FreeRTOS等。

1 技術方案

硬件實時操作系統是在ARM+FPGA的平臺上實現的,利用ARM的FSMC總線接口實現ARM和FPGA的連接,可以認為FPGA就是掛在總線上的一個外設,用寄存器的方式配置硬件實時操作系統:在FPGA上實現搶占式調度器,以及基于此調度器的任務管理、信號量、消息郵箱、消息隊列、互斥信號量、事件標志組。在ARM上配置寄存器,執行任務以及實現任務的上下文切換。這樣基本已經完成一個小型嵌入式實時操作系統所需的所有組件。

硬件實時操作系統的基本配置是:同時支持創建8個任務、8個信號量、8個消息郵箱、8個消息隊列、8個互斥信號量、8個事件標志組,而想要支持更多的組件和任務,只需在FPGA上做擴展。圖1是硬件實時操作系統的狀態切換圖,圖2是硬件實時操作系統的主體框圖。

圖1 硬件實時操作系統狀態切換圖

圖2 硬件實時操作系統主體框圖

1.1 搶占式調度器

實現搶占式調度器要抓住3個關鍵點:

①當一個任務提交信號量,發送消息給一個高優先級的任務時,當前的任務就會被停止,去執行高優先級的任務;

②每個時鐘節拍中斷,如果有高優先級的任務就緒,則高優先級任務會搶占低優先級的任務;

③當ISR提交信號量或發送消息給一個更高優先級的任務,中斷返回時,不會返回到當前任務,而是返回到高優先級任務。

FPGA實現搶占式調度器的一個核心工作就是快速從任務就緒列表里查找到需要執行的最高優先級任務,這里采用優先級編碼器來實現,方法略——編者注。

這里要特別注意一點,空閑任務是永遠就緒的,其優先級最低,沒有其他任務執行時,就執行空閑任務。

針對此硬件實時操作系統,ARM上只需做好以下兩點:

①任務級任務切換,主要是實現高優先級向低優先級的任務切換;

②中斷級任務切換,在中斷退出的時候判斷是否有更高優先級的任務就緒,如果有,就切換到高優先級任務。

1.2 任務管理

任務管理部分主要實現任務的延時時間設置、任務掛起、任務恢復3個功能。對寄存器的描述略——編者注。

在FPGA部分通過設置Task_REG8=1可啟動任務管理,這里每個任務在FPGA上的實現都是一個單獨的進程,有助于充分發揮硬件實時操作系統的性能,而不是將所有的任務放到一個進程里實現。

ARM部分只需簡單地設置寄存器,就可完成對任務的設置。配置了任務寄存器以后,FPGA上相應的任務管理就會按照配置方式執行,ARM端讀取HW_REG3寄存器就可以得到當前需要執行的最高優先級任務。

①任務掛起,也就是將任務從就緒列表中刪除

Task_REG3=0; //設置任務0

Task_REG2=0xffff; //將任務掛起

②任務恢復,也就是將任務加到就緒列表中

Task_REG3=0; //設置任務0

Task_REG2=0; //任務恢復

1.3 信號量

信號量是為了給共享資源建立一個標志,該標志表示該信號量共享資源的占用情況。寄存器描述略——編者注。

在FPGA信號量的實現中,硬件實時操作系統除了提供信號量所需的調度功能外,還提供信號量等待列表中最高優先級任務的查找,采用優先級編碼器實現,ARM端讀取寄存器Sem_REG4得到等待列表中需要執行的最高優先級任務。

ARM部分主要提供以下3個函數,用于信號量寄存器的初始化和實現:

void OSSemCreate(uint16_t ucSemID,uint16_t uiSemCnt);//此函數用于初始化信號量

void OSSemPost(uint16_t ucSemID);//此函數用于釋放信號量

1.4 消息郵箱

消息郵箱主要用于兩個任務間消息的傳遞。寄存器描述略——編者注。

在FPGA部分消息郵箱的實現中,硬件實時系統除了提供消息郵箱所需的調度功能外,還提供消息郵箱等待列表中最高優先級任務的查找,采用優先級編碼器實現,ARM端讀取寄存器Mbox_REG7得到等待列表中需要執行的最高優先級任務。

ARM部分主要提供以下3個函數,用于消息郵箱寄存器的初始化和實現:

void OSMboxCreate(uint16_t ucMboxID);//此函數用于初始化信號量,用于創建消息郵箱

void*OSMboxPend(uint16_t uiMboxID,uint16_t uiMboxTime,uint16_t uiPendTaskID); //此函數用于請求消息郵箱

OSMboxPost(uint16_t uiMboxID,void*Pmsg);//此函數用于發送消息

1.5 消息隊列

消息隊列的實現方法類似于消息郵箱,只不過對于消息隊列需要做一個環形隊列,用于消息的FIFO或LIFO,這里的環形隊列沒有在FPGA上實現,用軟件實現會更加靈活一些,寄存器描述略——編者注。

在FPGA部分消息隊列的實現中,硬件實時系統除了提供消息隊列所需的調度功能外,還提供消息隊列等待列表中最高優先級任務的查找,采用優先級編碼器實現,ARM端讀取寄存器Q_REG6得到等待列表中需要執行的最高優先級任務。

ARM部分主要提供以下3個函數,用于消息隊列寄存器的初始化和實現:

void OSQCreate(void**start,uint16_t uiSize,uint16_t uiQueueID); //用于創建消息隊列

void*OSQPend(uint16_t uiQID,uint16_t uiQTime,uint16_t uiPendTaskID); //用于請求消息隊列

uint8_t OSQPost(uint16_t uiQID,void*Pmsg);//用于發送消息

1.6 事件標志組

在實際的應用中,常常需要根據多個信號量組合作用的結果來決定任務的運行方式,為此提供了事件標志組。寄存器描述略——編者注。

在FPGA部分事件標志組的實現中,硬件實時系統除了提供事件標志組所需的調度功能外,還提供事件標志組等待列表中最高優先級任務的查找,采用優先級編碼器實現,ARM端讀取寄存器Flag_REG1得到等待列表中需要執行的最高優先級任務。

ARM部分主要提供以下3個函數,用于事件標志組寄存器的初始化和實現:

void OSFlagCreate(uint16_t ucFlagID);//此函數用于初始化事件標志組

void OSFlagPend(uint16_t uiFlagID,uint16_t uiFlagTime,uint16_t uiPendTaskID,uint16_t uiFlag); //此函數用于請求事件標志

void OSFlagPost(uint16_t uiFlagID,uint16_t uiFlag);//此函數用于發送事件標志

1.7 互斥信號量

當低優先級的任務占有互斥信號量時,恰好此時高優先級的任務要使用這個資源,那么硬件實時操作系統會提升低優先級任務的優先級,防止發生優先級翻轉。寄存器描述略——編者注。

在FPGA部分互斥信號量的實現中,硬件實時系統除了提供互斥信號量所需的調度功能外,還提供互斥信號量等待列表中最高優先級任務的查找,采用優先級編碼器實現,ARM端讀取寄存器Mutex_REG8得到等待列表中需要執行的最高優先級任務。

ARM部分主要提供以下3個函數,用于互斥信號量寄存器的初始化和實現:

void OSMutexCreate(uint16_t uiMutexID,uint8_t uNewPrioty);//此函數用于初始化互斥信號量

void OSMutexPend(uint16_t uiMutexID,uint16_t uiMutexTime,uint16_t ucPendTaskID); //此函數用于請求信號量

void OSMutexPost(uint16_t uiMutexID);//此函數用于釋放信號量

2 技術實施方式

系統硬件平臺選用的是ARM+FPGA的方案,ARM采用的是ST公司STM32F103VET6,FPGA采用的是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手冊中寫操作的時序圖,FPGA端在片選信號NEx為低電平,讀信號NOE和寫信號NWE也是低電平的情況下完成對FPGA中數據的讀操作。這里采用類似串行通信的方法,設置每個ID號可以訪問8個16位的數據空間。舉例說明略——編者注。

2.2 系統時鐘節拍中斷

調度器的時鐘節拍是由FPGA產生的,每ms產生一次,ARM接收到FPGA發出的外部中斷信號以后,從外部中斷服務程序中讀取當前需要執行的最高優先級任務。

2.3 硬件實時操作系統初始化和配置

系統開始多任務以前,配置好每個任務的優先級和堆??臻g,并配置好啟動任務。開始執行任務寄存器初始化、信號量寄存器初始化、郵箱寄存器初始化、消息隊列寄存器初始化,過程略——編者注。

2.4 任務程序設計、任務間同步和通信程序設計

①任務的程序設計與小型嵌入式實時操作系統是一樣的,需要設計成死循環,在合適的地方加入任務的切換,防止阻塞低優先級任務的執行。

static void AppTaskLEDb(void*p_arg){

while(1){

_Task_1();

OSTaskSw(0,300);

//延時300ms,并切換到別的任務執行

中斷級的任務切換在Cortex-M3內核上同任務級的任務切換函數是一樣的。

②任務間的同步和通信機制在使用上與普通的小型嵌入式實時操作系統相同,以信號量為例:

OSSemCreate(8,1); //創建二值信號量

OS_SemPend(SemID,0xffff,Task_ID); //添加用戶程序

OS_SemPost(SemID);

3 硬件實時操作系統性能測試

為了說明此硬件實時操作系統的性能,這里與μC/ OS-II、μC/OS-III、FreeRTOS、RTX以及embOS五個小型嵌入式實時操作系統做了對比,測試條件如下:①STM32F103VET6,Cortex-M3內核,72 MHz;②軟件用MDK4.54,1級優化,運行相同的任務;③大部分測試都是測10 000次,2 ms測試一次,然后求平均值。

鑒于這些RTOS在使用上還是有些詫異的,不可能統一測試條件,這里盡量保證在同一條件下測試。測試結果如表1所列。

結語

通過測試,可以發現HWOS在某些方面相對于其他的RTOS表現不錯,但有些方面還有待改進。測試時曾用這個硬件實時操作系統提供的內核服務,成功運行了UCGUI的多任務,說明HWOS具有較高的實用價值。

表1 5種RTOS測試結果

編者注:本文為期刊縮略版,全文見本刊網站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。

猜你喜歡
信號量寄存器列表
STM32和51單片機寄存器映射原理異同分析
學習運用列表法
擴列吧
Lite寄存器模型的設計與實現
Nucleus PLUS操作系統信號量機制的研究與測試
linux下多值信號量的操作探討
列表畫樹狀圖各有所長
μC/OS- -III對信號量的改進
Linux操作系統信號量機制的實時化改造
2011年《小說月刊》轉載列表
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合