介紹一種實(shí)時(shí)操作系統(tǒng)DSP/BIOS
德州儀器新推出的DSPC6400系列最高運(yùn)行時(shí)鐘可以達(dá)到1.1GHz,運(yùn)算能力可以達(dá)到8800MIPS。如何充分發(fā)揮DSP的這種性能優(yōu)勢(shì),對(duì)軟件提出了很高的要求。首先為了降低系統(tǒng)成本,就要求將許多以前用硬件實(shí)現(xiàn)的功能軟件化,原來(lái)由多個(gè)DSP完成的工作由一塊DSP完成,DSP要能夠同時(shí)完成多個(gè)相同或不同的任務(wù)而相互之間沒(méi)有影響。其次為了產(chǎn)品的維護(hù)和升級(jí),要求軟件盡可能地模塊化,使用高級(jí)語(yǔ)言如C來(lái)編程,有統(tǒng)一的接口API。所有這些新的要求,都需要使用實(shí)時(shí)操作系統(tǒng)。以往直接將應(yīng)用程序運(yùn)行于裸機(jī)之上的作法顯然已經(jīng)不再適用了。德州儀器推出的DSP/BIOS技術(shù)正是基于其多年從事DSP研制生產(chǎn)的經(jīng)驗(yàn),為開(kāi)發(fā)者量身定做的一個(gè)優(yōu)秀軟件平臺(tái)?! 「少F的是該操作系統(tǒng)是免費(fèi)的,這為眾多的中小用戶使用DSP打開(kāi)了方便之門(mén)。
1 實(shí)時(shí)操作系統(tǒng)
簡(jiǎn)單地說(shuō),實(shí)時(shí)操作系統(tǒng)與一般意義上的操作系統(tǒng)(如Windows、 Unix等)的主要差別就在于實(shí)時(shí)操作系統(tǒng)提供了一種機(jī)制,使得運(yùn)行于其上的應(yīng)用程序都能夠滿足實(shí)時(shí)性的要求?! ≡赪indows中常見(jiàn)的沙漏現(xiàn)象(即用戶等待現(xiàn)象)在實(shí)時(shí)系統(tǒng)中是絕對(duì)不允許的。因?yàn)檫@可能造成通訊中斷,馬達(dá)損毀等災(zāi)難性的結(jié)果?! ?a class="contentlabel" href="http://butianyuan.cn/news/listbylabel/label/DSP/BIOS">DSP/BIOS是特別針對(duì)實(shí)時(shí)系統(tǒng),運(yùn)行于德州儀器C5000,C6000系列的DSP之上的一個(gè)實(shí)時(shí)操作系統(tǒng)。 DSP/BIOS實(shí)際上是一個(gè)可調(diào)用的系統(tǒng)模塊API的集合。以下就各個(gè)模塊分別加以介紹。
2 LOG
在開(kāi)發(fā)的時(shí)候通常需要使用printf()來(lái)顯示當(dāng)前狀態(tài)。但是printf()是非?;ㄙM(fèi)時(shí)間的函數(shù)、而且不具有實(shí)時(shí)性。因?yàn)镈SP需要對(duì)顯示的數(shù)據(jù)進(jìn)行分析,整理成合適的顯示格式,并調(diào)用輸出顯示模塊。所以在一個(gè)實(shí)時(shí)性要求很高的應(yīng)用中,對(duì)printf()的調(diào)用可能會(huì)使系統(tǒng)根本無(wú)法滿足實(shí)時(shí)要求。在DSP/BIOS中引入了一個(gè)相應(yīng)的函數(shù)LOG_printf()。該函數(shù)是LOG對(duì)象的一個(gè)方法(或調(diào)用函數(shù)〕。LOG對(duì)象本質(zhì)上是一個(gè)32bit的整形數(shù),其高低16bit分別代表要顯示的兩個(gè)數(shù)據(jù)。例1是分別使用printf()和LOG_printf()作比較的示范程序:
#include ?。約tdio.h>
/* Header files needed for DSP BIOS */
#include <std.h>
#include ?。糽og.h>
/* functions */
void func_printf();
void func_LOG_printf();
/* Objects created by the Configuration Tool */
extern LOG_Obj logTrace;
/*
*======== main ========
*/
void main ()
{
return;
}
void func_printf(int time)
{
printf(″Strart printf demon″);
printf(″Current time=%d n″ 、 time);
printf(″End printf demon″);
return;
}
void func_LOG_printf(int time)
{
LOG_printf(logTrace、″Strart LOG_printf demon″);
LOG_printf(logTrace、 ″Current time=%d n″ 、 time);
LOG_printf(logTrace、 ″End LOG_printf demon″);
return;
}
func_printf()和func_LOG_printf()由DSP內(nèi)時(shí)鐘控制每100ms周期性地分別調(diào)用一次。通過(guò)對(duì)printf()和LOG_printf()運(yùn)行時(shí)間作比較發(fā)現(xiàn),在C6211運(yùn)行在150MHz的情況下,printf()需花費(fèi)4000個(gè)周期約26.7μs,LOG_printf()只花費(fèi)36個(gè)周期約0.24μs。printf()比LOG_printf()多開(kāi)銷100倍以上的時(shí)間,因此LOG_printf()對(duì)于實(shí)時(shí)地顯示一些運(yùn)行狀態(tài)是非常有幫助的。而且對(duì)于熟悉C語(yǔ)言的開(kāi)發(fā)者來(lái)說(shuō),LOG_printf()的調(diào)用格式幾乎與printf()完全一樣。
評(píng)論