音影先锋亚洲天堂网|电影世界尽头的爱完整版播放|国产 熟女 91|高清无码免费观看欧美日韩|韩国一区二区三区黄色录像|美女亚洲加勒比在线|亚洲综合网 开心五月|7x成人在线入口|成人网站免费日韩毛片区|国产黄片?一级?二级?三级

介紹實(shí)時(shí)操作系統(tǒng)DSP/BIOS的應(yīng)用

出處:電子技術(shù)應(yīng)用 發(fā)布于:2011-06-12 19:45:44

  DSPC6400系列是德州儀器基于軟件開發(fā)面臨的新要求而推出的,其運(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ù)而相互之間沒有影響。其次為了產(chǎn)品的維護(hù)和升級(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),為開發(fā)者量身定做的一個(gè)軟件平臺(tái)。 更可貴的是該操作系統(tǒng)是的,這為眾多的中小用戶使用DSP打開了方便之門。

  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í)性的要求。 在Windows中常見的沙漏現(xiàn)象(即用戶等待現(xiàn)象)在實(shí)時(shí)系統(tǒng)中是不允許的。因?yàn)檫@可能造成通訊中斷,馬達(dá)損毀等災(zāi)難性的結(jié)果。 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

  在開發(fā)的時(shí)候通常需要使用printf()來(lái)顯示當(dāng)前狀態(tài)。但是printf()是非常花費(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

  /* Header files needed for DSP BIOS */

  #include

  #include

  /* 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 demo ″);

  printf(″Current time=%d ″ , time);

  printf(″End printf demo ″);

  return;

  }

  void func_LOG_printf(int time)

  {

  LOG_printf(&logTrace,″Strart LOG_printf demo ″);

  LOG_printf(&logTrace, ″Current time=%d ″  time);

  LOG_printf(&logTrace, ″End LOG_printf demo ″);

  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()多開銷100倍以上的時(shí)間,因此LOG_printf()對(duì)于實(shí)時(shí)地顯示一些運(yùn)行狀態(tài)是非常有幫助的。而且對(duì)于熟悉C語(yǔ)言的開發(fā)者來(lái)說(shuō),LOG_printf()的調(diào)用格式幾乎與printf()完全一樣。

  3 STS

  對(duì)一個(gè)軟件進(jìn)行分析優(yōu)化時(shí),通常會(huì)用到profile的功能。但是在實(shí)時(shí)運(yùn)行的DSP的環(huán)境中使用profile等效于加入了多個(gè)程序斷點(diǎn)。 由于現(xiàn)在的DSP通常具有很深的流水線結(jié)構(gòu)來(lái)保證DSP的高運(yùn)算能力,如德州儀器的C6000系列的流水線長(zhǎng)度為12級(jí),程序斷點(diǎn)需要排空所有已經(jīng)進(jìn)入流水線的指令。這樣也就破壞了真正的運(yùn)行環(huán)境。同時(shí)profile還必須調(diào)用輸出模塊向主機(jī)傳遞時(shí)間信息。因此在profile的情況下真正的實(shí)時(shí)運(yùn)行環(huán)境是沒有辦法得到保護(hù)的。DSP/BIOS針對(duì)這種情況引入了一個(gè)統(tǒng)計(jì)模塊STS.STS對(duì)象只有4個(gè)數(shù)據(jù)Previous、Count、Total和Max.調(diào)用的方法(API)也只有4個(gè),即STS_add(), STS_set(), STS_delta()和STS_reset()。這些API對(duì)數(shù)據(jù)的操作功能如表1所示。

  表1 STS模塊方法(API)的功能

  如果要對(duì)某一段程序進(jìn)行分析時(shí),只需在其前后調(diào)用STS_set和STS_delta就可以了。如例2使用STS測(cè)試程序段執(zhí)行周期如下:

  /* Header files needed for DSP BIOS */

  #include

  #include

  /* functions */

  void func_load();

  /* Objects created by the Configuration Tool */

  extern STS_Obj stsLoad;

  /*

  * ======== main ========

  */

  void main()

  {

  /* fall into DSP/BIOS idle loop */

  return;

  }

  void func_load()

  {

  STS_set(&stsPrintf, CLK_gethtime());

  /* 測(cè)試程序段 */

  …

  STS_delta(&stsPrintf, CLK_gethtime());

  }

  func_load()為一個(gè)中斷服務(wù)程序(ISR)。在C6211,150MHz的情況下,僅插入33個(gè)周期,約0.22μs.

  4 任務(wù)調(diào)度(HWI/SWI/TSK)

  一個(gè)操作系統(tǒng)的永遠(yuǎn)都是任務(wù)的調(diào)度。在DSP/BIOS中任務(wù)的調(diào)度是通過(guò)HWI、SWI和 TSK 三個(gè)模塊來(lái)實(shí)現(xiàn)的。這三個(gè)模塊分別對(duì)應(yīng)于不同的調(diào)度方法。HWI即硬件中斷。在 DSP/BIOS中硬件中斷主要負(fù)責(zé)從外部設(shè)備中讀寫數(shù)據(jù)。由于硬件中斷直接與硬件打交道,所以對(duì)應(yīng)的中斷服務(wù)程序ISR應(yīng)該盡可能地短小精悍。需要注意的是HWI并不引起任務(wù)調(diào)度,因此在ISR的入口和出口成對(duì)地調(diào)用_HWI_enter()和_HWI_exit()這兩個(gè)宏是必須的。HWI在處理完數(shù)據(jù)的輸入輸出后調(diào)用SWI_post()來(lái)調(diào)度相應(yīng)的軟件中斷,SWI來(lái)完成數(shù)據(jù)處理工作。SWI是 DSP/BIOS任務(wù)調(diào)度的,共有14個(gè)優(yōu)先級(jí),每個(gè)優(yōu)先級(jí)可以有多個(gè)任務(wù)。SWI任務(wù)是搶斷式的,即高優(yōu)先級(jí)的任務(wù)可以搶斷低優(yōu)先級(jí)的任務(wù)。但是SWI任務(wù)是不可阻塞的。它的運(yùn)行狀態(tài)如圖1所示。

  所有SWI任務(wù)共享一個(gè)堆棧,SWI任務(wù)只能在程序編制時(shí)預(yù)先定義好。DSP/BIOS中對(duì)任務(wù)的動(dòng)態(tài)產(chǎn)生和對(duì)阻塞狀態(tài)的支持是通過(guò)TSK模塊來(lái)實(shí)現(xiàn)的。TSK有15個(gè)優(yōu)先級(jí),也是可以搶斷的,但是每個(gè)TSK任務(wù)使用獨(dú)立的堆棧。TSK任務(wù)是通過(guò)TSK_create()和TSK_delete()來(lái)動(dòng)態(tài)生成和結(jié)束的。它的運(yùn)行狀態(tài)如圖2所示。

  5 同步(SEM/ATM/QUE/MBX)

  多任務(wù)系統(tǒng)中多個(gè)任務(wù)之間的協(xié)調(diào)同步工作可以通過(guò)多種方法來(lái)實(shí)現(xiàn)。常用方法如信號(hào)量、原子量、隊(duì)列和郵箱等。在DSP/BIOS中對(duì)這些方法的支持分別通過(guò)模塊SEM、ATM、QUE和MBX來(lái)實(shí)現(xiàn)。由于這些方法的使用與一般的操作系統(tǒng)完全一樣,在這里就不再贅述了。僅就靈活的在SWI中使用Mailbox的方法來(lái)加以簡(jiǎn)單地說(shuō)明。每個(gè)SWI任務(wù)都帶有一個(gè)Mailbox,對(duì)它的操作可以是計(jì)數(shù)型的SWI_inc(), SWI_dec() 也可以是比特位操作型的 SWI_or(), SWI_andn()。Mailbox控制SWI任務(wù)被調(diào)度的條件。這些操作的功能如表2所示。

  表2 SWI中Mailbox的操作功能

  or操作是將Mailbox中的某一位置1,同時(shí)引起SWI任務(wù)的調(diào)度。當(dāng)一個(gè)SWI任務(wù)可能由多個(gè)事件觸發(fā)時(shí),使用or操作可以方便地表示出觸發(fā)的事件。如例3使用or操作指示觸發(fā)事件:

  andn操作是將Mailbox中的某一位清0,如果Mailbox為0,則引起SWI任務(wù)的調(diào)度。一個(gè)SWI任務(wù)需要多個(gè)條件都滿足時(shí)才運(yùn)行的情況下,使用andn操作可以方便地表示出這些條件的狀態(tài)。如例4用andn操作來(lái)表示多條件時(shí)SWI任務(wù)調(diào)度:

  inc和dec操作則更加靈活,用戶可以借此實(shí)現(xiàn)多種應(yīng)用。需要注意的是,inc操作總是引起任務(wù)調(diào)度,而dec操作僅在Mailbox減到0時(shí)才引起任務(wù)調(diào)度。

  6 通訊(PIP/SIO/HST)

  一個(gè)系統(tǒng)如何從外部設(shè)備中取得數(shù)據(jù),向外部設(shè)備輸出數(shù)據(jù),如何在兩個(gè)任務(wù)之間進(jìn)行數(shù)據(jù)正常交換是多樣靈活的。但是這種多樣性也給軟件的維護(hù)升級(jí)以及模塊化工作帶來(lái)許多不利因素。因此在保持多樣性的同時(shí),保持接口的一致性對(duì)于一個(gè)軟件來(lái)說(shuō)是非常有幫助的??紤]到DSP大多數(shù)是通過(guò)某種類型的串行接口如中繼線E1、IIS、SPI、同步串行口等與外部設(shè)備進(jìn)行數(shù)據(jù)交換的,所以在DSP/BIOS中提供了兩種非常有用的接口對(duì)象PIP和 SIO.

  PIP對(duì)象包含一個(gè)緩沖隊(duì)列,與之對(duì)應(yīng)的有兩個(gè)任務(wù)讀和寫。圖3很好地說(shuō)明了PIP的邏輯關(guān)系和操作方式。例5,例6分別是一個(gè)PIP對(duì)象對(duì)應(yīng)的讀任務(wù)和寫任務(wù)的示范程序。

  例5 PIP對(duì)應(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對(duì)應(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)系可以看到,通過(guò)使用PIP應(yīng)用程序可以保持一個(gè)簡(jiǎn)單統(tǒng)一接口而不必關(guān)心具體的硬件操作,因此當(dāng)該軟件移植到不同環(huán)境中時(shí),至多只需要改寫設(shè)備驅(qū)動(dòng)程序。使用PIP的一個(gè)具體實(shí)例就是HST模塊。HST模塊在主機(jī)和DSP之間建立起一條數(shù)據(jù)鏈路,該鏈路就是一個(gè)PIP對(duì)象。對(duì)HST的操作方式與PIP一致。其差別僅僅在于HST在初始化時(shí)指向了預(yù)定義的DSP上的HPI接口而已。

  SIO:從PIP的邏輯關(guān)系可以看出,讀寫PIP就是一個(gè)數(shù)據(jù)拷貝的過(guò)程。這在某些應(yīng)用中,如實(shí)現(xiàn)網(wǎng)絡(luò)協(xié)議TCP/IP時(shí),不是非常有效。因?yàn)閿?shù)據(jù)每向上傳遞一層就需要進(jìn)行數(shù)據(jù)拷貝,其效率非常差。如果采用SIO來(lái)實(shí)現(xiàn)就會(huì)有很大的改善。SIO的操作只有g(shù)et()和 put()兩種。與PIP不同的是SIO沒有自己的緩沖隊(duì)列。每次get() 或 put() 操作時(shí)都會(huì)在應(yīng)用程序和設(shè)備驅(qū)動(dòng)程序之間交換緩沖的指針。所以SIO操作的實(shí)質(zhì)是數(shù)據(jù)地址的交換。由于沒有數(shù)據(jù)拷貝,其運(yùn)行效率就很高。SIO的運(yùn)行邏輯如圖4所示。

  7 RTDX

  實(shí)時(shí)數(shù)據(jù)交換Real-Time-Data-eXhange是DSP/BIOS提供的一個(gè)全新的功能。在很多應(yīng)用中要求DSP不能夠停下來(lái),而需要從主機(jī)中實(shí)時(shí)地讀取數(shù)據(jù)或者向主機(jī)實(shí)時(shí)地輸出數(shù)據(jù)。德州儀器的C5000,C6000系列的DSP都可以通過(guò)JTAG接口來(lái)實(shí)現(xiàn)這個(gè)功能。其邏輯結(jié)構(gòu)如圖5所示。

  RTDX在主機(jī)端可以與任何符合OLE接口的應(yīng)用程序交換數(shù)據(jù)。例7是一個(gè)使用RTDX在主機(jī)和DSP之間進(jìn)行數(shù)據(jù)傳遞的例子。主機(jī)端是一個(gè)基于VB的小程序。

  例7 DSP程序:

  #include

  RTDX_CreateInputChannel(writeload);

  RTDX_CreateOutputChannel(readload);

  int main()

  {

  RTDX_enableInput(&writeload);

  RTDX_enableOutput(&readload);

  return;

  }

  void doExchange()

  {

  if(!RTDX_channelBusy(&writeload)){

  RTDX_readNB(&writeload,&loadVoal,sizeof(load-Val));

  }

  RTDX_write(&readload,&loadVal,sizeof(loadVal));

  }

  使用VB編制的主機(jī)端程序

  set r=CreateObject("RTDX")

  status=r.open("readload","R")

  set w=CreateObject("RTDX")

  status=w.open("writeload""W")

  status=r.ReadI4(data)

  status=w.WriteI4(value,bufferstate)

  綜上所述,DSP/BIOS針對(duì)DSP的應(yīng)用環(huán)境,通過(guò)一系列的對(duì)象模塊向開發(fā)者提供了一個(gè)實(shí)用的實(shí)時(shí)操作系統(tǒng)。它可以幫助用戶提高軟件的模塊化、并行性和維護(hù)性等,有利于降低系統(tǒng)成本和縮短開發(fā)周期。同時(shí)由于它是的,可以預(yù)計(jì)DSP/BIOS將對(duì)DSP技術(shù)在中國(guó)的推廣使用起到積極的推動(dòng)作用。


  
關(guān)鍵詞:介紹實(shí)時(shí)操作系統(tǒng)DSP/BIOS的應(yīng)用

版權(quán)與免責(zé)聲明

凡本網(wǎng)注明“出處:維庫(kù)電子市場(chǎng)網(wǎng)”的所有作品,版權(quán)均屬于維庫(kù)電子市場(chǎng)網(wǎng),轉(zhuǎn)載請(qǐng)必須注明維庫(kù)電子市場(chǎng)網(wǎng),http://m.58mhw.cn,違反者本網(wǎng)將追究相關(guān)法律責(zé)任。

本網(wǎng)轉(zhuǎn)載并注明自其它出處的作品,目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點(diǎn)或證實(shí)其內(nèi)容的真實(shí)性,不承擔(dān)此類作品侵權(quán)行為的直接責(zé)任及連帶責(zé)任。其他媒體、網(wǎng)站或個(gè)人從本網(wǎng)轉(zhuǎn)載時(shí),必須保留本網(wǎng)注明的作品出處,并自負(fù)版權(quán)等法律責(zé)任。

如涉及作品內(nèi)容、版權(quán)等問(wèn)題,請(qǐng)?jiān)谧髌钒l(fā)表之日起一周內(nèi)與本網(wǎng)聯(lián)系,否則視為放棄相關(guān)權(quán)利。

廣告
OEM清單文件: OEM清單文件
*公司名:
*聯(lián)系人:
*手機(jī)號(hào)碼:
QQ:
有效期:

掃碼下載APP,
一鍵連接廣大的電子世界。

在線人工客服

買家服務(wù):
賣家服務(wù):
技術(shù)客服:

0571-85317607

網(wǎng)站技術(shù)支持

13606545031

客服在線時(shí)間周一至周五
9:00-17:30

關(guān)注官方微信號(hào),
第一時(shí)間獲取資訊。

建議反饋

聯(lián)系人:

聯(lián)系方式:

按住滑塊,拖拽到最右邊
>>
感謝您向阿庫(kù)提出的寶貴意見,您的參與是維庫(kù)提升服務(wù)的動(dòng)力!意見一經(jīng)采納,將有感恩紅包奉上哦!