色综合小说,久久精品中文字幕免费,男人插曲女人身体视频,综合天堂av久久久久久久,亚洲 欧美 自拍 动漫 免费

技術頻道

娓娓工業(yè)
您現(xiàn)在的位置: 中國傳動網(wǎng) > 技術頻道 > 技術百科 > 實時操作系統(tǒng)µC/OS-II在C8051F120上的移植

實時操作系統(tǒng)µC/OS-II在C8051F120上的移植

時間:2008-06-13 14:23:00來源:dujing

導語:?本文介紹了實時操作系統(tǒng)µC/OS-II的特點,討論了其在51系列單片機上移植的必要性。
摘要 本文介紹了實時操作系統(tǒng)µC/OS-II的特點,討論了其在51系列單片機上移植的必要性。并選擇8位單片機C8051F120作為移植目標,分析了µC/OS-II的具體移植過程。最后設計例程驗證了移植的正確性。 關鍵詞 C8051F120;µC/OS-II;移植 [align=center]The Porting of Real-Time Operation System µC/OS-II on C8051F120 Taiyuan University of Technology Tian Juan[/align] Abstract The paper introduces the characteristic of real-time operation system µC/OS-II, and discusses the necessity of porting µC/OS-II on 51 series MCU. Then the specific process of porting µC/OS-II on C8051F120 which is selected as porting target is analyzed. The paper ends with designing test program to prove the success of the porting. Keywords C8051F120; µC/OS-II; porting 引言 傳統(tǒng)的嵌入式系統(tǒng)設計往往采用前/后臺系統(tǒng)。應用程序是一個無限的循環(huán),在循環(huán)中調(diào)用相應的函數(shù)完成對應的操作,這部分可以看成后臺行為。中斷服務程序處理異步事件,這部分可以看成前臺行為[1]。在大多數(shù)對實時性要求較高的場合中,這種系統(tǒng)結構就無法滿足應用的要求,實時內(nèi)核逐步成為嵌入式系統(tǒng)設計的主流。µC/OS-II是一個完整的,可移植、固化、裁減的占先式實時多任務內(nèi)核,不僅結構簡單,絕大部分采用C語言,而且可移植性好,很容易被移植到各種微處理器上,在移植過程中,只需要做少量的修改工作即可。目前µC/OS-II最多支持64個任務,總是在執(zhí)行處于就緒態(tài)的優(yōu)先級最高的任務。并且因其源代碼的完全公開和優(yōu)越性能而得到了廣泛的應用。 51系列單片機是美國Intel公司在1980年推出的高性能8位單片機,目前仍然是我國使用最廣泛的單片機系列之一,有非常大的應用環(huán)境與前景。如果開發(fā)一套基于51系列單片機的操作系統(tǒng),那么用戶只需要編寫各個任務的程序,不必同時將所有任務運行的各種情況記在心中,不但大大減少了程序編寫的工作量,而且減少了出錯的可能性[2]。 所以,在51系列單片機上移植實時操作系統(tǒng)µC/OS-II是很有必要的。 1 µC/OS-II的移植條件 要使µC/OS-II移植到處理器后能正常運行,處理器必須滿足以下條件: ● 處理器的C編譯器能產(chǎn)生可重入代碼。µC/OS-II是可剝奪型內(nèi)核,總是讓就緒態(tài)的高優(yōu)先級的任務先運行,中斷服務程序可以搶占CPU,所以只能通過C編譯器產(chǎn)生可重入代碼??芍厝牒瘮?shù)可以被一個以上的任務調(diào)用,而不必擔心數(shù)據(jù)被破壞。 ● 處理器的C編譯器能在C語言中開中斷和關中斷。因為µC/OS-II在處理臨界段的時候,須關中斷,處理完畢后,再開中斷。 ● 處理器支持中斷,并且能產(chǎn)生定時中斷。因為µC/OS-II是通過硬件中斷來實現(xiàn)系統(tǒng)時鐘,并在時鐘中斷服務程序中來處理與時間相關的問題,實現(xiàn)任務之間的調(diào)度。 ● 處理器具有一定數(shù)量的硬件堆棧,并且有將堆棧指針和其他CPU寄存器內(nèi)容讀出、并存儲到堆?;騼?nèi)存中的指令。因為µC/OS-II為每一個任務分配任務堆棧,在任務切換時,需要先保存當前任務堆棧內(nèi)容,再恢復最高優(yōu)先級任務堆棧內(nèi)容。 2 CPU芯片的選擇 隨著現(xiàn)代通信技術的發(fā)展,智能化系統(tǒng)對DSP需求的增長要求不斷提高單片機運算速度[3]。C8051F系列單片機就是在這樣的情況下由Silabs公司推出的,它是完全集成的混合信號系統(tǒng)級芯片,具有與8051兼容的微控制器內(nèi)核,在不擴展8位數(shù)據(jù)總線的情況下,使單周期指令速度提高到原8051的12倍。而C8051F120作為C8051F系列中的高端產(chǎn)品就被選擇為系統(tǒng)移植的對象。 C8051F120的內(nèi)部資源有:64個I/O引腳,5個16位通用計數(shù)器/定時器,6個捕獲/比較模塊,硬件實現(xiàn)的SPI,SMBus/IIC和兩個UART串行接口,片內(nèi)看門狗定時器,2個比較器,真正12位100ksps的8通道ADC,8位500ksps的8通道ADC,128KB的FLASH存儲器,8448B的內(nèi)部數(shù)據(jù)RAM[4]。 由于C8051F120處理器和使用的Keil編譯器都能夠很好的滿足上述移植條件,所以可以把µC/OS-II移植到C8051F120上。在實際開發(fā)系統(tǒng)中,使用外部晶體振蕩器,晶振頻率為22.1184MHZ,并外擴256KB的RAM。 3 移植過程 µC/OS-II的移植可以看作是對µC/OS-II代碼的修改。µC/OS-II的代碼分為與處理器無關的代碼,與處理器相關的代碼和與應用相關的代碼。與處理器無關的代碼原則上是不用修改可以直接添加,但由于Keil編譯器的特殊性,必須在需要可重入的函數(shù)聲明的后面標注reentant關鍵字,即加上重入屬性;又因為pdata既是Keil的關鍵字又是µC/OS-II的一些函數(shù)的形參,會導致編譯錯誤,所以把pdata改為pdat。與處理器相關的代碼包括3個文件:OS_CPU.H、OS_CPU_C.C、OS_CPU_A.ASM,需要大量的修改后才能添加,這是移植工作的重點。另外,與應用相關的代碼包括2個頭文件:INCLUDES.H和OS_CFG.H。INCLUDES.H是一個主頭文件,出現(xiàn)在每個.C文件的第一行。INCLUDES.H文件使得工程項目中的每個.C文件無需分別考慮它實際上需要哪些頭文件。還可以在頭文件列表的最后添加自己的頭文件。OS_CFG.H是系統(tǒng)配置文件,µC/OS-II的裁減過程是通過對OS_CFG.H中的相關常量進行設置來完成[5]。可以分為任務管理功能的裁減,節(jié)省代碼存儲空間;數(shù)據(jù)結構的裁減,節(jié)省數(shù)據(jù)存儲空間;系統(tǒng)節(jié)拍頻率設置和任務堆棧大小設置。 3.1 OS_CPU.H OS_CPU.H包括了用#define語句定義的、與處理器相關的常數(shù)、宏以及類型。 數(shù)據(jù)類型的定義是為了保證可移植性。而且必須把任務堆棧的數(shù)據(jù)類型告訴µC/OS-II,通過為OS_STK聲明恰當?shù)腃數(shù)據(jù)類型來實現(xiàn)的。C8051F120的堆棧是8位的,所以聲明OS_STK: typedef INT8U OS_STK; //堆棧的寬度為8位 µC/OS-II為了處理臨界段代碼,須關中斷,處理完畢后,再開中斷。所以定義2個宏來關中斷和開中斷:OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL()。這2個宏可以用3種方法實現(xiàn),具體用哪種方法,取決于使用的處理器類型和C編譯器。C8051F120使用方法1來處理臨界段,即直接開關中斷。這樣定義既減少了程序行數(shù),又避免了退出臨界區(qū)后關中斷造成的死機。根據(jù)中斷允許寄存器 IE的第7位EA為中斷允許總控制位,EA=0屏蔽所有中斷,EA=1允許所有中斷,所以定義語句為: #define OS_ENTER_CRITICAL() EA=0 //關中斷 #define OS_EXIT_CRITICAL() EA=1 //開中斷 C8051F120堆棧從下向上增長(0=向上,1=向下),通過配置常數(shù)OS_STK_GROWTH指定堆棧的方向。所以定義語句為: #define OS_STK_GROWTH 0 //堆棧從下向上增長,1=向下增長 µC/OS-II的任務切換是通過模仿中斷動作完成的,但C8051F120沒有軟中斷指令,所以用函數(shù)調(diào)用的方式實現(xiàn)任務切換,定義語句為: #define OS_TASK_SW() OSCtxSw() // OSCtxSw()是用于實現(xiàn)任務切換的函數(shù) 3.2 OS_CPU_C.C OS_CPU_C.C包括10個C函數(shù):OSTaskStkInit()函數(shù)和9個Hook函數(shù)。OSTaskStkInit()函數(shù)在任務創(chuàng)建時被調(diào)用,用來初始化任務堆棧。Hook函數(shù)用來擴展µC/OS-II的功能,可以不包含任何代碼,但必須聲明。最后添加Timer0初始化函數(shù),包括選擇工作模式,設定初值和使能中斷,因為要使用C8051F120的Timer0實現(xiàn)時鐘中斷。 在修改OSTaskStkInit()函數(shù)之前,需要先知道任務堆棧的結構。µC/OS-II為每一個任務都分配了任務堆棧,任務堆棧由系統(tǒng)堆棧和仿真堆棧兩部分組成。由于C8051F120要求堆棧設置在片內(nèi)RAM中,而片內(nèi)RAM空間又非常有限,因此所有任務的任務堆棧設置在片內(nèi)RAM中是幾乎不可能的。只能把任務堆棧存放在片外RAM,并在片內(nèi)RAM設置一個公共堆棧,即系統(tǒng)堆棧,棧底地址為?STACK。在任務切換時,需先保存當前任務堆棧內(nèi)容,再恢復最高優(yōu)先級任務堆棧內(nèi)容,即進行任務堆棧和系統(tǒng)堆棧的復制。仿真堆棧是用來為可重入函數(shù)完成參數(shù)傳遞和存放局部變量的,設置在片外RAM,增長方向由上向下,棧指針為?C_XBP。 所以,任務堆棧初始化可以看作是把處于就緒態(tài)的最高優(yōu)先級任務的任務堆棧內(nèi)容復制到系統(tǒng)堆棧的過程。首先要獲得任務堆棧最低地址和長度,因為需要從任務堆棧中恢復15個寄存器內(nèi)容到系統(tǒng)堆棧,所以堆棧長度為15。然后從下向上依次復制寄存器內(nèi)容,復制順序是:PCL,PCH,PSW,ACC,B,DPL,DPH,R0,R1,R2,R3,R4,R5,R6,R7。最后保存仿真堆棧地址,并返回任務堆棧最低地址。這樣就完成了任務堆棧初始化。 3.3 OS_CPU_A.ASM OS_CPU_A.ASM包括4個匯編語言函數(shù),這4個函數(shù)都是不可重入的,并且定義了系統(tǒng)堆??臻g大小。 OSStartHighRdy ()函數(shù),用來使就緒態(tài)任務中優(yōu)先級最高的任務開始運行。OSCtxSw()函數(shù),實現(xiàn)CPU正常運行時任務間的切換,即對當前任務堆棧的保存和對最高優(yōu)先級任務堆棧的彈出,使最高優(yōu)先級任務獲取CPU的控制權。OSIntCtxSw()函數(shù),作用是在中斷服務程序中執(zhí)行中斷級別任務切換。它的絕大多數(shù)代碼和OSCtxSw()函數(shù)是一樣的,區(qū)別在于中斷服務函數(shù)已經(jīng)保存了寄存器內(nèi)容,則不需要再在OSIntCtxSw()函數(shù)中保存。OSTickISR()函數(shù),是系統(tǒng)時鐘的中斷服務程序,主要功能是檢查是否有由于延時而被掛起的任務成為就緒任務。如果有,就調(diào)用OSIntCtxSw()函數(shù)進行任務切換,從而運行最高優(yōu)先級任務。因為µC/OS-II在每一個節(jié)拍都要檢查有沒有更高優(yōu)先級的任務在等待執(zhí)行,如果有,就要進行任務切換。所以,時鐘節(jié)拍率越高,系統(tǒng)的額外負荷就越重。 4 系統(tǒng)測試 按照上述移植步驟,作者在Keil編譯環(huán)境下實現(xiàn)了µC/OS-II在C8051F120上的具體移植。為了防止在編譯時出現(xiàn)段過大的錯誤,需要選擇內(nèi)存模式為大模式,并相應的在STARTUP.A51 文件中設置XBPSTACK=1。創(chuàng)建2個任務來驗證µC/OS-II移植的成功: OSTaskCreate (TaskLed, (void *)0, TaskStartStkLed,2); OSTaskCreate (TaskSmg, (void *)0, TaskStartStkSmg,3); 程序流程圖如圖1所示。任務TaskLed閃爍1次后,向任務TaskSmg發(fā)送消息并等待回復,任務TaskSmg得到消息后顯示閃爍次數(shù),并進行回復。最終效果為P4.0連接的LED閃爍1次,則P5口連接的數(shù)碼管顯示數(shù)字加1,最大顯示為9,之后自動清零。經(jīng)過4小時的連續(xù)實驗,一切運行正常,這就驗證了移植代碼的正確性。 [align=center] 圖1 程序流程圖[/align] 需要注意的是,C8051F120的使用涉及到SFRPAGR的保護,因為C8051F120擁有太多的模擬和數(shù)字資源,它們都需要相應的SFR控制,而標準8051保留的SFR空間不能滿足所需的SFR寄存器,所以C8051F120另外安排了SFRPAGE來擴展更多的SFR寄存器空間。同一個SFR地址配合不同的SFRPAGE值,控制不同的資源。但如果是非中斷情況下發(fā)生任務切換,并且在新任務中改變了SFRPAGE,那么回到以前的任務后很可能SFRPAGE已經(jīng)改變,從而無法控制正確的資源,還有可能使程序跑飛。因為不同的資源往往需要不同的SFRPAGE,為了解決這一問題,在所有出現(xiàn)SFRPAGE賦值的地方都應當作臨界代碼保護起來,這樣就可以完全避免因SFRPAGE值的錯誤而引出的問題[6]。 5 結論 µC/OS-II是一種實時性好、代碼量小的多任務實時操作系統(tǒng),具有很好的穩(wěn)定性與可靠性,可廣泛移植到不同構架的微處理器上。本文完整的闡述了µC/OS-II的移植過程,并在C8051F120上實現(xiàn)了雙任務同步通信。論文對51系列單片機的µC/OS-II移植具有普遍的指導意義。

標簽:

點贊

分享到:

上一篇:變頻器維修實例解析

下一篇:微能WIN-V63矢量控制變頻器在...

傳動網(wǎng)版權與免責聲明:凡本網(wǎng)注明[來源:傳動網(wǎng)]的所有文字、圖片、音視和視頻文件,版權均為傳動網(wǎng)(y3602.cn)獨家所有。如需轉載請與0755-82949061聯(lián)系。任何媒體、網(wǎng)站或個人轉載使用時須注明來源“傳動網(wǎng)”,違反者本網(wǎng)將追究其法律責任。

本網(wǎng)轉載并注明其他來源的稿件,均來自互聯(lián)網(wǎng)或業(yè)內(nèi)投稿人士,版權屬于原版權人。轉載請保留稿件來源及作者,禁止擅自篡改,違者自負版權法律責任。

網(wǎng)站簡介|會員服務|聯(lián)系方式|幫助信息|版權信息|網(wǎng)站地圖|友情鏈接|法律支持|意見反饋|sitemap

傳動網(wǎng)-工業(yè)自動化與智能制造的全媒體“互聯(lián)網(wǎng)+”創(chuàng)新服務平臺

網(wǎng)站客服服務咨詢采購咨詢媒體合作

Chuandong.com Copyright ?2005 - 2025 ,All Rights Reserved 深圳市奧美大唐廣告有限公司 版權所有
粵ICP備 14004826號 | 營業(yè)執(zhí)照證書 | 不良信息舉報中心 | 粵公網(wǎng)安備 44030402000946號