关于单片机程序自诊断和自恢复

[复制链接]
2710|5
 楼主| hf2562 发表于 2008-3-13 15:18 | 显示全部楼层 |阅读模式
  想知道如何实现自诊断和自恢复?以串口通讯为例,若串口通讯子程序,不被执行,应如何使通讯恢复而不会把RAM中存储的数据丢失?
zzw111 发表于 2008-3-13 20:09 | 显示全部楼层

用看门狗吧

其它的方法就不知道了,继续关注。
 楼主| hf2562 发表于 2008-3-14 08:44 | 显示全部楼层

不能用狗吧

用狗数据会丢失吧?
农民讲习所 发表于 2008-3-14 09:23 | 显示全部楼层

制定一个完善的通信协议

 楼主| hf2562 发表于 2008-3-14 10:10 | 显示全部楼层

恩 现在就是在制定协议呢

  协议的制定最终是要解决问题,假如通过协议知道问题是通讯服务程序不被执行,但其他功能模块是好的,下面的解决思路是不复位单片机,而使通讯服务程序重新运行。该如何处理?是不是重新配置串口中断,并调用服务程序?
wxj1952 发表于 2008-3-14 11:22 | 显示全部楼层

看操作系统教程

世界上这类问题研究了20多年了,怎样使一个程序可靠运行?OS那么大程序也会乱,它乱了之后是怎样处理/恢复的?肯定不是靠自动重新启动。
   
有一种基本策略是软件按功能分层设计,并且
1、各层之间模块不允许互相调用;(DOS时代的设计)
2、只允许自上向下单向(申请)调用;

问:为什么2、比1、设计策略可靠?

3、下层对上层只留有服务接口,它对上层来说基本是封闭的。上层程序崩溃对下层没有影响,也就是你说的“其他模块是好的”(它们没有被调用,所以是好的。)如果分层设计,那么这一层都是好的。
4、......

这样,通信程序所在的那一层,工作不正常了怎么办?基本不用程序员操心。系统(内核)工作还正常,系统心跳还在!每次系统脉搏都会使系统进入中断,中断程序是系统刷新函数,任何崩溃的当前子层在中断返回之后都将恢复正常。除非你驱动程序不完善/硬件出了问题。
5、要中断程序返回到用户程序的希望位置,是很简单的手段。这虽然是违规了——用户直接干预系统工作,可能会造成其他不稳定因素,但是凭你对系统工作的了解清晰度应该有这个把握。

您需要登录后才可以回帖 登录 | 注册

本版积分规则

24

主题

56

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部