<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > μC/OS2Ⅱ在軍用FM80386EX處理器上的移植應用

μC/OS2Ⅱ在軍用FM80386EX處理器上的移植應用

作者: 時(shí)間:2009-02-25 來(lái)源:網(wǎng)絡(luò ) 收藏

μC/OS-Ⅱ是操作系統(RTOS),已經(jīng)通過(guò)了非常嚴格的測試,得到了美國航空管理局(FederalAviationAdministration)的認證.μC/OS-Ⅱ功能強大,支持56個(gè)用戶(hù)任務(wù),其內核為占先式,支持信號量、郵箱、消息隊列等多種常用的進(jìn)程通信機制,現已成功到眾多商業(yè)嵌入式系統中,是1種成熟穩定的內核.與大多商用RTOS不同的是,μC/OS-Ⅱ公開(kāi)所有的源代碼,90%的代碼使用標準的ANSIC語(yǔ)言書(shū)寫(xiě),程序可讀性強,性好.同時(shí),它可以免費獲得,即使商業(yè)也只收取少量的許可費用.因此,對μC/OS-Ⅱ操作系統的學(xué)習研究、開(kāi)發(fā)、具有重要的意義.

本文引用地址:http://dyxdggzs.com/article/152642.htm

  嵌入式是1種高度集成,32位總線(xiàn)結構,專(zhuān)為惡劣環(huán)境下的嵌入式控制應用優(yōu)化設計的全靜態(tài)CPU.它采用16位外部數據總線(xiàn),26位地址總線(xiàn)及Intel系統管理模式(SMM),能在廉價(jià)的16位硬件系統中運行32位程序,可將基于Intel386架構的大量軟件應用于嵌入式系統.為了有效地管理多任務(wù),以及滿(mǎn)足系統的實(shí)時(shí)性要求,常常需要使用實(shí)時(shí)嵌入式操作系統.

  要μC/OS-Ⅱ,必須滿(mǎn)足以下要求:的C編譯器能產(chǎn)生可重入代碼;用C語(yǔ)言可以打開(kāi)和關(guān)閉中斷;處理器支持中斷,并且能產(chǎn)生定時(shí)中斷;處理器能容納一定數量的硬件堆棧;處理器有將堆棧指針和其他CPU寄存器讀出、存儲到堆?;騼却嬷械闹噶?滿(mǎn)足以上條件,可以進(jìn)行μC/OS-Ⅱ的.

  μC/OS-Ⅱ實(shí)時(shí)操作系統結構

  應用程序處于整個(gè)系統的頂層,每個(gè)任務(wù)都可以認為自己獨占了CPU,因此任務(wù)被設計成了1個(gè)無(wú)限循環(huán).而μC/OS-Ⅱ與處理器無(wú)關(guān)的代碼提供了該實(shí)時(shí)系統的系統服務(wù),應用程序利用這些API函數進(jìn)行內存管理,任務(wù)間的通信以及創(chuàng )建、刪除任務(wù)等.μC/OS-Ⅱ的代碼大部分是使用ANSIC書(shū)寫(xiě),與微處理器硬件相關(guān)的部分使用匯編語(yǔ)言編寫(xiě),并且匯編語(yǔ)言編寫(xiě)的部分已經(jīng)壓倒最低限度,因此μC/OS-Ⅱ的可移植性好.而處理器80386具有堆棧指針、CPU內部寄存器入棧、出棧指令.所使用的C編譯器BorlandC3.1支持內嵌匯編,使得關(guān)中斷和開(kāi)中斷能在C語(yǔ)言程序中實(shí)現.

  實(shí)時(shí)內核μC/OS-Ⅱ在上的移植

  我們使用BorlandC3.1編譯器移植μC/OS-Ⅱ主要包括以下幾個(gè)步驟:

  編寫(xiě)OS-CPU.A.ASM

  這里要實(shí)現4個(gè)匯編函數改寫(xiě):多任務(wù)啟動(dòng)函數中調用OSOSTartHighRdy(),任務(wù)切換函數OSCtxSw(),中斷任務(wù)切換函數OSIntCtrSw(),時(shí)鐘節拍服務(wù)函數OSTickISR().

  1) OSStartHighRdy()函數.該函數被OSStart()函數調用,功能是運行優(yōu)先級最高的就緒任務(wù),其主要代碼如下:

2) OSCtxSW()函數.該函數被OS-Sched()函數調用,通常是用匯編語(yǔ)言編寫(xiě)的,因為C編譯器不能從C語(yǔ)言中

直接處理CPU寄存器.OSCtxSW()的功能是在任務(wù)級實(shí)現任務(wù)切換,任務(wù)切換是模擬軟中斷來(lái)實(shí)現的,其主要代碼如下:

圖1任務(wù)級任務(wù)切換時(shí)的堆棧結構

  3) OSIntCtxSw( )函數.該函數只能在中斷子程序里被OSIntExit()函數調用.由于中斷的產(chǎn)生可能引起任務(wù)切換,在中斷服務(wù)程序的最后會(huì )調用OSIntExit()函數來(lái)檢查任務(wù)就緒狀態(tài),如果滿(mǎn)足任務(wù)切換條件,則OSIntExit()調用此函數實(shí)現任務(wù)切換,除了不應調用任務(wù)切換函數OS-TASK-SW()外,其余代碼與-OSCtxSw相同.

  4) OSTickISR( )函數.發(fā)生中斷時(shí),CPU的中斷向量會(huì )指向該ISR.其主要代碼如下:

一般情況下,產(chǎn)生調用OSTickISR()函數時(shí),時(shí)鐘節拍的設備應設置成每隔10~100ms產(chǎn)生1次中斷.必須在多任務(wù)系統啟動(dòng)以后,也就是在調用OSStart()之后,再開(kāi)啟時(shí)鐘節拍器.

  用C語(yǔ)言編寫(xiě)6個(gè)操作系統相關(guān)的函數

后5個(gè)函數是鉤子函數,可以不加代碼:

設置OS-CPU.H中與處理器和編譯器相關(guān)的代碼

  80386處理器的堆棧從內存高地址向低地址遞減,所以把OS-STK-GROWTH置1.

完成上述工作后,μC/OS-Ⅱ就可以運行在80386處理器上了.另外根據用戶(hù)需求按需配置OS-CFG.H,裁減μC/OS-Ⅱ,使之占用盡量少的內存.


上一頁(yè) 1 2 下一頁(yè)

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>