打印

问一个安全性问题,有关C8051F程序复位的

[复制链接]
8444|22
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
misra|  楼主 | 2011-8-3 22:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 misra 于 2011-8-4 10:04 编辑

单片机c8051f程序跑死了怎么办?
假若采用看门狗复位,则IO管脚无法保持原来的状态。
现在硬件PCB板卡已经设计好了。

请问要怎么办?

不启动看门狗,是不是也可能发生失电复位??
沙发
NE5532| | 2011-8-3 22:23 | 只看该作者
1.死了只有复位
2.看门狗复位和上电复位没啥区别,板卡硬件应该能够容忍这个状态。复位不清ram,且程序可以直到是上电复位还是狗复位(有寄存器标志),复位时候区别一下,就可以处理了。

使用特权

评论回复
板凳
ningling_21| | 2011-8-3 22:24 | 只看该作者
内部看门狗复位是最好的解决办法...

使用特权

评论回复
地板
受不了了| | 2011-8-3 23:39 | 只看该作者
C8051F程序没那么容易跑飞和死掉吧,用它控制一大堆接触器,还同时控制伺服驱动器,还有变频器,装一个控制柜里,它们都相安无事。只是那编程电缆太弱不禁风了,随便一个小小的继电器吸合或者断开一下它就通讯不上,出差时绝对要带两根

使用特权

评论回复
5
misra|  楼主 | 2011-8-4 08:34 | 只看该作者
2# NE5532

多谢楼上各位的建议。

我现在比如说 现在程序中运行的是P1= 00H,那么看门狗复位后P1 = FFH了。
假如这个用于安全性要求极高的行业,这样做是不是太危险了?

使用特权

评论回复
6
misra|  楼主 | 2011-8-4 08:38 | 只看该作者
4# 受不了了

C8051F单片机有多种复位方式  上电复位 /失电复位/比较器0复位/外部CNVSTR0复位/看门狗复位。

我现在程序里面只用了看门狗复位。

由于现在我担心发生“假若采用看门狗复位,则IO管脚无法保持原来的状态”,所以我现在不敢用看门狗复位了。

请问其他的复位方式您用过么?
您有什么建议 多谢

使用特权

评论回复
7
ningling_21| | 2011-8-4 12:26 | 只看该作者
可以判断RAM的内容,如果为设定值,则不复位IO口状态...

使用特权

评论回复
8
cecwxf| | 2011-8-4 13:11 | 只看该作者
顶顶

使用特权

评论回复
9
misra|  楼主 | 2011-8-4 14:29 | 只看该作者
7# ningling_21

请问如何不复位IO?

看门狗溢出一定会让IO复位的吧???

使用特权

评论回复
10
草履虫| | 2011-8-4 22:33 | 只看该作者
个人认为加看门狗是下下策.
复位问题一定要从系统设计入手.不能从软件考滤.遇到安全性问题,哪怕是加高的硬件成本,重新设计,也不应该从软件方法考虑.
软件一定要做到尽可能的完善,不出BUG.
即使不涉及安全问题,首先考虑的也应该是硬件的稳定.其实才是看门狗的复位.

使用特权

评论回复
11
草履虫| | 2011-8-4 22:38 | 只看该作者
C8051复位,对于内部的ram(低128字节)来说,上电复位的状态好像也是被复位的.但对于外部的XRAM(内部自带的)来说,复位的时候的值是不变的,可以考虑在起动时候,判断是什么复位状态,根据状态来判断是否是热启还是冷启.如果是热启,通过读xram保存的状态来设置I/O的状态.

使用特权

评论回复
12
linqing171| | 2011-8-5 07:17 | 只看该作者
所有的复位都必须复位IO。复位所有的寄存器。 这是系统可以运行的基本保证。
可靠性超级高的地方,必须保证不能死机。
你的IO如果必须保持为低,建议用两个IO来组合控制,两个IO经过上下拉和逻辑门,复位后变为了输入状态,仍然可以保持。

我目前做的也是对可靠性要求较高的产品,我的做法是,如果复位,就级联复位也就是下级所有电路都进入复位状态,就把问题彻底暴漏出来,整板完全保护状态。刚开始也发现有复位,后面改复位电路和电源,从去年6月19第一个版本到现在现在各种实验做了一年了,还没有出现问题。

使用特权

评论回复
13
misra|  楼主 | 2011-8-5 09:04 | 只看该作者
本帖最后由 misra 于 2011-8-5 09:11 编辑

11# 草履虫

你在10楼的回复我现在觉得很对。
11楼说的也对,不过我的程序没那么复杂,我只有两个关键信号而已,涉及不到RAM和XRAM。
ram复位是在启动代码里,自己可以改。
片内XRAM我不能确定怎么回事,以前我也试图改动启动代码清零XRAM值,但没成功。

使用特权

评论回复
14
misra|  楼主 | 2011-8-5 09:18 | 只看该作者
本帖最后由 misra 于 2011-8-5 09:23 编辑

12# linqing171

现在我采用的办法是(1)关掉看门狗
(2)把P口操作放到中断里面,这样估计能好点,程序飞了,对P口胡乱操作的可能性降低
(3)冗余,弄两个板卡,放在两个箱子里。死了一个,另一个还好用就行。啥浪涌啊乱七八糟的试验也都OK


担心的地方是(1)两个程序都死。
                 (2)任何一个出现不断的失电复位的情况。
这板子每天都要重新上电启动的,所以主要程序没bug就行。NND,听天由命了,就这么个水平。

使用特权

评论回复
15
草履虫| | 2011-8-5 11:35 | 只看该作者
本帖最后由 草履虫 于 2011-8-5 11:38 编辑

你用KEIL c51的时候是不是用自带的启动代码呀.那个东西没有必要用.我每次做工程的第一项工作就是干掉那个启动代码.然后向写正常代码那样写就行了.
#include "....."
main()
{
init_mcu();
init_变量;
while(1){

}
}
和早期的keil C51是一样的.

使用特权

评论回复
16
misra|  楼主 | 2011-8-5 12:03 | 只看该作者
15# 草履虫

呵呵 若自己加载 就用自己的了。
若不加载 则keil自动加载lib下面的启动库了。

可以在list看到加载哪个。

若自己不加载
C51\LIB\C51L.LIB (?C_STARTUP)
若自己加载
.\Obj\STARTUP.obj (?C_STARTUP)

使用特权

评论回复
17
linqing171| | 2011-8-5 21:20 | 只看该作者
看门狗要一直开着。特别C8051F80x系列解决了上电复位的问题。 要死就要死的明白一点,别死了也发现不了,做太多的冗余只会让发现问题更难。

使用特权

评论回复
18
misra|  楼主 | 2011-8-10 12:09 | 只看该作者
看门狗要一直开着。特别C8051F80x系列解决了上电复位的问题。 要死就要死的明白一点,别死了也发现不了,做太多的冗余只会让发现问题更难。
linqing171 发表于 2011-8-5 21:20


"C8051F80x系列解决了上电复位",请问这句话是什么意思??

使用特权

评论回复
19
misra|  楼主 | 2012-7-24 13:00 | 只看该作者
现在的想法是 加看门狗

使用特权

评论回复
20
ayb_ice| | 2012-7-24 13:31 | 只看该作者
狗是用来救命的, 不是万能药,想吃就吃的

自己身体不好,不要指望吃药能把身体吃好,还是先把身体锻炼好才是正道

使用特权

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

本版积分规则

个人签名: 循序渐进,道自然而至...........

4

主题

276

帖子

2

粉丝