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