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