<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è) > 嵌入式系統 > 設計應用 > uC/OS-II在MSP430單片機芯片上實(shí)現RTOS的問(wèn)題分析

uC/OS-II在MSP430單片機芯片上實(shí)現RTOS的問(wèn)題分析

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

 作為嵌入式信息產(chǎn)品的一個(gè)重要應用方面,其使用、設計面臨著(zhù)全新的挑戰。一方面,人們對嵌入式產(chǎn)品的要求越來(lái)越高,穩定可靠、功能豐富、物美價(jià)廉的信息產(chǎn)品將成為人們的首選。另一方面,隨著(zhù)微電子工藝水平的發(fā)展,處理器的能力不斷提高,從最初的8位到16位,進(jìn)而32位單片機,功能越來(lái)越強大,執行速度越來(lái)越快,集成度、精確度也越來(lái)越高,應用領(lǐng)域進(jìn)一步拓寬??梢哉f(shuō),單片機的性能已經(jīng)能夠滿(mǎn)足現代人們對嵌入式信息產(chǎn)品的更高要求。為了能將二者有效地結合起來(lái),嵌入式的軟件設計方法也取代了以前的前后臺(超循環(huán))設計方法,越來(lái)越受到重視和應用。

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

  正如分時(shí)操作系統中Linux的出現打破了Windows一統天下的局面一樣,由美國Jean J.Labrosse先生設計和編寫(xiě)的(Micro C OS 2)的出現也給國內的應用者帶來(lái)了驚喜。的最大優(yōu)點(diǎn)與Linux相同,即其源代碼全部公開(kāi),使人們在應用它的同時(shí)能清楚地了解內部的細節,并且能夠根據自己的需求進(jìn)行移植和修改。特別重要的是經(jīng)過(guò)8年的發(fā)展,已經(jīng)成功地在多個(gè)行業(yè)得到應用,保證了實(shí)用性和可靠性。它的出現改變了以前人們在使用時(shí)的態(tài)度,減少了經(jīng)濟上的顧慮,對于國內RTOS的研究、推廣、應用將起到重要的推動(dòng)作用。uC/OS-II采用微內核設計,使用C語(yǔ)言編寫(xiě),追求靈活性,可配置、可裁剪、可擴充、移植性強。需要強調的是 uC/OS-II嚴格采用優(yōu)先級搶占式調度方案。在創(chuàng )建任務(wù)時(shí),根據任務(wù)的重要性給每個(gè)任務(wù)分配不同的優(yōu)先級。任務(wù)調度時(shí),先執行高優(yōu)先級的任務(wù),然后按照優(yōu)先級由高到低執行任務(wù)。如果在某個(gè)任務(wù)執行中,激發(fā)了一個(gè)優(yōu)先級更高的任務(wù),那么在該任務(wù)執行結束后,將由任務(wù)調度器調度去執行所激發(fā)的高優(yōu)先級任務(wù),而不是順序執行。

  下面就uC/OS-II在TI公司生產(chǎn)的F148上的移植和應用來(lái)探討在單片機上RTOS可能遇到的一些。

  1 系列單片機簡(jiǎn)介

  系列單片機是由TI公司開(kāi)發(fā)的16位單片機。其突出特點(diǎn)是超低功耗,非常適合于各種功率要求低的場(chǎng)合。有多個(gè)系列和型號,分別由一些基本功能模塊按不同的應用目標組合而成。典型應用是流量計、智能儀表、醫療設備和保安系統等方面。由于其較高的性能價(jià)格比,應用已日趨廣泛。

  MSP430F148是TI新近推出的MSP430F14x/13x系列單片機中的一款。相對MSP430系列的其它,主要特點(diǎn)如下:

  超低功耗。由于內置了功耗極低的快速閃存,因此,MSP430F14x/13x系列在待機模式下所消耗的電能還少于電池未使用時(shí)的自然損耗。在正常的工作狀態(tài)下,如果工作電壓為2.2 V,其典型消耗電流僅為250uA/MIPS,而待機模式下工作電流降至僅1uA以下。

  執行速度快。MSP430F13x/14x系列的工作電壓范圍為1.8~3.6 V,性能可達8 MIPS。

  存儲容量大。MSP430F148片內內置了48 KB Flash ROM和2 KB RAM。RAM空間是MSP430系列中最大的,基本符合運行RTOS的需要。

  高性能A/D。包含了1個(gè)具有8個(gè)外部通道的12位高性能A/D轉換器。利用芯片內置的自動(dòng)掃描功能,A/D轉換器可以不需要中央處理器的協(xié)助而獨立工作。

  集成度高。該器件還包括1個(gè)獨立的看門(mén)狗、2個(gè)脈寬調制定時(shí)器(PWM)、1個(gè)比較器、2個(gè)USART口以及48個(gè)輸入/輸出引腳等部件。

  在線(xiàn)支持強。MSP430F13x/14x系列均可由MSP-FET430P140閃速仿真工具(FET)提供支持。該FET是一種完整的集成開(kāi)發(fā)環(huán)境,包括源代碼級調試器、仿真器、匯編/連接器、C編譯器、2種評估芯片、目標板、JTAG接口以及編程單元等。

  由以上介紹可以看出,MSP430F148屬于一種中低端的單片機,只具備運行RTOS的基本條件,所以在它上面運行RTOS所遇見(jiàn)的一些,對于一般的單片機而言是具有代表性的。

  2 中斷堆棧的結構設計

  在uC/OS-II中,任務(wù)切換分為任務(wù)級切換和中斷級切換。其中任務(wù)級切換是通過(guò)發(fā)軟中斷指令或依靠處理器執行陷阱指令來(lái)完成的。軟中斷指令會(huì )強制將一些處理器寄存器保存到當前任務(wù)的堆棧中,并執行任務(wù)調度。其目的是使處于就緒態(tài)的任務(wù)的堆棧結構看起來(lái)就像剛發(fā)生過(guò)中斷并將全部寄存器保存在堆棧的情形一樣。如MCS-5l以及x86芯片都有類(lèi)似的指令,但出在有一些單片機芯片中沒(méi)有軟中斷指令,并且在發(fā)生中斷時(shí)保存寄存器的情況根據單片機芯片和所使用的編譯器的不同而有很大區別。

  MSP430F148中就沒(méi)有軟中斷指令,所使用的IAR編譯器在發(fā)生中斷時(shí)也不保存所有的寄存器,而是只保存幾個(gè)在中斷中使用到的寄存器。所有這些都是不符合uC/OS-II的移植條件的。我們的解決方法是根據具體情況來(lái)自己定義一個(gè)中斷結構,不論是在任務(wù)級調度還是中斷發(fā)生或調度以及任務(wù)堆棧的初始化時(shí),都要按照這個(gè)結構來(lái)執行。代價(jià)是必須對所編寫(xiě)的中斷程序的匯編代碼進(jìn)行人工修改,使之符合這個(gè)中斷結構。

  為設計一個(gè)符合要求的中斷堆棧結構,首先必須清楚所使用的單片機在發(fā)生中斷時(shí)執行了哪些操作,即向堆棧中保存了哪些寄存器以及它們的順序。當MSP430單片機發(fā)生中斷時(shí),只進(jìn)行2條基本操作,先將SR(狀態(tài)寄存器)壓入堆棧中保存,然后將中斷發(fā)生時(shí)要執行的下一條指令的PC值壓入堆棧保存。其次,要清楚所使用的C編譯器在編譯C語(yǔ)言編寫(xiě)的中斷程序時(shí),進(jìn)行了哪些默認的操作。通過(guò)對所使用的IAR V2.13編譯器編譯產(chǎn)生的匯編程序進(jìn)行,可以發(fā)現,除了以上的2條基本操作以外,在中斷程序的開(kāi)頭,還自動(dòng)保存了 R12~R15四個(gè)寄存器,余下的R4~Rll八個(gè)寄存器中只保存在中斷程序中用到的個(gè)別寄存器,而不是全部保存。但在RTOS中必須保存所有的寄存器,這樣才能正確保存該任務(wù)的狀態(tài)。通過(guò)以上,我們定義了MSP430運行uC/OS-II時(shí)的中斷堆棧結構,如圖1所示。

  


  3 如何保證單片機的低功耗特性

  單片機在嵌入式方面的應用都非常強調單片機的超低功耗特性。MSP430系列的特點(diǎn)也在于此。如果由于運行RTOS而破壞了單片機的低功耗特性是得不償失的。一般的單片機都規定了幾種不同功耗的工作模式,可以根據具體的需求來(lái)選擇。不同工作模式是通過(guò)讀寫(xiě)1個(gè)或1組寄存器來(lái)控制CPU、時(shí)鐘、晶振以及外圍設備的運行來(lái)的。

  MSP430系列單片機有6種不同的工作模式,都是通過(guò)對狀態(tài)寄存器SR的讀寫(xiě)來(lái)實(shí)現的。在RTOS中,由于每個(gè)任務(wù)都可以分別保存自己的狀態(tài),包括狀態(tài)寄存器,所以在實(shí)現低功耗工作模式時(shí)更加靈活方便。首先,在設計每個(gè)任務(wù)時(shí),都可以根據任務(wù)的具體要求定義它的工作模式。其次,在整個(gè)系統設計中,設計一個(gè)最低優(yōu)先級的任務(wù),其作用就是使系統進(jìn)入特定的低功耗工作模式。這樣,在其它任務(wù)都運行完畢后,系統會(huì )調用這個(gè)任務(wù)使整個(gè)系統進(jìn)入低功耗工作模式。當其它任務(wù)又恢復運行時(shí)(如延時(shí)結束),會(huì )自動(dòng)進(jìn)入其特定的工作狀態(tài),以達到降低功耗的目的。

  4 如何減少RTOS在運行中占用的RAM空間

  影響RTOS在單片機上應用的主要原因是由于在單片機上運行RTOS需要占用一定的系統資源,如系統時(shí)鐘、RAM、FLASH或ROM等,從而減少了應用系統對資源的利用。特別是對RAM的占用。一般而言,單片機上的內部RAM數量都很少(如MSP430F148是整個(gè)MSP430中RAM最多的,也只有2 KB),雖然可以通過(guò)外部擴展來(lái)增加RAM數量,但這樣不僅增加了設計的難度和產(chǎn)品成本,而且有時(shí)還使系統應用無(wú)法進(jìn)行擴展。所以,最好的方法是能夠充分利用單片機的內部RAM來(lái)運行RTOS。

  通過(guò)uC/OS-II對RAM的使用情況可知,占用RAM空間最多的原因,是由于在設計uC/OS-II時(shí),要給每個(gè)任務(wù)都分配一個(gè)單獨的任務(wù)堆棧。特別在單片機的硬件設計沒(méi)有將中斷堆棧與任務(wù)堆棧分開(kāi)時(shí),計算任務(wù)堆棧的大小時(shí)不僅要計算任務(wù)中變量和函數嵌套所使用的RAM大小,還必須計算該任務(wù)在運行時(shí)發(fā)生中斷和中斷嵌套所需要的RAM空間的大小。由于每一個(gè)任務(wù)均需預留中斷和中斷嵌套所需要的RAM空間的大小,所以使得大量RAM空間被浪費。最直接的解決方法就是利用軟件來(lái)將任務(wù)堆棧和中斷堆棧分離,使得在計算任務(wù)堆棧的大小時(shí),只需計算任務(wù)本身所需的RAM空間大小,從而提高了RAM的使用效率,增加了更多的應用任務(wù)。

  所謂將中斷堆棧與任務(wù)堆棧分離,就是在內存中專(zhuān)門(mén)開(kāi)辟出一塊區域作為中斷堆棧使用,任何一個(gè)任務(wù)運行時(shí)發(fā)生中斷都只使用它。設計的原則:一是要盡量將中斷任務(wù)與普通任務(wù)分開(kāi);二是模擬的中斷堆棧指針必須一直保持在中斷堆棧的頂部,即中斷時(shí)中斷堆棧指針要時(shí)刻保持與SP的同步變化。

  為了達到這個(gè)目的,單片機芯片必須具備以下2個(gè)條件。

  首先,單片機芯片必須有一個(gè)通用寄存器和相應的指令能夠模仿堆棧指針SP的功能,即能實(shí)現軟堆棧。在MSP430系列單片機中有以下指令可以仿真SP的功能(把R4作為中斷堆棧指針使用):

  MOV @R4+,SP ;將R4所指向地址中的內容存入SP;中,同時(shí)R4中內容加2

  MOV SP,0(R4) ;將SP中的內容存入R4所指向的地址中

  MOV @R4+,PC ;將R4所指向地址中的內容存入PC;中,同時(shí)R4中內容加2


上一頁(yè) 1 2 3 下一頁(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>