使用C/C++語言編寫基于DSP程序的注意事項#e#使用C/C++語言編寫基于DSP程序的注意事項
技術(shù)菜鳥必學(xué):DSP工程師多年技術(shù)經(jīng)驗分享
發(fā)布時間:2015-01-24 責(zé)任編輯:sherryyu
【導(dǎo)讀】看到許多朋友對DSP的開發(fā)非常感興趣,本文小編給大家分享的是一位從事DSP開發(fā)好多年了的工程師的一些經(jīng)驗。該篇文章筆者結(jié)合這幾年對DSP的開發(fā)寫一寫自己的感受,一家之言,歡迎指教。
我是已經(jīng)從事DSP開發(fā)有幾年了,看到許多朋友對DSP的開發(fā)非常感興趣,我結(jié)合這幾年對DSP的開發(fā)寫一寫自己的感受,一家之言,歡迎指教。我上研究生的第一天起根據(jù)老板的安排就開始接觸DSP,那時DSP開發(fā)在國內(nèi)高校剛剛開始,一臺DSP開發(fā)器接近一萬還是ISA總線的,我從206開始240、2407A都作過產(chǎn)品,對5402、2812、5471在產(chǎn)品方案規(guī)劃制定和論證時也研究過。由于方向所限對6X、8X系列沒有接觸。
我發(fā)現(xiàn)在國內(nèi)無論在公司或高校許多地方為了加快開發(fā)周期往往把一個產(chǎn)品開發(fā)分為硬件和軟件兩個相對獨立部分,由不同的人完成。這在具有一定技術(shù)和管理基礎(chǔ)的公司,由總設(shè)計師統(tǒng)一規(guī)劃協(xié)調(diào),分任務(wù)并行完成的情況下是可行的,也是符合現(xiàn)代產(chǎn)品開發(fā)規(guī)律的。但是在高校人員的流動很大,研究生的有效科研時間很短、基礎(chǔ)差(許多研究生起步時對電熔、電阻、三極管的分類和選型都很困難,我也是這樣過來的)更不用說系統(tǒng)規(guī)劃設(shè)計了,況且許多老板自己也不太懂,師兄有自己的任務(wù),他們搞明白時也畢業(yè)了。在許多高校做DSP就是找一個算法加到自己的主程序里,在板子上跑一下,基本達(dá)到效果就可以了,至于可靠性是次要的,產(chǎn)業(yè)化無從談起,這已經(jīng)算不錯的了。
其實我覺得一個系統(tǒng)的完成,系統(tǒng)的規(guī)劃是最重要的,在規(guī)劃時對硬件設(shè)計的知識和認(rèn)識是決定性的,它可以讓你知道什么是可行的,什么是不可行的,當(dāng)你同時具有軟件設(shè)計能力時,就可以合理的分配系統(tǒng)功能,完成使用VHDL進(jìn)行系統(tǒng)行為描述-—系統(tǒng)功能劃分—— 系統(tǒng)子結(jié)構(gòu)設(shè)計這樣的自頂向下的設(shè)計規(guī)劃流程,成為系統(tǒng)設(shè)計專家、項目經(jīng)理,否則只是硬件工程師、軟件工程師。無論作51、196、還是DSP都是這樣。
下面分別談?wù)勎覍τ布蛙浖O(shè)計的感受
硬件設(shè)計是系統(tǒng)設(shè)計的關(guān)鍵,國內(nèi)和國外產(chǎn)品的差距往往是硬件設(shè)計水平高低決定的,任何軟件設(shè)計思想沒有可靠的物理載體都是空中樓閣,紙上談兵。學(xué)校的研究生很多都想避開硬件設(shè)計,對于一個全新的設(shè)計與其說不屑不如說不敢。試想一下燒幾個片子的壓力要比跑飛幾段程序的壓力大的多,尤其是功率器件,一旦燒掉,弄不好火光沖天,人的自信都沒了。況且改一次板周期長,經(jīng)費高,還不知行不行。其實在國外實力一般的公司也是盡量避免硬件的更新設(shè)計,產(chǎn)品一旦定型往往通過軟件升級,這是公司的發(fā)展策略,對個人而言物以希為貴,培養(yǎng)一個硬件設(shè)計師往往要比軟件設(shè)計師時間長花費多。在設(shè)計dsp硬件時,開始設(shè)計最小系統(tǒng)板,系統(tǒng)按功能分板設(shè)計調(diào)試,注意分板電路的穩(wěn)定性可能不如整板電路,要多加入抗干擾環(huán)節(jié),分板間的引線包括電源線地線要短,盡量在10公分以內(nèi),實在不行加入光耦隔離、采用隔離電源。切記電源線、地線的干擾遠(yuǎn)比信號干擾對系統(tǒng)的危害大得多,又常常被人忽視。電路板工作正常的先決條件就是電源正常!當(dāng)分板電路正常后再更居情況設(shè)計整板電路。在調(diào)試時發(fā)現(xiàn)的問題一定要找到原因解決,即使是飛線,割線,不要寄希望于下一板改了再看,除非原理性錯誤。每一個功能環(huán)節(jié)多準(zhǔn)備幾套方案。DSP的選型要根據(jù)系統(tǒng)功能而定,2000是一個功能比較全的控制器,但運算性能相對低,但目前大部分控制類、家電類包括中低層次的工業(yè)總線通信產(chǎn)品足夠了,281X不錯但太貴,而且開發(fā)技術(shù)不成熟。54XX更像一個協(xié)處理器,其實高端產(chǎn)品5471就很好,功能完*,但BGA封裝對產(chǎn)品的開發(fā)有一定難度。如果沒有從事過嵌入式系統(tǒng)開發(fā)的朋友其實可以從51看起,許多思想是共通的,51很經(jīng)典沒有哪一款微處理器像51那樣使用持久和普遍。在硬件設(shè)計時更多的精力放在外圍電路設(shè)計上,外圍電路設(shè)計的靈活性要比DSP本身高得多,難度大得多。建議多考慮CPLD。
軟件設(shè)計上,著眼點不要僅局限于某種算法和控制策略,而是軟件系統(tǒng)框架的制定,即操作系統(tǒng)的選擇和實現(xiàn),算法和控制策略只是其中技巧性很強(qiáng)的子程序和子程序間參數(shù)相互關(guān)系,建議設(shè)計軟件時能具有操作系統(tǒng)、數(shù)據(jù)結(jié)構(gòu)和編譯原理方面的知識,特別是使用C。對DSP的內(nèi)部硬件結(jié)構(gòu)一定要掌握,特別是中斷結(jié)構(gòu)和流程、流水線操作,不然飛都不知道怎么飛的。在語言選擇上我當(dāng)時是這么給自己規(guī)定的先編20個左右的匯編程序,每個代碼量超過4K,使用語句范圍覆蓋全部語句的60%-70%,在此基礎(chǔ)上使用C。現(xiàn)在發(fā)現(xiàn)用C構(gòu)建程序的主體框架(操作系統(tǒng))比較快而其不容易出錯,(我現(xiàn)在正在用ASM根據(jù)UCOSII的思想重寫自己的操作系統(tǒng))但對系統(tǒng)實時性影響比較大的運算算法一般采用MATLAB——C——ASM的辦法仿真調(diào)試優(yōu)化,這里的優(yōu)化不單單是利用優(yōu)化器優(yōu)化,而是根據(jù)數(shù)據(jù)的特點改變運算方法,以除法為例C里的/號其實掩蓋了許多技巧,當(dāng)除數(shù)為常數(shù)時就可以放大倒數(shù)移位相乘移位的辦法進(jìn)行,精度高速度快。這些辦法只有掌握了ASM語言并用ASM語言思考才會熟練應(yīng)用。另外我想告訴一些作算法特別是控制算法的朋友,千萬不要隨意評判一個算法的優(yōu)劣,在程序中程序和代碼優(yōu)化的程度往往影響了控制效果好壞,而不是算法本身的思想。其實在實際中往往PID甚至PI、PD就夠了,神經(jīng)元、模糊、小波適用于研究和寫論文,模糊在實際中用的多一點,主要是小日本用的比較成熟,我再恨日本人,這點也服氣,小日本就是滑,許多物理現(xiàn)象搞不透,就用這法,還管用,題外話。
最后我想說的是,當(dāng)我們面對市場要求時,產(chǎn)品往往考慮的是可靠性、性能、價格而不是你用的什么芯片,在滿足性能的基礎(chǔ)上結(jié)構(gòu)越簡單就越可靠,芯片越通用價格就越低,能用51就不用196,能用2407就不用2812,除非把芯片本身作買點利用高成本贏取高利潤。無論2000還是5000、6000系列都有市場前景,關(guān)鍵是要做深做透。
獲取知識的方法、處理項目的能力是相通的,具體的說就是不要把目光盯在做硬件還是做軟件上,用ASM還是C,要勤動手打好基礎(chǔ),提高自己對系統(tǒng)總體設(shè)計的能力,從系統(tǒng)的眼光看問題。為什么都是做DSP的有的畢業(yè)拿3000,有的5000、8000,除了運氣和關(guān)系外,重要的是你對事物的認(rèn)識深度和高度。我一直都記住這句話:有前途的人做什么都有前途,沒前途的人做什么都沒前途。
與其說是鉆在里面,畢業(yè)設(shè)計是搞240,在老師的壓力做出了一點東西,這期間主要是對DSP的各種基礎(chǔ)知識的熟悉與理解,對DSP的真正深入是在公司工作以后。當(dāng)初進(jìn)公司,因為正有一個項目需要用5410要我接手。說實話,在學(xué)校期間我5000的書都沒有看過一眼,可沒辦法,只能靠自己了。不過好的是我2000DSP的基礎(chǔ)很好。接過項目后,我第一個星期就全部看的是5000的指令,DSP的結(jié)構(gòu)倒沒怎么看,因為項目硬件已成型,主要是算法。這樣,花了一個星期熟悉指令與項目相關(guān)的程序,第二個星期也就開始編程了。半個月以后我對5410也就用很熟了的,當(dāng)然主要還是講在算法方面。這個項目太概做了四個月吧,系統(tǒng)程序是我編寫的,主要有如64位加減乘除乘方開方、及時域方面的一些算法?,F(xiàn)在又做一個控制系統(tǒng),用2407開發(fā)的,硬件主要有直交變頻,并把2407的所有外設(shè)資源全部用到了?,F(xiàn)在我可以這樣自夸一句吧:TI的2000系列與5000系列的我都熟悉,要我去以此做個系統(tǒng),沒問題。上面是把我搞DSP的經(jīng)歷簡單說了一下的吧,在這里我想對正在學(xué)及想學(xué)DSP的難兄們說一句的是,DSP并不是很難。當(dāng)然,這個前提是你的基礎(chǔ)要好,我單片機(jī),接口都還行,當(dāng)初就是從單片機(jī)改成DSP的。有了單片機(jī)的基礎(chǔ)再去學(xué)2000第列的DSP(下面的DSP單指2000系列,另有說明為止),你就可以把DSP看成一個super microcontroller了。相比之下,DSP除了比單片機(jī)多了更豐的外設(shè)接口(SPI,SCI、CAN、PWM、CAP、QEP等等),他就是一塊單片機(jī),只不過在單片機(jī)來說你要另加芯片的工作,DSP全部把它做在一塊芯片去了,我現(xiàn)在看DSP也真就這么簡單。前面有人提到DSP主要是做算法,這句話有一定的片面性: TI有很多系列的DSP,現(xiàn)在主流的DSP主要為2000系列、3000系列、4000系列、5000系列、6000系列。除了2000與5000系列是定點DSP外,其余的均為浮點系列。 TI的2000系列主要長處是在用于控制系統(tǒng),因為它的資源非常豐富,前面提到,在控制系統(tǒng)中用到的一些外設(shè)2000系列均在片內(nèi)集成了。 TI的5000系列主要長處是用于數(shù)字信號的算法處理,這里所講算法處理主要是指在數(shù)字信號處理時的一些算法,如FIR、IIR、FFT等等。5000系列的DSP的速度比2000快,2407最快只能到40M,2800系列除外,5410的DSP可以達(dá)到160M,如現(xiàn)在我們主要用來做數(shù)字信號方面的處理以及簡單的靜態(tài)圖像處理等這樣一些在資源需要處于中等的一些算法。 TI的6000系列主要是用在實時圖像處理,這個就更則重于算法處理。一般的硬件很少自制,我們是用TI的DSK板再加上自主板相結(jié)合。
[page]
使用C/C++語言編寫基于DSP程序的注意事項#e#使用C/C++語言編寫基于DSP程序的注意事項
1、 不影響執(zhí)行速度的情況下,可以使用c或c/c++語言提供的函數(shù)庫,也可以自己設(shè)計函數(shù),這樣更易于使用“裁縫師”優(yōu)化處理,例如:進(jìn)行絕對值運算,可以調(diào)用fabs()或abs()函數(shù),也可以使用if...else...判斷語句來替代。
2、 要非常謹(jǐn)慎地使用局部變量,根據(jù)自己項目開發(fā)的需要,應(yīng)盡可能多地使用全局變量和靜態(tài)變量。
3、 一定要非常重視中斷向量表的問題,很多朋友對中斷向量表的調(diào)用方式不清楚。其實中斷向量表中的中斷名是任意取定的,dsp是不認(rèn)名字的,它只認(rèn)地址!!中斷向量表要重新定位。這一點很重要。
4、 要明確dsp軟件開發(fā)的第一步是對可用存儲空間的分析,存儲空間分配好壞關(guān)系到一個dsp程序員的水平。對于dsp,我們有兩種名稱的存儲空間,一種是物理空間,另一種是映射空間。物理空間是dsp上可以存放數(shù)據(jù)和程序的實際空間(包括外部存儲器),我們的數(shù)據(jù)和程序最終放到物理空間上,但我們并不能直接訪問它們。我們要訪問物理空間,必須借助于映射空間才行!!但是映射空間本身是個“虛”空間,是個不存在的空間。所以,往往是映射空間遠(yuǎn)遠(yuǎn)大于實際的物理空間,有些映射空間,如io映射空間,它本身還代表了一種接口。只有那些物理空間映射到的映射空間才是我們真正可訪問(讀或?qū)?的存儲空間。
5、 盡可能地減少除法運算,而盡可能多地使用乘法和加法運算代替。
6、 如果ti公司或第三方軟件合作商提供了dsplib或其他的合法子程序庫供調(diào)用,應(yīng)盡可能地調(diào)用使用。這些子程序均使用用匯編寫成,更為重要之處是通過了tms320算法標(biāo)準(zhǔn)測試。而且,常用的數(shù)字信號處理算法均有包括!!
7、 盡可能地采用內(nèi)聯(lián)函數(shù)!!而不用一般的函數(shù)!!可以提高代碼的集成度。
8、 編程風(fēng)格力求簡煉!!盡可能用c語言而不用c++語言。我個人感到雖然c++終代碼長了一些,好象對執(zhí)行速度沒有影響。
9、 因為在c5000中double型和float型均占有2個字,所以都可以使用,而且,可以直接將int型賦給float型或double型,但,盡可能地多使用int數(shù)據(jù)類型代替!這一點需要注意!!
10、 程序最后至少要加上一個空行,編譯器當(dāng)這個空行為結(jié)尾提示符。
11、 大膽使用位運算符,非常好用!!
12、2003年6月份從ti的網(wǎng)站上下到了關(guān)于tms320c67x系列dsp的快速算法庫,于是,tms320c5000和c6000全系列的快速算法庫都問世了,這些算法庫均可供c/c++語言直接調(diào)用,優(yōu)化程度100%,實際編程時盡可能地使用(下載時可以同時下載到說明文檔和ascii源程序,可以根據(jù)自己需要作出修改,修改前最好做個備份)
特別推薦
- 是否存在有關(guān) PCB 走線電感的經(jīng)驗法則?
- 一文看懂電壓轉(zhuǎn)換的級聯(lián)和混合概念
- 第12講:三菱電機(jī)高壓SiC芯片技術(shù)
- 準(zhǔn) Z 源逆變器的設(shè)計
- 貿(mào)澤電子持續(xù)擴(kuò)充工業(yè)自動化產(chǎn)品陣容
- 低功耗嵌入式設(shè)計簡介
- 如何通過基本描述找到需要的電容?
技術(shù)文章更多>>
- 第二十二屆中國國際軟件合作洽談會在成都順利舉行
- 混合信號示波器的原理和應(yīng)用
- 功率器件熱設(shè)計基礎(chǔ)(十)——功率半導(dǎo)體器件的結(jié)構(gòu)函數(shù)
- JFET 共源共柵提高了電流源性能
- 福耀玻璃曹德旺主席蒞臨深圳傲科指導(dǎo)交流并與傲科達(dá)成戰(zhàn)略合作意向
技術(shù)白皮書下載更多>>
- 車規(guī)與基于V2X的車輛協(xié)同主動避撞技術(shù)展望
- 數(shù)字隔離助力新能源汽車安全隔離的新挑戰(zhàn)
- 汽車模塊拋負(fù)載的解決方案
- 車用連接器的安全創(chuàng)新應(yīng)用
- Melexis Actuators Business Unit
- Position / Current Sensors - Triaxis Hall
熱門搜索
三端穩(wěn)壓管
三極管
色環(huán)電感
上海豐寶
攝像頭
生產(chǎn)測試
聲表諧振器
聲傳感器
濕度傳感器
石英機(jī)械表
石英石危害
時間繼電器
時鐘IC
世強(qiáng)電訊
示波器
視頻IC
視頻監(jiān)控
收發(fā)器
手機(jī)開發(fā)
受話器
數(shù)字家庭
數(shù)字家庭
數(shù)字鎖相環(huán)
雙向可控硅
水泥電阻
絲印設(shè)備
伺服電機(jī)
速度傳感器
鎖相環(huán)
胎壓監(jiān)測