<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 干貨分享:DSP程序跑飛的原因?你是如何解決的?

干貨分享:DSP程序跑飛的原因?你是如何解決的?

作者: 時(shí)間:2017-10-21 來(lái)源:網(wǎng)絡(luò ) 收藏

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

本文引用地址:http://dyxdggzs.com/article/201710/366972.htm

  michael_xing:

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

  一般調試代碼的步驟有兩種方案

  方案一:先調試主程序,最后添加看門(mén)狗等保護電路;

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

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

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

  【原因】硬件看門(mén)狗電路設計失誤

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

  【解決思路】

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

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

  3、排查電路中的MAX706AT電路,一點(diǎn)問(wèn)題都沒(méi)有。查找MAX706AT的封裝和管腳對應時(shí),發(fā)現了問(wèn)題的根源。芯片有SO和UMAX兩種封裝,說(shuō)來(lái)奇怪,名稱(chēng)完全相同,封裝不同,加上管腳定義不同,造成了看門(mén)狗芯片的復位電壓總是低電壓。

  終于找到問(wèn)題了。

  michael_xing:

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

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

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

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

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

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

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

  【解決思路】

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

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

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

  第一次就這樣解決了。

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

  Cresta:

  我遇到過(guò)的程序跑飛的原因有:

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

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

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

  我是在移植程序的時(shí)候跑飛的,后來(lái)我就拿我的程序的BIOS配置和另一個(gè)正常的BIOS配置比較,結果發(fā)現Stack Size是0x400(即默認的配置),而另一個(gè)是0x1000,然后我改過(guò)來(lái)之后程序恢復正常。

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

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

  冰葑世紀:

  我遇過(guò)單片機的程序跑飛的有,靜電干擾。 超頻過(guò)大。導致不穩定。

  robi:

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

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

  2)nmi管腳沒(méi)有上拉。

  3)在看門(mén)狗動(dòng)作的時(shí)候程序會(huì )經(jīng)常跑飛。

  4)程序編制不當也會(huì )引起程序跑飛。

  5)硬件系統有問(wèn)題

  liulin126:

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

  wjw1989:

  我之前玩arm,應該道理是相同的吧。

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

  wjw1989:

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

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

  硬件:1.復位電路不穩定;2.電源不穩定;3.地線(xiàn)不穩定。

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

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

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

  我是在移植程序的時(shí)候跑飛的,后來(lái)我就拿我的程序的BIOS配置和另一個(gè)正常的BIOS配置比較,結果發(fā)現Stack Size是0x400(即默認的配置),而另一個(gè)是0x1000,然后我改過(guò)來(lái)之后程序恢復正常。

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

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

  wjw1989:

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

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

  硬件:1.復位電路不穩定;2.電源不穩定;3.地線(xiàn)不穩定。

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

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

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

  我是在移植程序的時(shí)候跑飛的,后來(lái)我就拿我的程序的BIOS配置和另一個(gè)正常的BIOS配置比較,結果發(fā)現Stack Size是0x400(即默認的配置),而另一個(gè)是0x1000,然后我改過(guò)來(lái)之后程序恢復正常。

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

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

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

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

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

 ?。?)芯片不斷復位,這個(gè)問(wèn)題不說(shuō)了,如同芯片不斷上電斷電。



關(guān)鍵詞: 電子工程師 DSP

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>