朱業(yè)騰
(中國船舶重工集團公司第七二三研究所,江蘇揚州,225000)
基于DSP環(huán)境下C語言的編程優(yōu)化
朱業(yè)騰
(中國船舶重工集團公司第七二三研究所,江蘇揚州,225000)
DSP作為一項新型技術(shù),具有實時、準時等優(yōu)勢,在此類系統(tǒng)中,能夠運用合理的片內(nèi)結(jié)構(gòu),實現(xiàn)對數(shù)字信號的專門性處理,提高信號處理有效性。但隨著DSP應(yīng)用范圍愈發(fā)廣泛,匯編語言程序可讀性、可移植性等缺陷逐漸暴露出來,且匯編語言是非結(jié)構(gòu)化語言,對于大型的結(jié)構(gòu)化程序設(shè)計難以勝任,要求我們采用更為高級的語言完成該項工作。相比較現(xiàn)有匯編語言,C語言無疑是最為高效和靈活的,如何在DSP環(huán)境下實現(xiàn)對C語言編程優(yōu)化受到了廣泛關(guān)注。文章將從DSP的特點出發(fā),深入分析在DSP環(huán)境下C語言編程的優(yōu)化措施,希望對DSP平臺完善提供參考。
DSP環(huán)境;C語言;編程優(yōu)化
相比較單片機,DSP多用于算法較為復(fù)雜、乘加運算量較大的通信、雷達及音視頻處理等方面。為了追求高效的代碼,一般主要采用匯編語言編寫DSP程序。隨著DSP應(yīng)用范圍不斷拓展,匯編語言程序在可讀性等方面無法滿足實踐應(yīng)用需求,故積極引入了C語言,有效解決上述問題。但在實踐中,C語言編程在細節(jié)上還存在諸多不足,有待進一步完善和優(yōu)化,提高程序應(yīng)用價值。
所謂DSP,是以電子信息技術(shù)為核心的數(shù)字信號處理,其基本概念、分析方法與信息、電路及生物醫(yī)學(xué)等相互滲透和融合。信息時代背景下,對于數(shù)字信號問題的處理存在于人們生活和工作當(dāng)中[1]。DSP誕生于上個世紀八十年代,在通信與信息系統(tǒng)、自動控制及雷達等多個領(lǐng)域得到了應(yīng)用。
2.1 數(shù)據(jù)類型
標準C語言能夠提供豐富的數(shù)據(jù)類型整型、浮點及指針等。從根本上來看,編程面對的問題,是如何將數(shù)據(jù)類型編譯成為生成的代碼小、效率高。對于整型而言,其具有signed與unsigned區(qū)別,由于缺少統(tǒng)一的標準和規(guī)范,這些模糊定義直接影響程序由一個處理器向另一個處理器轉(zhuǎn)移。為了避免此類影響,在編程過程中,可以根據(jù)數(shù)據(jù)類型重新定義文件。在編程中,對于浮點的使用存在一定風(fēng)險,除非系統(tǒng)具備專門的浮點設(shè)計處理器,否則將會存在很多不確定性??紤]到DSP常用可變定位方式,如果忽視對結(jié)構(gòu)的處理,會浪費大量RAM與ROM空間。
2.2 數(shù)值操作優(yōu)化
對于C語言編程優(yōu)化,需要加強對數(shù)值操作的優(yōu)化,從如下幾個方面入手:一是利用比特移位操作,借助全新的方式,取代2次冪整數(shù)乘除法運算,能夠取得更好效果。二是利用查表法,尤其是在FFT程序中,可以將一些運行時計算的參數(shù)視為查找表,進行編譯計算,以此來提高運算有效性。三是當(dāng)出現(xiàn)浮點設(shè)備時,要進一步明確數(shù)據(jù)類型,以此來緩解定點單位負擔(dān)。四是避免數(shù)值上下溢出,除非是算法本身需求。通過對數(shù)值的優(yōu)化,能夠優(yōu)化編程程序,提高編程有效性。
2.3 變量定義優(yōu)化
C語言能夠?qū)⒕植孔兞糠诺蕉褩V?,此類訪問為間接性,故整體速度較為緩慢。在優(yōu)化中,更為高效的方法是將變量放在堆中,通過兩種方法來實現(xiàn)。具體來說,一是聲明為全局變量;二是聲明變量為static,值得注意的是,在編程中要加強對全局變量利用率的提升。針對需要多次重復(fù)訪問的for等變量,要設(shè)置為register變量,以此來提高編程效率,為工程師提供更多支持[2]。
2.4 調(diào)用函數(shù)
調(diào)用函數(shù)會產(chǎn)生大量代碼,當(dāng)C調(diào)用一個函數(shù)時,需要將參數(shù)傳遞到寄存器中。據(jù)此,如果函數(shù)參數(shù)不斷增加,那么會在很大程度上增加調(diào)用開銷。同時,還需要大量堆棧空間,最壞的情況是函數(shù)參數(shù)所傳遞的是結(jié)構(gòu),編譯器在調(diào)用過程中,要將整個結(jié)構(gòu)轉(zhuǎn)移到堆棧當(dāng)中。上述過程會增加諸多成本,為此,要禁止結(jié)構(gòu)傳遞,可以利用結(jié)構(gòu)指針取代,以此來減少成本,提高編程有效性[3]。除了上述開銷外,還存在局部變量與返回值。如果需要返回值,需要在函數(shù)返回前,復(fù)制返回值,將其放置到指定位置,并將結(jié)果復(fù)制到調(diào)用程序當(dāng)中。針對C++開發(fā)用戶來說,采用inline技術(shù)能夠完全消除函數(shù)調(diào)用開銷,但采取該項措施,會增加目標代碼的大小。
2.5 程序流程設(shè)計
在C語言中,程序流程控制主要有else、case、do等,合理選擇控制方式對于代碼生成效率與大小存在直接聯(lián)系。針對具體控制語句的選擇,可以考慮以下幾個方面:首先,選擇控制語句時要減少判斷轉(zhuǎn)移。在DSP環(huán)境中,流水線結(jié)構(gòu)較為常見,如TMS320C54X中,采用了6級流水線結(jié)構(gòu),但受到頻繁轉(zhuǎn)移,在很大程度上影響流水線積極作用。如果面臨著多項選擇,switch、case語句具有較強的可讀性,但其會帶來更多的開銷。而if、else語句更為靈活,但它需要更多的C代碼。
在DSP環(huán)境中,利用C語言開發(fā)能夠縮短開發(fā)周期,提高程序開發(fā)有效性,使得程序的可讀性等優(yōu)勢更加突出,增強系統(tǒng)適用性。針對程序開發(fā)全過程來看,本文從流程、函數(shù)調(diào)用及數(shù)值操作等角度入手,通過對C語言編程和優(yōu)化,能夠顯著提高編程有效性。隨著實時操作系統(tǒng)、嵌入式操作系統(tǒng)的不斷引入,及DSP平臺日益完善,利用C語言實現(xiàn)對DSP的應(yīng)用將變得更為便利。
[1]陳川,閆昆,劉小劍,張坤.多核DSP供電設(shè)計及其環(huán)境適應(yīng)性分析[J].電子器件,2017,40(03):577-580.
[2]張浩宇,徐建軍,張南.JPEG2000的MQ模塊在DSP環(huán)境下的優(yōu)化實現(xiàn)[J].軟件,2016,37(09):130-134.
Programming optimization of C language based on DSP environment
Zhu Yeteng
(The 723 Research Institute of China Shipbuilding Industry Corp,Yangzhou Jiangsu, 225000)
DSP is a new technology, has the advantages of real-time, time and other advantages, in such a system, can use reasonable internal structure, special realization of digital signal processing, signal processing to improve the effectiveness of But with the increasingly widespread application of DSP,assembly language program readability, portability and other defects gradually exposed, and the assembly language is non structured language for structured programming is difficult for large, we should adopt more advanced language to complete the work. Compared to the existing assembly language, C language is undoubtedly the most efficient and flexible, and how to achieve the optimization of C programming in the DSP environment has
widespread attention This article will start from the characteristics of DSP,in-depth analysis of the DSP environment in C programming language optimization measures, hoping to provide some reference for the improvement of the DSP platform
DSP environment; C language; programming optimization