打印
[技术问答]

NUC505DS13Y程序跑飞

[复制链接]
1031|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
pads设计|  楼主 | 2017-12-23 13:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
NUC505DS13Y 程序一烧进去就跑飞了,也有不跑飞的时候,感觉程序在乱跑,也会出现程序死掉的情况。程序好了一会儿又不好了,电源没问题,MCU系统参数也对啊,有没有大神遇到这种情况求帮忙解决,
沙发
heisexingqisi| | 2017-12-23 20:28 | 只看该作者
第一次听说这个情况。。

使用特权

评论回复
板凳
heisexingqisi| | 2017-12-23 20:28 | 只看该作者
你跑了什么奇怪的程序,你烧录个普通的例子试试看,还能跑飞?

使用特权

评论回复
地板
643757107| | 2017-12-24 11:41 | 只看该作者
   单片机程序死机,跑飞了可以从以下几个方面查找原因:

    1. 意外中断。是否打开了某个中断,但是没有响应和清除中端标志,导致程序一直进入中断,造成死机假象

    2. 中断变量处理不妥。若定义某些会在中断中修改的全局变量,这时要注意两个问题:首先为了防止编译器优化中断变量,要在这些变量定义时前加volatile,其次在主循环中读取中断变量前应该首先关闭全局中断,防止读到一半被中断给修改了,读完之后再打开全局中断;否则出现造成数据乱套。

    3. 地址溢出,常见错误为指针操作错误。我要着重说的是数组下标使用循环函数中循环变量,如果循环变量没控制好则会出现数组下标越界,意外修改系统的寄存器造成死机,这种情况下如果死机说明运气好,否则后面不知道发生什么头疼的事。

    4. 无条件的死循环;比如使用while(x);等待电平变化,正常情况下x都会变成0,就怕万一,因此最好加上时间限制;

    5. 看门狗没有关闭。有的单片机即使没使用看门狗开机时也有可能意外自动开启了最小周期的看门狗,导致软件不断复位,造成死机,这个要看芯片手册,最好在程序复位后首先应该显式清除看门狗再关闭看门狗;

    6. 堆栈溢出。最难查找的问题,对于容量小的单片机,尽量减少函数调用层级,减少局部变量,从而减少压栈的时候所需的空间。当你把以上几条都试过不能解决问题,试一试把你的被调用少函数直接内置到调用的地方并且把占用RAM大的局部变量改成全局变量,试一试说不定就可以了。

使用特权

评论回复
5
643757107| | 2017-12-24 11:41 | 只看该作者
今天在编写单片机程序的时候,由于中断服务程序写的不好,导致单片机程序总是跑飞,最后费了好长时间,花了很大功夫才找到问题原因,由此总结了单片机程序跑飞的三种现象、原因及解决方法。

一、数组越界(数组溢出)

现象:单片机程序在函数中运行时,总是在运行到函数末尾,要跳出函数时,程序跑飞。

原因:数组越界(数组溢出),函数中定义的数组元素的个数小于程序中实际使用的数组元素的个数,例如在函数中定义了一个数组ucDataBuff[10],这个数组只有10个元素,但是在函数中却有这样的语句ucDataBuff[10]=0x1a,这个语句是给数组的第11个元素赋值,:由于定义的数组只有10个元素,从而导致赋值语句中不知道把0x1a放到什么地方,从而导致程序跑飞。

解决方法:如果在调试程序时,发现程序总是在函数执行完毕时跑飞,多数情况是发生了数组越界(数组溢出)的错误,仔细检查函数中调用的数组是否存在越界(溢出)的情况。

二、中断服务程序缺失

现象:程序运行过程中总是跑飞。

原因:程序中打开了某个中断,但是却没有相应的中断服务程序,从而导致在中断发生后,找不到中断服务程序入口,从而导致程序跑飞。

解决方法:检查程序中是否存在打开了某个中断,但是没有相对应的中断服务程序。

三:看门狗复位

现象:在执行一段较为好费时间的程序时,程序跑飞,并且总是跳到复位位置处。

原因:程序中使用了看门狗,但是没有及时“喂狗”,从而导致看门狗复位,使程序直接跳到复位位置。

解决方法:根据程序运行时间,尤其是一定要计算清楚最耗时的那段程序的运行时间,然后准确设置看门狗的复位时长,定时“喂狗”,尤其是如果有死循环的情况,一定要在死循环中记得“喂狗”。

使用特权

评论回复
6
huangcunxiake| | 2017-12-24 22:21 | 只看该作者
逐个排查吧,看看是哪种用法导致的。

使用特权

评论回复
7
稳稳の幸福| | 2017-12-25 17:41 | 只看该作者
解决了吗,要不要贴出来帮你看看。

使用特权

评论回复
8
xuanhuanzi| | 2017-12-26 19:26 | 只看该作者
你先烧录的例子试试,看跑飞不,如果不跑飞就可以排除硬件错误。

使用特权

评论回复
9
xinxianshi| | 2017-12-26 19:33 | 只看该作者
你这跑飞的真快,代码发来,我试试怎么做到的。

使用特权

评论回复
10
天灵灵地灵灵| | 2017-12-28 12:42 | 只看该作者
解决了吗,跑飞的原因,要先排除硬件,随便写个简单的测试程序,没有问题,就是软件了。

使用特权

评论回复
11
734774645| | 2017-12-28 19:16 | 只看该作者
看楼主的ID,水平应该不差,应该是程序太复杂了。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

1

帖子

0

粉丝