您的位置 首页 基础

干货共享:DSP程序跑飞的原因?你是怎么处理的?

  DSP程序跑飞的原因有哪些?你是怎样处理的?以学术为名的脑筋风暴在本站网论坛大势打开,一起来看看那些你值得具有的干货吧。   michael_xing:   先说说我曾经的项目…

  DSP程序跑飞的原因有哪些?你是怎样处理的?以学术为名的脑筋风暴在本站网论坛大势打开,一起来看看那些你值得具有的干货吧。

  michael_xing:

  先说说我曾经的项目阅历。

  一般调试代码的过程有两种计划

  计划一:先调试主程序,最终增加看门狗等维护电路;

  计划二:先建立代码环境,比方看门狗维护电路等,然后在该平台上开发主程序。

  我呢,为了更好的编写算法代码,往往选用计划一。

  在我调试代码的过程中,遇到过如下一种程序跑飞的状况:

  【原因】硬件看门狗电路规划失误

  【规划】我规划的计划中,选用美信芯片MAX706AT规划硬件看门狗电路,看似十分完美的电路,在衔接仿真器进行简略方波输出测验时,发现DSP没有使命输出。程序现已反常了,由于我选用的计划一规划代码,所以我只知道反常,不知道原因。

  【处理思路】

  1、无数次的下载程序,并作业程序,可是程序总是反常作业。

  2、幸亏的是,我的电路规划中有好几个IO直接驱动LED的电路,这时分,我特别注意到LED显现的亮度不正常,然后,我赶忙拿万用表测验IO电压,成果只要1.6V左右。这时,我现已理解,看门狗反常了。

  3、排查电路中的MAX706AT电路,一点问题都没有。查找MAX706AT的封装和管脚对应时,发现了问题的本源。芯片有SO和UMAX两种封装,说来古怪,称号完全相同,封装不同,加上管脚界说不同,形成了看门狗芯片的复位电压总是低电压。

  总算找到问题了。

  michael_xing:

  在我调试代码的过程中,遇到过如下一种程序跑飞的状况:

  【原因】中止处理超时引起程序跑飞

  【规划】我规划的根据TMS320F28335(4)的双极性信号收集体系,由于频率较高,因而选用了中止收集方法,也便是说,我用PWM输出方波,触发收集模块开端收集,当收集锁存之后,会中止

  奉告dsp进行数据读取。那么数据读取便是在中止中进行的。

  在初版中,选用周期=20ms/256进行采样触发。

  很古怪的问题发生了,DEBUG形式下,没有问题,能够收集到数据,可是RELEASE形式下,收集数据时,程序跑飞。

  当意识到程序跑飞时,置疑到中止程序太长,或许处理时刻太长。

  【处理思路】

  猜想周期太短,那么能够将周期增加,周期=20ms/128,依然失利告终。

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

  宜将剩勇追穷寇,周期减为=20ms/32,okay

  第一次就这样处理了。

  【附】当运用dsp进行算法处理时,一定要先对算法评价,不然,当认识到自己程序问题时,现已来不及了,由于参数修正之后,有或许不能满意体系的需求。

  Cresta:

  我遇到过的DSP程序跑飞的原因有:

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

  2.数值溢出,读写了超越规模的存储空间,仓库溢出等 。

  程序是带有BIOS的程序,当程序跑飞后我就在主函数的最终一行设置断点,成果程序能够跑到主函数的最终一行,接下来便是初始化BIOS操作体系了,操作体系的源代码又是不行见的,所以一时陷入了僵局。不知道该怎样办妥。

  我是在移植程序的时分跑飞的,后来我就拿我的程序的BIOS装备和另一个正常的BIOS装备比较,成果发现Stack Size是0x400(即默许的装备),而另一个是0x1000,然后我改过来之后程序康复正常。

  一开端的时分我也意识到或许是仓库溢出形成的程序跑飞,所以我就增大了每块存储器上的动态仓库,即:create a heap in this memory heap size:0x08000 。成果不管用。

  后来才修正的Stack Size (MAUs)选项,即大局的仓库巨细,从0x400改到0x1000.然后问题扫除。后来才理解,动态仓库是用来动态的创立使命用的,并非是我想要的那个仓库。通过反思感觉仍是对BIOS体系不熟悉形成的大错!

  冰葑世纪:

  我遇过单片机的程序跑飞的有,静电搅扰。 超频过大。导致不稳定。

  robi:

  共享下程序经常跑飞的ti dsp 调试原因

  1) 程序没有结束或不是循环的程序。

  2)nmi管脚没有上拉。

  3)在看门狗动作的时分程序会经常跑飞。

  4)程序编制不妥也会引起程序跑飞。

  5)硬件体系有问题

  liulin126:

  数值溢出,读写了超越规模的存储空间,仓库溢出,反常主要原因。

  wjw1989:

  我之前玩arm,应该道理是相同的吧。

  复位芯片的原理,是为了避免程序犯错。可是不能通过复位来处理反常问题,所以,首先要调试代码,做到代码正常作业,然后,再增加复位模块。这样才干做好产品,不然,为了复位而复位。

  wjw1989:

  共享个别人的经历:

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

  硬件:1.复位电路不稳定;2.电源不稳定;3.地线不稳定。

  软件:1.不小心操作到了子函数回来地址值。

  2.数值溢出,读写了超越规模的存储空间,仓库溢出等 。

  我的程序是带有BIOS的程序,当程序跑飞后我就在主函数的最终一行设置断点,成果程序能够跑到主函数的最终一行,接下来便是初始化BIOS操作体系了,操作体系的源代码又是不行见的,所以一时陷入了僵局。不知道该怎样办妥。

  我是在移植程序的时分跑飞的,后来我就拿我的程序的BIOS装备和另一个正常的BIOS装备比较,成果发现Stack Size是0x400(即默许的装备),而另一个是0x1000,然后我改过来之后程序康复正常。

  一开端的时分我也意识到或许是仓库溢出形成的程序跑飞,所以我就增大了每块存储器上的动态仓库,即:create a heap in this memory heap size:0x08000 。成果不管用。

  后来才修正的Stack Size (MAUs)选项,即大局的仓库巨细,从0x400改到0x1000.然后问题扫除。后来才理解,动态仓库是用来动态的创立使命用的,并非是我想要的那个仓库。通过反思感觉仍是对BIOS体系不熟悉形成的大错!

  wjw1989:

  朋友也有一些共享,这儿总结如下:

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

  硬件:1.复位电路不稳定;2.电源不稳定;3.地线不稳定。

  软件:1.不小心操作到了子函数回来地址值。

  2.数值溢出,读写了超越规模的存储空间,仓库溢出等 。

  我的程序是带有BIOS的程序,当程序跑飞后我就在主函数的最终一行设置断点,成果程序能够跑到主函数的最终一行,接下来便是初始化BIOS操作体系了,操作体系的源代码又是不行见的,所以一时陷入了僵局。不知道该怎样办妥。

  我是在移植程序的时分跑飞的,后来我就拿我的程序的BIOS装备和另一个正常的BIOS装备比较,成果发现Stack Size是0x400(即默许的装备),而另一个是0x1000,然后我改过来之后程序康复正常。

  一开端的时分我也意识到或许是仓库溢出形成的程序跑飞,所以我就增大了每块存储器上的动态仓库,即:create a heap in this memory heap size:0x08000 。成果不管用。

  后来才修正的Stack Size (MAUs)选项,即大局的仓库巨细,从0x400改到0x1000.然后问题扫除。后来才理解,动态仓库是用来动态的创立使命用的,并非是我想要的那个仓库。通过反思感觉仍是对BIOS体系不熟悉形成的大错!

  我个人觉得,关于硬件,问题无非便是一个:电源。

  电源不稳,芯片作业必定不正常。不正常会呈现什么问题呢?

  (1)芯片不作业。哈哈。这是我这次却发现,当IO输出短路,会形成芯片不作业,现象是:芯片io电平不死3.3v,而是1.768v

  (2)芯片不断复位,这个问题不说了,好像芯片不断上电断电。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/zhishi/jichu/173571.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部