hnzbding 发表于 2016-4-1 16:11:38

请教:单片机跑飞后,怎样能从开始跑飞前的指令位置执...

和别人讨论时,遇到一个问题:
看门狗可以解决单片机跑飞的问题,它是让单片机复位来解决的。但有些特殊的场合,操作过程是不允许重新再来一遍的,只能接着原来的操作往下进行,例如,假设一个机床正在切削加工一个东西,此时单片机跑飞了,如果通过看门狗使其复位,程序又会从开始运行,已经加工过的部分可能会被重复加工,所以单片机应该是能记下程序开始跑飞的位置,接着原来的操作进行。但这怎么实现呢,请高手指点。

.titrwh 发表于 2016-4-1 16:16:02

每完成一个步骤把指令更新到flash里面,重启后先看flash里面的状态

10xjzheng 发表于 2016-4-1 16:19:49

一般都是可以判断动作到了哪里的,楼主这种是不能判断到

LearningASM 发表于 2016-4-1 16:42:04

保存在非初始化区域,系统启动的时候判断是上电启动还是看门狗复位。

xunke 发表于 2016-4-1 16:46:45

随机的吧,
即使记下PC的位置,数据储存器内容也有可能改变了。

onece 发表于 2016-4-1 16:49:39

只有一种可能,楼主你知道你的程序要跑飞了,就记住这个位置{:lol:}{:lol:}

honami520 发表于 2016-4-1 16:52:49

跑飞的话,做不到完美效果的。
就算你保存当前指令执行的条数记录。那么,在某一条指令执行的过程中跑飞的话,机器会停下来。但是你记录的是这条指令已经执行完成或者未完成。
你复位后只能有2种选择,就是要么重新执行这条指令,要么接着执行。总是做不到很完美的。

如果是机床切削这种,记录指令条数可能还不错,因为是做减法。重新切削一次,并不会增加或者减少什么;

zhangyihua 发表于 2016-4-1 17:58:43

思路错了吧,看门狗是一种补救措施,不允许重新来的话,应该是想办法防止复位

tragedy 发表于 2016-4-1 18:19:21

防止程序跑飞啊。

yu_studio 发表于 2016-4-1 18:29:19

那就做稳定,不允许跑飞。
PLC你什么时候见死机重启?

lengyun 发表于 2016-4-1 20:27:36

赞同7楼的观点。

kafeiwutang 发表于 2016-4-1 20:28:51

yu_studio 发表于 2016-4-1 18:29
那就做稳定,不允许跑飞。
PLC你什么时候见死机重启?

plc也有看门狗,也可以重启,要求高的话可以双机热备份

rainbow 发表于 2016-4-1 20:49:41

能回到跑飞的那个那个位置继续往下执行,那就不叫跑飞,那是调用了子程序或执行中断去了。{:titter:}

diy0769 发表于 2016-4-1 21:10:08

rainbow 发表于 2016-4-1 20:49
能回到跑飞的那个那个位置继续往下执行,那就不叫跑飞,那是调用了子程序或执行中断去了。 ...

不知道可不可以这样,将当前动作做个反馈与当前指令做对比,

如果反馈结果与指令不符,则停机并记录,退回上一条指令待机~

gao_hailong 发表于 2016-4-1 21:17:51

开机判断是否是看门狗复位重启,如果是看门狗复位则不初始化数据,否则初始化数据。

LML 发表于 2016-4-1 21:41:16

就是是双机备份运行了,上面有人说了

yu_studio 发表于 2016-4-1 21:57:00

kafeiwutang 发表于 2016-4-1 20:28
plc也有看门狗,也可以重启,要求高的话可以双机热备份

双机冗余主要是为了防止一台出现故障,另一台可以马上启用运行。
总之,成熟的PLC的设计是非常稳定的,我使用PLC十几年了,从未见过PLC死机或重启。
另外,PLC是决不允许自动重启的,如果PLC真的死机或程序跑飞,就停在那儿,等待人是处理。对于有些设备来说,如果突然重启,会造成巨大危险或不可估量的损失。

Azuresky 发表于 2016-4-1 22:04:02

三机并行运算,结果由表决确定

风雨无阻88 发表于 2016-4-1 22:20:26

把电源做好,抗干扰做好,程序优化好,选好的工业级的芯片,在恶劣的工况下多测试.....终于你发现不会跑飞

hnzbding 发表于 2016-4-1 22:52:45

.titrwh 发表于 2016-4-1 16:16
每完成一个步骤把指令更新到flash里面,重启后先看flash里面的状态

但是要是在某个步骤开始过程中间跑飞,即使从FLASH中可以判断出该步骤未完成,但也很难接着继续完成,还有,RAM中有些数据可能已经发生变化了

benson0 发表于 2016-4-21 10:27:59

不讓程式跑飛才是王道!!
雖然有些時候很難做到...

mon51 发表于 2016-4-21 11:16:16

这个问题。95年我们针对80C31+32kEPROM+32kRAM做过设计,每一个功能(入口设置一个ID号,然后保存MCU当前的寄存器值),上电后根据ID号跳转。。。。。。异常复杂。但最终无法做到完美接力运行。

hnzbding 发表于 2016-6-7 21:08:34

mon51 发表于 2016-4-21 11:16
这个问题。95年我们针对80C31+32kEPROM+32kRAM做过设计,每一个功能(入口设置一个ID号,然后保存MCU当前的 ...

是个解决方案,离目标更近了

mon51 发表于 2016-6-7 22:22:28

hnzbding 发表于 2016-6-7 21:08
是个解决方案,离目标更近了

你无法保证MCU死机时RAM里的数据未被干扰破坏。

yoursnemo 发表于 2016-6-13 15:05:25

RAM的数据不好控制的,如果MCU跑飞的话。

zenghui 发表于 2016-6-13 15:31:24

是啊!程序是无法知道自己干的对不对的!就如同小孩子不明白大人为什么要训斥他一样!

four_zhg 发表于 2016-6-13 16:04:21

单机是没办法做到完美复位运行的,就像楼上说的双机备份或三机表决

huangqi412 发表于 2016-6-13 16:07:50

内存要搞一片非初始化区,保存各种中间参数,   上电后通过检查,调出这部分参数接着跑。

zhugean 发表于 2016-6-13 16:14:29

只能让他不跑飞,看门狗不能保证100%正确继续执行的
页: [1]
查看完整版本: 请教:单片机跑飞后,怎样能从开始跑飞前的指令位置执...