你的位置:首頁(yè) > 測(cè)試測(cè)量 > 正文

超全面資料:DSP程序跑飛原因及解決方法

發(fā)布時(shí)間:2015-04-15 責(zé)任編輯:sherry

【導(dǎo)讀】編程的時(shí)候DSP程序跑飛的原因有哪些?我們?cè)撊绾谓鉀Q這些DSP技術(shù)問(wèn)題?今天小編搜羅來(lái)了程序跑飛的各種原因,同時(shí)也湊齊了各種解決程序跑飛的方法,希望能夠?qū)Υ蠹矣兴鶐椭?/strong>
 
DSP程序跑飛原因狀況一
 
一般調(diào)試代碼的步驟有兩種方案:方案一是先調(diào)試主程序,最后添加看門(mén)狗等保護(hù)電路;方案二是先搭建代碼環(huán)境,比如看門(mén)狗保護(hù)電路等,然后在該平臺(tái)上開(kāi)發(fā)主程序。為了更好的編寫(xiě)算法代碼,往往采用方案一。在調(diào)試代碼的過(guò)程中,遇到過(guò)如下一種程序跑飛的情況:
 
【原因】
 
硬件看門(mén)狗電路設(shè)計(jì)失誤。
 
【設(shè)計(jì)】
 
設(shè)計(jì)方案中,采用美信芯片MAX706AT設(shè)計(jì)硬件看門(mén)狗電路,看似非常完美的電路,在連接仿真器進(jìn)行簡(jiǎn)單方波輸出測(cè)試時(shí),發(fā)現(xiàn)DSP沒(méi)有任務(wù)輸出。程序已經(jīng)異常了,因?yàn)椴捎玫姆桨敢辉O(shè)計(jì)代碼,所以只知道異常,不知道原因。
 
【解決思路】
 
1、無(wú)數(shù)次的下載程序,并運(yùn)行程序,但是程序總是異常運(yùn)行。
 
2、慶幸的是,電路設(shè)計(jì)中有好幾個(gè)IO直接驅(qū)動(dòng)LED的電路,這時(shí)候,特別注意到LED顯示的亮度不正常,然后趕緊拿萬(wàn)用表測(cè)試IO電壓,結(jié)果只有1.6V左右。這時(shí)已經(jīng)明白,是看門(mén)狗異常了。
 
3、排查電路中的MAX706AT電路,一點(diǎn)問(wèn)題都沒(méi)有。查找MAX706AT的封裝和管腳對(duì)應(yīng)時(shí),發(fā)現(xiàn)了問(wèn)題的根源。芯片有SO和UMAX兩種封裝,說(shuō)來(lái)奇怪,名稱完全相同,封裝不同,加上管腳定義不同,造成了看門(mén)狗芯片的復(fù)位電壓總是低電壓。
 
終于找到問(wèn)題了。
DSP
DSP程序跑飛原因狀況二
 
【原因】
 
中斷處理超時(shí)引起程序跑飛
 
【設(shè)計(jì)】
 
設(shè)計(jì)基于TMS320F28335(4)的雙極性信號(hào)采集系統(tǒng),因?yàn)轭l率較高,因此采用了中斷采集方式,也就是說(shuō)用PWM輸出方波,觸發(fā)采集模塊開(kāi)始采集,當(dāng)采集鎖存之后會(huì)中斷。
 
告知dsp進(jìn)行數(shù)據(jù)讀取。那么數(shù)據(jù)讀取就是在中斷中進(jìn)行的。
 
在初版中,采用周期=20ms/256進(jìn)行采樣觸發(fā)。
 
很奇怪的問(wèn)題發(fā)生了,DEBUG模式下,沒(méi)有問(wèn)題,可以采集到數(shù)據(jù),但是RELEASE模式下,采集數(shù)據(jù)時(shí),程序跑飛。
 
當(dāng)意識(shí)到程序跑飛時(shí),懷疑到中斷程序太長(zhǎng),或者處理時(shí)間太長(zhǎng)。
[page]
【解決思路】
 
猜測(cè)周期太短,那么可以將周期增加,周期=20ms/128,仍然失敗告終。
 
再減周期=20ms/64,okay。
 
宜將剩勇追窮寇,周期減為=20ms/32,okay
 
第一次就這樣解決了。
 
【附】當(dāng)使用dsp進(jìn)行算法處理時(shí),一定要先對(duì)算法評(píng)估,否則,當(dāng)認(rèn)識(shí)到自己程序問(wèn)題時(shí),已經(jīng)來(lái)不及了,因?yàn)閰?shù)修改之后,有可能不能滿足系統(tǒng)的需求。
 
DSP程序跑飛原因狀況三
 
1.不小心操作到了子函數(shù)返回地址值。
 
2.數(shù)值溢出,讀寫(xiě)了超過(guò)范圍的存儲(chǔ)空間,堆棧溢出等 。
 
程序是帶有BIOS的程序,當(dāng)程序跑飛后我就在主函數(shù)的最后一行設(shè)置斷點(diǎn),結(jié)果程序可以跑到主函數(shù)的最后一行,接下來(lái)就是初始化BIOS操作系統(tǒng)了,操作系統(tǒng)的源代碼又是不可見(jiàn)的,所以一時(shí)陷入了僵局。不知道該怎么辦好。
 
在移植程序的時(shí)候跑飛的,后來(lái)我就拿程序的BIOS配置和另一個(gè)正常的BIOS配置比較,結(jié)果發(fā)現(xiàn)Stack Size是0x400(即默認(rèn)的配置),而另一個(gè)是0x1000,然后改過(guò)來(lái)之后程序恢復(fù)正常。
 
一開(kāi)始的時(shí)候意識(shí)到可能是堆棧溢出造成的程序跑飛,所以就增大了每塊存儲(chǔ)器上的動(dòng)態(tài)堆棧,即:create a heap in this memory heap size:0x08000 。結(jié)果不管用。
 
后來(lái)才修改的Stack Size (MAUs)選項(xiàng),即全局的堆棧大小,從0x400改到0x1000然后問(wèn)題排除。后來(lái)才明白,動(dòng)態(tài)堆棧是用來(lái)動(dòng)態(tài)的創(chuàng)建任務(wù)用的,并非是想要的那個(gè)堆棧。經(jīng)過(guò)反思感覺(jué)還是對(duì)BIOS系統(tǒng)不熟悉造成的大錯(cuò)!
 
DSP程序跑飛原因狀況四
 
過(guò)單片機(jī)的程序跑飛的有,靜電干擾。 超頻過(guò)大。導(dǎo)致不穩(wěn)定。
 
DSP程序跑飛原因狀況五
 
程序經(jīng)常跑飛的ti dsp 調(diào)試原因
 
1) 程序沒(méi)有結(jié)尾或不是循環(huán)的程序。
 
2)nmi管腳沒(méi)有上拉。
 
3)在看門(mén)狗動(dòng)作的時(shí)候程序會(huì)經(jīng)常跑飛。
 
4)程序編制不當(dāng)也會(huì)引起程序跑飛。
 
5)硬件系統(tǒng)有問(wèn)題
 
數(shù)值溢出,讀寫(xiě)了超過(guò)范圍的存儲(chǔ)空間,堆棧溢出,異常主要原因。復(fù)位芯片的原理,是為了防止程序出錯(cuò)。但是不能通過(guò)復(fù)位來(lái)解決異常問(wèn)題,所以,首先要調(diào)試代碼,做到代碼正常運(yùn)轉(zhuǎn),然后,再添加復(fù)位模塊。這樣才能做好產(chǎn)品,否則,為了復(fù)位而復(fù)位。
 
要采購(gòu)萬(wàn)用表么,點(diǎn)這里了解一下價(jià)格!
特別推薦
技術(shù)文章更多>>
技術(shù)白皮書(shū)下載更多>>
熱門(mén)搜索
?

關(guān)閉

?

關(guān)閉