段紅英
摘 要:隨著DSP技術的快速發(fā)展,其應用程序的開發(fā)引起了更多人的關注。本文探討了在主流的CCS環(huán)境下進行DSP程序開發(fā)的一般流程,并通過一個實例給出了用C語言編寫的DSP應用程序在實際運行過程中無法得到有效輸出的問題及解決方案。
關鍵詞:CCS;DSP;CMD文件
1 引言
DSP一般認為有兩種含義,一種是指DSP器件(Digital Signal Processor),另外一種是指DSP技術(Digital Signal Processing),下文提到的均為第一種含義。伴隨全球信息化進程的不斷推進使得人們對于信息處理的需求更加迫切,相應的推動了計算機技術、電子技術等學科的進步,越來越多的領域開始借助于DSP實現(xiàn)高速的數(shù)據(jù)處理、有效的設備控制等功能 [1]。DSP實際上是在對硬件設備進行必要的設置后通過軟件編程的方法控制硬件進行操作和處理的,因此,一個DSP程序如何進行設計就變得非常重要。
2 DSP程序的開發(fā)及運行
DSP程序的開發(fā)需要一定的編程語言和開發(fā)環(huán)境, CCS(Code Composer Studio)是TI公司推出的DSP集成開發(fā)平臺,該平臺集成了編輯、編譯連接、調(diào)試及仿真等功能,支持匯編、C語言,并提供多種實時分析和編程方法,是目前功能最全的DSP開發(fā)平臺[2]。配合DSP的代碼生成和代碼調(diào)試等開發(fā)工具,我們可以在CCS下完成一個基本的DSP程序的設計。
2.1 DSP程序的開發(fā)流程
一般來講,一個DSP程序的設計運行需要經(jīng)過以下的操作流程:
⑴建立工程文件。
⑵編輯源文件、命令文件,庫文件等。源文件可以采用C語言或匯編語言或者二者混合進行編輯,它是實現(xiàn)DSP程序功能的主體。CMD文件指定存儲分配。庫文件包含需要的一些系統(tǒng)函數(shù)或者數(shù)據(jù)定義。
⑶編譯鏈接源程序,生成目標代碼程序和可執(zhí)行程序。盡管采用C語言會匯編語言作為編程語言,DSP程序的目標及可執(zhí)行文件有其特有的格式設置,一般是COFF目標文件和COFF可執(zhí)行文件。
⑷下載執(zhí)行程序,觀測運行結(jié)果。在程序編譯好運行之前,需要將其載入目標扳。CCS的連接器輸出的目標文件的后綴為.OUT。每次程序改動之后,都要進行重新編譯和載入[4]。
2.2 DSP程序開發(fā)運行的要點
DSP程序區(qū)別于一般的匯編語言程序或C語言程序,在開發(fā)過程中有幾點非常關鍵:
⑴在遵循基本的編程語法和規(guī)則的基礎上,充分考慮DSP器件的特點。實際應用中需要大量的硬件設置,這些都要通過軟件方式實現(xiàn)。其中,最關鍵的就是相關寄存器的操作,通過寄存器值的設置或讀取,可以完成對很多硬部件的操作設定也就是DSP需要使用的功能的設計或設備工作狀態(tài)的判定。因此,學會熟練的操作寄存器是DSP程序設計成功與否的關鍵。而DSP器件本身型號多種多樣,不同系類的芯片也有很大的區(qū)別,所以一定要細心。
⑵熟悉相應的開發(fā)芯片的基本特征。一款DSP芯片上包含很多的部件,這些部件的有機配合完成了最終程序功能的實現(xiàn)。其中CMD文件的編寫對于整個程序的順利執(zhí)行至關重要,因為所有的DSP程序最終都需要在DSP芯片的內(nèi)部存儲器上存儲并最終運行,而DSP芯片的存儲是有限的,因此,必須對程序中所涉及到的代碼和數(shù)據(jù)給出準確的存儲映射,這樣程序存儲執(zhí)行時才能有條不紊的進行。
⑶仿真實現(xiàn)的重要性。既然是通過軟件的方式操縱硬件,在設計階段,我們必須借助于仿真對程序進行測試,因此仿真器的使用非常關鍵,有了它,計算機和DSP芯片間能實現(xiàn)有效的溝通,設計出的程序才更準確。
3 C語言編寫的DSP程序?qū)嵗?/p>
3.1 DSP下C的特點
DSP下的C語言有著其自身的特點:
⑴DSP的C語言是標準的ANSIC,它不包括同外設聯(lián)系的擴展部分,如屏幕繪圖等。但在CCS中,為了方便調(diào)試,可以將數(shù)據(jù)通過printf函數(shù)的調(diào)用虛擬輸出到主機的屏幕上。
⑵DSP的C語言的編譯過程為,C編譯為ASM,再由ASM編譯為OBJ。因此C和ASM的對應關系非常明確,非常便于人工優(yōu)化。
⑶DSP的代碼需要絕對定位;主機的C的代碼有操作系統(tǒng)定位。
⑷DSP的C的效率較高,非常適合于嵌入系統(tǒng)。
3.2 一個例子
正因為標準的C語言和DSP下的C語言使用有所區(qū)別,因此在運行過程中會出現(xiàn)一些問題,下面以安裝F2812開發(fā)板的瑞泰創(chuàng)新實驗系統(tǒng)作為程序開發(fā)對象,在CCS2.2環(huán)境下給出一個簡單的C語言程序的運行給出說明,該程序?qū)崿F(xiàn)簡單的數(shù)據(jù)輸出,且在TURBORC下調(diào)試通過,運行得到正確結(jié)果,程序命名為Cprogram,全文如下:
#include "stdio.h"
main()
{ printf("Hello C-world?。躰");
printf(" ****\n");
printf(" *\n");
printf(" * \n");
printf(" ****\n");}
將這一程序移植到CCS下,建立同名的工程,CMD文件,選擇庫文件后進行編譯鏈接,結(jié)果出現(xiàn)兩個警告,程序得不到輸出結(jié)果。這也是大部分學生在編寫了DSP程序后編譯時出現(xiàn)的警告信息。警告信息如下:
"CProgram.c", line 7: warning: last line of file ends without a newline
warning: creating output section .cio without SECTIONS specification
⑴警告信息的消除。第一個警告是因為DSP下的C程序最后一行必須是空行,因此在源程序最后一行末尾按回車鍵換到下一行即可。第二個警告是因為包含stdio.h中函數(shù)的.cio段在命令文件中未定義,將其加上后再編譯,所有的警告消除,但程序仍然不顯示結(jié)果。
⑵程序輸出的顯示。DSP下的printf函數(shù)非常占資源的指令,它的順利執(zhí)行需要棧(heap)的設置,因此,在命令文件中需要將-heap大小設為400h。此外,由于本例中要使用庫文件,最初設定的是rts2800.lib,但是仔細考慮后發(fā)現(xiàn)rts2800.lib和rts2800_ml.lib有較為明顯的應用區(qū)別,盡管都支持C/C++運行支持庫,但rts2800_ml.lib支持的是大內(nèi)存模式且在指針訪問區(qū)間上更占有是,因此將庫文件替換為rts2800_ml.lib后程序再經(jīng)過編譯鏈接下載運行后得出了最終的輸出。
4 結(jié)論
DSP程序的開發(fā)是一項復雜的工作,相比傳統(tǒng)的程序設計需要考慮的東西更多,更全面,因此,在學習中要堅持謹慎、細心,把握好每個細節(jié),再能更好的完成特定功能的DSP程序開發(fā)。
[參考文獻]
[1]王忠勇,陳恩慶.TMS320F2812DSP原理與應用技術[M].電子工業(yè)出版社,2012:1-9.
[2]何望春,蔡衛(wèi)平.CCS仿真軟件中的文件輸入輸出方法[J].中國科技信息,2012(2).
[3]周德卿.CCS集成環(huán)境下C與匯編的混合編程實現(xiàn)[J].微電子技術,2002(4).
[4]李建國.基于CCS的DSP軟件開發(fā)方法[J].海軍航空工程學院學報,2002(7).