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