DSP/BIOS 實現實時數據調試和交換

1     DSP/BIOS 實現實時數據調試和交換

摘要:本文介紹了基於TI公司DSP/BIOS實現實時數據調試和交換的方法

      ----數字信號處理技術已成爲目前最廣泛的應用技術之一,TI公司在不斷推出各種新型高速低功耗DSP的基礎上,提出了基於DSP的微型實時操作系統BIOS的概念.

      ----DSP所面臨的系統越來越複雜,諸如多任務處理,煩瑣的硬件設備管理,實時數據處理及傳送等等,傳統的DSP編程越來越難以勝任.

      ----TI公司推出的BIOS可以支持以上功能,它提供了衆多的模塊及面向用戶的API接口,包括多優先級多任務系統調度,內存管理,硬件DRIVER抽象,以及數字信號處理所獨特的實時數據調試及交換的支持.

1 .1            BIOS中的圖形化管理界面

      ----先介紹一下BIOS中的圖形化管理界面:DSP/BIOS CONFIGURATIONTOOLS。在 CCS 集成 開發環境中打開FILE

      ->NEW -> DSP/BIOS CONFIGURATION,就可以看到DSP/CONFIGURATION TOOLS,

      在這裏用圖形化的界面集中管理所有的BIOS模塊,包括硬中斷,軟中斷,任務,時鐘,管道等,在每個模塊下都可以添加新的對象以及編輯它的屬性,添加完對象會在工程中自動生成相應的代碼,用戶程序中只需聲明此對象,然後調用它的API函數就可以了。

      ----下面主要介紹數字信號處理所獨特的實時數據調試及交換

      ----在通常的軟件調試中如何去觀察變量?很簡單,我們會單步運行或者設置斷點,然後在WATCH窗口中觀察變量的值.這種經典的調試方法在數字信號處理中捉荊見拙,因爲我們面對的是實時任務,程序的停頓會使我們面對的系統面目全非.DSP/BIOS的解決方案是提供LOG模塊,

      在目標DSP內,LOG對象將要監控的信息實時的捕捉存放在DSP的特定緩衝LOG

      BUFFER中,在DSP進入空閒的時刻通過JTAG接口傳回主機,主機端的CCS集成環境將接受數據並顯示在打開的LOG觀察窗口中,從而不打斷正常的程序運行情況下,獲取必要的調試信息。

1 .2            LOG模塊

      ----下面介紹如何使用LOG模塊。在現有的工程中打開DSP/BIOS CONFIGURATIONTOOL,在LOG模塊上單擊右鍵選擇INSERT LOG,然後修改新添加的對象名爲 LogTarget. 在程序裏添加以下代碼

     #include

     #include

      externfar LOG_Obj logTarget; //聲明爲外部對象

      func()

      {

            LOG_printf( &logTarget, … );

      }

      ----這樣就完成了調試數據向主機的傳送。在運行代碼前,我們打開DSP/BIOS->MESSAGE

      LOG,在打開的LOG窗口中,單擊右鍵打開PROPERTY PAGE,選擇Name爲LogTarget. 然後運行

      代碼,LOG.printf會將所需的信息打印到打開的LOG窗口中,這樣能夠在不影響系統運行的時候,觀察變量,打印信息了.

      ----另一個重要的用於實時調試的模塊是STS,用於提供在程序運行中的各種統計數據,如運行時間,特定的變量等。在DSP中,STS將所要統計的數據放在一組32位的變量,同樣在DSP進入IDLE時刻,將數據通過JTAG接口傳送給主機中的64位變量進行統計,並清除DSP中的32位變量。

1 .3            STS模塊

      (續致信網上一頁內容)----下面介紹一下STS的使用

      ----在工程中打開DSP/CONFIGURATION TOOLS,並在STS模塊下添加一個對象stsObj.

      ----在程序裏添加以下代碼

     #include

     #include

      externfar STS_Obj stsObj;

      //通常有三種使用方法

      //1。統計消耗的時鐘數

      func()

      {

         STS_set( &stsObj, CLK_gethtime()); //設置一個起始時刻

         "do algorithm"//運行算法

         STS_delta(&stsObj, CLK_gethtime()); //得到自上一個STS_set到目前的時鐘數

      }

      //2。統計變化的變量

      func()

      {

      STS_add(&stsObj, pitch);//將變量pitch在一段循環中的最大值,平均值及總和打印出來

      }

      //3。統計變量改變的差值

     STS_set( &stsObj,targetValue);

     "processing"

     STS_delta(&stsObj,newValue);//將變量改變的差值統計出來

      ----在運行代碼前,在CCS中打開TOOLS..DSP/BIOS..STATISTICS VIEW,在打開的STATISTICS窗口

      中,單擊右鍵打開PROPERTY PAGE,選擇要顯示的STS對象及要觀察的統計數據,如平均值, 總數,

      循環次數等.運行代碼,所要觀察的統計數據會出現在STATISTICS窗口中,這樣我們能夠在不影響系統運行的時候,獲取有關的統計信息了.

      ----上面我們介紹的STS模塊提供了靈活的獲取統計數據的方法。

1 .4            RTDX模塊

      ----下一個我們要提到的重要模塊是RTDX(REALTIME DATAEXCHANGE),RTDX提供了實時連續探察

      DSP內部處理的方法,我們可以在DSP全速運行的時候在主機和DSP間進行數據的傳輸,用戶可以在主機用OLE automation

      client分析顯示得到的數據.

     ----RTDX包括主機部分和目標部分,目標DSP中程序調用RTDX目標庫的API函數通過JTAG接口與主機交換數據,主機端客戶程序通過OLE接口調用RTDX

      HOSTLIBRARY API與DSP交換數據。

      目標DSP內輸出管道的編程可以參照一下流程:

      1)#include

     2)RTDX_CreateOutputChannel(ochan);

      聲明一個全局的輸出管道

      3)RTDX_enableOutput(&ochan);

      使能一個輸出的管道

      4)status = RTDX_write(&ochan, &data, sizeof(data));

      將所要傳出的數據data傳遞到管道

     5)RTDX_disableOutput(&ochan);

      關斷管道

      目標DSP內輸入管道的編程與此類似

      在主機端可以用VB,VC或者EXCEL編程

      這裏介紹一下VC環境下RTDX輸入管道編程

      1) 輸入RTDX支持庫

      #import

      usingnamespace RTDXINTLib;

      2) 定義一個RTDX對象

     IRtdxExpPtr rtdx;

      3) 初始化COM

     ::CoInitialize(NULL);

      4) 初始化COM對象

      HRESULThr = rtdx.CreateInstance( L"RTDX" );

      5) 打開一個管道

      status= rtdx.Open("ochan", "R")

      6) 從管道中讀數據

      status= rtdx.ReadI4(data)

      7) 關閉管道

      status= rtdx.Close()

      8) 釋放COM對象

     rtdx.Release();

      9) 釋放COM

     ::CoUninitialize();

      主機端輸出管道的編程與此類似.

      ----如果安裝有CCS,那麼在C:\ti\c6000\examples\rtdx\displays下的RTDX.EXE提供了一個通用的主機端接口程序,運行後,通過菜單配置,可以與DSP端RTDX管道建立連接,將接受的數據顯示在表格中.

發佈了13 篇原創文章 · 獲贊 2 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章