C++Test基於CCS的單元測試
C++Test基於CCS的單元測試
C++Test基於DSP CCS的測試,是將C++Test與CCS一起使用,無需進行特殊的整合。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的主要供商TI,ADI,Motorola,Lucent和Zilog等,其中TI佔有最大的市場份額。下面主要介紹TI的產品及分類:
1.TMS320C2000
TMS320C2000系列包括C24x和C28x系列。C24x系列建議使用LF24xx系列替代C24x系列,LF24xx系列的價格比C24x便宜,效能高於C24x,而且LF24xxA具有加密功能。 C28x系列主要用於大儲存裝置管理,高效能的控制場合。
2.TMS320C3x
TMS320C3x系列包括C3x和VC33,主要推薦使用VC33。C3x系列是TI浮點DSP的基礎,不可能停產,但價格不會進一步下調。
3.TMS320C5x
TMS320C5x系列已不推薦使用,建議使用C24x或C5000系列替代。
4.TMS320C5000
TMS320C5000系列包括C54x和C55x系列。其中VC54xx還不斷有新的器件出現,如:TMS320VC5471(DSP+ARM7)。 C55x系列是TI的第三代DSP,功耗為VC54xx的1/6,效能為VC54xx的5倍,是一個正在發展的系列。 C5000系列是目前TI DSP的主流DSP,它涵蓋了從低檔到中高檔的應用領域,目前也是使用者最多的系列。
5.TMS320C6000
TMS320C6000系列包括C62xx、C67xx和C64xx。此係列是TI的高檔DSP系列。其中C62xx系列是定點的DSP,系列晶片種類較豐富,是主要的應用系列。 C67xx系列是浮點的DSP,用於需要高速浮點處理的領域。 C64xx系列是新發展,效能是C62xx的10倍。
6.OMAP系列
是TI專門用於多媒體領域的晶片,它是C55+ARM9,效能卓越,非常適合於手持裝置、Internet終端等多媒體應用。
德州儀器(TI)公司現在主推四大系列DSP
1、C5000系列(定點、低功耗):C54X,C54XX,C55X 相比其它系列的主要特點是低功耗,所以最適合個人與行動式上網以及無線通訊應用,如手機、PDA、GPS等應用。處理速度在80MIPS-- 400MIPS之間。C54XX和C55XX 一般只具有McBSP同步串列埠、HPI並行介面、定時器、DMA等外設。值得注意的是C55XX提供了EMIF外部儲存器擴充套件介面,可以直接使用 SDRAM,而C54XX則不能直接使用。兩個系列的數字IO都只有兩條。
2、C2000系列(定點、控制器):C20X,F20X,F24X,F24XX ,C28x該系晶片具有大量外設資源,如:A/D、定時器、各種串列埠(同步和非同步),WATCHDOG、CAN匯流排/PWM發生器、數字IO腳等。是針對控制應用最佳化的DSP,在TI所有的DSP中,只有C2000有FLASH,也只有該系列有非同步串列埠可以和PC的UART相連。
3、C6000系列:C62XX,C67XX,C64X 該系列以高效能著稱,最適合寬頻網路和數字影像應用。32bit,其中:C62XX和C64X是定點系列,C67XX 是浮點系列。該系列提供EMIF擴充套件儲存器介面。該系列只提供BGA封裝,只能製作多層PCB。且功耗較大。同為浮點系列的C3X中的VC33現在雖非主流產品,但也仍在廣泛使用,但其速度較低,最高在150MIPS。
4、OMAP系列:OMAP處理器整合ARM的命令及控制功能,另外還提供DSP 的低功耗實時訊號處理能力,最適合移動上網裝置和多媒體家電。
其他系列的DSP曾經有過風光,但現在都非TI主推產品了,除了C3X系列外,其他基本處於淘汰階段,如:C3X的浮點系列:C30,C31,C32 C2X和C5X系列:C20,C25,C50
每個系列的DSP都有其主要應用領域.
五、DSP的開發:
本文仍以TI公司的產品為例,介紹DSP的開發。
1、TI DSP的硬體開發
1)根據應用所處領域選擇TI推薦的DSP型別
2)根據所選定的DSP之EVM板,DSK等原理圖,完成DSP系統的搭建(包括外擴記憶體空間、電源復位系統、各控制訊號管腳的連線、JTAG口的連線等);
3)根據需求,選擇外圍電路的擴充套件,一般如語音、視訊、控制等領域均有成熟的電路可以從TI網站得到。外圍電路與DSP的介面可參看EVM或 DSK,以及所選外圍電路晶片的典型介面設計原理圖;最好外圍電路晶片也選擇TI的,這樣的話不管硬體介面有現成原理圖、很多連DSP與其介面的基本控制原始碼都有。
4)地址譯碼、IO擴充套件等用CPLD或者FPGA來做,將DSP的地址線、資料線、控制訊號線如IS/PS/DS等都引進去有利於除錯。
FPGA是英文Field-Programmable Gate Array的縮寫,即現場可程式設計門陣列,它是在PAL、GAL、CPLD等可程式設計器件的基礎上進一步發展的產物。它是作為專用積體電路(ASIC)領域中的一種半定製電路而出現的,既解決了定製電路的不足,又克服了原有可程式設計器件閘電路數有限的缺點。FPGA採用了邏輯單元陣列LCA(Logic Cell Array)這樣一個新概念,內部包括可配置邏輯模組CLB(ConfigurableLogic Block)、輸出輸入模組IOB(Input OutputBlock)和內部連線(Interconnect)三個部分。
2、TI DSP的軟體開發
瞭解目標版的電路設計,包括程式、資料、I/O空間的譯碼。DSP的CPU,memory,program memory addressing, data mem.oryaddressing的資料.熟悉以下技術的要點:
1)CCS的使用
2)CMD檔案的編寫
3)中斷向量表文件的編寫及定位
4)執行一個純simulator的程式,瞭解CCS的各個操作
5)到TI網站下載相關的原始碼,參考原始碼的結構進行程式設計
六、CCS的特點及使用:
CCS(Code Composer Studio)程式碼偵錯程式是一種合成開發環境,是TI公司推出的整合視覺化DSP軟體開發環境。它是一種針對標準TMS320偵錯程式介面的互動式方法。
CCS內部集成了以下軟體工具:
l DSP程式生成工具(包括C編譯器、優化器、彙編器和聯結器)
l 軟體專案開發工具(包括程式碼編輯、專案建立、線上除錯、線上資料觀察等工具)
l 實時多執行緒核心DSP/BIOS(使用DSP/BIOS核心能夠開發出多執行緒應用程式)
l 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的特點。
1、TI編譯器的完全整合的環境:
CCS5000目標管理系統,內建編輯器,所有的除錯和分析能力整合在一個Windows環境中。
2、對C和DSP彙編檔案的目標管理:
目標編輯器保持對所有檔案及相關內容的跟蹤。它只對最近一次編譯中改變過的檔案重新編譯,以節省編譯時間。
3、高整合的編輯器調整C和DSP彙編程式碼:
CCS5000的內建編輯器支援C和彙編檔案的動態語法加亮顯示。使使用者能很容易地閱讀程式碼和當場發現語法錯誤。
4、編輯和除錯時的後臺編輯:
使用者在使用編譯器和彙編器時沒有必要退出系統到DOS環境中,因為CCS5000會自動將這些工具裝載在它的環境中。在其視窗中,錯誤會加亮顯示只要雙擊錯誤就可以直接到達出錯處。
5、在含有浮點並行除錯管理器(PDM)的原有的MS視窗下支援多處理器CCS5000在 Windows95和Windows-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/Fre的quency(時域/頻域圖)、Constellation(星座圖)、Eye Diagram(眼圖)、Image(二維影象),使用圖形方式觀察DSP儲存器中的資料。
八、C++Test基於DSP CCS3.X的單元測試
對CCS專案進行單元測試,選擇測試工具時,必須瞭解測試工具對CCS和晶片不同版本的支援程度,以C++Test為例,針對不同的CCS版本,C++Test也提供不同的安裝包。如果CCS是3.3以下版本(包含3.3),需要安裝C++Test的獨立版,如果是CCS是3.3以上版本,則需要安裝C++Test外掛版,外掛版可以整合到CCS開發環境中(作為一個選單項),使用方法跟獨立版基本相同。C++Test對TI晶片的支援環境如下:
獨立版支援下面的編譯器/環境版本:
· 德州儀器的 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