工业控制 | 能源技术 | 汽车电子 | 通信网络 | 安防监控 | 智能电网 | 移动手持 | 无线技术 | 家用电器 | 数字广播 | 消费电子 | 应用软件 | 其他方案

电路设计->微机单片机电路图->单片机综合电路图->一种高可靠MCU系统监控方案

一种高可靠MCU系统监控方案

作者:dolphin时间:2011-05-05

1目前MCU系统监控中的问题
对于单片机系统,一般都需要监控电路来提高系统的可靠性。包括用电压比较器对电源的监控和看门狗对程序的监控。为防止系统程序受干扰“飞掉”,常用看门狗定时器,这种方式对于系统进入死循环时很有效,而程序“飞掉”时极有可能跳过一段程序,正好进入另一条指令的开头。尤其在RISC系统中,绝大部分是单周期指令,容易遇到这种情况,此时程序会继续运行下去,使看门狗失效。跳过的这段程序,可能包括一些接口控制执行指令,或某些数据的输入输出,或条件判断,整个系统会因此而运行紊乱,或直接产生故障。系统出现这类故障时很难立即察觉。
1.在运用极其广泛的一类MCU系统,如分段定时控制系统中,象家用电器的电脑控制微波炉、洗衣机、电饭煲;电力行业的发电机转速控制;冶金行业的连铸、焊管及流水线系统等,都可能会在系统运行中遇到分段定时控制或某一区域内运行状态与前段运行状态密切相关的情况。此时简单地用看门狗电路作系统监控,一旦出现系统死锁而复位,将会使启动以后的整个运行过程失效,这种方法显然是行不通的。
2.对于分时多任务系统,其中的某个或几个任务出现死锁,而又有一个或多个任务仍正常运行的情况下,看门狗定时器可能会被“蒙蔽”而失去监控作用。
3.在一个程序运行周期很短,或系统根据不同运行状况的程序处理时间相差很大的情况下,看门狗定时周期难以定得合适,此时若出现干扰死机可能因难于及时发现并解决而造成故障。
如果有一种方法,使系统在运行过程中能够自行感知程序运行状况,出现问题能够随时察觉;发现故障立即报警、停止运行或复位,甚至可以自动纠错,使程序恢复正确的运行,以实现对程序的最佳监控,那将是比较理想的。
2系统在线自行跟踪基本方法
系统在线运行过程中,如果能够随时将系统运行的过程即系统当前程序的实际流程路线自动记录下来,就有办法将预期的运行路线与之比较,从而避免程序出现不可预测的死锁。打个比方,设想有一辆在公路上行驶的汽车,只要知道该汽车在各个岔路口的走向,就可以描绘出这辆汽车整个的行驶路线,但是难以保证汽车可能会在一条单一路线上行驶时抛锚。如果每隔一定距离以及重要路段设上“哨卡”,就能更加细致地了解到汽车的行驶情况,一旦出现问题就能立即知道事故出现的具体路段。同理,在程序运行过程中也可以通过人为设置的“哨卡”来记录程序当前的运行路线。在多数情况下,这些“哨卡”对系统运行并没有太大的影响。
实际上,这些“哨卡”就是可以任意插入流程中的简短程序段,每一个“哨卡”有一个特定的“标志码”以使我们能够知道程序到底运行到何处。将这些标记按出现的顺序记录在存储器中,就能依此知道CPU“行驶”的具体路线。当然,对系统的运行状态了解得越细致,程序的运行时间会越长。应将它们设置在重要的数据读写或接口操作处,各分支路口和相对独立的程序块入口处,尽量减小对系统的影响。
下面以GMS97C51单片机构成的MCU系统为例说明系统对自身运行路线的跟踪记录方法。
如图1所示,设系统CPU为97C51,外接一片SRAM6116来作运行记录,为防止掉电和死机的影响,将RAM用后备电池保护起来(系统上电初始化程序应包括将6116清零,清零程序在此略去)。

图1自行跟踪系统接口
在系统原来程序段中需要设“哨卡”的地方插入语句:
MOV
SIGN,#MARK
;#MARK为标志号,SIGN定义
LCALL
GUIDE
;为存放标志号的寄存器地址
这样,仅插入6个字节对原来程序的存储空间并无多大影响,所有的“哨卡”共用一个子程序。
GUIDE:
PUSH PSW
;保护原来程序可能用到的寄存器,如有必要也可
PUSH ACC
;将DPTR压栈保护
INC ADDR
;ADDR为标志号存放单元,上电后需清零
MOV A,ADDR
;假设只用RAM中的256个单元来做记录
JZ OUT
;若存储空间用完则停止存储记录
MOV DPL,ADDR
;设6116存储地址为7F××H
MOV DPH,#7FH
MOVX @DPTR,A
OUT:
POP ACC
;存储记录
POP PSW
RET
假设总共“哨卡”数量少于256个,用一个字节来作标志,每一个“哨卡”都会有一个独立的标志号,通过查询RAM记录内容就可知道程序的实际运行路线了。这里我们还发现程序自行跟踪的一个额外的作用,即只需一个读RAM的简单装置,此方法就可用来作程序开发过程中的仿真调试而无须PC机及仿真器。
若系统无法用到并行总线,可将6116换成串行存储器,如美国Xicor公司的非易失性RAMX24C45,程序则应作相应改动。插入“哨卡”后应考虑对原系统运行时间上的影响。
3利用自行跟踪方式对系统的实时监控
在作系统监控的应用中,系统必须对自身运行状况作实时监控。利用上面的方式,在系统中加上监控程序,系统对自身运行情况亦可作自行监测。但这样一来,不仅会对原来程序造成较大影响,而且会因为系统本身可能受到干扰或其它原因而瘫痪,因而是不可靠的。对于高可靠性要求的系统,有必要另加一套监控系统来对原系统及监控系统自身作专门监护,从后面的讨论中可知,这外加的系统可以是廉价、小巧、安全可靠和高效的。
在实时监控过程中,可以省掉对程序运行路线的存储记录而直接判断。系统电路如图2所示。它进一步减小了对原系统的影响而又提高了运行效率。在监控系统运行过程中,应从以下三个方面来考虑:

图2自行跟踪监控系统电路
1.监控系统对原系统的精确跟踪;
2.利用软件狗防止主系统死锁;
3.对监控系统自身的监控。
系统非正常运行除硬件与电源系统的问题之外,难以琢磨的主要是软件系统。程序受到干扰产生故障有两种情况:
一是CPU没有按既定程序运行,系统指针“飞”到其它指令代码地址处,好象非法执行了一个跳转语句。这种情况存在很大的潜在危险性,利用看门狗技术难以察觉,可能带来难以预料的事故,且无论哪一类结构的指令系统都无法排除。此时利用在线跟踪技术发挥其监控作用是一个有效方法。可以在程序运行的各个路口和重要的操作前后插入“哨卡”,并将“哨卡”在系统程序中均匀分布,用专门的监控CPU实时跟踪,与已预存在监控系统中的正确路线比较,可及时排除原系统软件产生的故障,有时还可以使系统从其产生误操作之前的一个“哨卡”处恢复系统的正常运行。



评论

技术专区