輕松學(xué)會dsp-第7章-dsp-bios教程文件_第1頁
輕松學(xué)會dsp-第7章-dsp-bios教程文件_第2頁
輕松學(xué)會dsp-第7章-dsp-bios教程文件_第3頁
輕松學(xué)會dsp-第7章-dsp-bios教程文件_第4頁
輕松學(xué)會dsp-第7章-dsp-bios教程文件_第5頁
已閱讀5頁,還剩57頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

輕松學(xué)會DSP——第7章-DSP-BIOS一、DSP/BIOS的組件1、DPS/BIOS實時庫和API

運用DSP/BIOS的一個基本概念是我們的運行程序是一個多線程的情況,我們通過API(運用程序接口)函數(shù)來管理這些線程。我們可以把DSP/BIOSAPI分為許多模塊,不同的線程屬于不同的模塊。這些模塊包括:DSP/BIOS提供的API模塊CLK模塊:用于片上的定時器管理,設(shè)置定時器中斷的間隔時間。HST模塊:用于實現(xiàn)主機與目標系統(tǒng)間數(shù)據(jù)的輸入或輸出。HWI模塊:用于硬件中斷管理,可設(shè)置相應(yīng)的中斷服務(wù)子程序。IDL模塊:用于管理idle函數(shù),該類函數(shù)具有最低優(yōu)先級。LOG模塊:用于事件的記錄顯示。例如,你可以通過該API輸出調(diào)試信息。MEM模塊:用于定義目標系統(tǒng)的內(nèi)存使用。系統(tǒng)根據(jù)此信息自動產(chǎn)生.cmd文件。PIP模塊:用于管道管理,可以實現(xiàn)線程間的數(shù)據(jù)交換。PRD模塊:用于實現(xiàn)周期性的函數(shù)。該類函數(shù)的執(zhí)行頻率可以由CLK模塊或自己調(diào)用PRD_tick決定。RTDX模塊:用于主機與DSP目標系統(tǒng)間的實時數(shù)據(jù)傳遞。STS模塊:用于狀態(tài)統(tǒng)計管理,你可以在CCS下查看這些統(tǒng)計參數(shù)。SWI模塊:用于管理軟件中斷。CCS將運行隊列中的軟件中斷,并可以設(shè)置15個優(yōu)先級,但都比硬件中斷低。API管理進程的具體方法是通過API函數(shù),這些函數(shù)功能非常多,如:建立和刪除對象,變換線程優(yōu)先級等;函數(shù)的詳細說明:

2、DSP/BIOS配置工具API函數(shù)不是直接對線程進行管理,而是通過不同模塊中建立的對象來實現(xiàn)的,這些對象同各個線程直接連結(jié)。不同模塊中對象的建立有兩種方法,一是通過在源文件中使用API函數(shù)調(diào)用,可以動態(tài)產(chǎn)生,動態(tài)刪除;一是通過DSP/BIOS配置工具產(chǎn)生,是靜態(tài)產(chǎn)生,不可刪除。DSP/BIOS配置工具產(chǎn)生對象的優(yōu)點:圖形化的編輯工具,使用更加方便;可以對對象進行各種參數(shù)設(shè)置;可以建立各種對象,而API函數(shù)只能建立部分對象。部分模塊的API被執(zhí)行程序調(diào)用和綁定.優(yōu)化的DSP/BIOS的連接庫,可以達到匯編語言的執(zhí)行效率.目標板與插件之間的通信是通過后臺IDLE線程循環(huán)完成,而IDLE線程實在DSP資源可用的情況才執(zhí)行,保證了程序的執(zhí)行效率.提供了具有不同優(yōu)先級的線程,依次是硬件中斷、軟件中斷、任務(wù)、IDEL空閑函數(shù),以及周期函數(shù),且其優(yōu)先級可配置。線程之間可通過旗語、郵箱等工具進行通信。DSP/BIOS配置工具產(chǎn)生對象的缺點:一旦建立,不論程序中是否使用,都有占有一定資源;一旦建立,在程序運行中,不可以刪除。3、DSP/BIOS插件完成對運行程序的實時分析,時刻監(jiān)視CPU的負荷,各個線程的執(zhí)行情況,各段代碼的花費時間等等;DSP通過JTAG口返回到PC數(shù)據(jù),這些數(shù)據(jù)反映我們需要的情況。這些數(shù)據(jù)的產(chǎn)生是在CPU的空閑狀態(tài)時產(chǎn)生的,所以,不會對DSP本身的運行產(chǎn)生影響。Programtracing:Displayingeventswrittentotargetlogs,reflectingdynamiccontrolflowduringprogramexecution。Performancemonitoring:Trackingsummarystatisticsthatreflectuseoftargetresources,suchasprocessorloadandtimingFilestreaming:Bindingtarget-residentI/Oobjectstohostfiles。二、用DSP/BIOS創(chuàng)建應(yīng)用程序在Project菜單中選“New”新建或“Open”打開一個工程文件。將需要的.h、.asm、.c、.obj、.lib添加到該工程文件中。將DSP/BIOS的配置文件.cdb添加到工程文件文件中。

注意:LNK使用的.cmd文件由DSP/BIOS配置文件自動產(chǎn)生。在工程文件窗口下用鼠標左鍵雙擊配置文件將其打開。展開LOG選項,并用鼠標右鍵單擊,在彈出菜單中選擇“InsertLOG”項。修改新增LOG0對象的名稱,如trace。使用鼠標右鍵單擊,并在彈出菜單中選擇“Property”,修改其參數(shù),如將buflen改為512。增加包含的頭文件,如std.h,log.h增加變量說明。這些變量由配置工具創(chuàng)立的,如externLOG_OBJtrace。增加LOGAPI函數(shù),如LOG_printf(&trace,“volume….\n”);該函數(shù)可以在DSP/BIOS提供的事件記錄窗口顯示信息。設(shè)置相應(yīng)的編譯、連接開關(guān),使用“BulidAll”生成.out文件。

注意:Linker選項中的輸出文件名應(yīng)該與工程文件包含的DOS/BIOS配置文件一致。使用“File”菜單將生成的OUT文件裝入目標系統(tǒng)。選擇“Debug”菜單中的“GoMain”運行程序到main()函數(shù)。選擇“Tools”菜單下的“DSP/BIOS”選項,然后選“MessageLog”。用鼠標右鍵單擊出現(xiàn)的MessageLog窗口,在彈出菜單中選“PropertyPage”。在“name”選項中選擇“trace”,使得該窗口顯示送到trace對象的信息。(使用LOG_printf(&trace,“volume…”)語句)使用F5運行程序,觀察該窗口輸出。注意事項:配置文件有

program.cdb

programcfg.h54programcfg.s54programcfg.cmd手工添加文件program.cdb和programcfg.cmdprogramcfg.s54自動添加;庫文件rst.lib不需要;C源文件中要加上各種API頭文件;其他源文件同一般的CCS使用一樣;三、線程的基本概念 1、什么是線程實時的DSP應(yīng)用,往往需要把許多看似不相干的功能同時實現(xiàn)。不同的功能通過不同的指令流實現(xiàn),而我們把這些指令流叫線程。同一個處理器實現(xiàn)多線程的方法是給線程加上優(yōu)先級。優(yōu)先級高的線程首先執(zhí)行。2、線程的種類硬件中斷Hardwareinterrupts(HWI):includesCLKfunctions軟件中斷Softwareinterrupts(SWI):includesPRDfunctions任務(wù)Tasks(TSK)背景線程Backgroundthread(IDL)硬件中斷硬件中斷函數(shù)與外部中斷信號一一對應(yīng);一旦中斷信號或事件發(fā)生,硬件中斷函數(shù)(也稱中斷服務(wù)程序)就執(zhí)行.在DSP/BIOS應(yīng)用函數(shù)中,中斷函數(shù)是優(yōu)先級最高的線程.硬件中斷函數(shù)執(zhí)行時間應(yīng)限定在2到100ms內(nèi),頻率在200KHz左右.軟件中斷軟件中斷是通過調(diào)用在程序SWI函數(shù)而被觸發(fā)的.軟件中斷的優(yōu)先級出于硬件中斷與后臺線程之間.SWIs執(zhí)行時間較硬件中斷函數(shù)可寬一些,可在100ms或更長一些.任務(wù)Task其優(yōu)先級較軟中斷低,但高于后臺線程.任務(wù)不同于軟中斷:軟中斷一旦執(zhí)行就必須完成,而任務(wù)卻可掛起,直到要求的資源滿足后才重新執(zhí)行.DSP/BIOS提供了諸如隊列、旗語,郵箱等方式用于任務(wù)見通信。背景線程在DSP/BIOS程序中執(zhí)行優(yōu)先級最低的空閑循環(huán)(IdleLoop(IDL))。在main函數(shù)返回后,DSP/BIOS為每個模塊調(diào)用啟動線程,然后便進入空閑循環(huán)??臻e循環(huán)持續(xù)不斷地運行,當優(yōu)先級更高的線程啟動后才中止。只有沒有運行時間限制的功能可設(shè)置為背景線程。時鐘函數(shù)被片上時鐘中斷源所觸發(fā),執(zhí)行頻率為中斷頻率。時鐘函數(shù)是HWI_TINT硬件中斷。周期函數(shù)執(zhí)行周期是片上時鐘中斷或其它事件周期的整數(shù)倍。周期函數(shù)是一典型的軟件中斷。

3、優(yōu)先級硬件中斷最高,一個線程可以被擠占(preempt,中途被中斷),但是不能被阻塞(block,暫停等待);軟件中斷較高,又有14個等級,可以被擠占,但是不能阻塞;TASK較低,有15個等級,可以擠占和阻塞;IDL最低,循環(huán)執(zhí)行一定線程。4、線程的保護和擠占四、硬件中斷使用方法1、中斷矢量表

在DSP/BIOS的運用中,可以不必去建立中斷矢量表,只需要在模塊MEM中,對VECT的對象進行設(shè)置,這個設(shè)置是向DSP提供中斷矢量表的地址。再通過HWI模塊,對需要使用的硬件中斷進行中斷服務(wù)程序的設(shè)置就可以了。2、硬件中斷的屏蔽在DSP/BIOS的配置工具中不能對那個中斷進行屏蔽;但可在程序中通過對寄存器的值的控制來完成對中斷的屏蔽;在程序中,調(diào)用API函數(shù)完成對硬件中斷的控制,如函數(shù):HWI_enableHWI_restoreHWI_disable五、軟件中斷使用方法1、軟件中斷的建立軟件中斷實際就是把一個已經(jīng)建立的函數(shù)作為一個中斷程序,這個中斷程序的執(zhí)行由軟件觸發(fā);軟件中的建立可以通過配置工具,進行靜態(tài)的建立;軟件中斷的建立,也可以利用API函數(shù)動態(tài)的建立。

swi=SWI_create(attrs)2、軟件中斷的優(yōu)先級優(yōu)先級在建立軟中斷的時候就確定了;如果是使用配置工具,在軟件中斷的對象屬性中設(shè)置;如果是使用動態(tài)API函數(shù)建立,則在建立的時候,可以使用參數(shù)來確定他的屬性。3、軟件中斷的郵箱郵箱是一個32bit的寄存器,可在配置工具中,建立軟件中斷對象的時候設(shè)置其初始值;在程序中,使用下面的API函數(shù)來控制一個軟件中斷的郵箱,從而控制軟件中斷的執(zhí)行:

SWI_andn

SWI_dec

SWI_inc

SWI_or

SWI_post4、郵箱函數(shù)郵箱的API函數(shù)在程序中使用,用來控制郵箱值的變換,從而控制軟件中斷的執(zhí)行;SWI_post直接調(diào)用軟件中斷,不改變郵箱值;SWI_inc郵箱值加1,同時調(diào)用軟件中斷;SWI_or其所帶參數(shù)同郵箱值相比特或,同時調(diào)用軟件中斷;SWI_dec郵箱值減1,如果減1后為0,調(diào)用軟件中斷;SWI_andn其所帶參數(shù)同郵箱值相比特與,相與后郵箱值為0,調(diào)用軟件中斷;

六、TASK使用方法1、建立方法其建立方法,含義同軟件中斷是相同的;同軟件中斷相比,優(yōu)先級低;同軟件中斷相比,可以被懸掛;2、任務(wù)的特點同軟件中斷相比,每個TASK使用自己的堆棧,大小分別設(shè)置,而所以軟件中斷使用相同的堆棧。原因是每個TASK被擠占的可能性非常大,每次被擠占時,都需要保護現(xiàn)場。3、TASK工作狀態(tài)

running,whichmeansthetaskistheoneactuallyexecutingonthesystem’sprocessor;

ready,whichmeansthetaskisscheduledforexecutionsubjecttoprocessoravaila-bility;

blocked,whichmeansthetaskcannotexe-cuteuntilaparticulareventoccurswithinthesystem;Whenataskisblocked,itisoftenbecausethetaskispendingonasemaphorewhichisunavailable.terminated,whichmeansthetaskis“termi-nated”anddoesnotexecuteagain.4、狀態(tài)間的轉(zhuǎn)換和函數(shù)5、TASK間通信線程一般通過軟件中斷(SWI模塊)來實現(xiàn)。利用TSK_yield函數(shù)實現(xiàn)同等優(yōu)先級的任務(wù)之間的切換。TASK間的通信通過旗語(Semphore)和郵箱(MailBox);旗語和郵箱在配置工具中都可以建立;實現(xiàn)TSK_yield()函數(shù)的例子打開工程文件tsktest.mak,創(chuàng)立三個同優(yōu)先級的任務(wù):task0,task1,task2。實現(xiàn)TSK_yield()函數(shù)的例子Voidmain(){}Voidtask(Intid){Inti;

for(i=0;i<NLOOPS;i++){LOG_printf(&trace,"Loop%d:Task%dWorking",i,id);TSK_yield();}LOG_printf(&trace,"Task%dDONE",id);}哪個結(jié)果是正確的?利用旗語完成任務(wù)間的同步旗語可以完成任務(wù)之間的通訊,還可以同步同優(yōu)先級的任務(wù)的執(zhí)行。當一個任務(wù)等待旗語時,其它任務(wù)可以執(zhí)行。參見semtest.mak,來說明旗語的使用。共創(chuàng)建五個任務(wù):initTsk,reader0,writer0,writer1,writer2。利用旗語同步任務(wù)任務(wù)initTsk:動態(tài)建立兩個隊列(QUE對象)。該任務(wù)優(yōu)先級最高,最先被執(zhí)行。任務(wù)reader0:循環(huán)等待旗語,然后輸出隊列信息。任務(wù)writer0,writer1,writer2:處理隊列信息,然后發(fā)送旗語。利用旗語同步任務(wù)任務(wù)reader0代碼Voidreader(){Msgmsg;Inti;for(i=0;i<NUMMSGS*NUMWRITERS;i++){/*Waitforsemaphoretobepostedbywriter().*/SEM_pend(&sem,SYS_FOREVER);msg=QUE_get(&msgQueue);/*dequeuemessage*/LOG_printf(&trace,"read'%c'from(%d).",msg->val,msg->id);QUE_put(&freeQueue,msg);/*freemsg*/}LOG_printf(&trace,"readerdone.");}任務(wù)writer0,1,2代碼Voidwriter(Intid){Msgmsg;Inti;for(i=0;i<NUMMSGS;i++){...msg=QUE_get(&freeQueue);msg->id=id;/*fillinvalue*/msg->val=(i&0xf)+'a';LOG_printf(&trace,"(%d)writing'%c'...",id,msg->val);QUE_put(&msgQueue,msg);/*enqueuemessage*/SEM_post(&sem);/*postsemaphore*/}LOG_printf(&trace,"writer(%d)done.",id);}利用郵箱在任務(wù)間交換信息利用郵箱在任務(wù)間交換信息Mbxtest.mak為例子:任務(wù)reader0代碼Voidreader(Void){MsgObjmsg;Inti;for(i=0;;i++){/*waitformailboxtobepostedbywriter()*/if(MBX_pend(&mbx,&msg,TIMEOUT)==0){LOG_printf(&trace,"timeoutexpiredforMBX_pend()");break;}/*printvalue*/LOG_printf(&trace,"read'%c'from(%d).",msg.val,msg.id);}LOG_printf(&trace,"readerdone.");}任務(wù)writer0,1,2代碼Voidwriter(Intid){MsgObjmsg;Inti;for(i=0;i<NUMMSGS;i++){/*fillinvalue*/msg.id=id;msg.val=i%NUMMSGS+(Int)('a');/*enqueuemessage*/MBX_post(&mbx,&msg,TIMEOUT);LOG_printf(&trace,"(%d)

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論