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