打印
[51单片机]

STC15W4K系列单片机,看门狗复位后系统内存不清零的问题!

[复制链接]
1785|18
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
QQ826220679|  楼主 | 2020-1-21 13:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 QQ826220679 于 2020-1-21 13:44 编辑

最近在做一个项目,用到了STC15W4K56S4单片机,程序开启了看门狗,由于和外部通讯,当通讯数据量大到一定程度,,程序会出现异常跑飞,这时候看门狗就会让系统复位,以上的这些,在我们理解中是完全合理的。

不过,令我不解的是,看门狗复位之后,程序依然在跑飞的状态,这时,看门狗又让系统复位,复位后,依然在跑飞的状态…… 这样一直循环。
如果这时候断电冷启动,系统就会运行正常。 打电话到STC技术支持,问为什么看门狗复位后系统内存不清零的问题,并没有给出解决办法。

由于本人才疏学浅,所以这里,请懂的朋友给解释一下问题的原因和解决办法!

谢谢大家!

使用特权

评论回复

相关帖子

沙发
ayb_ice| | 2020-1-21 13:53 | 只看该作者
复位后本身不存在内存清零的问题,这是程序自己完成的事情

首先你程序本身有问题,先改程序,哪有通信量大就跑飞的道理,明显程序有BUG,应该是数组越界了

你的情况应该是程序跑乱了(数据乱了),但WDT应该没有动作

使用特权

评论回复
板凳
QQ826220679|  楼主 | 2020-1-21 14:00 | 只看该作者
ayb_ice 发表于 2020-1-21 13:53
复位后本身不存在内存清零的问题,这是程序自己完成的事情

首先你程序本身有问题,先改程序,哪有通信量大 ...

关掉看门狗,系统出了问题就死那里不动了!打开看门狗,系统就会复位。这个应该是看门狗动作复位的。

同样的程序,移植到STM32上,看门狗复位后,系统就正常了。

关于程序中的BUG,核心程序是之前同事写的,还没有完全看明白。正在努力修改中!

使用特权

评论回复
地板
ayb_ice| | 2020-1-21 14:13 | 只看该作者
QQ826220679 发表于 2020-1-21 14:00
关掉看门狗,系统出了问题就死那里不动了!打开看门狗,系统就会复位。这个应该是看门狗动作复位的。

同 ...

有个寄存器可以控制复位后从哪里开始动作,可能需要设置下

你的这个具体型号有没有我不知道,应该也有的

使用特权

评论回复
5
ayb_ice| | 2020-1-21 14:16 | 只看该作者
QQ826220679 发表于 2020-1-21 14:00
关掉看门狗,系统出了问题就死那里不动了!打开看门狗,系统就会复位。这个应该是看门狗动作复位的。

同 ...

还要看程序本身有没有区别对待冷起动与热起动(WDT动作)

使用特权

评论回复
6
ayb_ice| | 2020-1-21 14:19 | 只看该作者
QQ826220679 发表于 2020-1-21 14:00
关掉看门狗,系统出了问题就死那里不动了!打开看门狗,系统就会复位。这个应该是看门狗动作复位的。

同 ...

还要手册,
看具体的冷起动与热起动的区别,如果有特别情况,手册肯定会説的,
大部分问题手册都会说明,只是很多时候使用者没去看而已

使用特权

评论回复
7
ayb_ice| | 2020-1-21 14:21 | 只看该作者
QQ826220679 发表于 2020-1-21 14:00
关掉看门狗,系统出了问题就死那里不动了!打开看门狗,系统就会复位。这个应该是看门狗动作复位的。

同 ...

MCU的架构变化太大了,不能说明什么问题

使用特权

评论回复
8
QQ826220679|  楼主 | 2020-1-21 14:29 | 只看该作者
ayb_ice 发表于 2020-1-21 14:16
还要看程序本身有没有区别对待冷起动与热起动(WDT动作)

/*--------------------------------------------------*/
/*函数名:WDT初始化                                                                        */
/*参  数:无                                                                                */
/*返回值:无                                                                                */
/*--------------------------------------------------*/
void WDT_Init()
{
        WDT_CONTR = 0x06;       //看门狗定时器溢出时间计算公式: (12 * 32768 * PS) / FOSC (秒)
                            //设置看门狗定时器分频数为128,溢出时间如下:
                            //11.0592M : 4.55s
                            //12M  : 4.19
                                                        //24M  :2.097
        WDT_CONTR |= 0x20;      //启动看门狗
        WDT_CONTR |= 0x10;      //清零看门狗 //喂狗
        //IAP_CONTR = 0x20; //手动软件复位,系统重新从用户代码区开始运行程序
        //IAP_CONTR = 0x60; //手动软件复位,系统重新从ISP代码区开始运行程序
        IAP_CONTR = 0x40;         //看门狗软件复位,系统重新从ISP代码区开始运行程序
        //SWBS/IAP_C_CONTR.6的值为1,则看门口复位状态结束后上述系列单片机将从系统监控程序启动
        //SWBS/IAP_C_CONTR.6的值为0,则看门口复位状态结束后上述系列单片机将从用户应用程序启动
}

这部分也仔细看了。

使用特权

评论回复
9
ayb_ice| | 2020-1-21 14:37 | 只看该作者
QQ826220679 发表于 2020-1-21 14:29
/*--------------------------------------------------*/
/*函数名:WDT初始化                                                                        */
/*参  数:无 ...

这只是初始化,并不说明复位后没有区别对待
从复位地址开始看下,启动代码里有没有什么特别情况

使用特权

评论回复
10
QQ826220679|  楼主 | 2020-1-21 14:43 | 只看该作者
ayb_ice 发表于 2020-1-21 14:37
这只是初始化,并不说明复位后没有区别对待
从复位地址开始看下,启动代码里有没有什么特别情况
...

STC手册和别的厂家的比真是一团乱,我没找到这方面说明。

使用特权

评论回复
11
ayb_ice| | 2020-1-21 14:45 | 只看该作者
QQ826220679 发表于 2020-1-21 14:43
STC手册和别的厂家的比真是一团乱,我没找到这方面说明。

这个问题应该容易处理,
我也用STC的芯片啊
软件复位后很正常啊
WDT没试过
你把起动代码发上来看下

使用特权

评论回复
12
ayb_ice| | 2020-1-21 14:48 | 只看该作者
QQ826220679 发表于 2020-1-21 14:43
STC手册和别的厂家的比真是一团乱,我没找到这方面说明。

还有一种可能,
冷起动后SFR是确定状态的,热起动可能有些SFR没有复位,但你的初始化代码是基于确定状态的

使用特权

评论回复
13
12864| | 2020-1-21 17:24 | 只看该作者
我一般软件复位都是从ISP区开始执行,就是IAP_CONTR中SWBS=1,没试过从用户程序区开始执行。会不会如果从用户区复位会导致一些SFR没有回到正确复位状态呢,比如SP。原始51是没有软件复位功能的,如果强制程序回到0000执行,不但所有SFR不会回到上电默认值,SP也同样会出问题

前些日子一块新板子遇到上电后频繁复位的情况,查明是AD芯片引脚虚焊导致的,但我在等待AD的RDY信号的时候,我频繁调用休眠和喂狗指令的,不知道为何还会导致看门狗复位,因为很快排除了虚焊问题,所以也没有深究,只是表示了疑惑不解。

使用特权

评论回复
14
QQ826220679|  楼主 | 2020-1-21 21:56 | 只看该作者
ayb_ice 发表于 2020-1-21 14:45
这个问题应该容易处理,
我也用STC的芯片啊
软件复位后很正常啊

STC51 或许这类嵌入式系统程序,我不太知道什么是初始化代码,在我的程序里,main之前就是一些功能寄存器的的初始化。

使用特权

评论回复
15
QQ826220679|  楼主 | 2020-1-21 21:59 | 只看该作者
QQ826220679 发表于 2020-1-21 21:56
STC51 或许这类嵌入式系统程序,我不太知道什么是初始化代码,在我的程序里,main之前就是一些功能寄存器 ...

我把这部分代码移植到了STM32F103芯片上,数据量大了也会导致程序跑飞,看门狗也会让系统复位, 但复位之后,所有功能都是正常的。所以,更不理解为什么STC51会是这样的现象。另外真的要吐槽一下STC的技术支持……

使用特权

评论回复
16
a511484095| | 2020-8-17 10:14 | 只看该作者
QQ826220679 发表于 2020-1-21 21:59
我把这部分代码移植到了STM32F103芯片上,数据量大了也会导致程序跑飞,看门狗也会让系统复位, 但复位之 ...

之前还吐槽PIC18来着

使用特权

评论回复
17
gx_huang| | 2020-8-17 10:59 | 只看该作者
技术支持不会帮你解决这些问题的,这些问题一般是用户的工作,除非你量很大,FAE才会支持项目

使用特权

评论回复
18
lvben5d| | 2020-8-17 13:45 | 只看该作者
RAM从bootload引导启动(上电复位)才会有代码清0吧, 如果复位不清,自己可以初始化下即可。 一般看门狗复位  说明你程序出问题了,不应该在正常运行中,出现看门狗复位。

使用特权

评论回复
19
zhxzhxzzhhxx| | 2022-6-23 21:57 | 只看该作者
51的复位,并不清除任何 RAM的内容,你觉得清除了,那是 C51的 startup.A51完成的,而且这个引导代码也不是清除所有数据,比如Xdata的Ram就不会清除,你要完成特殊的功能,把这个代码复制过来,自己修改.
当年用这个办法区分是断电还是看门狗复位.

使用特权

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

本版积分规则

13

主题

170

帖子

1

粉丝