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