打印
[PIC®/AVR®/dsPIC®产品]

PIC24F单片机在调试模式下正常运行但在工作模式下运行一段时间后完全死机

[复制链接]
4027|19
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
mrjeep|  楼主 | 2013-9-11 11:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

如题,最近快被这个问题弄疯掉了,有哪位大神知道可能的原因有哪些啊。我参照手册反复修改了配置字,始终不对,实在是无语啊附上配置字的设置:
_CONFIG1 (JTAGEN_OFF & GCP_ON & GWRP_OFF & BKBUG_OFF & ICS_PGx2
    & FWDTEN_ON & WINDIS_OFF & FWPSA_PR128 & WDTPS_PS1024 & COE_OFF);
_CONFIG2 (IESO_OFF & PLLDIV_DIV12 & PLL_96MHZ_ON & FNOSC_PRIPLL & FCKSM_CSDCMD
& OSCIOFNC_ON & POSCMOD_XT & DISUVREG_ON & IOL1WAY_OFF);
_CONFIG3 (WPEND_WPENDMEM & WPCFG_WPCFGDIS & WPDIS_WPEN & WPFP_WPFP2);
沙发
yewuyi| | 2013-9-11 13:42 | 只看该作者
怎么不对?报何种错误?

使用特权

评论回复
板凳
mrjeep|  楼主 | 2013-9-11 15:18 | 只看该作者
yewuyi 发表于 2013-9-11 13:42
怎么不对?报何种错误?

DEBUG模式里正常运行,不会报错。就是换成正常工作模式的时候,系统运行几分钟(基本固定)就会完全死机,也不会复位。主循环里已加喂狗程序,但起不到作用。后来用示波器查看晶振,发现在死机后晶振仍然在工作,郁闷。应该也不是程序本身的问题,但是配置字反复修改了就是不对。。。

使用特权

评论回复
地板
yewuyi| | 2013-9-11 15:39 | 只看该作者
mrjeep 发表于 2013-9-11 15:18
DEBUG模式里正常运行,不会报错。就是换成正常工作模式的时候,系统运行几分钟(基本固定)就会完全死机 ...

估计只有你自己认为不是程序的问题吧。


让我来说,程序问题的概率占99。9%。

你可以把程序屏蔽成最小范围内,就在主函数里面留一个指示灯亮灭的程序,所有的中断都屏蔽掉,你看看是否能运行?

如果能运行,则99.99999999999999999999999999999%是程序问题

使用特权

评论回复
5
兰天白云| | 2013-9-11 16:15 | 只看该作者
我想也是程序问题,如果配置错误,几分钟运行是不可能的

使用特权

评论回复
6
mrjeep|  楼主 | 2013-9-11 16:17 | 只看该作者
yewuyi 发表于 2013-9-11 15:39
估计只有你自己认为不是程序的问题吧。

你这个方法我试过的 还是会死机的

使用特权

评论回复
7
mrjeep|  楼主 | 2013-9-11 16:18 | 只看该作者
兰天白云 发表于 2013-9-11 16:15
我想也是程序问题,如果配置错误,几分钟运行是不可能的

但是为什么DEBUG里面完全没问题呢 程序问题早就复位了

使用特权

评论回复
8
兰天白云| | 2013-9-11 16:31 | 只看该作者
在DEBUG和正常运行时单片机内部的RAM和FLASH及单片机管脚是不同的,完全死机,说明看门狗没动作,除非这个思循环包含看门狗

使用特权

评论回复
9
mrjeep|  楼主 | 2013-9-11 16:37 | 只看该作者
兰天白云 发表于 2013-9-11 16:31
在DEBUG和正常运行时单片机内部的RAM和FLASH及单片机管脚是不同的,完全死机,说明看门狗没动作,除非这个 ...

有的 我只在主循环里第一行加了喂狗的 可还是不能复位啊

使用特权

评论回复
10
opal11| | 2013-9-11 23:52 | 只看该作者
代码贴上来?

使用特权

评论回复
11
兰天白云| | 2013-9-12 11:28 | 只看该作者
mrjeep 发表于 2013-9-11 16:37
有的 我只在主循环里第一行加了喂狗的 可还是不能复位啊

可以在其他位置喂狗,甚至不喂狗,程序设计人员一项主要技能是设计查找问题的方法

使用特权

评论回复
12
mrjeep|  楼主 | 2013-9-17 15:25 | 只看该作者
兰天白云 发表于 2013-9-12 11:28
可以在其他位置喂狗,甚至不喂狗,程序设计人员一项主要技能是设计查找问题的方法 ...

我把所有的中断(除了不可屏蔽的)还有定时器都关了,看门狗打开,每4s复位一次,主循环只有一个while(1),只在进入while(1)前亮一下小灯作为提示,观察一段时间后看门狗都不会再复位了,邪门了

使用特权

评论回复
13
mrjeep|  楼主 | 2013-9-17 15:39 | 只看该作者
opal11 发表于 2013-9-11 23:52
代码贴上来?

PIC24FJ256GB110系列MCU,外部12M晶振,看门狗2.1s复位时基,采用MPLAB C30编译器
_CONFIG1 (JTAGEN_OFF & GCP_OFF & GWRP_OFF & BKBUG_OFF & ICS_PGx2
    & FWDTEN_ON & WINDIS_OFF & FWPSA_PR128 & WDTPS_PS512 & COE_OFF);
_CONFIG2 (IESO_ON & PLLDIV_DIV12 & PLL_96MHZ_ON & FNOSC_PRIPLL & FCKSM_CSDCMD
& OSCIOFNC_OFF & POSCMOD_HS & DISUVREG_ON & IOL1WAY_OFF);
_CONFIG3 (WPEND_WPENDMEM & WPCFG_WPCFGDIS & WPDIS_WPDIS & WPFP_WPFP2);

int main(void)
{
    OSCCON = 0x0300; /* 外部HS晶振带PLL;disable SOSC */
    TRISBbits.TRISB2 = 0; /* 驱动小灯端口方向为输出 */
    LATBbits.LATB2 = 0; /* 开始给低 */

    LATBbits.LATB2 = 1; /* 点亮小灯 */
    delay(200); /* 延时200ms */
    LATBbits.LATB2 = 0; /* 灭 */

    while(1)
    {     
    }
   
    return 0;
}

这个小系统的功能就是测试看门狗的复位功能,一开始是好的,过一段时间看门狗就不起作用了

使用特权

评论回复
14
兰天白云| | 2013-9-17 17:31 | 只看该作者
有仿真器就好办,运行一段时间,你认为出问题了,停止仿真,然后用单步运行,看看程序去了哪里

使用特权

评论回复
15
e掾木| | 2013-9-25 12:32 | 只看该作者
     我负责任地告诉你:程序设计有问题。我07年开始用PIC24F,装在低压100A - 2500A的断路器,要是死机或者乱来,公司早关门了!

使用特权

评论回复
16
q3742829| | 2013-9-27 10:05 | 只看该作者
看门狗没动作,除非这个思循环包含看门狗

使用特权

评论回复
17
mrjeep|  楼主 | 2013-10-18 13:03 | 只看该作者
e掾木 发表于 2013-9-25 12:32
我负责任地告诉你:程序设计有问题。我07年开始用PIC24F,装在低压100A - 2500A的断路器,要是死机或 ...

额 问题解决了 是MCLR脚未接上拉所致

使用特权

评论回复
18
mrjeep|  楼主 | 2013-10-18 13:04 | 只看该作者
兰天白云 发表于 2013-9-17 17:31
有仿真器就好办,运行一段时间,你认为出问题了,停止仿真,然后用单步运行,看看程序去了哪里 ...

搞定了,MCLR脚未上拉,汗。。。

使用特权

评论回复
19
兰天白云| | 2013-11-12 15:45 | 只看该作者
最难处理的问题,往往是最低级的失误

使用特权

评论回复
20
laoxianccc| | 2014-9-25 14:24 | 只看该作者

使用特权

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

本版积分规则

4

主题

16

帖子

0

粉丝