1. 程式人生 > >C++Test基於CCS的單元測試

C++Test基於CCS的單元測試

C++Test基於CCS的單元測試

      C++Test基於DSP CCS的測試,是將C++TestCCS一起使用,無需進行特殊的整合。C++Test事實上並非與CCS開發環境整合,而是預先配置為支援CCS的編譯器集,允許C++Test專案使用這些編譯器並且將整個CCS專案匯入C++Test工作空間。為了做好基於CCS的單元測試,有必要對DSP的開發環境進行較為深入的瞭解。

一、引言

自然界中各種訊號(如聲音)的初始形態是運動變化的,為了測量和處理它們,要用感測器把它們的特徵轉換成電訊號,這些電訊號就是模擬訊號。等到這些電訊號處理完後,再把它們轉變為我們能看見、能聽見或能利用的形態,就變成了數字訊號。數字訊號處理前後需要一些輔助電路,它們和數字訊號處理器構成一個系統,這個系統就叫做數字訊號處理系統。

二、DSP功能及特點:

DSP晶片,也稱數字訊號處理器,是一種特別適合於進行數字訊號處理運算的微處理器,其主要應用是實時快速地實現各種數字訊號處理演算法。根據數字訊號處理的要求,DSP晶片一般具有如下主要特點:

1.    在一個指令週期內可完成一次乘法和一次加法;

2.    程式和資料空間分開,可以同時訪問指令和資料;

3.    片內具有快速RAM,通常可通過獨立的資料匯流排在兩塊中同時訪問;

4.    具有低開銷或無開銷迴圈及跳轉的硬體支援;

5.    快速的中斷處理和硬體I/O支援;

6.    具有在單週期內操作的多個硬體地址產生器;

7.    可以並行執行多個操作;

8.  支援流水線操作,使取指、譯碼和執行等操作可以重疊執行。

三、DSP的應用:

近年來,數字訊號處理器(DSP)晶片已經廣泛用於自動控制、影象處理、通訊技術、網路裝置、儀器儀表和家電等領域;DSP為數字訊號處理提供了高效而可靠的硬體基礎。

自從DSP晶片誕生以來,DSP晶片得到了飛速的發展。DSP晶片高速發展,一方面得益於積體電路的發展,另一方面也得益於巨大的市場。在短短的十多年時間,DSP晶片已經在訊號處理、通訊、雷達等許多領域得到廣泛的應用。DSP晶片的應用主要有:

1.    訊號處理——如,數字濾波、自適應濾波、快速傅立葉變換、相關運算、頻譜分析、卷積等。

2.    通訊——如,調變解調器、自適應均衡、資料加密、資料壓縮、回坡抵消、多路複用、傳真、擴頻通訊、糾錯編碼、波形產生等。

3.    語音——如語音編碼、語音合成、語音識別、語音增強、說話人辨認、說話人確認、語音郵件、語音儲存等。

4.    影象/圖形——如二維和三維圖形處理、影象壓縮與傳輸、影象增強、動畫、機器人視覺等。

5.    軍事——如保密通訊、雷達處理、聲納處理、導航等。

6.    儀器儀表——如頻譜分析、函式發生、鎖相環、地震處理等。

7.    自動控制——如引擎控制、深空、自動駕駛、機器人控制、磁碟控制。

8.    醫療——如助聽、超聲裝置、診斷工具、病人監護等。

四、DSP的分類:

主要考慮處理速度、功耗、程式儲存器和資料儲存器的容量、片內的資源,如定時器的數量、I/O口數量、中斷數量、DMA通道數等。DSP的主要供商TIADIMotorola,LucentZilog等,其中TI佔有最大的市場份額。下面主要介紹TI的產品及分類:

1.TMS320C2000 

  TMS320C2000系列包括C24xC28x系列。C24x系列建議使用LF24xx系列替代C24x系列,LF24xx系列的價格比C24x便宜,效能高於C24x,而且LF24xxA具有加密功能。 C28x系列主要用於大儲存裝置管理,高效能的控制場合。  

2.TMS320C3x 

      TMS320C3x系列包括C3xVC33,主要推薦使用VC33C3x系列是TI浮點DSP的基礎,不可能停產,但價格不會進一步下調。  

3.TMS320C5x

       TMS320C5x系列已不推薦使用,建議使用C24xC5000系列替代。  

4.TMS320C5000 

      TMS320C5000系列包括C54xC55x系列。其中VC54xx還不斷有新的器件出現,如:TMS320VC5471DSPARM7)。 C55x系列是TI的第三代DSP,功耗為VC54xx1/6,效能為VC54xx5倍,是一個正在發展的系列。 C5000系列是目前TI DSP的主流DSP,它涵蓋了從低檔到中高檔的應用領域,目前也是使用者最多的系列。 

5.TMS320C6000 

     TMS320C6000系列包括C62xxC67xxC64xx。此係列是TI的高檔DSP系列。其中C62xx系列是定點的DSP,系列晶片種類較豐富,是主要的應用系列。 C67xx系列是浮點的DSP,用於需要高速浮點處理的領域。 C64xx系列是新發展,效能是C62xx10倍。  

6.OMAP系列

TI專門用於多媒體領域的晶片,它是C55ARM9,效能卓越,非常適合於手持裝置、Internet終端等多媒體應用。

德州儀器(TI)公司現在主推四大系列DSP

1C5000系列(定點、低功耗):C54XC54XXC55X 相比其它系列的主要特點是低功耗,所以最適合個人與行動式上網以及無線通訊應用,如手機、PDAGPS等應用。處理速度在80MIPS-- 400MIPS之間。C54XXC55XX 一般只具有McBSP同步串列埠、HPI並行介面、定時器、DMA等外設。值得注意的是C55XX提供了EMIF外部儲存器擴充套件介面,可以直接使用 SDRAM,而C54XX則不能直接使用。兩個系列的數字IO都只有兩條。

2C2000系列(定點、控制器):C20XF20XF24XF24XX C28x該系晶片具有大量外設資源,如:A/D、定時器、各種串列埠(同步和非同步),WATCHDOGCAN匯流排/PWM發生器、數字IO腳等。是針對控制應用最佳化的DSP,在TI所有的DSP中,只有C2000FLASH,也只有該系列有非同步串列埠可以和PCUART相連。

3C6000系列:C62XXC67XXC64X 該系列以高效能著稱,最適合寬頻網路和數字影像應用。32bit,其中:C62XXC64X是定點系列,C67XX 是浮點系列。該系列提供EMIF擴充套件儲存器介面。該系列只提供BGA裝,只能製作多層PCB。且功耗較大。同為浮點系列的C3X中的VC33現在雖非主流產品,但也仍在廣泛使用,但其速度較低,最高在150MIPS

4OMAP系列:OMAP處理器整合ARM的命令及控制功能,另外還提供DSP 的低功耗實時訊號處理能力,最適合移動上網裝置和多媒體家電。

其他系列的DSP曾經有過風光,但現在都非TI主推產品了,除了C3X系列外,其他基本處於淘汰階段,如:C3X的浮點系列:C30C31C32 C2XC5X系列:C20C25C50

每個系列的DSP都有其主要應用領域.

五、DSP的開發:

本文仍以TI公司的產品為例,介紹DSP的開發。

1TI DSP的硬體開發

1)根據應用所處領域選擇TI推薦的DSP型別

2)根據所選定的DSPEVM板,DSK等原理圖,完成DSP系統的搭建(包括外擴記憶體空間、電源復位系統、各控制訊號管腳的連線、JTAG口的連線等);

3)根據需求,選擇外圍電路的擴充套件,一般如語音、視訊、控制等領域均有成熟的電路可以從TI網站得到。外圍電路與DSP的介面可參看EVM DSK,以及所選外圍電路晶片的典型介面設計原理圖;最好外圍電路晶片也選擇TI的,這樣的話不管硬體介面有現成原理圖、很多連DSP與其介面的基本控制原始碼都有。

4)地址譯碼、IO擴充套件等用CPLD或者FPGA來做,將DSP的地址線、資料線、控制訊號線如IS/PS/DS等都引進去有利於除錯。

 FPGA是英文FieldProgrammable Gate Array的縮寫,即現場可程式設計門陣列,它是在PALGALCPLD等可程式設計器件的基礎上進一步發展的產物。它是作為專用積體電路(ASIC)領域中的一種半定製電路而出現的,既解決了定製電路的不足,又克服了原有可程式設計器件閘電路數有限的缺點。FPGA採用了邏輯單元陣列LCALogic Cell Array)這樣一個新概念,內部包括可配置邏輯模組CLBConfigurableLogic Block)、輸出輸入模組IOBInput OutputBlock)和內部連線(Interconnect)三個部分。

2TI DSP的軟體開發

瞭解目標版的電路設計,包括程式、資料、I/O空間的譯碼。DSPCPU,memory,program memory addressing, data mem.oryaddressing的資料.熟悉以下技術的要點:

1CCS的使用

2CMD檔案的編寫

3)中斷向量表文件的編寫及定位

4)執行一個純simulator的程式,瞭解CCS的各個操作

5)到TI網站下載相關的原始碼,參考原始碼的結構進行程式設計

六、CCS的特點及使用:

CCSCode Composer Studio)程式碼偵錯程式是一種合成開發環境,是TI公司推出的整合視覺化DSP軟體開發環境。它是一種針對標準TMS320偵錯程式介面的互動式方法。

CCS內部集成了以下軟體工具:

DSP程式生成工具(包括C編譯器、優化器、彙編器和聯結器)

軟體專案開發工具(包括程式碼編輯、專案建立、線上除錯、線上資料觀察等工具)

實時多執行緒核心DSP/BIOS(使用DSP/BIOS核心能夠開發出多執行緒應用程式)

RTDX元件(在程式碼中使用RTDX可以實現DSP程式和PC機之間的資料傳輸)使用CCS開發者可以對軟體進行編輯、編譯、除錯、程式碼效能測試和專案管理等工作。CCS的部分功能有:

ü  觀察和更改DSP系統儲存器和暫存器的值;

ü  用各種圖形方式描繪出DSP系統儲存器中的連續資料;

ü  設定斷點;

ü  在斷點處自動重新整理記憶體視窗和圖形視窗;

ü  在測試點處使資料在DSP系統儲存器和PC機檔案之間傳遞;

ü  程式碼效能測試,計算程式碼段執行所花的CPU時鐘週期數;

ü  反彙編顯示,即將DSP系統程式儲存器中的值轉換為對應的

CCS目前有CCS1.1 CCS1.2 CCS2.0等早期的版本,又有CC2000 ( 針對C2XX )CCS5000 ( 針對C54XX )CCS6000 (針對C6X )三個不同的型號。下面以CCS50002.0版本為例說明CCS的特點。

1TI編譯器的完全整合的環境:
CCS5000
目標管理系統,內建編輯器,所有的除錯和分析能力整合在一個Windows環境中。

2、對CDSP彙編檔案的目標管理:

目標編輯器保持對所有檔案及相關內容的跟蹤。它只對最近一次編譯中改變過的檔案重新編譯,以節省編譯時間。

3、高整合的編輯器調整CDSP彙編程式碼:

CCS5000的內建編輯器支援C和彙編檔案的動態語法加亮顯示。使使用者能很容易地閱讀程式碼和當場發現語法錯誤。

4、編輯和除錯時的後臺編輯:

使用者在使用編譯器和彙編器時沒有必要退出系統到DOS環境中,因為CCS5000會自動將這些工具裝載在它的環境中。在其視窗中,錯誤會加亮顯示只要雙擊錯誤就可以直接到達出錯處。

5、在含有浮點並行除錯管理器(PDM)的原有的MS視窗下支援多處理器CCS5000 Windows95Windows-me中支援多處理。PDM允許將命令傳播給所有的或所選擇的處理器。

6、在任何演算法點觀察訊號的圖形視窗探針:

圖形顯示視窗使使用者能夠觀察時域或頻域內的訊號。對於頻域圖,FFT在主機內執行,這樣就可以觀察所感興趣的部分而無須改變它的DSP程式碼。圖顯示也可以同探針連線,當前顯示視窗被更新時,探針被指定,這樣當代碼執行到達該點時,就可以迅速地觀察到訊號。

7、檔案探針在演算法處通過檔案提取或加入訊號或資料:

CCS5000允許使用者從PC機讀或寫訊號流。而不是實時的讀訊號,這就可以用已知的例子來模擬演算法。

8、圖形分析:

CCS5000的圖形分析能力在其環境中是整合的。

在後臺(系統命令)執行使用者的DOS程式:

使用者可以執行CCS5000中的DOS程式,並將其輸出以流水方式送到CCS5000的輸出視窗。且允許使用者將應用程式整合到CCS5000

9、技術狀態觀察視窗:

CCS5000的可視視窗允許使用者進入C表示式及相關變數。結構、陣列、指標都能很簡單地遞迴擴充套件和減少,以便進入複雜結構。

10、代數分解視窗:

允許使用者選擇檢視寫成代數表示式的C格式,提高可讀性

11、目標DSP上的幫助:

DSP結構和暫存器上的線上幫助可以使使用者不必檢視技術手冊。

12、使用者擴充套件:

擴充套件語言(GEL)使得使用者可以將自己的選單項加到CCS5000的選單欄中。

七、CCS專案簡介:

將所有原始檔新增到專案中後,就可以對整個專案進行編譯、彙編和連結,最終生成能夠被DSP晶片執行的DSP程式(*.out)。

      DSP可執行的*.out檔案只能在DSP平臺上執行,該DSP平臺可以是真實的硬體電路板上的DSP晶片(需要模擬器來連線PC機和硬體電路板,CCS應配置為相應的Emulator模式),也可以是CCS軟體在PC機上模擬出的DSP環境(不需要模擬器和硬體電路,CCS應配置為相應的Simulator模式)。不論是哪種情況,在執行程式之前,都需要將DSP程式(*.out檔案)裝載到真實的或虛擬的DSP平臺中,然後讓真實的或虛擬的DSP去執行它。

對程式中的資料段和程式碼段的存放地址是自己編寫*.cmd檔案來確定的。我們可以通過檢視*.cmd檔案來獲得全域性資料在DSP資料儲存器開專案構建後生成的*.map檔案(在Debug目錄下)來檢視程式中所有全域性變數的存放地址。

CCS提供了多種圖形顯示方式:Time/Frequency(時域/頻域圖)、Constellation(星座圖)、Eye Diagram(眼圖)、Image(二維影象),使用圖形方式觀察DSP儲存器中的資料。

八、C++Test基於DSP CCS3.X的單元測試

CCS專案進行單元測試,選擇測試工具時,必須瞭解測試工具對CCS和晶片不同版本的支援程度,以C++Test為例,針對不同的CCS版本,C++Test也提供不同的安裝包。如果CCS3.3以下版本(包含3.3),需要安裝C++Test的獨立版,如果是CCS3.3以上版本,則需要安裝C++Test外掛版,外掛版可以整合到CCS開發環境中(作為一個選單項),使用方法跟獨立版基本相同。C++TestTI晶片的支援環境如下:

獨立版支援下面的編譯器/環境版本:

·        德州儀器的 Code Composer 3.1 3.3 (Windows 宿主端)

·        TMS320C6x C/C++ 編譯器 v6.0.8andv5.1.0

·        TMS320C2000 C/C++ 編譯器 v4.1.0 (僅支援靜態分析)

C++Test外掛版支援下面的編譯器/環境版本:

·    德州儀器 Code Composer Studio 4

·     TMS320C6xC/C++ 編譯器 v6.1.x

·     TMS320C2000C/C++ 編譯器 v5.2.x

·     MSP430 C/C++ 編譯器v3.2.x  

安裝完成後,開始匯入專案,匯入步驟如下:

1. 選擇 File(檔案)> New(新建)> Project(專案)選擇 Import CodeComposer Studio projects(匯入 Code Composer Studio 專案)然後單擊下一步。

2. 輸入 (或瀏覽到) 到適當專案/工作空間檔案或目錄的路徑。

3. 單擊重新整理,選擇要匯入的專案,然後單擊下一步。

4. 設定匯入目的地,專案內容,和使用預設專案配置,然後單擊完成。

如下圖所示:


一旦專案被匯入,開始建立測試配置,複製“內建”中“嵌入式系統”下Run TI CCS 3.xTests” ,可以如下修改用於編譯器/連結器選項源的原始的 CCS 專案配置名稱 Project Properties(專案屬性)>Parasoft> C++test> Build Settings(構建設定)。如下圖所示:

 

C++Test中執行單元測試:選擇一個被測試物件,可以是一個原始檔,也可以是幾個原始檔,也可以是整C++Test個工程,使其高亮,然後,選擇工具條中的“”,下拉 >> 選擇測試執行>>  “使用者自定義>>  “Run TI CCS 3.x Tests”

執行成功後,即可檢視結果。(若有問題導致單元測試執行不成功,則通過控制檯下的輸出資訊分析出錯原因,查找出錯原因。)

相關推薦

C++Test基於CCS單元測試

C++Test基於CCS的單元測試      C++Test基於DSP CCS的測試,是將C++Test與CCS一起使用,無需進行特殊的整合。C++Test事實上並非與CCS開發環境整合,而是預先配置為

C++類的完美單元測試方案——基於C++11擴充套件的friend語法

  版權相關宣告:本文所述方案來自於《深入理解C++11—C++11新特性解析與應用》(Michael Wong著,機械工業出版社,2016.4重印)一書的學習。   專案管理中,C語言工程做單元測試用例直接寫就可以了,對於C++語言工程,曾經聽到過“C++類的私有成員在外部無法訪問

Glib 對 C 函數進行單元測試

error ati 完成 structure 是否 pac str txt b- 1. Glib 單元測試框架 Glib 為單元測試提供了一套完整的測試框架,每個測試運行包括以下幾個部分 測試數據結構 測試 setup 與 teardown 函數 測試函數 2. 單元測

SSH框架下用JUnit和spring-test和EasyMock單元測試

用Junit和EasyMock測試註冊用例說明及結果截圖 1.  沒有相同使用者名稱,可以用該使用者名稱註冊 說明:為需要呼叫的IuserService介面例項建立mock物件,並模擬返回find(查詢資料庫中是否同名)結果為null,即資料庫中 無該使用者名稱,可以註冊 package com.user

Wings與parasoft c++ test單元測試用例自動生成能力的比對

RoCE 相同 c++ 比較 關心 分享 多少 自己 ××× 作為一個軟件測試培訓講師,主要側重在白盒測試培訓方面,尤其對C++test比較擅長。最近發現市面上跳出一款Wings工具,據說1分鐘可以自動生成100萬行測試代碼,性能方面大大超越C++ test,就想著抽空來×

Google開源C++ 單元測試框架Google Test系列(gtest)之初始gtest

    下載           最新原始碼地址:https://github.com/google/googletest           V1.3和V1.

Spring整合JUnit4進行AOP單元測試的時候,報:"C:\Program Files\Java\jdk1.8.0_191\bin\java.exe" -ea -Didea.test.cyclic.buffer.size=1048576 "-javaagent:C

錯誤程式碼 "C:\Program Files\Java\jdk1.8.0_191\bin\java.exe" -ea -Didea.test.cyclic.buffer.size=1048576 "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA

玩轉Google開源C++單元測試框架Google Test系列(gtest)(總)

前段時間學習和了解了下Google的開源C++單元測試框架Google Test,簡稱gtest,非常的不錯。 我們原來使用的是自己實現的一套單元測試框架,在使用過程中,發現越來越多使用不便之處,而這樣不便之處,gtest恰恰很好的解決了。 其實gtest本身的實現並不複雜

Google開源C++單元測試框架Google Test系列(gtest)之斷言

     gtest中,斷言的巨集可以理解為分為兩類,一類是ASSERT系列,一類是EXPECT系列。一個直觀的解釋就是: ASSERT_* 系列的斷言,當檢查點失敗時,退出當前函式(注意:並非退出當前案例)。   EXPECT_* 系列的斷言,當檢查點失敗時,繼續往下

Google開源C++單元測試框架Google Test系列(gtest)之引數化

      在設計測試案例時,經常需要考慮給被測函式傳入不同的值的情況。我們之前的做法通常是寫一個通用方法,然後編寫在測試案例呼叫它。即使使用了通用方法,這樣的工作也是有很多重複性的,程式設計師都懶,都希望能夠少寫程式碼,多複用程式碼。      Google的程式設計師也

Google開源C++單元測試框架Google Test系列(gtest)之- 事件機制

gtest提供了多種事件機制,非常方便我們在案例之前或之後做一些操作。總結一下gtest的事件一共有3種: 全域性的,所有案例執行前後。 TestSuite級別的,在某一批案例中第一個案例前,最後一個案例執行後  TestCase級別的,每個TestCase前後。 全域

Gtest:死亡測試 玩轉Google開源C++單元測試框架Google Test系列(gtest)之五 - 死亡測試

轉自:玩轉Google開源C++單元測試框架Google Test系列(gtest)之五 - 死亡測試 一、前言 “死亡測試”名字比較恐怖,這裡的“死亡”指的的是程式的崩潰。通常在測試過程中,我們需要考慮各種各樣的輸入,有的輸入可能直接導致程式崩潰,這時我們就需要檢查程式是否按照預期的方式掛掉,這也就是所

Gtest:引數化 玩轉Google開源C++單元測試框架Google Test系列(gtest)之四 - 引數化

轉自:玩轉Google開源C++單元測試框架Google Test系列(gtest)之四 - 引數化 一、前言 在設計測試案例時,經常需要考慮給被測函式傳入不同的值的情況。我們之前的做法通常是寫一個通用方法,然後編寫在測試案例呼叫它。即使使用了通用方法,這樣的工作也是有很多重複性的,程式設計師都懶,都希望

玩轉Google開源C++單元測試框架Google Test系列(gtest)之一

一、前言本篇將介紹一些gtest的基本使用,包括下載,安裝,編譯,建立我們第一個測試Demo工程,以及編寫一個最簡單的測試案例。 二、下載如果不記得網址, 直接在google裡搜gtest,第一個就是。目前gtest的最新版本為1.3.0,從下列地址可以下載到該最新版本:三、

玩轉Google開源C++單元測試框架Google Test系列(gtest)之六

一、前言使用gtest編寫的測試案例通常本身就是一個可執行檔案,因此執行起來非常方便。同時,gtest也為我們提供了一系列的執行引數(環境變數、命令列引數或程式碼裡指定),使得我們可以對案例的執行進行一些有效的控制。二、基本介紹前面提到,對於執行引數,gtest提供了三種設定

[C++]初識google test--單元測試神器

初識google test gtest是google的一個開源專案,專門用來做單元測試的。學習難度不算非常的大,適用於多個平臺。主要就是使用斷言來判斷程式碼的正確性。 在google test這個github中可以下載gtest的原始碼,並且在檔案中有mak

玩轉Google開源C++單元測試框架Google Test系列(gtest)之五

一、前言 “死亡測試”名字比較恐怖,這裡的“死亡”指的的是程式的崩潰。通常在測試過程中,我們需要考慮各種各樣的輸入,有的輸入可能直接導致程式崩潰,這時我們就需要檢查程式是否按照預期的方式掛掉,這也就是所謂的“死亡測試”。gtest的死亡測試能做到在一個安全的環境下執行崩潰的

玩轉Google開源C++單元測試框架Google Test系列(gtest)之四

一、前言在設計測試案例時,經常需要考慮給被測函式傳入不同的值的情況。我們之前的做法通常是寫一個通用方法,然後編寫在測試案例呼叫它。即使使用了通用方法,這樣的工作也是有很多重複性的,程式設計師都懶,都希望能夠少寫程式碼,多複用程式碼。Google的程式設計師也一樣,他們考慮到了

google test 輕鬆編寫C++單元測試

簡介: googletest 與 googlemock 是 Google 公司於 2008 年釋出的兩套用於單元測試的應用框架,本文將向讀者介紹如何應用這兩套應用框架輕鬆編寫 C++ 單元測試程式碼。以下討論基於 gtest-1.2.1 及 gmock-1.0.0 。

Spring Boot的單元測試(Unit Test)

java spring boot unit test 最近做了一些Spring Boot單元測試方面的東西,總結一下。單元測試盡量要和Spring Boot框架減少耦合度,當你在測試某一項功能點是需要mock太多的對象時你就應該意識到這個功能點的耦合度太高了使用Constructor Inject