版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
精品文檔-下載后可編輯μCOS-II在ATmega128單片機(jī)上的移植與開發(fā)-基礎(chǔ)電子引言本文介紹μC/OS-Ⅱ移植到ATMEL公司的8位微控制器ATmega128上的過程。所謂移植,就是使一個實(shí)時內(nèi)核可以在某個微處理器上運(yùn)行,并在此基礎(chǔ)上進(jìn)行驅(qū)動程序開發(fā),使之成為一個實(shí)用的嵌入式系統(tǒng)。嵌入式系統(tǒng)包括了硬件和軟件兩部分,由于系統(tǒng)硬件資源的限制和實(shí)際應(yīng)用的要求,應(yīng)用系統(tǒng)對軟件的基本要求是體積小,執(zhí)行速度快,具有較好的裁減性和可移植性。
嵌入式系統(tǒng)的軟件一般由嵌入式操作系統(tǒng)和應(yīng)用軟件組成,通過在操作系統(tǒng)之上開發(fā)應(yīng)用軟件,可以屏蔽掉很多底層硬件細(xì)節(jié),使得應(yīng)用程序調(diào)試方便,移植簡單,易維護(hù),同時開發(fā)周期也短。多數(shù)實(shí)時操作系統(tǒng)為用戶提供一些標(biāo)準(zhǔn)的API函數(shù),程序開發(fā)人員可以利用這些API函數(shù)進(jìn)行應(yīng)用程序開發(fā)。但是現(xiàn)在商用型的實(shí)時操作系統(tǒng)價格非常昂貴,而型的實(shí)時操作系統(tǒng)μCOS-II作為一個源代碼公開的實(shí)時內(nèi)核已經(jīng)有了10余年使用實(shí)踐,許多行業(yè)都有成功應(yīng)用該內(nèi)核的實(shí)例。但由于μCOS-II只是一個實(shí)時內(nèi)核,它沒有像商用型實(shí)時操作系統(tǒng)那樣提供API函數(shù)接口,有很多工作需要用戶去完成,還需要根據(jù)實(shí)際應(yīng)用需要進(jìn)行功能擴(kuò)展,包括底層的硬件驅(qū)動、文件系統(tǒng)、用戶圖形接口等程序的編寫。
μC/OS-II嵌入式實(shí)時操作系統(tǒng)簡介
μC/OS-II是的、源碼公開的實(shí)時內(nèi)核,可用于各類8位、16位、32位單片機(jī)或DSP。μC/OS-II是一個完整、可移植、可固化、可裁減的占先式實(shí)時多任務(wù)內(nèi)核。它用ANSIC語言編寫,包含小部分與硬件有關(guān)的匯編代碼,使之便于移植,可以在不同架構(gòu)的微處理器上使用。到目前為止,該內(nèi)核已有10多年的應(yīng)用史,在醫(yī)療、網(wǎng)絡(luò)、通信等許多領(lǐng)域得到了廣泛應(yīng)用。μC/OS-II內(nèi)核可以分為幾個獨(dú)立的部分,分別是任務(wù)管理、時間管理、任務(wù)間通信、內(nèi)存管理幾個獨(dú)立的部分,他的許多功能都是可配置的,這樣可以根據(jù)應(yīng)用的需要對操作系統(tǒng)進(jìn)行裁減。μC/OS-II是占先式實(shí)時內(nèi)核,他總是運(yùn)行在就緒條件下優(yōu)先級的任務(wù),μC/OS-II總共可以管理64個任務(wù),賦予每個任務(wù)的優(yōu)先級必須是不同的,每個任務(wù)都有自己獨(dú)立的堆棧,可以壓低用戶程序?qū)?nèi)存的需求。全部μC/OS-II的函數(shù)調(diào)用與服務(wù)執(zhí)行時間具有可確定性,它的系統(tǒng)服務(wù)的執(zhí)行時間不依賴于應(yīng)用程序任務(wù)的多少。μC/OS-II中的任務(wù)可以是一個無限的循環(huán),也可以在執(zhí)行完后被刪除掉,任務(wù)在休眠、就緒、運(yùn)行、等待和掛起等幾個狀態(tài)之間進(jìn)行轉(zhuǎn)換。μC/OS-II要求用戶提供定時中斷來實(shí)現(xiàn)延時和超時控制等功能,這個定時中斷稱為時鐘節(jié)拍,他的實(shí)際頻率由用戶的應(yīng)用程序決定,一般為10~100Hz。節(jié)拍頻率越高,系統(tǒng)的負(fù)荷越重。μC/OS-II中有三種用于數(shù)據(jù)共享和任務(wù)通信的方法:信號量、郵箱和消息隊(duì)列。一個任務(wù)或者中斷服務(wù)子程序可以通過事件控制塊向另外的任務(wù)發(fā)信號;一個任務(wù)可以等待另一個任務(wù)或中斷服務(wù)子程序給它發(fā)送信號;或者是多個任務(wù)等待同一個信號的發(fā)生,在這種情況下,優(yōu)先級的任務(wù)將得到這一信號并進(jìn)入就緒狀態(tài)準(zhǔn)備執(zhí)行。
ATmega128微處理器的硬件特點(diǎn)
ATmega128的MCU包括一個算術(shù)邏輯單元(ALU),一個狀態(tài)寄存器(SREG),一個通用工作寄存器組和一個堆棧指針。狀態(tài)寄存器(SREG)的位I是全局中斷允許位。如果全局中斷允許位為零,則所有中斷都被禁止。當(dāng)系統(tǒng)響應(yīng)一個中斷后,I位將由硬件自動清“0”;當(dāng)執(zhí)行中斷返回(RETI)指令時,I位由硬件自動置“1”,從而允許系統(tǒng)再次響應(yīng)下一個中斷請求。通用工作寄存器組是由32個8位的通用工作寄存器組成。其中R26~R31這6個寄存器還可以兩兩合并為3個16位的間接地址寄存器,這些寄存器可以用來對數(shù)據(jù)存儲空間和程序存儲空間進(jìn)行間接尋址的寄存器。堆棧指針(SP)是一個指示堆棧頂部地址的16位寄存器。ATmega128單片機(jī)的硬件堆棧的生長方向是向下的(從高地址向低地址生長),所以軟件堆棧在定義的時候,也要采取相同的生長方向。ATmega128單片機(jī)的數(shù)據(jù)存儲器是線形的,從低地址到高地址依次是CPU寄存器區(qū)(32個通用寄存器),I/O寄存器區(qū),數(shù)據(jù)存儲區(qū)。
ATmega128的中斷響應(yīng)機(jī)制
ATmega128有34個不同的中斷源,每個中斷源和系統(tǒng)復(fù)位在程序存儲空間都有一個獨(dú)立的中斷向量(中斷入口地址)。每個中斷源都有各自獨(dú)立的中斷允許控制位,當(dāng)某個中斷源的中斷允許控制位為“1”且全局中斷允許位I也為“1”時,系統(tǒng)才響應(yīng)該中斷。當(dāng)系統(tǒng)響應(yīng)一個中斷請求后,會自動將全局中斷允許位I清零,此時,后續(xù)中斷響應(yīng)被屏蔽。當(dāng)系統(tǒng)執(zhí)行中斷返回指令RETI時,會將全局中斷允許位I置“1”,以允許響應(yīng)下一個中斷。若用戶想實(shí)現(xiàn)中斷嵌套,必須在中斷服務(wù)子程序中將全局中斷允許位I置“1”。在中斷向量表中,處于低地址的中斷具有高的優(yōu)先級。優(yōu)先級高只是表明在多個中斷同時發(fā)生的時候,系統(tǒng)先響應(yīng)優(yōu)先級高的中斷,并不含有高優(yōu)先級的中斷能打斷低優(yōu)先級的中斷處理工作的意思。由于μC/OS-Ⅱ的任務(wù)切換實(shí)際上是模擬中斷,因此需要知道CPU的中斷響應(yīng)機(jī)制。中斷發(fā)生時,ATmega128按以下步驟順序執(zhí)行:
(1)全局中斷允許位I清零。
(2)將指向下一條指令的PC值壓入堆棧,同時堆棧指針SP減2。
(3)選擇優(yōu)先級的中斷向量裝入PC,程序從此地址繼續(xù)執(zhí)行中斷處理。
(4)當(dāng)執(zhí)行中斷處理時,中斷源的中斷允許控制位清零。中斷結(jié)束后,執(zhí)行RETI指令,此時:
①全局中斷允許位I置“1”。
②PC從堆棧推出,程序從被中斷的地方繼續(xù)執(zhí)行。特別要注意的是:ATmega128A單片機(jī)在響應(yīng)中斷及從中斷返回時,并不會對狀態(tài)寄存器SREG和通用寄存器自動進(jìn)行保存和恢復(fù)操作,因此,對狀態(tài)寄存器SREG和通用寄存器的中斷保護(hù)工作必須由用戶來完成。
ATmega128的定時器中斷
ATmega128有三個定時器:T0,T1,T2,可以為μCOS-II提供的時鐘源。ATmega128的三個定時器都有計(jì)數(shù)溢出中斷功能,而且T1和T2還有匹配比較中斷,即定時器計(jì)數(shù)到設(shè)定的值時,產(chǎn)生中斷并自動清零。若系統(tǒng)采用這種中斷方式,其好處是在中斷服務(wù)程序ISR中不需要重新裝載定時器的值。
將μCOS-II移植到ATmega128單片機(jī)上
移植就是使一個實(shí)時內(nèi)核能在ATmega128上運(yùn)行。μCOS-II大部分的代碼是用ANSIC編寫的,因此移植性很好。但是對不同的微處理器,仍然需要使用C和匯編語言來編寫其中與處理器相關(guān)的代碼,寄存器的讀、寫只能通過匯編語言的存儲和加載指令來實(shí)現(xiàn)。要使μCOS-II能夠正常工作,處理器必須滿足以下要求:
①處理器的C編譯器能產(chǎn)生可重入代碼;可重入代碼是指可以被一個以上的任務(wù)調(diào)用,而不必?fù)?dān)心其數(shù)據(jù)會被破壞的代碼??芍厝氪a任何時候都可以被中斷,一段時間以后又可以重新運(yùn)行,而相應(yīng)的數(shù)據(jù)不會丟失,不可重入代碼則不行。本文所使用ImageCrafT公司的ICCAVRV6.30編譯器能產(chǎn)生可重入代碼;
②用C語言可以打開和關(guān)閉中斷,本文所使用的ICCAVRV6.30編譯器支持在C語言中內(nèi)嵌匯編語句且提供專門開關(guān)中斷的宏:CLI()和SEI()。這樣,使得在C語言中開關(guān)中斷非常方便;
③處理器支持中斷,并且能夠產(chǎn)生定時中斷(通常在10-100Hz之間),ATmega128,有3個定時器,能產(chǎn)生μC/OS-Ⅱ所需的定時中斷;
④處理器能夠支持容納一定數(shù)量的硬件堆棧,ATmega128有4KRAM,硬件堆??梢蚤_辟在這4KRAM中;
⑤處理器有將堆棧指針和其他寄存器讀取和存儲到堆?;騼?nèi)存的指令,一般的單片機(jī)都滿足這個要求(如PUSH、POP指令),且ATmega128還具有直接訪問I/O寄存器的指令(IN、OUT等)。
移植的實(shí)現(xiàn)μC/OS-Ⅱ的移植工作包括以下幾個內(nèi)容:
(1)用Typedef聲明與編譯器相關(guān)的數(shù)據(jù)類型(在OS-CPU.H文件中),由于不同的微處理器有不同的字長,在μC/OS-Ⅱ代碼中不能使用C語言的shORT、inT、lOng等數(shù)據(jù)類型,而采用INT8U、INT16U、INT32U等直觀又可移植的數(shù)據(jù)類型來代換相應(yīng)數(shù)據(jù)類型。
(2)用#definE設(shè)置一個常量OS-STK-GROWTH的值(OS-CPU.H),決定堆棧的生長方向,置0表示堆棧從下往上生長,置1表示堆棧從上往下生長。
(3)#definE聲明三個宏(OS-CPU.H)。即進(jìn)入臨界代碼段(criTicaLcOdEsecTiOn)的方法OS-CRITICAL-METHOD定義為3,在宏OS-ENTER-CRITICAL()中得到當(dāng)前處理器狀態(tài)字的值,并將其保存在C函數(shù)的局部變量中,這個變量在宏OS-EXIT-CRITICAL()中用于恢復(fù)PSW。宏OS-TASK-SW()是在內(nèi)核從低優(yōu)先級任務(wù)切換到高優(yōu)先級任務(wù)時用到的,它總是在任務(wù)級代碼中被調(diào)用。在ATMEGA128上移植,直接調(diào)用OSCTxSw()任務(wù)切換函數(shù)就可以了。
(4)用C語言編寫十個簡單的函數(shù)(OS-CPU-C.C),OS2TAskSTKIniT();OSIniTHoOkBegiN();OSIniTHoOKEnd();OSTAskCreaTeHoOK();OSTAskDelHoOK();OSTAskSwHoOK();OSTAskSTaTHoOK();OSTimETickHoOk();OSTCBIniTHoOK();OSTAsKIdleHoOK();實(shí)際需要修改的只有OSTAskSTKIniT()函數(shù),其它九個函數(shù)都是由用戶定義的。如果用戶需要使用這九個函數(shù),可將文件OS-CFG.H中的#definEcOnsTAnTOS-CPU-HOOKS-EN設(shè)為1,設(shè)為0表示不使用這些函數(shù)。函數(shù)OSTAskSTKIniT()是由OSTAskCreaTE()或OSTAskCreaTEExT()調(diào)用,用來初始化任務(wù)堆棧的。經(jīng)初始化后的任務(wù)堆棧應(yīng)該跟發(fā)生過中斷后任務(wù)的堆棧結(jié)構(gòu)一樣。由前敘述可知,ATmega128在發(fā)生中斷后,自動保存了程序計(jì)數(shù)器PC。為了保存全部現(xiàn)場,還需要保存狀態(tài)寄存器SREG,R0~R31這32個通用寄存器及SP的值。
(5)編寫四個匯編語言函數(shù)(OS-CPU-A.S),OSSTARTHighRdy()使就緒態(tài)任務(wù)中優(yōu)先級的任務(wù)開始運(yùn)行;OSCTxSw()完成將處理器的寄存器保存到堆棧中的任務(wù)后,將任務(wù)指針指向要恢復(fù)運(yùn)行的任務(wù),復(fù)制新任務(wù)的優(yōu)先級,得到新任務(wù)的堆棧指針,恢復(fù)將運(yùn)行任務(wù)的寄存器;OSIntC2TxSw()完成在ISR中執(zhí)行任務(wù)的切換;OSTicKISR()提供系統(tǒng)時鐘節(jié)拍服務(wù);這些函數(shù)涉及到出棧和入棧操作,因此需要用匯編語言編寫。做完以上工作,就是測試內(nèi)核的移植是否正確。測試一個實(shí)時內(nèi)核,可以運(yùn)行一些簡單的任務(wù)和時鐘節(jié)拍中斷任務(wù),一旦調(diào)試成功就可以在上面擴(kuò)展功能。
硬件驅(qū)動程序的編寫
μCOS-II移植完成以后,就要在實(shí)時內(nèi)核之上編寫外設(shè)驅(qū)動程序。外設(shè)驅(qū)動程序可以提供訪問外圍設(shè)備的接口,把操作系統(tǒng)和外圍設(shè)備硬件分離開來,當(dāng)外設(shè)改變時,只需修改設(shè)備驅(qū)動程序,不影響操作系統(tǒng)內(nèi)核。外設(shè)驅(qū)動程序主要完成以下功能:
(1)對設(shè)備初始化和釋放;
(2)把數(shù)據(jù)從內(nèi)核傳送到硬件和從硬件讀取數(shù)據(jù);
(3)讀取應(yīng)用程序傳送給設(shè)備文件的數(shù)據(jù)和回送應(yīng)用程序請求的數(shù)據(jù);
(4)檢測和處理設(shè)備出現(xiàn)的錯誤。對于擴(kuò)展相應(yīng)的API函數(shù),不同的應(yīng)用有不同的要求,可以根據(jù)硬件結(jié)構(gòu)和實(shí)際應(yīng)用,編寫操作系統(tǒng)的API函數(shù)。
基于μCOS-II進(jìn)行擴(kuò)展的RTOS的總體結(jié)構(gòu)。在內(nèi)核上開發(fā)應(yīng)用,在把內(nèi)核
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 企業(yè)內(nèi)部培訓(xùn)師招聘合同書
- 水泥行業(yè)托盤租賃協(xié)議
- 2024年軟件開發(fā)合作合同3篇
- 影視基地建設(shè)管理策略
- 汽車維修質(zhì)量異常處理要點(diǎn)
- 臨時演員加入企業(yè)年會合同
- 網(wǎng)絡(luò)教育副總經(jīng)理招聘合同
- 停車場導(dǎo)向牌安裝協(xié)議
- 城市綠化施工總承包合同
- 泥水匠勞動合同模板
- 國家開放大學(xué)電大??啤缎谭▽W(xué)(1)》題庫及答案
- 項(xiàng)目部管理人員通訊錄
- 人教版高一數(shù)學(xué)必修一各章節(jié)同步練習(xí)(含答案)
- 班組長績效管理課件
- 行業(yè)代碼大全
- 改進(jìn)維持性血液透析患者貧血狀況PDCA
- 術(shù)前術(shù)后健康宣教
- 煙葉制絲操作工(中級)技能檢定考試題庫(附答案)
- 新東方國際游學(xué)報名表
- 數(shù)學(xué)八年級下冊第十七章 小結(jié)與復(fù)習(xí)
- 《哈佛管理制度全集-中文》
評論
0/150
提交評論