嵌入式實時操作系統(tǒng)μCOS_第1頁
全文預覽已結束

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、嵌入式實時操作系統(tǒng)cos系統(tǒng)因為它具有軟件代碼小、高度、響應速度快等特點已經(jīng)使它在許多領域得到廣泛的應用。從家里的洗衣機、電冰箱,到作為交通工具的自行車、小汽車,到辦公室里的遠程會議系統(tǒng)等。嵌入式系統(tǒng)通常由硬件環(huán)境和操作系統(tǒng)構成。在嵌入式操作系統(tǒng)的統(tǒng)一調(diào)度管理下實現(xiàn)對全部系統(tǒng)資源的合理利用和分配,達到提高系統(tǒng)性能和有效利用有限資源的目的。cos-作為一個源碼開放的嵌入式實時操作系統(tǒng),同時具有良好的可移植性、可裁剪性、可剝奪性、穩(wěn)定性和牢靠性等優(yōu)點,使其成為許多嵌入式操作系統(tǒng)的首選。本文將cos-在的8位處理器芯片hc9s08上移植實現(xiàn)。2、cos-系統(tǒng)結構cos-是一個完整的可移植可固化可裁剪

2、的搶占式實時多任務內(nèi)核??梢栽诓恍枰龊艽笮薷牡幕A上便利的移植到多種處理器上。條件是:該處理器要具有一定數(shù)量的堆棧,能夠用法軟件中斷,產(chǎn)生定時器中斷,此外,編譯器要支持可重入代碼,并且要能用法匯編實現(xiàn)對處理器內(nèi)部寄存器的相關操作。通過cos-的管理,使多個任務之間互相協(xié)調(diào),分時的占用cpu,實現(xiàn)充分利用資源和實時等相應的功能。任務通常是一個死循環(huán),用來完成某一特定的功能;一個任務相當于一個線程。cos-可以管理多達64個任務,每個任務都具有一個唯一的合法優(yōu)先級。但是,優(yōu)先級最低的那個任務已經(jīng)被系統(tǒng)定義為空閑任務,用戶不能用法。用戶可以通過函數(shù)ostaskcreate()來創(chuàng)建任務,通過ost

3、askdel()來刪除任務。任務可能有以下五種狀態(tài):睡眠態(tài)、就緒態(tài)、運行態(tài)、等待狀態(tài)、中斷服務態(tài)。利用不同的系統(tǒng)函數(shù)可以實現(xiàn)任務在各狀態(tài)之間的轉換。cos-通過對就緒表的操作總是挑選在就緒任務中優(yōu)先級最高的那個任務開頭運行。任務級的調(diào)度是由函數(shù)ossched()來完成的;而中斷級的調(diào)度是由osintext()完成的。任務切換的過程分為兩步:將被掛起任務的處理器寄存器狀態(tài)保存在它的任務堆棧中;將將要執(zhí)行的任務堆棧中保存的寄存器值彈處處理器中,然后執(zhí)行中斷返回命令。這樣新的任務就擁有了cpu,開頭執(zhí)行。直到它掛起,或者是被更高優(yōu)先級的任務中斷。cos-就是在對各種任務的切換之間起協(xié)調(diào)作用的協(xié)調(diào)者。

4、3、hc9s08的硬件結構每個hcs08 系列的 都是由hcs08 核加上幾個存儲器以及外設模塊組成。hcs08 核主要包括:hcs08 cpu背景調(diào)試控制器(bdc)支持多達32個中斷/復位源芯片級地址譯碼hcs08cpu包括和m68hc08相同的寄存器。其中包括一個8位累加器(a),一個可分離存取高8位和低8位的16位變址寄存器(hx),一個16位棧指針(sp),一個16 位程序計數(shù)器(pc)和一個狀態(tài)碼寄存器(ccr),該ccr 包含5個處理器狀態(tài)標記(v,h,n,z 和c)和全局中斷屏蔽標記(i)。hcs08核定義的5個主要的存儲空間。挺直頁寄存器主要包括i/o 端口寄存器和大部分的外

5、設控制和狀態(tài)寄存器;ram區(qū)的地址緊接在挺直頁寄存器地址的后面并且向高地址延長,堆??臻g就落在ram中。普通將堆棧的棧頂初始化在ram的高地址部分。和大部分的處理器一樣,hcs08的堆棧增長方向是向下的。高地址頁寄存器位于$1800到$182b之間,因為這些寄存器比挺直頁寄存器的用法頻率要少的多,所以它們沒有支配在寶貴的挺直頁地址空間中;flash存儲器分配64k字節(jié)的存儲空間終于分配到地址$ffff。這一塊的起始地址取決于mcu有多少flash存儲空間;向量區(qū)是flash區(qū)的一部分,位于$ffc0-$ffff中,但是它是單獨解碼的,所以當中斷向量取出時別的hcs08模塊可以識別出來。4、co

6、s-的移植cos-絕大部分的代碼是用ansi c編寫的,可移植性好。但是用戶在移植時還需要修改相應的幾個文件。與應用相關部分需要用戶按照自己實際應用的需要舉行配置,與處理器相關的部分需要用戶按照不同處理器的結構修改相應的代碼,以使操作系統(tǒng)能夠精確的舉行任務的切換等。主要需要修改的函數(shù)如下:1.os_cpu.h 它主要包括了用define語句定義的、與處理器相關的常數(shù)、宏以及類型。比如:typedef unsigned char int8u、define os_task_grouth 1以及如何處理臨界代碼段等。2.os_cpu_c.c 在這個文件中要求用戶編寫10個容易的c函數(shù),但是唯一必需要

7、修改的是ostaskinit();這個函數(shù)初始化堆棧,應當根據(jù)中斷時系統(tǒng)庇護現(xiàn)場的進棧挨次來初始化堆棧結構。對于hcs08系列來說,當中斷發(fā)生時,依次進棧的是pcl、pch、x、a、和ccr寄存器值。同時為了保證系統(tǒng)的穩(wěn)定還把額外的一個變址寄存器h進棧,有時還要保存頁值。初始化完成后,將棧頂位置sp保存在任務控制塊tcb中。3.os_cpu_a.asm 在這個文件中需要修改關鍵的四個函數(shù)。(1)osstarthighrdy() osstart()函數(shù)調(diào)用它來是就緒任務中優(yōu)先級最高的任務開頭運行。這部分普通要求用戶把它轉化成匯編語言實現(xiàn)。本文中代碼如下:(2)任務級切換函數(shù)osctxsw() 主

8、要通過執(zhí)行軟中斷或trap來實現(xiàn)在任務級的切換功能。其中中斷向量指向osctxsw()函數(shù)的入口地址。在ossched()的最后操作系統(tǒng)調(diào)用os_task_sw執(zhí)行軟中斷或trap命令,該命令找到對應的osctxsw()實現(xiàn)任務的切換。osctxsw()首先要保存當前運行任務的各寄存器狀態(tài)到自己的堆棧中,并且保存當前棧頂位置;然后找到將要運行的任務,并且把保存該任務堆棧中的寄存器彈到cpu內(nèi)部寄存器中,執(zhí)行中斷返回命令,這樣使cpu從新的任務處執(zhí)行,直到下一個任務切換的到來。執(zhí)行代碼如下:(3)中斷級任務切換函數(shù)osintctxsw() 該函數(shù)在isr中執(zhí)行任務的切換功能。因為是在中斷中執(zhí)行的,處理器的大部分寄存器值都已經(jīng)自動保存在堆棧中了,所以該函數(shù)的大部分代碼都和osctxsw()相同,只是前半部分保存寄存器的功能不要了。(4)ostickisr()時鐘節(jié)拍服務函數(shù)cos-要求用戶提供一個周期性的時鐘源,來實現(xiàn)時光的定時和超時功能。這部分功能由該函數(shù)實現(xiàn)。這個函數(shù)首先保存寄存器的值,然后設置中斷標記、清中斷,再調(diào)用ostimetick()遞減延時計數(shù),推斷是否要在中斷中切換任務,最后

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論