在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > DSP程序跑飛的原因?你是如何解決的?

            DSP程序跑飛的原因?你是如何解決的?

            作者: 時間:2016-12-21 來源:網(wǎng)絡(luò) 收藏

              跑飛的原因有哪些?你是如何解決的?以學(xué)術(shù)為名的頭腦風(fēng)暴在電子發(fā)燒友網(wǎng)論壇大勢展開,一起來看看那些你值得擁有的干貨吧。

            本文引用地址:http://www.biyoush.com/article/201612/332365.htm

              michael_xing:

              先說說我以前的項目經(jīng)歷。

              一般調(diào)試代碼的步驟有兩種方案

              方案一:先調(diào)試主程序,最后添加看門狗等保護(hù)電路;

              方案二:先搭建代碼環(huán)境,比如看門狗保護(hù)電路等,然后在該平臺上開發(fā)主程序。

              我呢,為了更好的編寫算法代碼,往往采用方案一。

              在我調(diào)試代碼的過程中,遇到過如下一種程序跑飛的情況:

              【原因】硬件看門狗電路設(shè)計失誤

              【設(shè)計】我設(shè)計的方案中,采用美信芯片MAX706AT設(shè)計硬件看門狗電路,看似非常完美的電路,在連接仿真器進(jìn)行簡單方波輸出測試時,發(fā)現(xiàn)DSP沒有任務(wù)輸出。程序已經(jīng)異常了,因為我采用的方案一設(shè)計代碼,所以我只知道異常,不知道原因。

              【解決思路】

              1、無數(shù)次的下載程序,并運行程序,但是程序總是異常運行。

              2、慶幸的是,我的電路設(shè)計中有好幾個IO直接驅(qū)動LED的電路,這時候,我特別注意到LED顯示的亮度不正常,然后,我趕緊拿萬用表測試IO電壓,結(jié)果只有1.6V左右。這時,我已經(jīng)明白,看門狗異常了。

              3、排查電路中的MAX706AT電路,一點問題都沒有。查找MAX706AT的封裝和管腳對應(yīng)時,發(fā)現(xiàn)了問題的根源。芯片有SO和UMAX兩種封裝,說來奇怪,名稱完全相同,封裝不同,加上管腳定義不同,造成了看門狗芯片的復(fù)位電壓總是低電壓。

              終于找到問題了。

              michael_xing:

              在我調(diào)試代碼的過程中,遇到過如下一種程序跑飛的情況:

              【原因】中斷處理超時引起程序跑飛

              【設(shè)計】我設(shè)計的基于TMS320F28335(4)的雙極性信號采集系統(tǒng),因為頻率較高,因此采用了中斷采集方式,也就是說,我用PWM輸出方波,觸發(fā)采集模塊開始采集,當(dāng)采集鎖存之后,會中斷

              告知dsp進(jìn)行數(shù)據(jù)讀取。那么數(shù)據(jù)讀取就是在中斷中進(jìn)行的。

              在初版中,采用周期=20ms/256進(jìn)行采樣觸發(fā)。

              很奇怪的問題發(fā)生了,DEBUG模式下,沒有問題,可以采集到數(shù)據(jù),但是RELEASE模式下,采集數(shù)據(jù)時,程序跑飛。

              當(dāng)意識到程序跑飛時,懷疑到中斷程序太長,或者處理時間太長。

              【解決思路】

              猜測周期太短,那么可以將周期增加,周期=20ms/128,仍然失敗告終。

              再減周期=20ms/64,okay。

              宜將剩勇追窮寇,周期減為=20ms/32,okay

              第一次就這樣解決了。

              【附】當(dāng)使用dsp進(jìn)行算法處理時,一定要先對算法評估,否則,當(dāng)認(rèn)識到自己程序問題時,已經(jīng)來不及了,因為參數(shù)修改之后,有可能不能滿足系統(tǒng)的需求。

              Cresta:

              我遇到過的序跑飛的原因有:

              1.不小心操作到了子函數(shù)返回地址值。

              2.數(shù)值溢出,讀寫了超過范圍的存儲空間,堆棧溢出等 。

              程序是帶有BIOS的程序,當(dāng)程序跑飛后我就在主函數(shù)的最后一行設(shè)置斷點,結(jié)果程序可以跑到主函數(shù)的最后一行,接下來就是初始化BIOS操作系統(tǒng)了,操作系統(tǒng)的源代碼又是不可見的,所以一時陷入了僵局。不知道該怎么辦好。

              我是在移植程序的時候跑飛的,后來我就拿我的程序的BIOS配置和另一個正常的BIOS配置比較,結(jié)果發(fā)現(xiàn)Stack Size是0x400(即默認(rèn)的配置),而另一個是0x1000,然后我改過來之后程序恢復(fù)正常。

              一開始的時候我也意識到可能是堆棧溢出造成的程序跑飛,所以我就增大了每塊存儲器上的動態(tài)堆棧,即:create a heap in this memory heap size:0x08000 。結(jié)果不管用。

              后來才修改的Stack Size (MAUs)選項,即全局的堆棧大小,從0x400改到0x1000.然后問題排除。后來才明白,動態(tài)堆棧是用來動態(tài)的創(chuàng)建任務(wù)用的,并非是我想要的那個堆棧。經(jīng)過反思感覺還是對BIOS系統(tǒng)不熟悉造成的大錯!

              冰葑世紀(jì):

              我遇過單片機的程序跑飛的有,靜電干擾。 超頻過大。導(dǎo)致不穩(wěn)定。

             robi:

              分享下程序經(jīng)常跑飛的ti dsp 調(diào)試原因

              1) 程序沒有結(jié)尾或不是循環(huán)的程序。

              2)nmi管腳沒有上拉。

              3)在看門狗動作的時候程序會經(jīng)常跑飛。

              4)程序編制不當(dāng)也會引起程序跑飛。

              5)硬件系統(tǒng)有問題

              liulin126:

              數(shù)值溢出,讀寫了超過范圍的存儲空間,堆棧溢出,異常主要原因。

              wjw1989:

              我之前玩arm,應(yīng)該道理是相同的吧。

              復(fù)位芯片的原理,是為了防止程序出錯。但是不能通過復(fù)位來解決異常問題,所以,首先要調(diào)試代碼,做到代碼正常運轉(zhuǎn),然后,再添加復(fù)位模塊。這樣才能做好產(chǎn)品,否則,為了復(fù)位而復(fù)位。

              wjw1989:

              分享個別人的經(jīng)驗:

              我所知道的序跑飛的原因有:

              硬件:1.復(fù)位電路不穩(wěn)定;2.電源不穩(wěn)定;3.地線不穩(wěn)定。

              軟件:1.不小心操作到了子函數(shù)返回地址值。

              2.數(shù)值溢出,讀寫了超過范圍的存儲空間,堆棧溢出等 。

              我的程序是帶有BIOS的程序,當(dāng)程序跑飛后我就在主函數(shù)的最后一行設(shè)置斷點,結(jié)果程序可以跑到主函數(shù)的最后一行,接下來就是初始化BIOS操作系統(tǒng)了,操作系統(tǒng)的源代碼又是不可見的,所以一時陷入了僵局。不知道該怎么辦好。

              我是在移植程序的時候跑飛的,后來我就拿我的程序的BIOS配置和另一個正常的BIOS配置比較,結(jié)果發(fā)現(xiàn)Stack Size是0x400(即默認(rèn)的配置),而另一個是0x1000,然后我改過來之后程序恢復(fù)正常。

              一開始的時候我也意識到可能是堆棧溢出造成的程序跑飛,所以我就增大了每塊存儲器上的動態(tài)堆棧,即:create a heap in this memory heap size:0x08000 。結(jié)果不管用。

              后來才修改的Stack Size (MAUs)選項,即全局的堆棧大小,從0x400改到0x1000.然后問題排除。后來才明白,動態(tài)堆棧是用來動態(tài)的創(chuàng)建任務(wù)用的,并非是我想要的那個堆棧。經(jīng)過反思感覺還是對BIOS系統(tǒng)不熟悉造成的大錯!

              wjw1989:

              朋友也有一些分享,這里總結(jié)如下:

              我所知道的DSP程序跑飛的原因有:

              硬件:1.復(fù)位電路不穩(wěn)定;2.電源不穩(wěn)定;3.地線不穩(wěn)定。

              軟件:1.不小心操作到了子函數(shù)返回地址值。

              2.數(shù)值溢出,讀寫了超過范圍的存儲空間,堆棧溢出等 。

              我的程序是帶有BIOS的程序,當(dāng)程序跑飛后我就在主函數(shù)的最后一行設(shè)置斷點,結(jié)果程序可以跑到主函數(shù)的最后一行,接下來就是初始化BIOS操作系統(tǒng)了,操作系統(tǒng)的源代碼又是不可見的,所以一時陷入了僵局。不知道該怎么辦好。

              我是在移植程序的時候跑飛的,后來我就拿我的程序的BIOS配置和另一個正常的BIOS配置比較,結(jié)果發(fā)現(xiàn)Stack Size是0x400(即默認(rèn)的配置),而另一個是0x1000,然后我改過來之后程序恢復(fù)正常。

              一開始的時候我也意識到可能是堆棧溢出造成的程序跑飛,所以我就增大了每塊存儲器上的動態(tài)堆棧,即:create a heap in this memory heap size:0x08000 。結(jié)果不管用。

              后來才修改的Stack Size (MAUs)選項,即全局的堆棧大小,從0x400改到0x1000.然后問題排除。后來才明白,動態(tài)堆棧是用來動態(tài)的創(chuàng)建任務(wù)用的,并非是我想要的那個堆棧。經(jīng)過反思感覺還是對BIOS系統(tǒng)不熟悉造成的大錯!

              我個人覺得,關(guān)于硬件,問題無非就是一個:電源。

              電源不穩(wěn),芯片工作肯定不正常。不正常會出現(xiàn)什么問題呢?

             ?。?)芯片不工作。哈哈。這是我這次卻發(fā)現(xiàn),當(dāng)IO輸出短路,會造成芯片不工作,現(xiàn)象是:芯片io電平不死3.3v,而是1.768v

             ?。?)芯片不斷復(fù)位,這個問題不說了,如同芯片不斷上電斷電。



            關(guān)鍵詞: DSP程

            評論


            技術(shù)專區(qū)

            關(guān)閉