1 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)度,、同步,,主機(jī)和目標(biāo)機(jī)通信,以及實時分析系統(tǒng)上的一個可裁減實時內(nèi)核,,它提供了搶占式的多任務(wù)調(diào)度,,對硬件的及時反應(yīng),實時分析和配置工具等,。同時提供標(biāo)準(zhǔn)的API接口,,易于使用。它是TI的eXpressDSP實時軟件技術(shù)的的一個關(guān)鍵部分,。
1.1 DSP/BIOS的組件構(gòu)成
DSP/BIOS在一個主機(jī)/目標(biāo)機(jī)環(huán)境中的組件分布如圖 39所示:
圖 39
DSP/BIOS API:編寫的程序可以調(diào)用API接口函數(shù),;
DSP/BIOS配置:創(chuàng)建的配置文件定義了程序使用的靜態(tài)BIOS對象;
DSP/BIOS分析工具:集成在CCS上的一些BIOS分析工具可以對運行與目標(biāo)設(shè)備上的程序進(jìn)行監(jiān)測,,包括CPU負(fù)載,、時間、日志,、線程執(zhí)行狀態(tài)等,。
DSP/BIOS分為很多模塊,提供的所有API函數(shù)都按照模塊分類,,以模塊名加下劃線開頭來命名,,如圖 40所示為DSP/BIOS的全部模塊。
圖 40
1.2 DSP/BIOS的啟動順序
當(dāng)DSP/BIOS的應(yīng)用程序啟動時,,一般遵循下面的步驟:
1) 初始化DSP:DSP/BIOS程序從C/C++環(huán)境入口c_int00開始運行,。對于C6000平臺,在c_int00開始處,,系統(tǒng)棧指針(B15)和全局頁指針(B14)被分別設(shè)置在堆棧斷的末尾和.bss斷的開始,。控制寄存器AMR,、IER,、CSR等被初始化;
2) 初始化.bss段:當(dāng)堆棧被設(shè)置完成后,,初始化任務(wù)被調(diào)用,,利用.cinit的記錄對.bss斷的變量進(jìn)行初始化;
3) 調(diào)用BIOS_init初始化用到的各個模塊:BIOS_init調(diào)用MOD_init對配置用到的各個模塊進(jìn)行初始化,,包括HWI_init,、HST_init、IDL_init等,;
4) 處理.pinit表:.pinit表包含一些指向初始化函數(shù)的指針,,對C++程序,全局對象類的創(chuàng)建也在此時完成,;
5) 調(diào)用用戶程序的main函數(shù):用戶main函數(shù)可以是C/C++函數(shù)或者匯編語言函數(shù),,對于匯編函數(shù),,使用_main的函數(shù)名。由于此時的硬件,、軟件中斷還沒有被使能,,所以在用戶主函數(shù)的初始化中需要注意,可以使能單獨的中斷屏蔽位,,但是不能調(diào)用類似HWI_enable的接口來使能全局中斷,;
6) 調(diào)用BIOS_start啟動DSP/BIOS:BIOS_start在用戶main函數(shù)退出后被調(diào)用,,它負(fù)責(zé)使能使用的各個模塊并調(diào)用MOD_startup啟動每個模塊,。包括CLK_startup、PIP_startup,、SWI_startup,、HWI_startup等,。當(dāng)TSK管理模塊在配置中被使用時,TSK_startup被執(zhí)行,,并且BIOS_start將不會結(jié)束返回,;
7) 執(zhí)行idle循環(huán):有兩種方式進(jìn)入idle循環(huán)。當(dāng)TSK管理模塊使能時,,任務(wù)調(diào)度器運行的TSK_idle任務(wù)調(diào)用IDL_loop在其它任務(wù)空閑時進(jìn)入idle循環(huán),;當(dāng)TSK模塊未被使用時,BIOS_start調(diào)用將返回,,并執(zhí)行IDL_loop進(jìn)入永久的idle循環(huán),,此時硬件和軟件中斷可以搶占idle循環(huán)得到執(zhí)行。由于idle循環(huán)中管理和主機(jī)的通信,,因此主機(jī)和目標(biāo)機(jī)之間的數(shù)據(jù)交互可以進(jìn)行了,。
1.3 DSP/BIOS的配置
DSP/BIOS的靜態(tài)配置是利用CCS提供的配置工具完成,包括圖形化配置工具和文本配置工具,。圖形化工具層次清晰,,比較直觀,而文本工具更加靈活,。通常使用圖形化的配置方法,下面對主要的模塊配置做一些介紹,。
右鍵點擊“Global Settings”,,點擊“What’s This”,會彈出幫助窗口,,該文件中有Global Setting Properties的各項設(shè)置說明,。下面介紹的其他如MEM、LOG等配置都可以用同樣的方法得到相應(yīng)的幫助,。
選擇彈出菜單中的“Properties”,,如圖 41所示,。
圖 41
彈出如圖 42所示對話框:
圖 42
一般選擇默認(rèn)設(shè)置即可,CLKOUT項需要根據(jù)DSP硬件單板提供的工作時鐘設(shè)置,,Himalaya通常運行在1GHz頻率,。
DSP Endian Mode 項根據(jù)實際情況設(shè)置。
MEM模塊設(shè)置中可以根據(jù)具體情況設(shè)置不同的內(nèi)存段,,其中存在一個默認(rèn)的IRAM片內(nèi)內(nèi)存段,。需要注意的是,首先必須在IRAM段上設(shè)置一個heap段落,,用于BIOS的內(nèi)部使用,。設(shè)置方法是在IRAM段上右鍵選擇“Properties”,彈出如圖 43對話框,,必須設(shè)置紅線框中的選項,,heap size可根據(jù)情況具體設(shè)置。
圖 43
接下來配置MEM全局屬性,,右鍵點擊配置窗口中的“MEM…”,,如圖 44所示:
圖 44
點擊“Properties”,彈出如圖 45所示窗口:
圖 45
如圖紅線框中,,兩個heap段都要選擇為IRAM,,“Stack Size”項需要根據(jù)實際情況設(shè)置最大的棧大小,其他使用缺省設(shè)置即可,。
在圖 44的菜單中,,點擊“Insert MEM”可創(chuàng)建新的內(nèi)存段。在新的內(nèi)存段名上右鍵選擇“Properties”彈出如圖 43窗口,,根據(jù)情況設(shè)置base(基地址),、len(段長度)、heap size(用于MEM動態(tài)內(nèi)存分配的堆大?。?。
LOG用于輸出和記錄一些打印信息,默認(rèn)存在一個LOG_system對象,,是系統(tǒng)內(nèi)部用來處理打印信息的,,不需要去設(shè)置??梢栽黾有碌?/span>LOG對象,,用來在應(yīng)用程序中輸出打印信息。如圖 46,,在LOG標(biāo)簽上右鍵選擇“Insert LOG”,,填寫對象名LOG_test即建立了一個新的LOG對象。
圖 46
在LOG_test標(biāo)簽上右鍵選擇“Properties”,彈出如圖 47窗口,,可對此LOG對象屬性作一些設(shè)置,。具體設(shè)置含義可通過Help查看。
圖 47
在CLK屬性中通常選擇定時器Timer0作為DSP/BIOS的基準(zhǔn)時鐘,,計時分辯率設(shè)置為每秒1000次中斷,,在1GHz系統(tǒng)時鐘下,近似為每次定時中斷間隔999.996微秒,。Timer Mode選擇為32bit unchained模式,,即使用TCI6482的TMR0的TIMLO作為Timer0,而TIMHI還可以作其它用途使用,。CLK屬性配置界面如圖 48所示:
圖 48
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頁面,,選擇“Use Dispatcher”由BIOS代理控制中斷的確認(rèn)和清除,,不需要用戶中斷服務(wù)程序干預(yù),比較簡便,。如圖 51:
圖 51
SWI(軟中斷)的優(yōu)先級在HWI之后,,但是比TSK高,可以通過右鍵菜單中的“Insert SWI”創(chuàng)建一個SWI對象,,可以指定SWI內(nèi)部優(yōu)先級,,從0(最低)到14(最高)。如圖 52:
圖 52
在TSK Manager(任務(wù)管理器)中可以根據(jù)需要創(chuàng)建各種任務(wù),,任務(wù)間是根據(jù)優(yōu)先級搶占策略來進(jìn)行調(diào)度的,,TSK提供有多種優(yōu)先級別,包括-1(Suspend),、0(Idle),、1(最低)到15(最高)。如圖 53:
圖 53
在TSK Manager上右鍵選擇“Insert TSK”并填寫任務(wù)名稱后就可以創(chuàng)建一個任務(wù),,在相應(yīng)任務(wù)上右鍵選擇“Properties”可對任務(wù)屬性進(jìn)行設(shè)置,,如圖 54:
圖 54
Stack Size(最大堆棧大小)和Priority(優(yōu)先級)需要根據(jù)任務(wù)的具體情況進(jìn)行設(shè)置,。在頁面,填寫任務(wù)實體函數(shù)名(C函數(shù)前面加一個下劃線),,如圖 55:
圖 55
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
這里可以設(shè)置一些輸入/輸出相關(guān)的高級設(shè)置,,具體可通過CCS的幫助項來了解,。一般不需要進(jìn)行設(shè)置。只有RTDX(實時數(shù)據(jù)交換),,需要根據(jù)目標(biāo)環(huán)境的情況對數(shù)據(jù)交換模式進(jìn)行一下選擇,,用來在調(diào)試中主機(jī)和目標(biāo)機(jī)進(jìn)行數(shù)據(jù)交換??梢允欠抡嫫鳝h(huán)境的JTAG模式,,或者是模擬器環(huán)境的Simulator模式。如圖 57所示:
|