周 杰
揚(yáng)州工業(yè)職業(yè)技術(shù)學(xué)院,江蘇揚(yáng)州 225127
DSP /BIOS實(shí)時(shí)多任務(wù)操作系統(tǒng)內(nèi)核的研究
周 杰
揚(yáng)州工業(yè)職業(yè)技術(shù)學(xué)院,江蘇揚(yáng)州 225127
本文介紹了TI公司TMS320C6713的DSP/BIOS實(shí)時(shí)多任務(wù)操作系統(tǒng)內(nèi)核,通過(guò)研究分析 DSP/BIOS的啟動(dòng)順序,線程指令流在DSP中存在的方式以及調(diào)度的優(yōu)先級(jí),線程間的讓出與搶中,總結(jié)出多任務(wù)的執(zhí)行狀態(tài)和調(diào)度的規(guī)律。最后將該多任務(wù)操作系統(tǒng)應(yīng)于某伺服控制系統(tǒng),取得了良好的效果。
BIOS;DSP; 線程搶占;任務(wù)
DSP/BIOS是TI公司特別為其TMS320C6000TM、TMS320 C28XTM系統(tǒng)DSP平臺(tái)所設(shè)計(jì)開(kāi)發(fā)的一個(gè)尺寸可裁剪的實(shí)時(shí)多任務(wù)操作系統(tǒng)內(nèi)核,是TI公司的Code Composer StudioTM開(kāi)發(fā)工具的組成部分之一。
當(dāng)一個(gè)應(yīng)用程序啟動(dòng)時(shí),boot.s54(C54x 平臺(tái))或autoinit.c和boot.snn(C600g 平臺(tái))文件中的代碼決定了其啟動(dòng)序列,這些文件的編譯版本由 biosi.ann 庫(kù)提供。一般BIOS啟動(dòng)順序如下:
1)初始化DSP:DSP/BIOS程序從C或C++環(huán)境入口點(diǎn)c_ int00開(kāi)始運(yùn)行,而復(fù)位中斷向量被設(shè)置為復(fù)位后跳轉(zhuǎn)到c_int00,對(duì)C600來(lái)說(shuō),系統(tǒng)堆棧指針(B15)和全局頁(yè)指針(B14)被初始化分別指向.stack段的末尾和.bss段的開(kāi)始。
2)當(dāng)堆棧建立好后,初始化程序用.cinit段中的記錄初始化全局變量。
3)調(diào)用BIOS_init初始化程序中用到的DSP/BIOS 模塊,BIOS_init由配置生成并位于programcfg.snn文件中。主要完成三個(gè)子模塊的初始化。
HWI_init:硬件中斷,設(shè)置ISTP和中斷選擇寄存器。
HST_init:初始化主機(jī)I/O通道接口,該程序決定主機(jī)與目標(biāo)DSP的連接方式;
IDL_init:空閑循環(huán)的指令計(jì)數(shù)。該程序用于校準(zhǔn)CPU負(fù)荷里實(shí)時(shí)顯示的CPU負(fù)載值。
4)處理.pinit表:.pinit表包含了指向初始化函數(shù)的指針,這里主要初始化各種全局變量。
5)調(diào)用用戶應(yīng)用程序的 mian函數(shù):在所有DSP/BIOS模塊初始化完成之后,用戶mian 函數(shù)才會(huì)被調(diào)用。
6)調(diào)用BIOS_start啟動(dòng)DSP/BIOS:該函數(shù)在programcfg.snn文件中,在用戶mian函數(shù)返回調(diào)用BIOS_start 。
7)執(zhí)行空循環(huán):有兩種方式可以調(diào)用該函數(shù):第一種是任務(wù)管理器被使能,任務(wù)管理器在運(yùn)行TSK_idle時(shí)會(huì)調(diào)用IDL_loop;第二種是任務(wù)管理器被禁用,則當(dāng)BIOS start返回時(shí)緊接著調(diào)用TDL loop。
3線程調(diào)度
在DSP/BIOS中線程被定義為由DSP執(zhí)行的任何獨(dú)立的指令流,一個(gè)線程可以是一段程序,一個(gè)函數(shù)或一個(gè)ISR調(diào)用。DSP/ BIOS支持多種不同優(yōu)先級(jí)的線程,每種線程類型都有不同的執(zhí)行和搶占特性。
硬件中斷(HWI),包括CKL函數(shù),用于響應(yīng)外部異步事件。
軟件中斷(HWI),包括PRD函數(shù),軟件中斷通過(guò)在程序中調(diào)用SWI函數(shù)而觸發(fā)的。
DSP/BIOS調(diào)度器會(huì)運(yùn)行處于就緒狀態(tài)的優(yōu)先級(jí)最高線程,除非發(fā)生下列情況:
1)運(yùn)行中的線程暫時(shí)禁止了部分或全部的硬件中斷(HWI disable),阻止了相應(yīng)硬件 ISR運(yùn)行;
2)運(yùn)行中的線程暫時(shí)禁止了軟件中斷(SWI disable),阻止了任何更高優(yōu)先級(jí)的軟件中斷搶占當(dāng)前線程,但并不阻止硬件中斷搶占當(dāng)前線程;
3)運(yùn)行中的線程暫時(shí)禁止了任務(wù)調(diào)度(TSK disable),阻止了任務(wù)更高優(yōu)先級(jí)的任務(wù)搶占當(dāng)前線程,但并不阻止硬件中斷或軟件中斷搶占當(dāng)前線程;
4)最高優(yōu)先級(jí)的線程是一個(gè)被阻塞的任務(wù)線程,當(dāng)任務(wù)調(diào)用了TSK sleep、LCK pend、MBX pend、或SEM pend時(shí)會(huì)發(fā)生阻塞。
任務(wù)有16個(gè)優(yōu)先級(jí),最低為0,最高為15。且優(yōu)先級(jí)0保留給系統(tǒng)空閑任務(wù)。每個(gè)TSK對(duì)象總是處于如下四種可能的執(zhí)行狀態(tài)之一:
1)運(yùn)行狀態(tài)(Running):代表該任務(wù)當(dāng)前正在系統(tǒng)處理器上執(zhí)行。
2)就緒狀態(tài)(Ready): 代表任務(wù)已經(jīng)被調(diào)度并在等待處理器上執(zhí)行。
3)阻塞態(tài)(Blocked):代表任務(wù)必須等到某個(gè)事件發(fā)生或某些資源呆用時(shí)才能執(zhí)行。
4)終止態(tài)(Terminated):代表任務(wù)已經(jīng)被終止,不會(huì)再執(zhí)行。
最高的任務(wù)優(yōu)先級(jí)是TSK MAXPRI(15),最低的任務(wù)優(yōu)先級(jí)是TSK MINPRI(1)。圖1說(shuō)明了任務(wù)的狀態(tài)是如何改變的。
圖1 任務(wù)狀態(tài)化
TSK、SEMT和SIO模塊的函數(shù)可以改變?nèi)蝿?wù)的狀態(tài):阻塞或終止當(dāng)前運(yùn)行的任務(wù),使之前被掛起(阻塞)的任務(wù)就緒,以及重新調(diào)度當(dāng)前線程等。
通過(guò)對(duì)DSP/BIOS實(shí)時(shí)搶占式內(nèi)核的分析研究,將該操作系統(tǒng)用于某伺服系統(tǒng)。從復(fù)位狀態(tài)開(kāi)始伺服系統(tǒng)需要實(shí)時(shí)向上位機(jī)發(fā)送一些系統(tǒng)的狀態(tài)信息。實(shí)踐證明該系統(tǒng)可以完成系統(tǒng)的功能要求取得很好的效果。
[1]Texas Instruments Incorporated.TI DSP/BIOS 用戶手冊(cè)與驅(qū)動(dòng)開(kāi)發(fā)[M].北京:清華大學(xué)出版社,2007.
[2]Texas Instruments Incorporated,TMS320C6000系列DSP的CPU與外設(shè)[M].北京:清華大學(xué)出版社,2007.
[3]汪安民,張松燦,常春藤,TMS320C6000 DSP實(shí)用技術(shù)與開(kāi)發(fā)案例[M].北京:人民郵電出版社,2004,4.
[4]三恒星科技.TMS320C6712 DSP 原理與應(yīng)用實(shí)例[M].北京:電子工業(yè)出版社,2009,4.
TP39
A
1674-6708(2010)33-0220-02
周杰,講師,主要從事計(jì)算機(jī)控制的研究