版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
可提高軟件模塊化、并行性和維護(hù)性的實時操作系統(tǒng)德州儀器新推出的DSPC6400系列最高運行時鐘可以達(dá)到1.1GHz,運算能力可以達(dá)到8800MIPS。如何充分發(fā)揮DSP的這種性能優(yōu)勢,對軟件提出了很高的要求。首先為了降低系統(tǒng)成本,就要求將許多以前用硬件實現(xiàn)的功能軟件化,原來由多個DSP完成的工作由一塊DSP完成,DSP要能夠同時完成多個相同或不同的任務(wù)而相互之間沒有影響。其次為了產(chǎn)品的維護(hù)和升級,要求軟件盡可能地模塊化,使用高級語言如C來編程,有統(tǒng)一的接口API。所有這些新的要求,都需要使用實時操作系統(tǒng)。以往直接將應(yīng)用程序運行于裸機(jī)之上的作法顯然已經(jīng)不再適用了。德州儀器推出的DSP/BIOS技術(shù)正是基于其多年從事DSP研制生產(chǎn)的經(jīng)驗,為開發(fā)者量身定做的一個優(yōu)秀軟件平臺。更可貴的是該操作系統(tǒng)是免費的,這為眾多的中小用戶使用DSP打開了方便之門。1實時操作系統(tǒng)簡單地說,實時操作系統(tǒng)與一般意義上的操作系統(tǒng)(如Windows、Unix等)的主要差別就在于實時操作系統(tǒng)提供了一種機(jī)制,使得運行于其上的應(yīng)用程序都能夠滿足實時性的要求。在Windows中常見的沙漏現(xiàn)象(即用戶等待現(xiàn)象)在實時系統(tǒng)中是絕對不允許的。因為這可能造成通訊中斷,馬達(dá)損毀等災(zāi)難性的結(jié)果。DSP/BIOS是特別針對實時系統(tǒng),運行于德州儀器C5000,C6000系列的DSP之上的一個實時操作系統(tǒng)。DSP/BIOS實際上是一個可調(diào)用的系統(tǒng)模塊API的集合。以下就各個模塊分別加以介紹。2LOG在開發(fā)的時候通常需要使用printf()來顯示當(dāng)前狀態(tài)。但是printf()是非?;ㄙM時間的函數(shù)、而且不具有實時性。因為DSP需要對顯示的數(shù)據(jù)進(jìn)行分析,整理成合適的顯示格式,并調(diào)用輸出顯示模塊。所以在一個實時性要求很高的應(yīng)用中,對printf()的調(diào)用可能會使系統(tǒng)根本無法滿足實時要求。在DSP/BIOS中引入了一個相應(yīng)的函數(shù)LOG_printf()。該函數(shù)是LOG對象的一個方法(或調(diào)用函數(shù)〕。LOG對象本質(zhì)上是一個32bit的整形數(shù),其高低16bit分別代表要顯示的兩個數(shù)據(jù)。例1是分別使用printf()和LOG_printf()作比較的示范程序:#include<stdio.h>/*HeaderfilesneededforDSPBIOS*/#include<std.h>#include<log.h>/*functions*/voidfunc_printf();voidfunc_LOG_printf();/*ObjectscreatedbytheConfigurationTool*/externLOG_ObjlogTrace;/**========main========*/voidmain(){return;}voidfunc_printf(inttime){printf(″Strartprintfdemon″);printf(″Currenttime=%dn″、time);printf(″Endprintfdemon″);return;}voidfunc_LOG_printf(inttime){LOG_printf(&logTrace、″StrartLOG_printfdemon″);LOG_printf(&logTrace、″Currenttime=%dn″、time);LOG_printf(&logTrace、″EndLOG_printfdemon″);return;}func_printf()和func_LOG_printf()由DSP內(nèi)時鐘控制每100ms周期性地分別調(diào)用一次。通過對printf()和LOG_printf()運行時間作比較發(fā)現(xiàn),在C6211運行在150MHz的情況下,printf()需花費4000個周期約26.7μs,LOG_printf()只花費36個周期約0.24μs。printf()比LOG_printf()多開銷100倍以上的時間,因此LOG_printf()對于實時地顯示一些運行狀態(tài)是非常有幫助的。而且對于熟悉C語言的開發(fā)者來說,LOG_printf()的調(diào)用格式幾乎與printf()完全一樣。3STS對一個軟件進(jìn)行分析優(yōu)化時,通常會用到profile的功能。但是在實時運行的DSP的環(huán)境中使用profile等效于加入了多個程序斷點。由于現(xiàn)在的DSP通常具有很深的流水線結(jié)構(gòu)來保證DSP的高運算能力,如德州儀器的C6000系列的流水線長度為12級,程序斷點需要排空所有已經(jīng)進(jìn)入流水線的指令。這樣也就破壞了真正的運行環(huán)境。同時profile還必須調(diào)用輸出模塊向主機(jī)傳遞時間信息。因此在profile的情況下真正的實時運行環(huán)境是沒有辦法得到保護(hù)的。DSP/BIOS針對這種情況引入了一個統(tǒng)計模塊STS。STS對象只有4個數(shù)據(jù)Previous、Count、Total和Max。調(diào)用的方法(API)也只有4個,即STS_add()、STS_set()、STS_delta()和STS_reset()。這些API對數(shù)據(jù)的操作功能如表1所示。如果要對某一段程序進(jìn)行分析時,只需在其前后調(diào)用STS_set和STS_delta就可以了。如例2使用STS測試程序段執(zhí)行周期如下:/*HeaderfilesneededforDSPBIOS*/#include<sts.h>#include<clk.h>/*functions*/voidfunc_load();/*ObjectscreatedbytheConfigurationTool*/externSTS_ObjstsLoad;/**========main========*/voidmain(){/*oDSP/BIOSidleloop*/return;}voidfunc_load(){STS_set(&stsPrintf、CLK_gethtime());/*測試程序段*/。。.STS_delta(&stsPrintf、CLK_gethtime());}func_load()為一個中斷服務(wù)程序(ISR)。在C6211,150MHz的情況下,僅插入33個周期,約0.22μs。4任務(wù)調(diào)度(HWI/SWI/TSK)一個操作系統(tǒng)的核心永遠(yuǎn)都是任務(wù)的調(diào)度。在DSP/BIOS中任務(wù)的調(diào)度是通過HWI、SWI和TSK三個模塊來實現(xiàn)的。這三個模塊分別對應(yīng)于不同的調(diào)度方法。HWI即硬件中斷。在DSP/BIOS中硬件中斷主要負(fù)責(zé)從外部設(shè)備中讀寫數(shù)據(jù)。由于硬件中斷直接與硬件打交道,所以對應(yīng)的中斷服務(wù)程序ISR應(yīng)該盡可能地短小精悍。需要注意的是HWI并不引起任務(wù)調(diào)度,因此在ISR的入口和出口成對地調(diào)用_HWI_enter()和_HWI_exit()這兩個宏是必須的。HWI在處理完數(shù)據(jù)的輸入輸出后調(diào)用SWI_post()來調(diào)度相應(yīng)的軟件中斷,SWI來完成數(shù)據(jù)處理工作。SWI是DSP/BIOS任務(wù)調(diào)度的核心,共有14個優(yōu)先級,每個優(yōu)先級可以有多個任務(wù)。SWI任務(wù)是搶斷式的,即高優(yōu)先級的任務(wù)可以搶斷低優(yōu)先級的任務(wù)。但是SWI任務(wù)是不可阻塞的。它的運行狀態(tài)如圖1所示。所有SWI任務(wù)共享一個堆棧,SWI任務(wù)只能在程序編制時預(yù)先定義好。DSP/BIOS中對任務(wù)的動態(tài)產(chǎn)生和對阻塞狀態(tài)的支持是通過TSK模塊來實現(xiàn)的。TSK有15個優(yōu)先級,也是可以搶斷的,但是每個TSK任務(wù)使用獨立的堆棧。TSK任務(wù)是通過TSK_create()和TSK_delete()來動態(tài)生成和結(jié)束的。它的運行狀態(tài)如圖2所示。5同步(SEM/ATM/QUE/MBX)多任務(wù)系統(tǒng)中多個任務(wù)之間的協(xié)調(diào)同步工作可以通過多種方法來實現(xiàn)。常用方法如信號量、原子量、隊列和郵箱等。在DSP/BIOS中對這些方法的支持分別通過模塊SEM、ATM、QUE和MBX來實現(xiàn)。由于這些方法的使用與一般的操作系統(tǒng)完全一樣,在這里就不再贅述了。僅就最靈活的在SWI中使用Mailbox的方法來加以簡單地說明。每個SWI任務(wù)都帶有一個Mailbox,對它的操作可以是計數(shù)型的SWI_inc()、SWI_dec()也可以是比特位操作型的SWI_or()、SWI_andn()。Mailbox控制SWI任務(wù)被調(diào)度的條件。這些操作的功能如表2所示。or操作是將Mailbox中的某一位置1,同時引起SWI任務(wù)的調(diào)度。當(dāng)一個SWI任務(wù)可能由多個事件觸發(fā)時,使用or操作可以方便地表示出觸發(fā)的事件。如例3使用or操作指示觸發(fā)事件:andn操作是將Mailbox中的某一位清0,如果Mailbox為0,則引起SWI任務(wù)的調(diào)度。一個SWI任務(wù)需要多個條件都滿足時才運行的情況下,使用andn操作可以方便地表示出這些條件的狀態(tài)。如例4用andn操作來表示多條件時SWI任務(wù)調(diào)度:inc和dec操作則更加靈活,用戶可以借此實現(xiàn)多種應(yīng)用。唯一需要注意的是,inc操作總是引起任務(wù)調(diào)度,而dec操作僅在Mailbox減到0時才引起一次任務(wù)調(diào)度。6通訊(PIP/SIO/HST)一個系統(tǒng)如何從外部設(shè)備中取得數(shù)據(jù),向外部設(shè)備輸出數(shù)據(jù),如何在兩個任務(wù)之間進(jìn)行數(shù)據(jù)正常交換是多樣靈活的。但是這種多樣性也給軟件的維護(hù)升級以及模塊化工作帶來許多不利因素。因此在保持多樣性的同時,保持接口的一致性對于一個軟件來說是非常有幫助的??紤]到DSP大多數(shù)是通過某種類型的串行接口如中繼線E1、IIS、SPI、同步串行口等與外部設(shè)備進(jìn)行數(shù)據(jù)交換的,所以在DSP/BIOS中提供了兩種非常有用的接口對象PIP和SIO。PIP對象包含一個緩沖隊列,與之對應(yīng)的有兩個任務(wù)讀和寫。圖3很好地說明了PIP的邏輯關(guān)系和操作方式。例5,例6分別是一個PIP對象對應(yīng)的讀任務(wù)和寫任務(wù)的示范程序。例5PIP對應(yīng)的讀任務(wù):externfarPIP_Objpip;reader(){Unssize;Ptraddr;if(PIP_getReaderNumFrames(&pip)>0){PIP_get(&pip);addr=PIP_getReaderAddr(&pip);size=PIP_getReaderSize(&pip);/*Codetoemptytheframe*/PIP_free(&pip);}else{LOG_error(″noframesavailable″);/*oryoucouldjustreturn;*/}}例6PIP對應(yīng)的寫任務(wù):externfarPIP_Objpip;writer(){Unssize;Ptraddr;if(PIP_getWriterNumFrames(&pip)>0){PIP_alloc(&pip);addr=PIP_getWriterAddr(&pip);size=PIP_getWriterSize(&pip);/*filltheframeuptosize*/PIP_put(&pip);}else{LOG_error(″noframesavailable″);/*oryoucouldjustreturn;*/}}由邏輯關(guān)系可以看到,通過使用PIP應(yīng)用程序可以保持一個簡單統(tǒng)一接口而不必關(guān)心具體的硬件操作,因此當(dāng)該軟件移植到不同環(huán)境中時,至多只需要改寫設(shè)備驅(qū)動程序。使用PIP的一個具體實例就是HST模塊。HST模塊在主機(jī)和DSP之間建立起一條數(shù)據(jù)鏈路,該鏈路就是一個PIP對象。對HST的操作方式與PIP一致。其差別僅僅在于HST在初始化時指向了預(yù)定義的DSP上的HPI接口而已。SIO:從PIP的邏輯關(guān)系可以看出,讀寫PIP就是一個數(shù)據(jù)拷貝的過程。這在某些應(yīng)用中,如實現(xiàn)網(wǎng)絡(luò)協(xié)議TCP/IP時,不是非常有效。因為數(shù)據(jù)每向上傳遞一層就需要進(jìn)行一次數(shù)據(jù)拷貝,其效率非常差。如果采用SIO來實現(xiàn)就會有很大的改善。SIO的操作只有g(shù)et()和put()兩種。與PIP不同的是SIO沒有自己的緩沖隊列。每次get()或put()操作時都會在應(yīng)用程序和設(shè)備驅(qū)動程序之間交換緩沖的指針。所以SIO操作的實質(zhì)是數(shù)據(jù)地址的交換。由于沒有數(shù)據(jù)拷貝,其運行效率就很高。SIO的運行邏輯如圖4所示。7RTDX實時數(shù)據(jù)交換Real-Time-Data-eXhange是DSP/BIOS提供的一個全新的功能。在很多應(yīng)用中要求DSP不能夠停下來,而需要從主機(jī)中實時地讀取數(shù)據(jù)或者向主機(jī)實時地輸出數(shù)據(jù)。德州儀器的C5000,C6000系列的DSP都可以通過JTAG接口來實現(xiàn)這個功能。其邏輯結(jié)構(gòu)如圖5所示。RTDX在主機(jī)端可以與任何符合OLE接口的應(yīng)用程序交換數(shù)據(jù)。例7是一個使用RTDX在主機(jī)和DSP之間進(jìn)行數(shù)據(jù)傳遞的例子。主機(jī)端是一個基于VB的小程序。例7DSP程序:#include<rtdx.h>RTDX_CreateIn
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025版空置房屋租賃糾紛調(diào)解與仲裁協(xié)議合同3篇
- 2025版農(nóng)產(chǎn)品加工企業(yè)原料采購合同模板3篇
- 素描單體教學(xué)課程設(shè)計
- 2024年煤供應(yīng)協(xié)議:供需雙方權(quán)利義務(wù)規(guī)定
- 小麥淀粉生產(chǎn)課程設(shè)計
- 2024年緊急用款個人借款協(xié)議
- 2025年度智能設(shè)備研發(fā)與制造勞動合同3篇
- 2024年環(huán)保工程土方清運施工合同范本3篇
- 2025版舊房買賣合同與附屬設(shè)施改造與租賃協(xié)議3篇
- 笛子吹奏課程設(shè)計案例
- 軟件研發(fā)部績效考核方案三篇
- 2024至2030年中國工控安全行業(yè)發(fā)展?fàn)顩r及投資潛力分析報告
- 2024至2030年中國SPA行業(yè)市場消費調(diào)研及投融資戰(zhàn)略咨詢報告
- (華中師大版)五年級信息技術(shù)全冊教案設(shè)計
- 北京水務(wù)投資集團(tuán)有限公司招聘筆試題庫2024
- 2021-2022學(xué)年山東省濟(jì)寧市高一上學(xué)期期末考試英語試題(解析版)(不含聽力音頻)
- 2024年國家開放大學(xué)電大《文學(xué)概論》機(jī)考2套網(wǎng)絡(luò)課題庫及答案4-圖文
- 暑假工雇傭協(xié)議模板
- 九年級化學(xué)下冊 9.1 溶液的形成教案2 (新版)新人教版
- 地彈門施工合同施工合同協(xié)議
- 中醫(yī)醫(yī)療技術(shù)相關(guān)性感染預(yù)防與控制
評論
0/150
提交評論