μC/OS2Ⅱ在軍用FM80386EX處理器上的移植應用
μC/OS-Ⅱ是實時操作系統(tǒng)(RTOS),已經(jīng)通過了非常嚴格的測試,得到了美國航空管理局(FederalAviationAdministration)的認證.μC/OS-Ⅱ功能強大,支持56個用戶任務,其內(nèi)核為占先式,支持信號量、郵箱、消息隊列等多種常用的進程通信機制,現(xiàn)已成功應用到眾多商業(yè)嵌入式系統(tǒng)中,是1種成熟穩(wěn)定的實時內(nèi)核.與大多商用RTOS不同的是,μC/OS-Ⅱ公開所有的源代碼,90%的代碼使用標準的ANSIC語言書寫,程序可讀性強,移植性好.同時,它可以免費獲得,即使商業(yè)應用也只收取少量的許可費用.因此,對μC/OS-Ⅱ實時操作系統(tǒng)的學習研究、開發(fā)、應用具有重要的意義.
本文引用地址:http://m.butianyuan.cn/article/152642.htm軍用FM80386EX嵌入式處理器是1種高度集成,32位總線結(jié)構(gòu),專為惡劣環(huán)境下的嵌入式控制應用優(yōu)化設計的全靜態(tài)CPU.它采用16位外部數(shù)據(jù)總線,26位地址總線及Intel系統(tǒng)管理模式(SMM),能在廉價的16位硬件系統(tǒng)中運行32位程序,可將基于Intel386架構(gòu)的大量軟件應用于嵌入式系統(tǒng).為了有效地管理多任務,以及滿足系統(tǒng)的實時性要求,常常需要使用實時嵌入式操作系統(tǒng).
要移植μC/OS-Ⅱ,處理器必須滿足以下要求:處理器的C編譯器能產(chǎn)生可重入代碼;用C語言可以打開和關(guān)閉中斷;處理器支持中斷,并且能產(chǎn)生定時中斷;處理器能容納一定數(shù)量的硬件堆棧;處理器有將堆棧指針和其他CPU寄存器讀出、存儲到堆?;騼?nèi)存中的指令.FM80386EX滿足以上條件,可以進行μC/OS-Ⅱ的移植.
μC/OS-Ⅱ?qū)崟r操作系統(tǒng)結(jié)構(gòu)
應用程序處于整個系統(tǒng)的頂層,每個任務都可以認為自己獨占了CPU,因此任務被設計成了1個無限循環(huán).而μC/OS-Ⅱ與處理器無關(guān)的代碼提供了該實時系統(tǒng)的系統(tǒng)服務,應用程序利用這些API函數(shù)進行內(nèi)存管理,任務間的通信以及創(chuàng)建、刪除任務等.μC/OS-Ⅱ的代碼大部分是使用ANSIC書寫,與微處理器硬件相關(guān)的部分使用匯編語言編寫,并且匯編語言編寫的部分已經(jīng)壓倒最低限度,因此μC/OS-Ⅱ的可移植性好.而處理器80386具有堆棧指針、CPU內(nèi)部寄存器入棧、出棧指令.所使用的C編譯器BorlandC3.1支持內(nèi)嵌匯編,使得關(guān)中斷和開中斷能在C語言程序中實現(xiàn).
實時內(nèi)核μC/OS-Ⅱ在FM80386EX上的移植
我們使用BorlandC3.1編譯器移植μC/OS-Ⅱ主要包括以下幾個步驟:
編寫OS-CPU.A.ASM
這里要實現(xiàn)4個匯編函數(shù)改寫:多任務啟動函數(shù)中調(diào)用OSOSTartHighRdy(),任務切換函數(shù)OSCtxSw(),中斷任務切換函數(shù)OSIntCtrSw(),時鐘節(jié)拍服務函數(shù)OSTickISR().
1) OSStartHighRdy()函數(shù).該函數(shù)被OSStart()函數(shù)調(diào)用,功能是運行優(yōu)先級最高的就緒任務,其主要代碼如下:
2) OSCtxSW()函數(shù).該函數(shù)被OS-Sched()函數(shù)調(diào)用,通常是用匯編語言編寫的,因為C編譯器不能從C語言中
直接處理CPU寄存器.OSCtxSW()的功能是在任務級實現(xiàn)任務切換,任務切換是模擬軟中斷來實現(xiàn)的,其主要代碼如下:
圖1任務級任務切換時的堆棧結(jié)構(gòu)
3) OSIntCtxSw( )函數(shù).該函數(shù)只能在中斷子程序里被OSIntExit()函數(shù)調(diào)用.由于中斷的產(chǎn)生可能引起任務切換,在中斷服務程序的最后會調(diào)用OSIntExit()函數(shù)來檢查任務就緒狀態(tài),如果滿足任務切換條件,則OSIntExit()調(diào)用此函數(shù)實現(xiàn)任務切換,除了不應調(diào)用任務切換函數(shù)OS-TASK-SW()外,其余代碼與-OSCtxSw相同.
4) OSTickISR( )函數(shù).發(fā)生中斷時,CPU的中斷向量會指向該ISR.其主要代碼如下:
一般情況下,產(chǎn)生調(diào)用OSTickISR()函數(shù)時,時鐘節(jié)拍的設備應設置成每隔10~100ms產(chǎn)生1次中斷.必須在多任務系統(tǒng)啟動以后,也就是在調(diào)用OSStart()之后,再開啟時鐘節(jié)拍器.
用C語言編寫6個操作系統(tǒng)相關(guān)的函數(shù)
后5個函數(shù)是鉤子函數(shù),可以不加代碼:
設置OS-CPU.H中與處理器和編譯器相關(guān)的代碼
80386處理器的堆棧從內(nèi)存高地址向低地址遞減,所以把OS-STK-GROWTH置1.
完成上述工作后,μC/OS-Ⅱ就可以運行在80386處理器上了.另外根據(jù)用戶需求按需配置OS-CFG.H,裁減μC/OS-Ⅱ,使之占用盡量少的內(nèi)存.
評論