1.引言
ADSP-TS201是ADI公司推出的新一代高性能浮點(diǎn)DSP,如何在有限的時(shí)間內(nèi)采用編程語言進(jìn)行進(jìn)行算法實(shí)現(xiàn)并使程序效率盡量滿足實(shí)時(shí)性要求是一項(xiàng)值得研究的問題。
目前在DSP平臺上,編程多是混合使用匯編語言和C語言的,匯編語言簡潔高效,能夠直接操作DSP的內(nèi)部寄存器、存儲空間、外設(shè),但可讀性、可修改性、可移植性較差;而C語言是一種較為高效的高級語言,在可讀性、可移植性方面優(yōu)于匯編指令。因此有必要根據(jù)DSP的特性對C語言編寫的程序進(jìn)行進(jìn)一步的優(yōu)化,或者使用C和匯編的混合混編方法。
2.基于TS201的C/C++常用優(yōu)化方法
(1)使用16位和8位數(shù)據(jù)類型。
(2)靜態(tài)初始化常量。
(3)在內(nèi)部循環(huán)中做盡量多的處理工作。
(4)循環(huán)中避免使用條件指令,條件指令會打斷循環(huán)的流水,并且條件判決結(jié)論和編譯器預(yù)先估計(jì)的不一樣,就會有很長的等待開銷。
(5)用移位來代替除法,除法需要調(diào)用函數(shù),且代價(jià)也相當(dāng)高,當(dāng)除數(shù)是2的冪次時(shí),編譯器會使用執(zhí)行速度更高的移位操作來代替除法。
3.C/C++和匯編混合編程方法
C/C++語言和匯編語言混合編程的具體方法有以下兩種,這兩種方法實(shí)現(xiàn)的關(guān)鍵都是要遵守ADSP-TS201 編譯器C/C++運(yùn)行時(shí)模型所做的規(guī)定。
3.1 在C/C++中嵌入?yún)R編
在C/C++程序中嵌入?yún)R編asm()命令,直接寫出匯編語句,不需要知道哪個(gè)寄存器或存儲器包含C變量。其語法格式是:
asm(模板
:限制語句(輸出操作數(shù))[,限制語句(輸出操作數(shù))]
:限制語句(輸入操作數(shù))[,限制語句(輸入操作數(shù))]
:選中寄存器);
模板:模板是包含“%數(shù)字”的匯編指令的一串字符,用來說明編譯器在哪個(gè)位置替代操作數(shù)。操作數(shù)按從左到右的順序被編號,編號的范圍是%0,%1…%9。多個(gè)操作數(shù)用分號“;”隔開,整個(gè)語句包含在雙引號“”里。
限制語句:限制語句是一個(gè)字符串,用來指示編譯器對輸出和輸入操作數(shù)使用特定的寄存器組。“=限制語句”里的“=”說明操作數(shù)是輸出,所有的輸出操作數(shù)限制語句前必須加“=”。
選中寄存器:選中寄存器用小寫字母寫,每個(gè)寄存器名都用雙引號“”括起來,不同的寄存器中間用逗號“,”隔開,每個(gè)選中的寄存器都要出現(xiàn)在這里。
調(diào)用C子程序,使用的總時(shí)鐘數(shù)和子程序時(shí)鐘數(shù)分別是52872和520216。調(diào)用匯編子程序,使用的總時(shí)鐘數(shù)和子程序時(shí)鐘數(shù)分別是168537和160050。
4.結(jié)束語
本文介紹了基于ADSP-TS201平臺的代碼優(yōu)化方法——C優(yōu)化方法和混合匯編方法。由示例可以看出,這兩種方法都可以提高程序運(yùn)行效率。
參考文獻(xiàn)
[1]劉書明,蘇濤,羅軍輝.TigerSHARC DSP應(yīng)用系統(tǒng)設(shè)計(jì)[M].電子工業(yè)出版社,2004,5.
[2]VisualDSP++ 4.5 C_C++ Compiler and Library Manual for TigerSHARC Processors,2005:50-159,300-311,328-333,347- 389.
[3]VisualDSP++ 4.5 User’s Guide.
[4]ADSP_TS201s Programming Reference.