CCS中DSP、BIOS工具的使用_第1頁
CCS中DSP、BIOS工具的使用_第2頁
CCS中DSP、BIOS工具的使用_第3頁
CCS中DSP、BIOS工具的使用_第4頁
CCS中DSP、BIOS工具的使用_第5頁
已閱讀5頁,還剩18頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

/評語學(xué)號成績評語《DSP技術(shù)》課程論文題目CCS中DSP/BIOS工具的使用作者班級_院別專業(yè)_完成時間

目??錄一、DSP/BIOS簡介……………………1二、DSP/BIOS的組件構(gòu)成……………1三、DSP/BIOS的啟動順序……………2四、DSP/BIOS的配置…………………2五、基礎(chǔ)類的DSP/BIOSAPI調(diào)用……………………15六、DSP\BIOS的中斷、優(yōu)先級………22七、參考文獻…………23摘要:DSP/BIOS的靜態(tài)配置是利用CCS提供的配置工具完成,包括圖形化配置工具和文本配置工具。圖形化工具層次清晰,比較直觀,而文本工具更加靈活.一、DSP/BIOS簡介DSP/BIOS是CCS中集成的一個簡易的嵌入式實時操作系統(tǒng),能夠大大方便用戶編寫多任務(wù)應(yīng)用程序。DSP/BIOS擁有很多實時嵌入式操作系統(tǒng)的功能,如任務(wù)的調(diào)度,任務(wù)間的同步和通信,內(nèi)存管理,實時時鐘管理,中斷服務(wù)管理等。有了它,用戶可以編寫復(fù)雜的多線程程序,并且會占用更少的CPU和內(nèi)存資源.DSP/BIOS是一個可用于實時調(diào)度、同步,主機和目標機通信,以及實時分析系統(tǒng)上的一個可裁減實時內(nèi)核,它提供了搶占式的多任務(wù)調(diào)度,對硬件的及時反應(yīng),實時分析和配置工具等。同時提供標準的API接口,易于使用.它是TI的eXpressDSP實時軟件技術(shù)的的一個關(guān)鍵部分。

二、DSP/BIOS的組件構(gòu)成DSP/BIOS在一個主機/目標機環(huán)境中的組件分布如下所示:DSP/BIOSAPI:編寫的程序可以調(diào)用API接口函數(shù);DSP/BIOS配置:創(chuàng)建的配置文件定義了程序使用的靜態(tài)BIOS對象;DSP/BIOS分析工具:集成在CCS上的一些BIOS分析工具可以對運行與目標設(shè)備上的程序進行監(jiān)測,包括CPU負載、時間、日志、線程執(zhí)行狀態(tài)等。

DSP/BIOS分為很多模塊,提供的所有API函數(shù)都按照模塊分類,以模塊名加下劃線開頭來命名,如圖

40所示為DSP/BIOS的全部模塊.圖

40

三、DSP/BIOS的啟動順序當(dāng)DSP/BIOS的應(yīng)用程序啟動時,一般遵循下面的步驟:(一)初始化DSP:DSP/BIOS程序從C/C++環(huán)境入口c_int00開始運行。對于C6000平臺,在c_int00開始處,系統(tǒng)棧指針(B15)和全局頁指針(B14)被分別設(shè)置在堆棧斷的末尾和.bss斷的開始??刂萍拇嫫鰽MR、IER、CSR等被初始化;(二)初始化.bss段:當(dāng)堆棧被設(shè)置完成后,初始化任務(wù)被調(diào)用,利用.cinit的記錄對.bss斷的變量進行初始化;(三)調(diào)用BIOS_init初始化用到的各個模塊:BIOS_init調(diào)用MOD_init對配置用到的各個模塊進行初始化,包括HWI_init、HST_init、IDL_init等;(四)處理.pinit表:。pinit表包含一些指向初始化函數(shù)的指針,對C++程序,全局對象類的創(chuàng)建也在此時完成;(五)調(diào)用用戶程序的main函數(shù):用戶main函數(shù)可以是C/C++函數(shù)或者匯編語言函數(shù),對于匯編函數(shù),使用_main的函數(shù)名。由于此時的硬件、軟件中斷還沒有被使能,所以在用戶主函數(shù)的初始化中需要注意,可以使能單獨的中斷屏蔽位,但是不能調(diào)用類似HWI_enable的接口來使能全局中斷;(六)調(diào)用BIOS_start啟動DSP/BIOS:BIOS_start在用戶main函數(shù)退出后被調(diào)用,它負責(zé)使能使用的各個模塊并調(diào)用MOD_startup啟動每個模塊。包括CLK_startup、PIP_startup、SWI_startup、HWI_startup等。當(dāng)TSK管理模塊在配置中被使用時,TSK_startup被執(zhí)行,并且BIOS_start將不會結(jié)束返回;(七)執(zhí)行idle循環(huán):有兩種方式進入idle循環(huán)。當(dāng)TSK管理模塊使能時,任務(wù)調(diào)度器運行的TSK_idle任務(wù)調(diào)用IDL_loop在其它任務(wù)空閑時進入idle循環(huán);當(dāng)TSK模塊未被使用時,BIOS_start調(diào)用將返回,并執(zhí)行IDL_loop進入永久的idle循環(huán),此時硬件和軟件中斷可以搶占idle循環(huán)得到執(zhí)行。由于idle循環(huán)中管理和主機的通信,因此主機和目標機之間的數(shù)據(jù)交互可以進行了.

四、DSP/BIOS的配置DSP/BIOS的靜態(tài)配置是利用CCS提供的配置工具完成,包括圖形化配置工具和文本配置工具.圖形化工具層次清晰,比較直觀,而文本工具更加靈活.通常使用圖形化的配置方法,下面對主要的模塊配置做一些介紹。(一)GlobalSettingProperties右鍵點擊“GlobalSettings”,點擊“What’sThis”,會彈出幫助窗口,該文件中有GlobalSettingProperties的各項設(shè)置說明。下面介紹的其他如MEM、LOG等配置都可以用同樣的方法得到相應(yīng)的幫助。選擇彈出菜單中的“Properties”,如圖

41所示.圖

41彈出如圖

42所示對話框:圖

42一般選擇默認設(shè)置即可,CLKOUT項需要根據(jù)DSP硬件單板提供的工作時鐘設(shè)置,Himalaya通常運行在1GHz頻率。DSPEndianMode

項根據(jù)實際情況設(shè)置。

(二)MEM設(shè)置MEM模塊設(shè)置中可以根據(jù)具體情況設(shè)置不同的內(nèi)存段,其中存在一個默認的IRAM片內(nèi)內(nèi)存段.需要注意的是,首先必須在IRAM段上設(shè)置一個heap段落,用于BIOS的內(nèi)部使用。設(shè)置方法是在IRAM段上右鍵選擇“Properties”,彈出如圖

43對話框,必須設(shè)置紅線框中的選項,heapsize可根據(jù)情況具體設(shè)置。圖

43接下來配置MEM全局屬性,右鍵點擊配置窗口中的“MEM…",如圖

44所示:圖

44點擊“Properties",彈出如圖

45所示窗口:圖

45如圖紅線框中,兩個heap段都要選擇為IRAM,“StackSize"項需要根據(jù)實際情況設(shè)置最大的棧大小,其他使用缺省設(shè)置即可。在圖

44的菜單中,點擊“InsertMEM"可創(chuàng)建新的內(nèi)存段。在新的內(nèi)存段名上右鍵選擇“Properties”彈出如圖

43窗口,根據(jù)情況設(shè)置base(基地址)、len(段長度)、heapsize(用于MEM動態(tài)內(nèi)存分配的堆大小)。

(三)LOG設(shè)置LOG用于輸出和記錄一些打印信息,默認存在一個LOG_system對象,是系統(tǒng)內(nèi)部用來處理打印信息的,不需要去設(shè)置.可以增加新的LOG對象,用來在應(yīng)用程序中輸出打印信息。如圖

46,在LOG標簽上右鍵選擇“InsertLOG”,填寫對象名LOG_test即建立了一個新的LOG對象。圖

46在LOG_test標簽上右鍵選擇“Properties”,彈出如圖

47窗口,可對此LOG對象屬性作一些設(shè)置。具體設(shè)置含義可通過Help查看。圖

47

(四)

CLK設(shè)置在CLK屬性中通常選擇定時器Timer0作為DSP/BIOS的基準時鐘,計時分辯率設(shè)置為每秒1000次中斷,在1GHz系統(tǒng)時鐘下,近似為每次定時中斷間隔999。996微秒。TimerMode選擇為32bitunchained模式,即使用TCI6482的TMR0的TIMLO作為Timer0,而TIMHI還可以作其它用途使用。CLK屬性配置界面如圖

48所示:圖

48

(五)HWI設(shè)置HWI(硬中斷)中包含HWI_INT4到HWI_INT15可用來定義用戶自己的硬件中斷,HWI_RESET、HWI_NMI和HWI_RESERVED不要去改動.如圖

49,每個硬HWI的優(yōu)先級從上到下逐漸降低。圖

49選擇HWI_INT10為例,來設(shè)置EMAC/MDIO的中斷,需要填寫中斷事件號17,并且填寫中斷服務(wù)程序名(C函數(shù)前面需要加下劃線)如圖50所示:圖

50在Dispatcher頁面,選擇“UseDispatcher"由BIOS代理控制中斷的確認和清除,不需要用戶中斷服務(wù)程序干預(yù),比較簡便.如圖51:圖

51

(六)SWI設(shè)置SWI(軟中斷)的優(yōu)先級在HWI之后,但是比TSK高,可以通過右鍵菜單中的“InsertSWI”創(chuàng)建一個SWI對象,可以指定SWI內(nèi)部優(yōu)先級,從0(最低)到14(最高)。如圖

52:圖

52(七)TSK設(shè)置在TSKManager(任務(wù)管理器)中可以根據(jù)需要創(chuàng)建各種任務(wù),任務(wù)間是根據(jù)優(yōu)先級搶占策略來進行調(diào)度的,TSK提供有多種優(yōu)先級別,包括-1(Suspend)、0(Idle)、1(最低)到15(最高)。如圖

53:圖

53在TSKManager上右鍵選擇“InsertTSK”并填寫任務(wù)名稱后就可以創(chuàng)建一個任務(wù),在相應(yīng)任務(wù)上右鍵選擇“Properties"可對任務(wù)屬性進行設(shè)置,如圖

54:圖

54StackSize(最大堆棧大小)和Priority(優(yōu)先級)需要根據(jù)任務(wù)的具體情況進行設(shè)置。在頁面,填寫任務(wù)實體函數(shù)名(C函數(shù)前面加一個下劃線),如圖

55:圖

55

(八)Synchronization設(shè)置?DSP/BIOS中任務(wù)間的通信和同步可由SEM、MBX、QUE、LCK四個模塊完成:SEM(信號量):用于任務(wù)同步和互斥,有計數(shù)功能,根據(jù)需要使用;MBX(郵箱):也用于任務(wù)同步,可以傳遞少量數(shù)據(jù),根據(jù)需要使用;QUE(隊列):可實現(xiàn)任務(wù)同步和資源的共享,根據(jù)需要使用;LCK(資源鎖):實現(xiàn)對共享資源的互斥,根據(jù)需要使用.四種同步模塊對象都可以通過各自的右鍵菜單中“Insert…”來創(chuàng)建,并可對其屬性作相應(yīng)的設(shè)置。如圖

56所示:圖

56

(九)Input/Output設(shè)置這里可以設(shè)置一些輸入/輸出相關(guān)的高級設(shè)置,具體可通過CCS的幫助項來了解。一般不需要進行設(shè)置.只有RTDX(實時數(shù)據(jù)交換),需要根據(jù)目標環(huán)境的情況對數(shù)據(jù)交換模式進行一下選擇,用來在調(diào)試中主機和目標機進行數(shù)據(jù)交換??梢允欠抡嫫鳝h(huán)境的JTAG模式,或者是模擬器環(huán)境的Simulator模式。如圖

57所示:五、基礎(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管理器周期寄存器的值

?(二)周期函數(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ù)

將郵箱值與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)?

返回當(dāng)前SWI對象在被執(zhí)行的郵箱值,若中斷已經(jīng)開始執(zhí)行,DSP/BIOS會先保存此值

6.Unskey=SWI_getpri(SWI_Obj*swi)

返回指定的SWI對象的優(yōu)先級

7.voidSWI_inc(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è)置欄,啟動軟件中斷的參數(shù)寫入arg0?10.Unskey=SWI_raisepri(Unsmask)?

提高SWI軟件中斷的優(yōu)先級,一般地

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)?

當(dāng)前執(zhí)行的SWI對象的軟件中斷的地址?

?(四)信息輸出管理LOG

1.voidLOG_disable(LOG_Obj*log)

關(guān)閉指定對向的日志功能

2.voidLOG_enable(LOG_Obj*log)

開啟指定對向的日志功能?3。voidLOG_error(Stringformat,Argarg0)

voidLOG_message(Stringformat,Argarg0)

前一個函數(shù)可以將一個事件、數(shù)據(jù)或出錯信息按照指定的格式串寫入系統(tǒng)日志,不受TRC跟蹤管理模塊的影響,后一個函數(shù)類似于前一個函數(shù),但是受到TRC跟蹤管理模塊的影響?4。voidLOG_event(LOG_Obj*log,Argarg0,Argarg1,Argarg2)

將未格式化的事件消息寫入日志中

5。voidLOG_printf(LOG_Obj*log,Stringformat,intarg0,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_define(Ptrbase,Unslength,MEM_Attrs*attrs)?

定義一個新的存儲段。返回值為存儲段的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)存塊的鎖定情況

5.voidMEM_redefine(segid,base,length)

重新定義一個存儲段,只能在main中調(diào)用?6。boolstatus=MEM_stat(intsegid,MEM_Stat*statbuf)

segid存儲段標識符

statbuf狀態(tài)緩存區(qū)指針

structmem_stat{?

Unssize;//存儲段大小?

Unsused;//已經(jīng)使用的數(shù)量

Unslength;//最大連續(xù)存儲塊長度?

同理:若segid有效,則MEM_stat返回TRUE?

不能在SWI和HWI中使用,應(yīng)判斷鎖定情況?7。void*addr=MEM_valloc(intsegid,Unssize,Unsalign,charvalue)

先申請內(nèi)存,初始化為指定的值value(六)C6000專用模塊C64x

1.Unsoldmask=C64_diableIER(Unsmask)?

關(guān)閉相應(yīng)的中斷返回值實際屏蔽的中斷

2.voidC64_enableIER(Unsoldmask)

開放相應(yīng)的中斷

?

Unsoldmask;?

oldmask=C64_disableIER(0x1);//disableINT0?

C64_enableIER(oldmask);

//enableINT0

3.voidC64_plug(intvecid,Fxnfxn,intdmachan)?

插入一個中斷向量?

intvecid:中斷序號?

Fxnfxn:中斷服務(wù)程序的函數(shù)指針

intdmachan:插入操作使用的DMA通道

將ISFP寫到中斷服務(wù)表IST中。若IST在外部RAM,則CPU復(fù)制代替DMA,此時DMA為—1?

IST在片內(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,LgIntvalue)?

每個對象都包含有初始值,該初始值由配置文件指定或者由STS_set函數(shù)設(shè)置

STS_delta先計算當(dāng)前傳遞參數(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.TRC_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_USER1和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ù)的堆棧?

一般地,用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,Arg[arg,]...)

創(chuàng)建一個調(diào)用函數(shù)fxn的任務(wù)對象,返回新對象的句柄,失敗返回NULL。?

調(diào)用此函數(shù)是動態(tài)創(chuàng)建,而在配置工具中創(chuàng)建是靜態(tài)創(chuàng)建,二者效果一樣。

靜態(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_Attrs{

intpriority;

Ptrstack;

Unsstacksize;?

#ifdef_64_//imitat(yī)eC55series.tocheck?

Unssysstacksize;

#endif

Unsstackseg;

Ptrenviron;?

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_settime(TSK_Handletask)?

設(shè)定統(tǒng)計初始值

voidtask()

{?

——dosomestartupwork--

TSK_settime(TSK_self);

for(;;){?

SIO_get(...);?

--processdata-—

TSK_deltatime(TSK_self);

}?

}?

假如流式IO沒有準備好,那么該API函數(shù)會阻塞(Blocked),任務(wù)切換,一段時間后,流式IO數(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)。只有當(dāng)前任務(wù)可行,其余所有任務(wù)禁止。

此函數(shù)不會禁止中斷,所以在中斷開始前需要調(diào)用此函數(shù)保證中斷發(fā)生時不會發(fā)生任務(wù)切換。?

可以嵌套,但是調(diào)用幾次TSK_disable,就得相應(yīng)調(diào)用幾次TSK_enable?7.voidTSK_enable(void)?

全局開啟內(nèi)核調(diào)度機制

8.voidTSK_exit(void)

終止當(dāng)前任務(wù)運行。如果所有任務(wù)都被終止,則DSP/BIOS會調(diào)用SYS_exit終止程序。

無論什么時候,任務(wù)從頂層函數(shù)返回時,都是自動調(diào)用此函數(shù)。?

可以注冊一個退出輔助函數(shù)voidmyExitFxn(void)

這樣,在任務(wù)被設(shè)置為TSK_TERMINATED模式之前,會調(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ù)錯誤號的存儲單元.初始值為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狀態(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)

暫停任務(wù)的時鐘個數(shù),此時鐘數(shù)可能比真實的暫停時鐘少一個時鐘(告警時鐘)

18.voidTSK_itick(void)?

對告警時鐘加1,以便讓TSK_sleep或者SEM_pend函數(shù)暫停執(zhí)行的任務(wù)恢復(fù)到ready。

一些暫停的任務(wù)可能會隨著告警時鐘的增加而超時,從而就緒。

19。voidTSK_tick(void)

對告警時鐘加1,以便讓TSK_sleep或者SEM_pend函數(shù)暫停執(zhí)行的任務(wù)恢復(fù)到ready。?

一些暫停的任務(wù)可能會隨著告警時鐘的增加而超時,從而就緒.

可以在中斷服務(wù)程序和當(dāng)前任務(wù)中調(diào)用,后者在控制超時非常有用。

20.Unscurrtime=TSK_time(void)

返回系統(tǒng)告警時鐘的當(dāng)前值。(由于延遲,只能得到一個大概的系統(tǒng)時鐘)

21.TSK_Handlecurrtask=TSK_self(void)

返回當(dāng)前任務(wù)對象的句柄

22。voidTSK_stat(TSK_Handletask,TSK_Stat(yī)*statbuf)?

返回任務(wù)的屬性參數(shù)和狀態(tài)信息

structTSK_Stat{?

TSK_Attrsat(yī)trs;//任務(wù)參數(shù)

TSK_Modemode;

//任務(wù)執(zhí)行模式?

Ptrsp;

//任務(wù)當(dāng)前堆棧指針

Unsused;

//任務(wù)堆棧曾經(jīng)使用的最大值

注意:任務(wù)比HWI和SWI中斷優(yōu)先級要低,所以當(dāng)任務(wù)被中斷時,還是返回TSK_RUNNING,?

因為中斷完成后任務(wù)繼續(xù)運行。

23。voidTSK_yield(void)?

強制任務(wù)切換,請注意,任務(wù)可以被中斷,但是,任務(wù)之間必須依靠切換來進行,就是說,

即便當(dāng)前有高優(yōu)先級任務(wù)就緒,它不能被執(zhí)行,除非切換.?

此函數(shù)用于任務(wù)之間的同步.?

?(十)任務(wù)管理HOOK鉤子函數(shù)管理模塊?

HOOK模塊管理者一組涉及鉤

溫馨提示

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

評論

0/150

提交評論