介紹一種實時操作系統(tǒng)DSP/BIOS
例5 PIP對應(yīng)的讀任務(wù):
extern far PIP_Obj pip;
reader()
{
Uns size;
Ptr addr;
if(PIP_getReaderNumFrames(pip)>0)
{
PIP_get(pip);
addr=PIP_getReaderAddr(pip);
size=PIP_getReaderSize(pip);
/*Code to empty the frame*/
PIP_free(pip);
}
else{
LOG_error(″no frames available″);
/* or you could just return;*/
}
}
例6 PIP對應(yīng)的寫任務(wù):
extern far PIP_Obj pip;
writer()
{
Uns size;
Ptr addr;
if(PIP_getWriterNumFrames(pip)>0){
PIP_alloc(pip);
addr=PIP_getWriterAddr(pip);
size=PIP_getWriterSize(pip);
/* fill the frame up to size */
PIP_put(pip);
}
else{
LOG_error(″no frames available″);
/* or you could just return;*/
}
}
由邏輯關(guān)系可以看到,通過使用PIP應(yīng)用程序可以保持一個簡單統(tǒng)一接口而不必關(guān)心具體的硬件操作,因此當(dāng)該軟件移植到不同環(huán)境中時,至多只需要改寫設(shè)備驅(qū)動程序。使用PIP的一個具體實例就是HST模塊。HST模塊在主機(jī)和DSP之間建立起一條數(shù)據(jù)鏈路,該鏈路就是一個PIP對象。對HST的操作方式與PIP一致。其差別僅僅在于HST在初始化時指向了預(yù)定義的DSP上的HPI接口而已。
SIO:從PIP的邏輯關(guān)系可以看出,讀寫PIP就是一個數(shù)據(jù)拷貝的過程。這在某些應(yīng)用中,如實現(xiàn)網(wǎng)絡(luò)協(xié)議TCP/IP時,不是非常有效。因為數(shù)據(jù)每向上傳遞一層就需要進(jìn)行一次數(shù)據(jù)拷貝,其效率非常差。如果采用SIO來實現(xiàn)就會有很大的改善。SIO的操作只有g(shù)et()和 put()兩種。與PIP不同的是SIO沒有自己的緩沖隊列。每次get() 或 put() 操作時都會在應(yīng)用程序和設(shè)備驅(qū)動程序之間交換緩沖的指針。所以SIO操作的實質(zhì)是數(shù)據(jù)地址的交換。由于沒有數(shù)據(jù)拷貝,其運(yùn)行效率就很高。SIO的運(yùn)行邏輯如圖4所示。
7 RTDX
實時數(shù)據(jù)交換Real-Time-Data-eXhange是DSP/BIOS提供的一個全新的功能。在很多應(yīng)用中要求DSP不能夠停下來,而需要從主機(jī)中實時地讀取數(shù)據(jù)或者向主機(jī)實時地輸出數(shù)據(jù)。德州儀器的C5000,C6000系列的DSP都可以通過JTAG接口來實現(xiàn)這個功能。其邏輯結(jié)構(gòu)如圖5所示。
評論