新闻中心

EEPW首页>嵌入式系统>设计应用> 一种高可靠MCU系统监控方案

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

——
作者: 时间:2007-01-26 来源:《电子查询网》 收藏
1 目前mcu系统监控中的问题

对于单片机系统,一般都需要监控电路来提高系统的可靠性。包括用电压比较器对电源的监控和看门狗对程序的监控。为防止系统程序受干扰“飞掉”,常用看门狗定时器,这种方式对于系统进入死循环时很有效,而程序“飞掉”时极有可能跳过一段程序,正好进入另一条指令的开头。尤其在risc系统中,绝大部分是单周期指令,容易遇到这种情况,此时程序会继续运行下去,使看门狗失效。跳过的这段程序,可能包括一些接口控制执行指令,或某些数据的输入输出,或条件判断,整个系统会因此而运行紊乱,或直接产生故障。系统出现这类故障时很难立即察觉。 1. 在运用极其广泛的一类mcu系统,如分段定时控制系统中,象家用电器的电脑控制微波炉、洗衣机、电饭煲;电力行业的发电机转速控制;冶金行业的连铸、焊管及流水线系统等,都可能会在系统运行中遇到分段定时控制或某一区域内运行状态与前段运行状态密切相关的情况。此时简单地用看门狗电路作系统监控,一旦出现系统死锁而复位,将会使启动以后的整个运行过程失效,这种方法显然是行不通的。

2. 对于分时多任务系统,其中的某个或几个任务出现死锁,而又有一个或多个任务仍正常运行的情况下,看门狗定时器可能会被“蒙蔽”而失去监控作用。

3. 在一个程序运行周期很短,或系统根据不同运行状况的程序处理时间相差很大的情况下,看门狗定时周期难以定得合适,此时若出现干扰死机可能因难于及时发现并解决而造成故障。

如果有一种方法,使系统在运行过程中能够自行感知程序运行状况,出现问题能够随时察觉;发现故障立即报警、停止运行或复位,甚至可以自动纠错,使程序恢复正确的运行,以实现对程序的最佳监控,那将是比较理想的。

2 系统在线自行跟踪基本方法

系统在线运行过程中,如果能够随时将系统运行的过程即系统当前程序的实际流程路线自动记录下来,就有办法将预期的运行路线与之比较,从而避免程序出现不可预测的死锁。打个比方,设想有一辆在公路上行驶的汽车,只要知道该汽车在各个岔路口的走向,就可以描绘出这辆汽车整个的行驶路线,但是难以保证汽车可能会在一条单一路线上行驶时抛锚。如果每隔一定距离以及重要路段设上“哨卡”,就能更加细致地了解到汽车的行驶情况,一旦出现问题就能立即知道事故出现的具体路段。同理,在程序运行过程中也可以通过人为设置的“哨卡”来记录程序当前的运行路线。在多数情况下,这些“哨卡”对系统运行并没有太大的影响。 实际上,这些“哨卡”就是可以任意插入流程中的简短程序段,每一个“哨卡”有一个特定的“标志码”以使我们能够知道程序到底运行到何处。将这些标记按出现的顺序记录在存储器中,就能依此知道cpu“行驶”的具体路线。当然,对系统的运行状态了解得越细致,程序的运行时间会越长。应将它们设置在重要的数据读写或接口操作处,各分支路口和相对独立的程序块入口处,尽量减小对系统的影响。

下面以gms97c51单片机构成的mcu系统为例说明系统对自身运行路线的跟踪记录方法。

如图1所示,设系统cpu为97c51,外接一片sram 6116来作运行记录,为防止掉电和死机的影响,将ram用后备电池保护起来(系统上电初始化程序应包括将6116清零,清零程序在此略去)。

在系统原来程序段中需要设“哨卡”的地方插入语句:

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



关键词:

评论


相关推荐

技术专区

关闭