版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、<p> 《DSP技術與應用》課程設計報告</p><p> 選題名稱: uCOS-II多任務實驗 </p><p> 系(院): 計算機工程學院 </p><p> 專 業(yè): 計算機科學與技術 </p><p> 班 級:
2、 計算機1073 </p><p> 姓 名: 學 號: </p><p> 指導教師: </p><p> 學年學期: 2009 ~ 2010 學年 第 2 學期</p><p&g
3、t; 2010年 5 月 30 日</p><p><b> 摘要:</b></p><p> 多任務是操作系統(tǒng)的一項基本功能。在DSP系統(tǒng)上引入操作系統(tǒng)后,我們可以非常方便的使用它的多任務功能。實時嵌入式操作系統(tǒng)uCOS-II是基于優(yōu)先級的搶占式實時多任務操作系統(tǒng),包含了實時內核、任務管理、時間管理、任務間通信同步和內存管理等功能。μC/O
4、S-II 共有 64 個優(yōu)先級,優(yōu)先級的高低按編號從 0(最高)到 63(最低)排序。通過定義系統(tǒng)常量 OS_LOWEST_PRIO 的值來限制優(yōu)先級編號的范圍,當最低優(yōu)先級為定為 18(共 19 個不同的優(yōu)先級)時,定義如下:defineOS_LOWEST_PRIO18 μC/OS-II 實時操作系統(tǒng)總是將最低優(yōu)先級OS_LOWEST_PRIO 分配給“空閑任務”,將次低優(yōu)先級 OS_LOWEST_PRIO-1 分配給“統(tǒng)計任務”。&
5、lt;/p><p> 關鍵詞:µC/OS-Ⅱ操作系統(tǒng);DSP仿真器;匯編語言;多任務內核;任務優(yōu)先級</p><p><b> 目錄</b></p><p><b> 1 多任務描述1</b></p><p> 2 µC/OS-Ⅱ操作系統(tǒng)1</p>&l
6、t;p> 2.1 µC/OS-Ⅱ簡介1</p><p> 2.2 µC/OS-Ⅱ工作原理1</p><p><b> 3 基礎知識2</b></p><p> 3.1 STaskCreate()2</p><p> 3.2 任務控制塊(Task Control Bloc
7、ks,OS_TCBs)2</p><p><b> 4 軟件設計3</b></p><p> 4.1 程序設計3</p><p> 5 周期性執(zhí)行任務6</p><p><b> 6優(yōu)先級安排6</b></p><p> 6.1 任務的優(yōu)先級資源6&l
8、t;/p><p> 6.2 優(yōu)先級安排原則7</p><p><b> 總 結8</b></p><p><b> 參考文獻9</b></p><p><b> 1 多任務描述</b></p><p> 多任務是操作系統(tǒng)的一項基本功能。在
9、DSP系統(tǒng)上引入操作之后,我們可以非常方便的使用它的多任務功能,多任務系統(tǒng)中,內核負責管理各個任務,或者說為每個任務分配CPU時間,并且負責任務之間的通訊。內核提供的基本服務是任務切換。只所以使用實時內核可以大大簡化應用系統(tǒng)的設計,是因為實時內核允許將應用分成若干個任務,由實時黑河來管理它們。內核本身也增加了應用程序的格外負荷,代碼空間增加ROM的用量,內核本身的數據結構增加了RAM的用量,內核本身對CPU的占用時間一般在2到5個百分點
10、之間。µC/OS-Ⅱ有一個精巧的內核調度算法,實時內核精小,實行效率高,算法巧妙,代碼空間很少</p><p> 2 µC/OS-Ⅱ操作系統(tǒng)</p><p> 2.1 µC/OS-Ⅱ簡介</p><p> μc/os-ii是由jean j.labrosse于1992年編寫的一個嵌入式多任務實時操作系統(tǒng)。最早這個系統(tǒng)叫做 μc/
11、os,后來經過近10年的應用和修改,在1999年jean j.labrosse推出了;μc/os-ii,并在2000年得到了 美國聯(lián)邦航空管理局對用于商用飛機的、符合rtca do178b標準的認證,從而證明μc/os-ii具有足夠的穩(wěn)定 性和安全性。 μc/os-ii是一個可裁減、源代碼開放、結構小巧、可搶占式的實時多任務內核,是專為微控制器系統(tǒng)和軟 件開發(fā)而設計的,是控制器啟動后首先執(zhí)行的背景程序,并作為整個系統(tǒng)的框
12、架貫穿系統(tǒng)運行的始終。它具有執(zhí)行效率高、占用空間小、可移植性強、實時性能良好和可擴展性強 等特點。采用μc/os-ii實時操作系統(tǒng)可以有效地對任務進行調度;對各任務賦予不同的優(yōu)先級可以保證任務 及時響應,而且采用實時操作系統(tǒng),降低了程序的復雜度,方便程序的開發(fā)和維護</p><p> 2.2 µC/OS-Ⅱ工作原理 </p><p> uC/OS-II是一種基于優(yōu)先級的可搶
13、先的硬實時內核。要實現多任務機制,那么目標CPU必須具備一種在運行期更改PC的途徑,否則無法做到切換。不幸的使,直接設置PC指針,目前還沒有哪個CPU支持這樣的指令。但是一般CPU都允許通過類JMP,CALL</p><p> 這樣的指令來間接的修改PC。我們的多任務機制的實現也正是基于這個出發(fā)點。事實上,我們使用CALL指令或者軟中斷指令來修改PC,主要是軟中斷。但在一些CPU上,</p>&l
14、t;p> 并不存在軟中斷這樣的概念,所以,我們在那些CPU上,使用幾條PUSH指令加上一條CALL指令來模擬一次軟中斷的發(fā)生。再uC/OS-II里,每個任務都有一個任務控制塊(Task Control Block),這是一個比較復雜的數據結構。在任務控制快的偏移為0的地方,存儲著一個指針,它記錄了所屬任務的專用堆棧地址。事實上,再uC/OS-II內,每個任務都有自己的專用堆棧,彼此之間不能侵犯。這點要求程序員再他們的程序中保證。
15、一般的做法是把他們申明成靜態(tài)數組。而且要申明成OS_STK類型。當任務有了自己的堆棧,那么就可以將每一個任務堆棧再那里記錄到前面談到的任務控制快偏移為0的地方。以后每當發(fā)生任務切換,系統(tǒng)必然會先進入一個中斷,這一般是通過軟中斷或者時鐘中斷實現。然后系統(tǒng)會先把當前任務的堆棧地址保存起來,僅接著恢復要切換的任務的堆棧地址。由于哪個任務的堆棧里一定也存的是地址(還記得我們前面說過的,每當發(fā)生任務切換,系統(tǒng)必然會先進入一個中斷,而一旦中斷CPU
16、就會把地址壓入堆棧),這樣,就達到了修改PC為下一個任務的地址的目的。</p><p><b> 3 基礎知識</b></p><p> 3.1 STaskCreate()</p><p> 想讓µC/OS-Ⅱ管理用戶的任務,用戶必須要先建立任務。用戶可以通過傳遞任務地址和其他參數到以下兩個函數之一來建立任務:OSTaskCr
17、eate()或OSTaskCreateExt()。OSTaskCreateExt()是OSTaskCreate的擴展版本,提供了一些附加的功能。用兩個函數中的任何一個都可以建立任務。任務可以在多任務調度前建立,也可以在其它任務的執(zhí)行過程中被建立。在開始多任務調度(即調用OSSstar())前,用戶必須建立至少一個任務。任務不能由中斷服務程序(ISR)來建立。 </p><p> 3.2 任務控制塊(Task
18、Control Blocks,OS_TCBs)</p><p> 一旦任務建立了,任務控制塊OS_TCBs將被賦值。任務控制塊是一個數據結構,當任務的CPU使用權被剝奪時,µC/OS-Ⅱ用它來保存該任務的狀態(tài)。當任務重新得到CPU使用權時,任務控制塊能確保任務從當時被中斷的那一點斯堡不差地繼續(xù)執(zhí)行。</p><p> OS_TCBs全部駐留在RAM中。讀者將會注意到筆者在組織
19、這個數據結構時,考慮到了各</p><p> 成員的邏輯分組。任務建立的時候,OS_TCBs就被初始化了。</p><p><b> 4 軟件設計</b></p><p><b> 4.1 程序設計</b></p><p> typedef struct os_tcb {</p>
20、;<p> OS_STK *OSTCBStkPtr;</p><p> #if OS_TASK_CREATE_EXT_EN</p><p> void *OSTCBExtPtr;</p><p> OS_STK *OSTCBStkBottom;</p><p> INT32U OST
21、CBStkSize;</p><p> INT16U OSTCBOpt;</p><p> INT16U OSTCBId; </p><p><b> #endif</b></p><p> struct os_tcb *OSTCBNext;</p><p> st
22、ruct os_tcb *OSTCBprev;</p><p> #if (OS_Q_EN && (OS_MAX_QS >=2)) || OS_MBOX_EN || OS_SEM_EN</p><p> OS_EVENT *OSTCBEventptr;</p><p><b> #endif</b></
23、p><p> #if (OS_Q_EN %% (OS_MAX_QS >=2)) || OS_MBOX_EN</p><p> void *OSTCBMsg;</p><p><b> #endif</b></p><p> INT16U OSTCBDly;</p><p
24、> INT8U OSTCBStat;</p><p> INT8U OSTCBPrio;</p><p> INT8U OSTCBX;</p><p> INT8U OSTCBY;</p><p> INT8U OSTCBBitX;</p><p>
25、INT8U OSTCBBitY;</p><p> #if OS_TASK_DEL_EN</p><p> BOOLEAN OSTCBDELReq;</p><p><b> #endif</b></p><p> } OS_TCB; </p><p> OSTCBStk
26、Ptr 是指向當前任務棧頂的指針。µC/OS-Ⅱ允許每個任務有自己的棧,尤為重要的是,每個任務的棧的容量可以是任意的。有些商業(yè)內核要求所有任務棧的容量都一樣,除非用戶寫的一個復雜的接口函數來改變之。這種限制浪費了RAM,當各任務需要的??臻g不同時,也得按任務中預期棧容量需求最多的來分配??臻g。</p><p> OSTCBStkPt是OS_TCB數據結構中唯一一個能用匯編語言來處置的變量。</p
27、><p> OSTCBExtPtr指向用戶定義的任務控制塊擴展。用戶可以擴展任務控制塊而不必修改µC/OS-Ⅱ的源代碼。OSTCBExtPtr只在函數OstaskCreateExt()中使用,故使用時要將OS_TASK_CREAT_EN設為1,以允許建立任務函數的擴展。</p><p> OSTCBStkBottom是指向任務底棧的指針。如果微處理器的棧指針是遞減的,即棧存儲器從
28、高地址想低地址方向分配,則OSTCBStkBottom指向任務使用的??臻g的最低地址。</p><p> OSTCBStkSize存有棧中可容納的指針元數目而不是用字節(jié)表示的棧容量總數。</p><p> OSTCBOpt把選擇項傳給OSTaskCreateRxt(),只有在用戶OS_TASK_CREATE_EXT_EN設為1時,這個變量才有效。</p><p>
29、; OSTCBId用于存儲任務的識別碼。</p><p> OSTCBNext和OSTCBPrev用于任務控制塊OS_TCBa的雙重鏈接,該鏈表在詩中節(jié)拍函數</p><p> OSTimeIick()中使用,用于刷新各個任務的任務遲延變量,在任務刪除的時候從鏈表中被刪除。雙中鏈接的鏈表使得任一稱冠都能被快速插入或刪除。</p><p> OSTCBMsg是
30、指向傳給任務的消息的指針。</p><p> OSTCBDly當需要把任務延遲若干時鐘節(jié)拍時要用到這個變量,或者需要把任務掛起一段時間以等待某事件的發(fā)生,這種等待是有超時限制的。</p><p> OSTCBStat是任務的狀態(tài)字。當OSTCBStat為0,任務進入就緒態(tài)。</p><p> OSTCBPrio是任務優(yōu)先級。高優(yōu)先級任務的OSTCBPrio值小
31、。也就是說,這個值越小,任務的優(yōu)先級越高。</p><p> 5 周期性執(zhí)行任務</p><p> 周期性執(zhí)行的任務函數也由三部分組成:第一部分“進行準備工作的代碼”和第二部分“任務實體代碼”的含義與單次執(zhí)行任務的含義相同,第三部分是“調用系統(tǒng)延時函數”,把 CPU 的控制權主動交給操作系統(tǒng),使自己掛起,再由操作系統(tǒng)來啟動其它已經就緒的任務。當延時時間到后,重新進入就緒狀態(tài),通常能夠
32、很快獲得運行權。通過合理設置調用 OSTimeDly( )或 OSTimeDlyHMSM( )時的參數值可以調整任務的執(zhí)行周期。當任務執(zhí)行周期遠大于系統(tǒng)時鐘節(jié)拍時,任務執(zhí)行周期的相對誤差比較?。划斎蝿請?zhí)行周期只有幾個時鐘節(jié)拍時,相鄰兩次執(zhí)行的間隔時間抖動不能忽視,任務的執(zhí)行周期的相對誤差比較大,只適用于對周期穩(wěn)定性要求不高的任務(如鍵盤任務);當任務執(zhí)行周期只有一個時鐘節(jié)拍時,可將該任務的功能放到 OSTimeTickHook( )(
33、時鐘節(jié)拍函數中的鉤子函數)中去執(zhí)行;當任務執(zhí)行周期小于一個時鐘節(jié)拍或者不是時鐘節(jié)拍的整數倍時,將無法使用延時函數對其進行周期控制,只能采用獨立于操作系統(tǒng)的定時中斷來觸發(fā)。采用獨立定時器觸發(fā)的任務具有很高的周期穩(wěn)定性。</p><p><b> 優(yōu)先級安排</b></p><p> 6.1 任務的優(yōu)先級資源</p><p> 任務的優(yōu)先級
34、資源由操作系統(tǒng)提供,μC/OS-II 共有 64 個優(yōu)先級,優(yōu)先級的高低按編號從 0(最高)到 63(最低)排序。由于用戶實際使用到的優(yōu)先級總個數通常遠小于64為節(jié)約系統(tǒng)資源,可以通過定義系統(tǒng)常量 OS_LOWEST_PRIO 的值來限制優(yōu)先級編號的范圍,當最低優(yōu)先級為定為 18(共 19 個不同的優(yōu)先級)時,定義如下:defineOS_LOWEST_PRIO18 μC/OS-II 實時操作系統(tǒng)總是將最低優(yōu)先級OS_LOWEST_PRI
35、O 分配給“空閑任務”,將次低優(yōu)先級 OS_LOWEST_PRIO-1 分配給“統(tǒng)計任務”。在此例中,最低優(yōu)先級為定為 18,則“空閑任務”的優(yōu)先級為 18,“統(tǒng)計任務”的優(yōu)先級為 17,用戶實際可使用的優(yōu)先級資源為 0 到 16,共 17 個。μC/OS-II 實時操作系統(tǒng)還保留對最高的四個優(yōu)先級(0、1、2、3)和 OS_LOWEST_PRIO-3 與 OS_LOWEST_PRIO-2 的使用權,以備將來操作系統(tǒng)升級時使如果用戶的應
36、用程序希望在將來升級后的操作系統(tǒng)下仍然可以不加修改地使用,則用戶任務可以放心使用的優(yōu)</p><p> 先級個數為 OS_LOWEST_PRIO-7。在本例中,軟件優(yōu)先級資源為 18-7=11 個,即可使用的優(yōu)先級為 4、5、6、7、8、9、10、11、12、13、14。實際可使用的軟件優(yōu)先級資源數目應該留有余地,以便將來擴充應用軟件的功能(增加新任務)時不必對優(yōu)先級進行大范圍的調整。</p>&
37、lt;p> 6.2 優(yōu)先級安排原則</p><p> 任務的優(yōu)先級安排原則如下:中斷關聯(lián)性:與中斷服務程序(ISR)有關聯(lián)的任務應該安排盡可能高的優(yōu)先級,以便及時處理異步事件,提高系統(tǒng)的實時性。如果優(yōu)先級安排得比較低,CPU 有可能被優(yōu)先級高一些的任務長期占用,以致于在第二次中斷發(fā)生時連第一次中斷還沒</p><p> 有處理,產生信號丟失現象。</p><
38、;p> 緊迫性:因為緊迫任務對響應時間有嚴格要求,在所有緊迫任務中,按響應時間要</p><p> 求排序,越緊迫的任務安排的優(yōu)先級越高。緊迫任務通常與 ISR 關聯(lián)。</p><p> 關鍵性:任務越關鍵安排的優(yōu)先級越高,以保障其執(zhí)行機會。</p><p> 頻繁性:對于周期性任務,執(zhí)行越頻繁,則周期越短,允許耽誤的時間也越短,故應該安排的優(yōu)先級也越
39、高,以保障及時得到執(zhí)行。</p><p> 快捷性:在前面各項條件相近時,越快捷(耗時短)的任務安排的優(yōu)先級越高,以使其他就緒任務的延時縮短。</p><p> 例如一個應用系統(tǒng)中安排有鍵盤任務、顯示任務、模擬信號采集任務、數據處理任務、串行口接收任務、串行口發(fā)送任務。在這些任務中,模擬信號采集任務、串行口接收任務和串行口發(fā)送任務均與 ISR 關聯(lián),實時性要求比較高。其中,串行口接收任
40、務是關鍵任務和緊迫任務,遺漏接收內容是不允許的;模擬信號采集任務是緊迫任務,但不是關鍵任務,遺漏一個數據還不至于發(fā)生重大問題;在串行口發(fā)送任務中,CPU 是主動方,慢一些也可以,只要將數據發(fā)出去就可以。鍵盤任務和顯示任務是人機接口任務,實時性要求很低。數據處理任務根據其運算量來決定,運算量很大時,優(yōu)先級安排最低,運算量不大時,優(yōu)先級可安排得比鍵盤任務高一些。根據以上分析,最低優(yōu)先級 OS_LOWEST_PRIO 定為 18,各個任務的優(yōu)
41、先級安排如下:串行口接收任務(優(yōu)先級 2),模擬信號采集任務(優(yōu)先級 4),串行口發(fā)送任務(優(yōu)先級 6),數據處理任務(優(yōu)先級 9),顯示任務(優(yōu)先級 12),鍵盤任務(優(yōu)先級 13)。當優(yōu)</p><p> 先級的安排比較寬松時,以后增加新任務就比較方便,在不改變現有任務優(yōu)先級的情況下,很容易根據需要找到一個合適的空閑優(yōu)先級。</p><p><b> 總結</b
42、></p><p> 經過一周的DSP課程設計,我終于順利的完成了本學期所做的uCOS-II多任務實驗,本次的實驗讓自己受益匪淺,雖然不是很順利很完美,但是還是讓自己感到滿意了</p><p> 課程設計是培養(yǎng)我們的綜合能力,運用所學的知識用于實踐,去發(fā)現,提出,分析解決實際出現的問題,充分調動自己的積極性于動手的能力,本次實驗所做的是uCOS-II多任務實驗,在接到這個題目的時
43、候,首先我要對這個課程設計的原理要有一個細致的了解,了解它工作的意義,然后要對它的代碼進行分析編寫,弄懂其工作原理,對于uCOS-II多任務實驗,自己查閱了很多資料,對其有了很深的了解,在了解的同時也想到了它真正的實際作用,對我們的日常生活都有著很大的作用。初步做這個實驗的時候,自己遇到了很多的問題和困難,通過查閱資料,向馬岱老師,常波老師進行請教和通過和同學的溝通交流,一點一點的解決問題,最后順利的完成了課程設計。</p>
44、<p> 本次課程設計不僅讓我對課本上的知識得到了鞏固,更是讓我學到了很多課本上沒有的新知識,讓自己受益匪淺,感覺自己真的學到了許多。課程設計是對我們經驗的積累,光學書本知識雖然對理論的理解加深,但是實際操作才是更重要的,光有理論知識而沒有實際的經驗只能算是紙上談兵,只有在實際操作中,我們才能夠更加熟悉各種步驟要求,才能慢慢完善自己的經驗,充分調動我們的動手能力和自己的積極性,讓自己把學到的課本知識和實際運用充分的結合起
45、來,完善自己的經驗。</p><p> 最后,我要感謝學校提供的各項設備,感學同學的幫助,感謝指導老師對自己的悉心的指導,因為你們,我才能夠成功了完成了本次的課程設計,再次感謝學校,同學和指導老師!</p><p><b> 參考文獻</b></p><p> 1 李玉柏. DSP技術.成都:成都電子科技大學出版社,1997 </
46、p><p> 2 李利. DSP原理及應用.北京:中國水利水電出版社,2002 </p><p> 3 張芳娟.DSP基礎與實驗.北京:北京航空航天大學出版社,2008 </p><p> 4 崔濤,呂陰芝.TMS320C54DSP原理及應用.北京:科學出版社,2009</p><p> 5 汪安民.TMS320C54XDSP實
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 數字信號處理(dsp)課程設計報告
- dsp數字信號處理課程設計報告8
- dsp數字信號處理課程設計報告-- 步進電機
- dsp數字信號處理課程設計報告-- ad接口設計
- dsp數字信號處理課程設計-- µcos-ii在dsp上的任務通訊
- 數字信號課程設計--數字信號處理
- 數字信號處理課程設計報告
- 數字信號處理課程設計報告
- 數字信號處理課程設計報告
- dsp數字信號處理課程設計報告--- µcos-ⅱ移植實驗
- 基于ucos-ii的時鐘設計實驗報告
- dsp數字信號處理課程設計報告-- 語音壓縮與回放
- 基于dsp_builder數字信號處理課程設計
- 數字信號處理課程設計報告 (2)
- 數字信號處理課程設計報告 (3)
- 數字信號處理課程設計項目報告
- 數字信號處理課程設計
- 數字信號處理課程設計
- 數字信號處理課程設計
- 數字信號處理課程設計
評論
0/150
提交評論