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