劉智勇
摘要:近年來,隨著科技的不斷發(fā)展與進(jìn)步,所用的開發(fā)語言也不斷增多,但是c語言作為最基礎(chǔ)的機(jī)器語言,自然有其自身不可替代的優(yōu)勢。c語言是一種極為高級的編程語言,簡單易學(xué),并且易于使用。c語言在開發(fā)過程中,效率極高,調(diào)試方便,它有其自身的高可靠性和可移植性好,使得它在進(jìn)行DSP程序設(shè)計時極為便利。所以,在進(jìn)行開發(fā)DSP系統(tǒng)時,大多采用c語言作為主要的編程語言。在DSP系統(tǒng)上使用c語言編程,可以簡化設(shè)計方法,提高系統(tǒng)的集成性,節(jié)約開發(fā)與設(shè)計成本,因此會越來越流行。
關(guān)鍵詞:c語言;DSP程序;集成性;設(shè)計研究
DSP系統(tǒng)對計算的實時性和準(zhǔn)確性要求較高,因此它在實時和準(zhǔn)實時系統(tǒng)中應(yīng)用廣泛。DSP自身具備的片內(nèi)結(jié)構(gòu),可以對信號進(jìn)行處理。另外DSP專門為系統(tǒng)的數(shù)字處理設(shè)計專門的指令系統(tǒng),用以快速執(zhí)行信號處理。眾所周知,匯編語言開發(fā)DSP系統(tǒng)一直存在諸多缺陷,隨著DSP應(yīng)用的逐步深入,這種缺陷更加突出。因此采用C語言編程,來解決突出的問題。C語言是高級開發(fā)語言,具備高效、靈活等特點,可以解決匯編語言開發(fā)過程中遇到的難度大,周期長,維護(hù)性差等缺點。在利用C語言編程的時候,利用算法結(jié)構(gòu)來優(yōu)化程序流程,提高算法大的執(zhí)行速度,提高其運行效率,滿足實時性的要求,保障系統(tǒng)的可靠運行。
1C語言的基本結(jié)構(gòu)
完整的C應(yīng)用程序是由主函數(shù)和子函數(shù)組成,每一個子函數(shù)都有其自身的功能,在DSP、系統(tǒng)中,c語言的入口地址固定為c_int00,并且在rts.1ib中定義。C語言有著豐富的數(shù)據(jù)類型和數(shù)據(jù)結(jié)構(gòu)。我們知道,在CCS集成開發(fā)環(huán)境中,它為其提供了完整的硬件支持,包括底層函數(shù)庫和DSP算法函數(shù)庫。
通常來說,C英語程序至少要包含幾個重要的文件,其一,作為C程序入口點的main0函數(shù)的C語言源文件,也就是.c文件,它必須存在而且唯一,其主要作用是在等待系統(tǒng)庫初始化完畢之后,將控制權(quán)交給mainf)函數(shù);其二,定義DSP和目標(biāo)板的存儲空間,另外指明這些代碼段、數(shù)據(jù)段的存儲方式;其三,運行庫文件rts.1ib。一個完整的編譯器需要具備初始化環(huán)境,設(shè)置堆棧,還有提供標(biāo)準(zhǔn)c的庫函數(shù)等功能,而運行庫文件rts.1ib便提供了上述這些功能,方便開發(fā)。
用戶所編寫的程序要寫進(jìn)ROM存儲器,并且需要上電后才能直接運行,其中需要注意的是,這里面需要包含中斷向量表文件。所謂中斷向量表文件一種.asm形式的匯編文件,是執(zhí)行指令的地址。其地址主要是被鏈接器命令文件準(zhǔn)確定位在DSP復(fù)位后的一個地址。
一般C程序的基本結(jié)構(gòu)
#include“函數(shù)庫”//語句定義程序中使用的函數(shù)庫對應(yīng)的.h文件
#define宏替換名替換內(nèi)容//定義程序中所有的宏替換
函數(shù)類型函數(shù)名(函數(shù)參數(shù)列表)//內(nèi)部函數(shù)聲明
interrput void functio~name(void);//中斷服務(wù)程序聲明
變量類型全局變量名;//全局變量聲明
void main(void)//主函數(shù)mainf)
{函數(shù)類型函數(shù)名(函數(shù)參數(shù)列表)//內(nèi)部函數(shù)聲明
//函數(shù)的局部變量定義
//函數(shù)的算法}
C語言的數(shù)據(jù)類型也非常豐富,比如字符型、長/短整型,浮點型、枚舉型、指針等,DSP是16位的處理器,它的字符長度是16位,這里要特別注意各種數(shù)據(jù)類型的長度、內(nèi)容和表示的數(shù)值范圍大小。DSP的c語言編譯器具備良好的通用性,因此短整型和整型的數(shù)據(jù)類型是一樣的,浮點型、雙精度浮點型和長雙精度浮點型是一致的,在實際開發(fā)應(yīng)用中,通常將數(shù)據(jù)類型簡化,比如短整型和整型統(tǒng)一為im類型,而浮點類型的各種類型都統(tǒng)一為float。
2C語言實現(xiàn)DSP程序的設(shè)計過程
2.1中斷向量表的定位
所謂中斷向量,就是中斷服務(wù)程序地址。它需要裝載到存儲設(shè)備中去,一般情況下這些向量都被定位在0x0開始的程序存儲器中去,但是這樣的情況并不是特定的,有些也可以存儲在其他區(qū)域,比如微處理器模式下的TMS320系列就是如此。它的中斷服務(wù)程序地址定位就是在0x0開始的地址,另外6它還可以將中斷服務(wù)程序地址定位于OxffaO和Ox809fel。中斷服務(wù)程序地址也可以定位于任何2k字的程序存儲器中。PMST寄存器的IPTR與中斷向量表的定位有關(guān),一般來說,中斷向量表的有效基地址是0x0,……,Ox2000等等。
2.2實現(xiàn)方法
C語言開發(fā)過程中,對于中斷向量表的初始化有很多種辦法,但是都有不可忽視的缺陷,因此在進(jìn)行開發(fā)和調(diào)試的時候,需要特殊的辦法。這種辦法的主要目的是為了提高DsP系統(tǒng)的運行效率,提高DsP系統(tǒng)的運行效率,增強(qiáng)其開放性、靈活性和可維護(hù)性,彌補C語言開發(fā)的缺陷。其主要的原理是在C語言中建立一個運行的向量表,這個表要在C語言進(jìn)行中斷服務(wù)程序地址的裝載前期建立完成,代碼簡單,操作也非常方便,實現(xiàn)的辦法也有很多,常用的有以下兩種: