<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/OS-II在A(yíng)Tmega128單片機上的移植與開(kāi)發(fā)

μC/OS-II在A(yíng)Tmega128單片機上的移植與開(kāi)發(fā)

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

將μCOS-II移植到ATmega128單片機上

移植就是使一個(gè)實(shí)時(shí)內核能在A(yíng)Tmega128上運行。μCOS-II大部分的代碼是用ANSIC編寫(xiě)的,因此移植性很好。但是對不同的微處理器,仍然需要使用C和匯編語(yǔ)言來(lái)編寫(xiě)其中與處理器相關(guān)的代碼,寄存器的讀、寫(xiě)只能通過(guò)匯編語(yǔ)言的存儲和加載指令來(lái)實(shí)現。要使μCOS-II能夠正常工作,處理器必須滿(mǎn)足以下要求:

①處理器的C編譯器能產(chǎn)生可重入代碼;可重入代碼是指可以被一個(gè)以上的任務(wù)調用,而不必擔心其數據會(huì )被破壞的代碼??芍厝氪a任何時(shí)候都可以被中斷,一段時(shí)間以后又可以重新運行,而相應的數據不會(huì )丟失,不可重入代碼則不行。本文所使用ImageCrafT公司的ICCAVRV6. 30編譯器能產(chǎn)生可重入代碼;

②用C語(yǔ)言可以打開(kāi)和關(guān)閉中斷,本文所使用的ICCAVRV6. 30編譯器支持在C語(yǔ)言中內嵌匯編語(yǔ)句且提供專(zhuān)門(mén)開(kāi)關(guān)中斷的宏:CLI() 和SEI() 。這樣,使得在C語(yǔ)言中開(kāi)關(guān)中斷非常方便;

③處理器支持中斷,并且能夠產(chǎn)生定時(shí)中斷(通常在10-100Hz 之間) ,ATmega128,有3 個(gè)定時(shí)器,能產(chǎn)生μC/OS-Ⅱ所需的定時(shí)中斷;

④ 處理器能夠支持容納一定數量的硬件堆棧,ATmega128有4KRAM,硬件堆??梢蚤_(kāi)辟在這4KRAM中;

⑤處理器有將堆棧指針和其他寄存器讀取和存儲到堆?;騼却娴闹噶?,一般的單片機都滿(mǎn)足這個(gè)要求(如PUSH、POP指令) ,且ATmega128還具有直接訪(fǎng)問(wèn)I/O寄存器的指令( IN、OUT等) 。

移植的實(shí)現μC/OS-Ⅱ的移植工作包括以下幾個(gè)內容:

(1) 用Typedef聲明與編譯器相關(guān)的數據類(lèi)型(在OS-CPU. H文件中) ,由于不同的微處理器有不同的字長(cháng),在μC/OS-Ⅱ代碼中不能使用C語(yǔ)言的shORT、inT、lOng 等數據類(lèi)型,而采用INT8U、INT16U、INT32U等直觀(guān)又可移植的數據類(lèi)型來(lái)代換相應數據類(lèi)型。

(2) 用# definE設置一個(gè)常量OS-STK-GROWTH的值(OS-CPU. H) ,決定堆棧的生長(cháng)方向,置0表示堆棧從下往上生長(cháng),置1表示堆棧從上往下生長(cháng)。

(3) # definE聲明三個(gè)宏(OS-CPU. H) 。即進(jìn)入臨界代碼段(criTicaLcOdEsecTiOn) 的方法OS-CRITICAL-METHOD定義為3 ,在宏OS-ENTER-CRITICAL() 中得到當前處理器狀態(tài)字的值,并將其保存在C函數的局部變量中,這個(gè)變量在宏OS-EXIT-CRITICAL( ) 中用于恢復PSW。宏OS-TASK-SW() 是在內核從低優(yōu)先級任務(wù)切換到高優(yōu)先級任務(wù)時(shí)用到的,它總是在任務(wù)級代碼中被調用。在A(yíng)TMEGA128上移植,直接調用OSCTxSw () 任務(wù)切換函數就可以了。

(4) 用C語(yǔ)言編寫(xiě)十個(gè)簡(jiǎn)單的函數(OS-CPU-C. C) ,OS2TAskSTKIniT() ;OSIniTHoOkBegiN() ;OSIniTHoOKEnd () ; OSTAskCreaTeHoOK( ) ;OSTAskDelHoOK( ) ;OSTAskSw HoOK();OSTAskSTaTHoOK() ;OSTimETickHoOk () ;OSTCB IniTHoOK() ;OSTAsKIdleHoOK() ;實(shí)際需要修改的只有OSTAskSTKIniT() 函數,其它九個(gè)函數都是由用戶(hù)定義的。如果用戶(hù)需要使用這九個(gè)函數,可將文件OS-CFG. H中的# definEcOnsTAnTOS-CPU-HOOKS-EN設為1,設為0表示不使用這些函數。函數OSTAskSTKIniT( ) 是由OSTAskCreaTE() 或OSTAskCreaTEExT() 調用,用來(lái)初始化任務(wù)堆棧的。經(jīng)初始化后的任務(wù)堆棧應該跟發(fā)生過(guò)一次中斷后任務(wù)的堆棧結構一樣。由前敘述可知,ATmega128在發(fā)生中斷后,自動(dòng)保存了程序計數器PC。為了保存全部現場(chǎng),還需要保存狀態(tài)寄存器SREG ,R0~R31這32個(gè)通用寄存器及SP的值。

(5) 編寫(xiě)四個(gè)匯編語(yǔ)言函數(OS-CPU-A. S) ,OSSTARTHighRdy () 使就緒態(tài)任務(wù)中優(yōu)先級最高的任務(wù)開(kāi)始運行;OSCTxSw () 完成將處理器的寄存器保存到堆棧中的任務(wù)后,將任務(wù)指針指向要恢復運行的任務(wù),復制新任務(wù)的優(yōu)先級,得到新任務(wù)的堆棧指針,恢復將運行任務(wù)的寄存器;OSIntC2TxSw () 完成在ISR中執行任務(wù)的切換;OSTicKISR() 提供系統時(shí)鐘節拍服務(wù);這些函數涉及到出棧和入棧操作,因此需要用匯編語(yǔ)言編寫(xiě)。做完以上工作,就是測試內核的移植是否正確。測試一個(gè)實(shí)時(shí)內核,可以運行一些簡(jiǎn)單的任務(wù)和時(shí)鐘節拍中斷任務(wù),一旦調試成功就可以在上面擴展功能。

硬件驅動(dòng)程序的編寫(xiě)

μCOS-II移植完成以后,就要在實(shí)時(shí)內核之上編寫(xiě)外設驅動(dòng)程序。外設驅動(dòng)程序可以提供訪(fǎng)問(wèn)外圍設備的接口,把操作系統和外圍設備硬件分離開(kāi)來(lái),當外設改變時(shí),只需修改設備驅動(dòng)程序,不影響操作系統內核。外設驅動(dòng)程序主要完成以下功能:

(1) 對設備初始化和釋放;

(2) 把數據從內核傳送到硬件和從硬件讀取數據;

(3) 讀取應用程序傳送給設備文件的數據和回送應用程序請求的數據;

(4) 檢測和處理設備出現的錯誤。對于擴展相應的API函數,不同的應用有不同的要求,可以根據硬件結構和實(shí)際應用,編寫(xiě)操作系統的API函數。

基于μCOS-II進(jìn)行擴展的RTOS的總體結構。在內核上開(kāi)發(fā)應用,在把內核移植到自己的硬件目標板上后,在實(shí)時(shí)內核的基礎上寫(xiě)出相應的驅動(dòng)程序、內存操作等API函數,建立實(shí)時(shí)操作系統,最后利用這些API函數編寫(xiě)用戶(hù)自己的應用程序,就構成了嵌入式系統軟件。而應用程序處于整個(gè)系統的頂層,根據具體應用要求,其功能有多個(gè)任務(wù)完成,每個(gè)任務(wù)可以調用API函數,也可以調用與處理器無(wú)關(guān)的代碼提供的系統服務(wù)。

總 結

采用μCOS-II內核開(kāi)發(fā)的RTOS具有良好的實(shí)時(shí)性,可裁剪性,應用它可以使產(chǎn)品更可靠,功能更強大,開(kāi)發(fā)周期更短。該系統目前已在我院開(kāi)發(fā)的護理用體態(tài)語(yǔ)言機上成功應用。


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

關(guān)鍵詞:

評論


相關(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>