分析uC/OS-II在MSP430單片機(jī)芯片上實(shí)現(xiàn)RTOS的問題
單片機(jī)作為嵌入式信息產(chǎn)品的一個(gè)重要應(yīng)用方面,其使用、設(shè)計(jì)面臨著全新的挑戰(zhàn)。一方面,人們對(duì)嵌入式產(chǎn)品的要求越來越高,穩(wěn)定可靠、功能豐富、物美價(jià)廉的信息產(chǎn)品將成為人們的首選。另一方面,隨著微電子工藝水平的發(fā)展,單片機(jī)處理器的能力不斷提高,從最初的8位單片機(jī)到16位,進(jìn)而32位單片機(jī),功能越來越強(qiáng)大,執(zhí)行速度越來越快,集成度、精確度也越來越高,應(yīng)用領(lǐng)域進(jìn)一步拓寬。可以說,單片機(jī)芯片的性能已經(jīng)能夠滿足現(xiàn)代人們對(duì)嵌入式信息產(chǎn)品的更高要求。為了能將二者有效地結(jié)合起來,嵌入式RTOS的軟件設(shè)計(jì)方法也取代了以前的前后臺(tái)(超循環(huán))設(shè)計(jì)方法,越來越受到重視和應(yīng)用。
本文引用地址:http://2s4d.com/article/201809/389175.htm正如分時(shí)操作系統(tǒng)中Linux的出現(xiàn)打破了Windows一統(tǒng)天下的局面一樣,由美國Jean J.Labrosse先生設(shè)計(jì)和編寫的uC/OS-II(Micro C OS 2)的出現(xiàn)也給國內(nèi)的RTOS應(yīng)用者帶來了驚喜。uC/OS-II的最大優(yōu)點(diǎn)與Linux相同,即其源代碼全部公開,使人們?cè)趹?yīng)用它的同時(shí)能清楚地了解內(nèi)部的實(shí)現(xiàn)細(xì)節(jié),并且能夠根據(jù)自己的需求進(jìn)行移植和修改。特別重要的是uC/OS-II經(jīng)過8年的發(fā)展,已經(jīng)成功地在多個(gè)行業(yè)得到應(yīng)用,保證了實(shí)用性和可靠性。它的出現(xiàn)改變了以前人們?cè)谑褂肦TOS時(shí)的態(tài)度,減少了經(jīng)濟(jì)上的顧慮,對(duì)于國內(nèi)RTOS的研究、推廣、應(yīng)用將起到重要的推動(dòng)作用。uC/OS-II采用微內(nèi)核設(shè)計(jì),使用C語言編寫,追求靈活性,可配置、可裁剪、可擴(kuò)充、移植性強(qiáng)。需要強(qiáng)調(diào)的是 uC/OS-II嚴(yán)格采用優(yōu)先級(jí)搶占式調(diào)度方案。在創(chuàng)建任務(wù)時(shí),根據(jù)任務(wù)的重要性給每個(gè)任務(wù)分配不同的優(yōu)先級(jí)。任務(wù)調(diào)度時(shí),先執(zhí)行高優(yōu)先級(jí)的任務(wù),然后按照優(yōu)先級(jí)由高到低執(zhí)行任務(wù)。如果在某個(gè)任務(wù)執(zhí)行中,激發(fā)了一個(gè)優(yōu)先級(jí)更高的任務(wù),那么在該任務(wù)執(zhí)行結(jié)束后,將由任務(wù)調(diào)度器調(diào)度去執(zhí)行所激發(fā)的高優(yōu)先級(jí)任務(wù),而不是順序執(zhí)行。
下面就uC/OS-II在TI公司生產(chǎn)的MSP430F148芯片上的移植和應(yīng)用來探討在單片機(jī)上實(shí)現(xiàn)RTOS可能遇到的一些問題。
1 MSP430系列單片機(jī)簡介
MSP430系列單片機(jī)是由TI公司開發(fā)的16位單片機(jī)。其突出特點(diǎn)是超低功耗,非常適合于各種功率要求低的場合。有多個(gè)系列和型號(hào),分別由一些基本功能模塊按不同的應(yīng)用目標(biāo)組合而成。典型應(yīng)用是流量計(jì)、智能儀表、醫(yī)療設(shè)備和保安系統(tǒng)等方面。由于其較高的性能價(jià)格比,應(yīng)用已日趨廣泛。
MSP430F148是TI新近推出的MSP430F14x/13x系列單片機(jī)中的一款。相對(duì)MSP430系列的其它芯片,主要特點(diǎn)如下:
超低功耗。由于內(nèi)置了功耗極低的快速閃存,因此,MSP430F14x/13x系列在待機(jī)模式下所消耗的電能還少于電池未使用時(shí)的自然損耗。在正常的工作狀態(tài)下,如果工作電壓為2.2 V,其典型消耗電流僅為250uA/MIPS,而待機(jī)模式下工作電流降至僅1uA以下。
執(zhí)行速度快。MSP430F13x/14x系列的工作電壓范圍為1.8~3.6 V,性能可達(dá)8 MIPS。
存儲(chǔ)容量大。MSP430F148片內(nèi)內(nèi)置了48 KB Flash ROM和2 KB RAM。RAM空間是MSP430系列中最大的,基本符合運(yùn)行RTOS的需要。
高性能A/D。包含了1個(gè)具有8個(gè)外部通道的12位高性能A/D轉(zhuǎn)換器。利用芯片內(nèi)置的自動(dòng)掃描功能,A/D轉(zhuǎn)換器可以不需要中央處理器的協(xié)助而獨(dú)立工作。
集成度高。該器件還包括1個(gè)獨(dú)立的看門狗、2個(gè)脈寬調(diào)制定時(shí)器(PWM)、1個(gè)比較器、2個(gè)USART口以及48個(gè)輸入/輸出引腳等部件。
在線支持強(qiáng)。MSP430F13x/14x系列均可由MSP-FET430P140閃速仿真工具(FET)提供支持。該FET是一種完整的集成開發(fā)環(huán)境,包括源代碼級(jí)調(diào)試器、仿真器、匯編/連接器、C編譯器、2種*估芯片、目標(biāo)板、JTAG接口以及編程單元等。
由以上介紹可以看出,MSP430F148屬于一種中低端的單片機(jī),只具備運(yùn)行RTOS的基本條件,所以在它上面運(yùn)行RTOS所遇見的一些問題,對(duì)于一般的單片機(jī)而言是具有代表性的。
2 中斷堆棧的結(jié)構(gòu)設(shè)計(jì)
在uC/OS-II中,任務(wù)切換分為任務(wù)級(jí)切換和中斷級(jí)切換。其中任務(wù)級(jí)切換是通過發(fā)軟中斷指令或依靠處理器執(zhí)行陷阱指令來完成的。軟中斷指令會(huì)強(qiáng)制將一些處理器寄存器保存到當(dāng)前任務(wù)的堆棧中,并執(zhí)行任務(wù)調(diào)度。其目的是使處于就緒態(tài)的任務(wù)的堆棧結(jié)構(gòu)看起來就像剛發(fā)生過中斷并將全部寄存器保存在堆棧的情形一樣。如MCS-5l以及x86芯片都有類似的指令,但問題出在有一些單片機(jī)芯片中沒有軟中斷指令,并且在發(fā)生中斷時(shí)保存寄存器的情況根據(jù)單片機(jī)芯片和所使用的編譯器的不同而有很大區(qū)別。
MSP430F148中就沒有軟中斷指令,所使用的IAR編譯器在發(fā)生中斷時(shí)也不保存所有的寄存器,而是只保存幾個(gè)在中斷中使用到的寄存器。所有這些都是不符合uC/OS-II的移植條件的。我們的解決方法是根據(jù)具體情況來自己定義一個(gè)中斷結(jié)構(gòu),不論是在任務(wù)級(jí)調(diào)度還是中斷發(fā)生或調(diào)度以及任務(wù)堆棧的初始化時(shí),都要按照這個(gè)結(jié)構(gòu)來執(zhí)行。代價(jià)是必須對(duì)所編寫的中斷程序的匯編代碼進(jìn)行人工修改,使之符合這個(gè)中斷結(jié)構(gòu)。
為設(shè)計(jì)一個(gè)符合要求的中斷堆棧結(jié)構(gòu),首先必須清楚所使用的單片機(jī)在發(fā)生中斷時(shí)執(zhí)行了哪些操作,即向堆棧中保存了哪些寄存器以及它們的順序。當(dāng)MSP430單片機(jī)發(fā)生中斷時(shí),只進(jìn)行2條基本操作,先將SR(狀態(tài)寄存器)壓入堆棧中保存,然后將中斷發(fā)生時(shí)要執(zhí)行的下一條指令的PC值壓入堆棧保存。其次,要清楚所使用的C編譯器在編譯C語言編寫的中斷程序時(shí),進(jìn)行了哪些默認(rèn)的操作。通過對(duì)所使用的IAR V2.13編譯器編譯產(chǎn)生的匯編程序進(jìn)行分析,可以發(fā)現(xiàn),除了以上的2條基本操作以外,在中斷程序的開頭,還自動(dòng)保存了 R12~R15四個(gè)寄存器,余下的R4~Rll八個(gè)寄存器中只保存在中斷程序中用到的個(gè)別寄存器,而不是全部保存。但在RTOS中必須保存所有的寄存器,這樣才能正確保存該任務(wù)的狀態(tài)。通過以上分析,我們定義了MSP430運(yùn)行uC/OS-II時(shí)的中斷堆棧結(jié)構(gòu),如圖1所示。
圖1 MSP430F的自定義中斷堆棧結(jié)構(gòu)
評(píng)論