使用C/C++語言編寫基于DSP程序的注意事項(xiàng)#e#使用C/C++語言編寫基于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ā)在國內(nèi)高校剛剛開始,一臺(tái)DSP開發(fā)器接近一萬還是ISA總線的,我從206開始240、2407A都作過產(chǎn)品,對(duì)5402、2812、5471在產(chǎn)品方案規(guī)劃制定和論證時(shí)也研究過。由于方向所限對(duì)6X、8X系列沒有接觸。
我發(fā)現(xiàn)在國內(nèi)無論在公司或高校許多地方為了加快開發(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ì)電熔、電阻、三極管的分類和選型都很困難,我也是這樣過來的)更不用說系統(tǒng)規(guī)劃設(shè)計(jì)了,況且許多老板自己也不太懂,師兄有自己的任務(wù),他們搞明白時(shí)也畢業(yè)了。在許多高校做DSP就是找一個(gè)算法加到自己的主程序里,在板子上跑一下,基本達(dá)到效果就可以了,至于可靠性是次要的,產(chǎn)業(yè)化無從談起,這已經(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)理,否則只是硬件工程師、軟件工程師。無論作51、196、還是DSP都是這樣。
下面分別談?wù)勎覍?duì)硬件和軟件設(shè)計(jì)的感受
硬件設(shè)計(jì)是系統(tǒng)設(shè)計(jì)的關(guān)鍵,國內(nèi)和國外產(chǎn)品的差距往往是硬件設(shè)計(jì)水平高低決定的,任何軟件設(shè)計(jì)思想沒有可靠的物理載體都是空中樓閣,紙上談兵。學(xué)校的研究生很多都想避開硬件設(shè)計(jì),對(duì)于一個(gè)全新的設(shè)計(jì)與其說不屑不如說不敢。試想一下燒幾個(gè)片子的壓力要比跑飛幾段程序的壓力大的多,尤其是功率器件,一旦燒掉,弄不好火光沖天,人的自信都沒了。況且改一次板周期長(zhǎng),經(jīng)費(fèi)高,還不知行不行。其實(shí)在國外實(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)和流程、流水線操作,不然飛都不知道怎么飛的。在語言選擇上我當(dāng)時(shí)是這么給自己規(guī)定的先編20個(gè)左右的匯編程序,每個(gè)代碼量超過4K,使用語句范圍覆蓋全部語句的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語言并用ASM語言思考才會(huì)熟練應(yīng)用。另外我想告訴一些作算法特別是控制算法的朋友,千萬不要隨意評(píng)判一個(gè)算法的優(yōu)劣,在程序中程序和代碼優(yōu)化的程度往往影響了控制效果好壞,而不是算法本身的思想。其實(shí)在實(shí)際中往往PID甚至PI、PD就夠了,神經(jīng)元、模糊、小波適用于研究和寫論文,模糊在實(shí)際中用的多一點(diǎn),主要是小日本用的比較成熟,我再恨日本人,這點(diǎn)也服氣,小日本就是滑,許多物理現(xiàn)象搞不透,就用這法,還管用,題外話。
最后我想說的是,當(dāng)我們面對(duì)市場(chǎng)要求時(shí),產(chǎn)品往往考慮的是可靠性、性能、價(jià)格而不是你用的什么芯片,在滿足性能的基礎(chǔ)上結(jié)構(gòu)越簡(jiǎn)單就越可靠,芯片越通用價(jià)格就越低,能用51就不用196,能用2407就不用2812,除非把芯片本身作買點(diǎn)利用高成本贏取高利潤。無論2000還是5000、6000系列都有市場(chǎng)前景,關(guān)鍵是要做深做透。
獲取知識(shí)的方法、處理項(xiàng)目的能力是相通的,具體的說就是不要把目光盯在做硬件還是做軟件上,用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í)深度和高度。我一直都記住這句話:有前途的人做什么都有前途,沒前途的人做什么都沒前途。
與其說是鉆在里面,畢業(yè)設(shè)計(jì)是搞240,在老師的壓力做出了一點(diǎn)東西,這期間主要是對(duì)DSP的各種基礎(chǔ)知識(shí)的熟悉與理解,對(duì)DSP的真正深入是在公司工作以后。當(dāng)初進(jìn)公司,因?yàn)檎幸粋€(gè)項(xiàng)目需要用5410要我接手。說實(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)單說了一下的吧,在這里我想對(duì)正在學(xué)及想學(xué)DSP的難兄們說一句的是,DSP并不是很難。當(dāng)然,這個(gè)前提是你的基礎(chǔ)要好,我單片機(jī),接口都還行,當(dāng)初就是從單片機(jī)改成DSP的。有了單片機(jī)的基礎(chǔ)再去學(xué)2000第列的DSP(下面的DSP單指2000系列,另有說明為止),你就可以把DSP看成一個(gè)super microcontroller了。相比之下,DSP除了比單片機(jī)多了更豐的外設(shè)接口(SPI,SCI、CAN、PWM、CAP、QEP等等),他就是一塊單片機(jī),只不過在單片機(jī)來說你要另加芯片的工作,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)在我們主要用來做數(shù)字信號(hào)方面的處理以及簡(jiǎn)單的靜態(tài)圖像處理等這樣一些在資源需要處于中等的一些算法。 TI的6000系列主要是用在實(shí)時(shí)圖像處理,這個(gè)就更則重于算法處理。一般的硬件很少自制,我們是用TI的DSK板再加上自主板相結(jié)合。
[page]
使用C/C++語言編寫基于DSP程序的注意事項(xiàng)#e#使用C/C++語言編寫基于DSP程序的注意事項(xiàng)
1、 不影響執(zhí)行速度的情況下,可以使用c或c/c++語言提供的函數(shù)庫,也可以自己設(shè)計(jì)函數(shù),這樣更易于使用“裁縫師”優(yōu)化處理,例如:進(jìn)行絕對(duì)值運(yùn)算,可以調(diào)用fabs()或abs()函數(shù),也可以使用if...else...判斷語句來替代。
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或其他的合法子程序庫供調(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語言而不用c++語言。我個(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的快速算法庫,于是,tms320c5000和c6000全系列的快速算法庫都問世了,這些算法庫均可供c/c++語言直接調(diào)用,優(yōu)化程度100%,實(shí)際編程時(shí)盡可能地使用(下載時(shí)可以同時(shí)下載到說明文檔和ascii源程序,可以根據(jù)自己需要作出修改,修改前最好做個(gè)備份)
特別推薦
- 利用自動(dòng)化技術(shù)賦能中國基礎(chǔ)設(shè)施現(xiàn)代化
- 三極管電路輸入電壓阻抗
- 晶振怎么用,你真的知道嗎?
- 康佳特推出搭載AMD 銳龍嵌入式 8000系列的COM Express緊湊型模塊
- 村田推出3225尺寸車載PoC電感器LQW32FT_8H系列
- 思特威推出超星光級(jí)系列4MP圖像傳感器SC485SL
- HOLTEK新推出HT32F59045脈搏血氧儀MCU
技術(shù)文章更多>>
- “扒開”超級(jí)電容的“外衣”,看看超級(jí)電容“超級(jí)”在哪兒
- DigiKey 誠邀各位參會(huì)者蒞臨SPS 2024?展會(huì)參觀交流,體驗(yàn)最新自動(dòng)化產(chǎn)品
- 提前圍觀第104屆中國電子展高端元器件展區(qū)
- 高性能碳化硅隔離柵極驅(qū)動(dòng)器如何選型,一文告訴您
- 貿(mào)澤電子新品推薦:2024年第三季度推出將近7000個(gè)新物料
技術(shù)白皮書下載更多>>
- 車規(guī)與基于V2X的車輛協(xié)同主動(dòng)避撞技術(shù)展望
- 數(shù)字隔離助力新能源汽車安全隔離的新挑戰(zhàn)
- 汽車模塊拋負(fù)載的解決方案
- 車用連接器的安全創(chuàng)新應(yīng)用
- Melexis Actuators Business Unit
- Position / Current Sensors - Triaxis Hall
熱門搜索
濾波電感
濾波器
路由器設(shè)置
鋁電解電容
鋁殼電阻
邏輯IC
馬達(dá)控制
麥克風(fēng)
脈沖變壓器
鉚接設(shè)備
夢(mèng)想電子
模擬鎖相環(huán)
耐壓測(cè)試儀
逆變器
逆導(dǎo)可控硅
鎳鎘電池
鎳氫電池
紐扣電池
歐勝
耦合技術(shù)
排電阻
排母連接器
排針連接器
片狀電感
偏光片
偏轉(zhuǎn)線圈
頻率測(cè)量?jī)x
頻率器件
頻譜測(cè)試儀
平板電腦