dsp-biosapi接口介紹(精)_第1頁
dsp-biosapi接口介紹(精)_第2頁
已閱讀5頁,還剩2頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、基礎(chǔ)類的DSP/BIOSAPI調(diào)用基礎(chǔ)類的DSP/BIOSAPI調(diào)用一、時鐘管理CLK(1) Unsncounts=CLK_countspms(void)返回每毫秒的定時器高分辨率時鐘的計數(shù)值(2) LgUnscurrtime=CLK_gethtime(void)返回高分辨率時鐘的計數(shù)值超過32bit歸零高分辨率時鐘是DSP時鐘除以(TDDR+1)(3) LgUnscurrtime=CLK_getltime(void)返回低分辨率時鐘的計數(shù)值超過32bit歸零高分辨率時鐘是DSP時鐘除以(TDDR+1)再除以(PRD+1)(4) Unsperiod=CLK_getprd(void)返回CLK管

2、理器周期寄存器的值sp;基礎(chǔ)類的DSPBIOSAPI調(diào)二、周期函數(shù)PRD(1) LgUnsnum=PRD_getticks(void)返回32位周期函數(shù)管理計數(shù)值(2) voidPRD_start(PRD_Obj*period)啟動PRD模塊計數(shù)器,一般地,mode=one-shot(3) voidPRD_stop(PRD_Obj*period)關(guān)閉PRD模塊計數(shù)器(4) voidPRD_tick(void)對周期模塊的計數(shù)器加1,以便周期模塊管理器確定哪個周期性函數(shù)得以運行三、軟件中斷管理SWI(1) voidSWI_andn(SWI_Obj*swi,Unsmask)mask屏蔽字參數(shù)將郵箱

3、值與mask做與運算,并用結(jié)果代替以前的郵箱值,若為0啟動軟件中斷,恢復(fù)郵箱初始值(2) voidSWI_andn(SWI_Obj*swi)將郵箱值減1,并用結(jié)果代替以前的郵箱值,若為0,啟動軟件中斷,恢復(fù)郵箱初始值(3) voidSWI_disable(Void)禁止軟件中斷(4) voidSWI_enable(Void)使能軟件中斷(5) Unsnum=SWI_getmbox(void)返回當前SWI對象在被執(zhí)行的郵箱值,若中斷已經(jīng)開始執(zhí)行,DSP/BIOS會先保存此值(6) Unskey=SWI_getpri(SWI_Obj*swi)返回指定的SWI對象的優(yōu)先級(7) voidSWI_i

4、nc(SWI_Obj*swi)將指定的SWI對象的郵箱值加1,同時啟動軟件中斷,就算用戶調(diào)用多次,最終執(zhí)行一次。(8) voidSWI_or(SWI_Obj*swi,Unsmask)mask屏蔽字參數(shù)將啟動指定的軟件中斷,并將此軟件中斷的郵箱值與mask做與運算,并用結(jié)果代替以前的郵箱值,等到中斷完成之后,郵箱值恢復(fù)為初始值,一般地,調(diào)用SWI_getmbox獲得觸發(fā)此軟件中斷的郵箱值(9) voidSWI_post(SWI_Handleswi)啟動指定的SWI對象的軟件中斷,此函數(shù)不受郵箱值的影響,也不影響郵箱值。一般地,周期性低啟動一個軟件中斷,將_SWI_post填入PRD對象的函數(shù)設(shè)置

5、欄,啟動軟件中斷的參數(shù)寫入argO(10) Unskey=SWI_raisepri(Unsmask)提高SWI軟件中斷的優(yōu)先級,一般地sp;基礎(chǔ)類的DSPBIOSAPI調(diào)key=SWI_raisepri(SWI_getpri(&swi_1);-accesssharedresouces-SWI_restorepri(key)(11) voidSWI_restorepri(Unskey)恢復(fù)原來的優(yōu)先級(12) SWI_Obj*swi=SWI_self(void)當前執(zhí)行的SWI對象的軟件中斷的地址四、信息輸出管理LOG(1) voidLOG_disable(LOG_Obj*log)關(guān)閉指

6、定對向的日志功能(2) voidLOG_enable(LOG_Obj*log)開啟指定對向的日志功能(3) voidLOG_error(Stringformat,ArgargO)voidLOG_message(Stringformat,ArgargO)前一個函數(shù)可以將一個事件、數(shù)據(jù)或出錯信息按照指定的格式串寫入系統(tǒng)日志,不受TRC跟蹤管理模塊的影響后一個函數(shù)類似于前一個函數(shù),但是受到TRC跟蹤管理模塊的影響(4) voidLOG_event(LOG_Obj*log,ArgargO,Argarg1,Argarg2)將未格式化的事件消息寫入日志中(5) voidLOG_printf(LOG_Obj

7、*log,Stringformat,intargO,intarg1)指定的LOG窗口顯示消息%d%x%o%s(6) voidLOG_reset(LOG_Obj*log)復(fù)位日志緩沖區(qū)五、存儲器管理MEM(1) void*addr=MEM_alloc(intsegid,Unssize,Unsalign)指定存儲段分配連續(xù)塊,返回起始地址segid=存儲段的標識符或者ID號size塊大小等于多少個字align邊界條件只為0或2的幕若align為0、1則無約束(2) void*addr=MEM_calloc(segid,size,align)分配內(nèi)存并初始化為0(3) intsegid=MEM_de

8、fine(Ptrbase,Unslength,MEM_Attrs*attrs)sp;基礎(chǔ)類的DSPBIOSAPI調(diào)定義一個新的存儲段。返回值為存儲段的ID標號attr參數(shù)為NULL,會按照默認參數(shù)進行配置,段的參數(shù)由結(jié)構(gòu)體typeMEM_Attrs規(guī)定此函數(shù)僅在main函數(shù)中使用base:新段的基地址length:段長度attrs:段屬性(4) boolstatus=MEM_free(segid,addr,size)釋放申請的動態(tài)內(nèi)存不能在SWI和HWI中調(diào)用調(diào)用之前,用LCK中API查看內(nèi)存塊的鎖定情況sp;基礎(chǔ)類的DSPBIOSAPI調(diào)(5) voidMEM_redefine(segid,

9、base,length)重新定義一個存儲段,只能在main中調(diào)用(6) boolstatus=MEM_stat(intsegid,MEM_Stat*statbuf)segid存儲段標識符statbuf狀態(tài)緩存區(qū)指針structmem_statsp;基礎(chǔ)類的DSPBIOSAPI調(diào)Unssize;/存儲段大小Unsused;/已經(jīng)使用的數(shù)量Unslength;/最大連續(xù)存儲塊長度同理:若segid有效,則MEM_stat返回TRUE不能在SWI和HWI中使用,應(yīng)判斷鎖定情況(7) void*addr=MEM_valloc(intsegid,Unssize,Unsalign,charvalue)先申

10、請內(nèi)存,初始化為指定的值value六、C6000專用模塊C64xsp;基礎(chǔ)類的DSPBIOSAPI調(diào)(1) Unsoldmask=C64_diableIER(Unsmask)關(guān)閉相應(yīng)的中斷返回值實際屏蔽的中斷(2) voidC64_enableIER(Unsoldmask)開放相應(yīng)的中斷Unsoldmask;oldmask=C64_disableIER(0x1);/disableINT0C64_enableIER(oldmask);/enableINT0(3) voidC64_plug(intvecid,Fxnfxn,intdmachan)插入一個中斷向量intvecid:中斷序號Fxnfxn

11、:中斷服務(wù)程序的函數(shù)指針intdmachan:插入操作使用的DMA通道將ISFP寫到中斷服務(wù)表IST中。若IST在外部RAM,貝UCPU復(fù)制代替DMA,此時DMA為-1IST在片內(nèi)RAM時,使用DMA方式,是0,1,2,3用戶保證在函數(shù)調(diào)用時該DMA通道有效七、統(tǒng)計模塊STS(1) voidSTS_add(STS_Obj*sts,LgIntvalue)使用我們提供的數(shù)據(jù)更新STS統(tǒng)計對象的Total,Count,Max等參數(shù)傳入一個32位參數(shù),Count加1,Total累加傳遞的32位參數(shù),MAX記錄傳遞參數(shù)的最大值(2) voidSTS_delta(STA_Obj*sts,LgIntvalu

12、e)每個對象都包含有初始值,該初始值由配置文件指定或者由STS_set函數(shù)設(shè)置STS_delta先計算當前傳遞參數(shù)與先前初始值只差,然后調(diào)用STS_add更新統(tǒng)計累加值一般和STS_set起用eg:STS_set(&sts,CLK_gethtime();STS_delta(&sts,CLK_gethtime();(3) voidSTS_reset(STS_Obj*sts)復(fù)位統(tǒng)計對象中的累加值。Count和Total設(shè)置為0.MAX成為最大的負值。(4) voidSTS_set(STS_Obj*sts,LgIntvalue)監(jiān)視或統(tǒng)計程序的執(zhí)行時間八、統(tǒng)計類模塊TRC(1) T

13、RC_LOGCLK日志記錄定時器中斷(2) TRC_LOGPRD日志記錄周期時隙和周期函數(shù)的開始(3) TRC_LOGSWI日志記錄軟件中斷的啟動和完成(4) TRC_LOGTSK日志記錄任務(wù)處于準備好、開始、停止、繼續(xù)執(zhí)行、終止等事件(5) TRC_STSHWI收集關(guān)于HWI統(tǒng)計數(shù)據(jù)(6) TRC_STSPIP寫管道和讀管道幀進行計數(shù)(7) TRC_STSPRD執(zhí)行期間CLK時隙個數(shù)的統(tǒng)計數(shù)據(jù)(8) TRC_STSSWISWI執(zhí)行時間的統(tǒng)計數(shù)據(jù)(9) TRC_STSTSKTSK執(zhí)行時間的統(tǒng)計數(shù)據(jù)從TSK準備好到調(diào)用TSKdeltatime都要收集(10) TRC_USER0ANDTRC_US

14、ER1和TRC_query起用執(zhí)行和忽略結(jié)果的設(shè)備調(diào)用(11) TRC_GBLHOST執(zhí)行所有的隱藏儀器功能,此比特位能夠開始或停止收集所有開啟的跟蹤類型(12) TRC_GBLTARG執(zhí)行所有的隱藏儀器功能,此比特位只能被目標程序設(shè)置九、任務(wù)管理TSK任務(wù)管理模塊(1) voidTSK_checkstacks(TSK_Handleoldtask,TSK_Handlenewtask)無論是新任務(wù)還是老任務(wù),如果堆棧的最后位置上都沒有RG_STACKSTAMP標識,那么TSK_checkstacks就會報錯SYS_abort,出現(xiàn)這種情況可能是由于上一個任務(wù)堆棧溢出或無效的存儲占用了新任務(wù)的堆棧

15、sp;基礎(chǔ)類的DSPBIOSAPI調(diào)一般地,用TSK_checkstacks(TSK_self(),TSK_self()來檢查堆棧定義Switch函數(shù),這樣在任務(wù)切換時自動調(diào)用堆棧檢查函數(shù):voidmyswitchfxn(TSK_Handleoldtask,TSK_Handlenewtask)TSK_checkstacks(oldtask,newtask);(2) TSK_Handletask=TSK_create(Fxnfxn,TSK_Attrs*attr,Argarg,.)創(chuàng)建一個調(diào)用函數(shù)fxn的任務(wù)對象,返回新對象的句柄,失敗返回NULL。調(diào)用此函數(shù)是動態(tài)創(chuàng)建,而在配置工具中創(chuàng)建是靜態(tài)創(chuàng)

16、建,二者效果一樣。sp;基礎(chǔ)類的DSPBIOSAPI調(diào)靜態(tài)創(chuàng)建的任務(wù)對象,創(chuàng)建函數(shù)將在BIOS_start函數(shù)中自動調(diào)用。BIOS_start函數(shù)在main函數(shù)之后,在后臺IDL循環(huán)之前運行。而動態(tài)創(chuàng)建的任務(wù)處于Ready狀態(tài)。函數(shù)參數(shù)最多不超過8個。任務(wù)對象函數(shù)fxn返回時,自動調(diào)用TSK_exit函數(shù)。解析:TSK_Attrs*attrs任務(wù)參數(shù)指針structTSK_Attrsintpriority;Ptrstack;Unsstacksize;#ifdef_64_/imitateC55series.tocheckUnssysstacksize;#endifUnsstackseg;Ptre

17、nviron;Stringname;boolexitflag;(3) voidTSK_delete(TSK_Handletask)從所有內(nèi)部隊列里面刪除這個任務(wù),并且調(diào)用MEM_free釋放任務(wù)對象和堆棧。只能刪除處于結(jié)束狀態(tài)的任務(wù),也可調(diào)用刪除的鉤子函數(shù)。voidmyDeleteFxn(TSK_Handletask);(4) voidTSK_deltatime(TSK_Handletask)累計從任務(wù)準備好到執(zhí)行此函數(shù)時候的時間差如果未調(diào)用此函數(shù),那么就算打開任務(wù)統(tǒng)計累加器選項,統(tǒng)計對象也不會更新一般地,統(tǒng)計時先用TSK_settime函數(shù)記錄起始點,此函數(shù)記錄終點。(5) voidTSK_

18、settime(TSK_Handletask)設(shè)定統(tǒng)計初始值voidtask()-dosomestartupwork-TSK_settime(TSK_self);for(;)SIO_get(.);-processdataTSK_deltatime(TSK_self);假如流式10沒有準備好,那么該API函數(shù)會阻塞(Blocked),任務(wù)切換,一段時間后,流式10數(shù)據(jù)準備好了,此時發(fā)出READY信號,將本任務(wù)置為ready狀態(tài),此時TSK_settime會重新記錄時間。(6) voidTSK_disable(void)全局關(guān)閉內(nèi)核調(diào)度機制,Busy-Shutting-Down狀態(tài)。只有當前任務(wù)可

19、行,其余所有任務(wù)禁止。此函數(shù)不會禁止中斷,所以在中斷開始前需要調(diào)用此函數(shù)保證中斷發(fā)生時不會發(fā)生任務(wù)切換??梢郧短祝钦{(diào)用幾次TSK_disable,就得相應(yīng)調(diào)用幾次TSK_enablesp;基礎(chǔ)類的DSPBIOSAPI調(diào)(7) voidTSK_enable(void)全局開啟內(nèi)核調(diào)度機制(8) voidTSK_exit(void)終止當前任務(wù)運行。如果所有任務(wù)都被終止,則DSP/BIOS會調(diào)用SYS_exit終止程序。無論什么時候,任務(wù)從頂層函數(shù)返回時,都是自動調(diào)用此函數(shù)??梢宰砸粋€退出輔助函數(shù)voidmyExitFxn(void)這樣,在任務(wù)被設(shè)置為TSK_TERMINATED模式之前,

20、會調(diào)用這個輔助函數(shù)。(9) Ptrenviron=TSK_getenv(TSK_Handletask)返回任務(wù)環(huán)境指針,這個指針指向一個該任務(wù)可以訪問的全局屬性的結(jié)構(gòu)。若程序定義多個鉤子對象,那么HOOK_getenv函數(shù)可以獲取設(shè)置的環(huán)境指針。(10) voidTSK_setenv(TSK_Handletask,Ptrenviron)設(shè)置指定任務(wù)的環(huán)境指針。若程序定義多個鉤子對象,那么HOOK_setenv函數(shù)可以為每個鉤子和任務(wù)對象的組合體設(shè)置獨立的環(huán)境指針。(11) interrno=TSK_geterr(TSK_Handletask)每個任務(wù)對象都有一個包含任務(wù)錯誤號的存儲單元。初始值

21、為SYS_OK(12) voidTSK_seterr(TSK_Handletask,interrno)改變錯誤號(13) Stringname=TSK_getname(TSK_Handletask)返回任務(wù)的名字。對于靜態(tài)對象來說,必須打開AllocateTaskNameonTarget對于動態(tài)對象來說,TSK_getname返回字段(14) intpriority=TSK_getpri(TSK_Handletask)返回優(yōu)先級(15) intoldpri=TSK_setpri(TSK_Handletask,intnewpri)設(shè)置優(yōu)先級設(shè)置優(yōu)先級對于TSK_BLOCKED

22、狀態(tài)任務(wù)只是優(yōu)先級改變,而不會改變狀態(tài);對于TSK_READY狀態(tài)的任務(wù)而言,可能會改變運行狀態(tài)。(16) STS_Handlests=TSK_getsts(TSK_Handletask)獲得統(tǒng)計對象句柄,以便查看數(shù)據(jù)(17) voidTSK_sleep(Unsnticks)sp;基礎(chǔ)類的DSPBIOSAPI調(diào)暫停任務(wù)的時鐘個數(shù),此時鐘數(shù)可能比真實的暫停時鐘少一個時鐘(告警時鐘)(18) voidTSK_itick(void)對告警時鐘加1,以便讓TSK_sleep或者SEM_pend函數(shù)暫停執(zhí)行的任務(wù)恢復(fù)到ready。sp;基礎(chǔ)類的DSPBIOSAPI調(diào)一些暫停的任務(wù)可能會隨著告警時鐘的增加

23、而超時,從而就緒。(19) voidTSK_tick(void)對告警時鐘加1,以便讓TSK_sleep或者SEM_pend函數(shù)暫停執(zhí)行的任務(wù)恢復(fù)到ready。一些暫停的任務(wù)可能會隨著告警時鐘的增加而超時,從而就緒??梢栽谥袛喾?wù)程序和當前任務(wù)中調(diào)用,后者在控制超時非常有用。(20) Unscurrtime=TSK_time(void)返回系統(tǒng)告警時鐘的當前值。(由于延遲,只能得到一個大概的系統(tǒng)時鐘)(21) TSK_Handlecurrtask=TSK_self(void)返回當前任務(wù)對象的句柄(22) voidTSK_stat(TSK_Handletask,TSK_Stat*statbuf)返回任務(wù)的屬性參數(shù)和狀態(tài)信息structTSK_StatTSK_Attrsattrs;/任務(wù)參數(shù)TSK_Modemode;/任務(wù)執(zhí)行模式Ptrsp;/任務(wù)當前堆棧指針Unsused;/任務(wù)堆棧曾經(jīng)使用的最大值注意:任務(wù)比HWI和SWI中斷優(yōu)先級要低,所以當任務(wù)被中斷時,還是返回TSK_RUNNING,因為中斷完成后任務(wù)繼續(xù)運行。(23) voidTSK_yield(void)強制任務(wù)切換,請注意,任務(wù)可以被中斷,但是,任務(wù)

溫馨提示

  • 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

提交評論