两种“软件陷阱技术”的比较
flinay 2022-12-01

  引 言

  单片机应用系统的抗干扰具体可分为软件和硬件两方面,其中,软件抗干扰以其设计灵活、节省硬件资源、降低成本等优势越来越得到广泛采用。软件抗干扰技术主要有“指令冗余技术”、“软件陷阱技术”、“软件看门狗技术”、“数字滤波技术”等。本文就软件陷阱技术对单片机应用系统抗干扰的原理与具体实现方法进行探讨和研究,给出实现软件陷阱技术的两种形式,并将该技术成功地使用在多个实际的单片机应用系统中,保证系统的可靠运行。

  1 程序跑飞和软件陷阱技术概述

  程序正常运行时,程序计数器PC始终指向正在执行的这条指令的下一条指令的第一个字节的程序存储器单元地址,这样就保证了单片机能够正确地读取每一条指令的各个字节,即CPU先读取操作码,再读取操作数(如果有操作数字节的话)。在MCS-51系列单片机中,程序计数器PC的寻址范围是0000H~FFFFH,共64 KB。用户应用程序中,根据系统要求,规定了程序运行的惟一路径。这体现在系统上电后,程序计数器PC有唯一的变化历程,保证了程序正常、有序地运行。程序跑飞是指系统受到某种干扰后,程序计数器PC的值偏离了给定的唯一变化历程,导致程序运行偏离正常的运行路径。程序跑飞因素及后果往往是不可预计的。

  在很多情况下,程序跑飞后系统会进入死循环而导致死机。这时,应采取有效措施引导跑飞的程序尽快退出死循环并迅速复位。实践证明,软件陷阱技术能有效引导跑飞的程序尽快退出死循环并迅速复位。

  2 两种软件陷阱技术的比较分析

  当单片机应用系统的CPU受到干扰时,不良影响的主要形式有:①非正常修改程序计数器PC指针;②改写可编程输出端口的状态;③非正常修改重要数据区的数据。以上三个方面的不良影响会使单片机应用系统程序失控,控制状态失灵,其后果是非常严重的,它甚至会使系统崩溃,造成严重的工业事故。以上几个方面的不良影响可以使用软件陷阱技术加以解决。现将这一技术的实现方法归纳总结为两种。

  2.1 软件陷阱技术实现形式之一

  单片机应用系统的用户应用程序一般由循环结构的主程序和中断服务子程序组成.将下面的软件陷阱程序段插入到用户应用程序中(如何插入的问题将在下面的第3点中详细讨论),即在用户应用程序存储器不用区域写入代码.

  当单片机应用系统工作正常时,单片机的CPU不会执行软件陷阱程序段;但是,当单片机应用系统受到干扰而程序跑飞后,由于程序计数器PC值错误,破坏了正常的指令格式,导致执行非正常指令,从而执行软件陷阱程序段,落入软件陷阱,将跑飞的程序引导到复位入口地址0000H。软件陷阱程序段中的连续2条NOP指令是为了增强“LJMP 0000H”被捕获的能力,即“IJMP0000H”不会被冲散,当程序跑飞后会得到完整地执行,从而使跑飞的程序纳入正常轨道。

  2.2 软件陷阱技术实现形式之二

  虽然上述的软件陷阱技术能实现可靠回复功能,但是有两个方面的严重隐患。第一,隐患主要是在对中断的处理上:首先,程序跑飞很可能是发生在中断服务子程序中,其次,一些未使用的中断很可能因为程序跑飞而被错误地激活,而这时只是简单地让跑飞的程序从头开始运行,就不能关闭已激活的中断,这样,单片机的中断系统会认为程序仍在处理中断,就不会再响应同级中断。第二,大部分单片机应用系统在上电复位初始化后,不希望在程序跑飞而用软件陷阱回复后又重新初始化。

  为了解决第一个隐患,当程序跑飞时,一定要想办法关闭可能发生的中断,然后再执行用户应用程序。大家知道,当CPU进入中断后,就只能用RETI指令关闭中断.解决第一个隐患的具体方法是,改变软件陷阱程序段:当程序跑飞后,将跑飞的程序引到0202H处,然后在0202H处完成关闭中断的工作,即在用户应用程序存储器不用区域写入代码“0000020202H”。需要注意的是,程序存储器不用区域的最后两个存储单元,一定要分别写入代码“00H”。

  NOP

  NOP

  LJMP 0202H ;前面的连续2条NOP指令是为了;增强“LJMP 0202H”被捕获的能力

  而在0202H开始的程序存储器单元进行如下的编程:

  ORG 0202H

  MOVDPTR,#ERRl

  PUSH DPL

  PUSH DPH

  RETI ;关闭第1级中断,并跳转到ERRl处

  ERRl: CLR A

  PUSH ACC

  PUSH ACC

  RETI ;关闭第2级中断,软件回复到0000H处

  这样,就保证了无论在什么情况下,都可以关闭2级中断。当然,如果没有中断被激活时运行了这段程序,也不会有什么不良影响。

 

  为了解决第二个隐患,可以在系统主程序入口处加一个软件开关来判别是上电复位直接进入0000H的,还是经过软件陷阱回复而进入0000H的,根据不同的判别结果执行不同的程序。

  单片机应用系统上电时,上电复位电路会使单片机处于复位状态。这一般称为冷启动。

  但是,软件陷阱技术使跑飞的程序回复到主程序入口地址0000H时,不影响特殊功能寄存器SFR的有效位。解决第二个隐患的具体方法是,设置上电复位标志。例如,以PSW.5作为上电标志位,当PSW.5=0时,表示是上电复位;当PSW.5=l时,表示是软件陷阱回复。图2是上电复位与程序跑飞后软件陷阱回复初始化处理框图。0000H是的复位入口,程序启动后,首先判断是上电复位,还是程序跑飞后软件陷阱回复。上电复位是开机操作,要建立上电标志,并进行系统的完全初始化。程序跑飞后软件陷阱回复应该进行相关资源的检查与修复,以防止系统运行出错。另外,根据系统特点,需要保留一些过程数据,不得进行完全初始化。

  为了解决上述两个隐患,有如下具体编程。其中,START0为系统上电复位完全初始化于程序入口,ER-ROR为程序跑飞后软件陷阱回复应进行的系统部分初始化和相关资源的检查与修复程序入口,LOOP是用户应用程序功能模块入口。

  ORG0000H

  LJMP START

  ORG 0100H

  START: MOV C,PSW.5

  JC ERROR

  SETB C

  MOV PSW.5,C

  LCALL STARTO

  LJMP LOOP

  ERROR: ……

  L00P: …… ;应用程序功能模块

  LJMP LOOP

  ORG 0200H

  NOP

  NOP

  MOV DPTR,#ERRl

  PUSH DPL

  PUSH DPH

  RETl ;关闭第1级中断,并跳转到ERRl处

  CRRl: CLR A

  PUSH ACC

  PUSH ACC

  RETI ;关闭第2级中断,软件回复到0000H处

  3 软件陷阱在用户应用程序中的安排位置

  软件陷阱程序段可以插入到主程序中或者中断服务子程序中。根据实际应用情况,对软件陷阱程序段的位置安排可以有5种方式。

  (1)在主程序的应用功能模块之间

  在单片机应用系统程序设计时,将软件陷阱程序段分散地放在各应用功能模块之间空余的程序存储器单元里。当用户应用程序正常运行时,这些软件陷阱程序段并不会执行,但是,当单片机应用系统的CPU受干扰而使程序失控时,程序计数器PC指针一旦落入这些陷阱区,就可以马上将跑飞的程序拉回到正确的轨道。这种方法的确很有效。软件陷阱的多少一般依据用户应用程序大小而定,一般1KB的用户应用程序有2~3个软件陷阱就可以了,具体方法如下:

  • 应用功能模块1

  • 软件陷阱程序段

  • 应用功能模块2

  • 软件陷阱程序段

  (2)在闲置未使用的EPROM/Flash ROM空间

  在闲置未使用的EPROM/Flash ROM空间设置软件陷阱,即在这些闲置未使用的EPROM/Flash ROM空间写满代码“0000020202H”。值得注意的是,最后两个存储单元一定要分别写入代码“OOH”。当程序跑飞而进入此区后,便会被软件陷阱迅速拉回正常轨道。

 

  (3)在中断服务子程序中

  软件看门狗(soltware watchdog)实际上是软件陷阱的一个应用实例。以MCS-5l系列单片机为例,在系统初始化时将内部的定时器/计数器T0设置为定时器,并将TO定时溢出中断设置为高级中断.如果系统采用6 MHz时钟,可以用如下的初始化程序段使TO定时约130 ms来形成软件看门狗:

  • MOV TMOD, #01H ;将T0设置为16位定时器

  • SETB ETO ;允许TO中断

  • SETB PTO ;将TO定时溢出中断设置为高级中断

  • MOV TH0,#0;给TO赋初值,定时约130/ms

  • MOV TLO,#0

  • SETB TR0 ;启动T0开始定时

  • SETB EA ;允许CPU中断

  另外,TO定时溢出中断服务子程序编程如下:

  • INTO-PRo; MOV A,#02H

  • PUSH ACC

  • PUSH ACC

  • RET1 ;中断返回到0202H单元

  当用户应用程序运行正常时,在小于130 ms的时间内,CPU应该及时“喂狗”一一执行清狗指令“MOV THO,#0”和“MOV TLO,#0”。这样,TO就不会产生定时溢出,从而T0定时溢出中断服务子程序不会被执行。但是,当单片机应用系统的CPU受干扰而使程序失控时,CPU就不会及时执行清狗指令,以致于产生TO定时溢出中断,就可以马上将跑飞的程序拉回到正确的轨道。实现及时“喂狗”的具体方法是在用户应用程序中的适当位置插入指令“MOV TH0,#0”和“MOV TLO,#O”。实际上,TO定时溢出中断服务子程序就是一个软件陷阱,一旦执行T0定时溢出中断服务子程序,就是把跑飞的程序强行拉回到0202H程序存储器单元。由前面的分析可知,已经跑飞的程序可以迅速地被纳入正确的轨道。

  (4)在未使用的程序存储器地址空间

  对MCS-51系列单片机而言,程序计数器PC的寻址范围是0000H~FFFFH,共64 KB;然而,在实际的单片机应用系统中,一般没有使用到64 KB的程序存储器,这样就会余下大量的程序存储器地址空间。例如,系统中仅选用了1片2764作为程序存储器,其地址空间为8 KB。那么将有56 KB程序存储器地址空间被闲置。当CPU受到干扰而使程序计数器PC指向这些被闲置的程序存储器地址空间时,CPU取指令得到的指令代码为“0FFH”(这个结论可以根据图3所示电路分析后得出)。该代码是“MOV R7,A”指令的机器码。显而易见,当单片机应用系统的CPU受干扰而使程序失控时,程序计数器PC指针一旦落入这些被闲置的程序存储器地址空间时,CPU执行该指令不仅将错误地修改寄存器R7的内容,而且无法将跑飞的程序纳入正确的轨道。可以使用下面的软件陷阱技术解决这个问题。

  EPROM芯片2764的地址空间为0000H~lFFFH,译码器74LSl38的输出Y0为其片选信号,2000H~FFFFH为未使用的程序存储器空间。当程序计数器PC的值落入2000H~FFFFH空间时,一定有Y0为高电乎;当取指令操作时,PSEN为低电平,则74LS244的选通信号有效,所以74LS244被选中。进一步分析图3所示电路可知,当用户应用程序失控而程序计数器PC指向被闲置的程序存储器地址空间2000H~FFFFH时,总线驱动器74LS244被选通,这时CPU通过总线读入的指令机器码为020202H,正好是一条转移指令“LJMP0202H”,这样,使程序计数器PC指向0202H程序存储器单元。由前面的分析可知,已经跑飞的程序可以迅速地被纳入正确的轨道。

  (5) 对外部RAM写操作实旆监控保护而设置软件陷阱

  在单片机应用系统的外部数据存储器RAM中,一般保存了大量的预置数据和程序运行时产生的中间数据。外部数据存储器RAM的写入是由指令来完成的。当CPU受干扰程序跑飞而误执行了该指令时,就会改写RAM中内容,导致RAM中的重要数据丢失。为了减小这种RAM中数据丢失的可能性,应在外部RAM写操作之前,对写操作进行条件判断。如果条件满足才执行写入操作;如果条件不满足,则将写入操作屏蔽,并使程序落入陷阱,进入死循环。在程序落人死循环陷阱后,便只能由其他软、硬件抗干扰技术(如看门狗技术)使系统退出死循环陷阱,从而使系统恢复正常。具体源程序代码如下(不妨设要写入外部RAM的内容存放在累加器A中,要写入数据的外部RAM单元地址存放在DPTR中):

  • MOV 6EH, #55H

  • MOV 6FH, #OAAH

  • LCALL WRlTE

  • RET

  • WRITE:NOP

  • CINE 6EH,#55H,TRAP

  ;写入条件是(6EH)=#55H

  • CJNE 6FH,#OAAH,TRAP且(6FH)=#OAAH

  • MOVX @DPTR,A

  • NOP

  • M0V 6EH,#00H

  • M0V 6FH,#OOH

  • RET

  • TRAP, SJMP TRAP ;落入死循环陷阱

  4 结 论

  与第1种形式的软件陷阱技术比较,第2种形式的软件陷阱技术消除了两个严重的隐患,因此,第2种形式的软件陷阱技术是一种有效实用的单片机应用系统抗干扰技术。本文所介绍的软件陷阱技术已成功地使用在多个实际的单片机应用系统中,保证了系统的可靠运行。

声明: 本文转载自其它媒体或授权刊载,目的在于信息传递,并不代表本站赞同其观点和对其真实性负责,如有新闻稿件和图片作品的内容、版权以及其它问题的,请联系我们及时删除。(联系我们,邮箱:evan.li@aspencore.com )
0
评论
  • 相关技术文库
  • 硬件
  • 原理图
  • 信号完整性
  • EMI
  • TVS管在通信电路的防护应用

    TVS管(Transient Voltage \x0aSuppressor),直译过来就是瞬态电压抑制器,在电磁兼

    昨天
  • EEROM和EPROM的性能/应用区别

    EEPROM&EPROMEEPROM是指带电可擦可编程只读存储器,是一种掉电后数据不丢失的存储芯片,EEPROM可以在电脑上或专用设备上擦除已有信息,重

    昨天
  • EMC相关基础知识

    从本文开始将围绕“开关噪声-EMC”这一主题,对开关电源相关的EMC及其对策等进行解说。计划先介绍EMC相关的基础知识,然后再探讨噪声对策相关的内容。第一篇将以

    昨天
  • 6Gbps双通道单信道SATA转接驱动器

    日前,德州仪器(TI)宣布推出一款在目前可用6Gbps转接驱动器/均衡器中具有最低工作功耗与最低自动低功耗(ALP)模式的双通道单信道SATA转接驱动器及信号调

    昨天
  • 继电器驱动电路的保护设计

    在开始选择继电器驱动的时候,习惯性选择现有的集成芯片,比如NUD3126和NUD3124,没有仔细想过为什么要选用它们,是否可以选择分立的三极管或者达林顿管。这

    昨天
  • 白光LED模组驱动电路设计方案

    由于当前温室效应和能源危机的影响,使得人们对节能技术越来越关注。LED照明具有节能、寿命长等优点,LED照明技术作为新型绿色照明技术,目前的应用日趋广泛。LED

    昨天
  • 基于AP3605设计的典型白光LED驱动电路解析

    小尺寸的LCD显示模块早已成为手持式数码产品的重要组成部分,随着消费者对视觉方面要求的提高,LCD显示模块的设计变得越来越重要。如何在1.8寸至2.8寸的LCD

    昨天
  • 新型LED驱动器集成电路HV9925的主要参数及功能

    HV9925是Supertex公司2006年推出的一款新型LED驱动器集成电路。其实质上是一个高输入电压的DC/DC转换器,市电(85~264Vac)经全波整流

    昨天
  • 信号完整性效应的经验法则

    随着现代数字电子系统突破1GHz的壁垒,PCB板级设计和IC封装设计必须都要考虑到信号完整性和电气性能问题。凡是介入物理设计的人都可能会影响产品的性能。所有的设

    前天
  • 可降低变压器的漏感和尖峰电压的RC电路

    开关电源设计中,我们常常使用到一个电阻串联一个电容构成的RC电路,RC电路性能会直接影响到产品性能和稳定性。本文将为大家介绍一种既能降低开关管损耗,且可降低变压

    前天
  • 基于DSP+IPM硬件结构的变频调速系统设计方案

    引言变频调速技术广泛应用于工业领域。随着电力电子控制技术及元器件的不断发展,变频调速系统的集成度、智能化程度越来越高,硬件构成也越来越紧凑、简单。DSP(数字信

    02-06
  • 数码相机闪光灯的驱动控制电路设计

    在光线较弱的条件下,胶卷或数码摄影的高端设备需要氙气闪光灯管来进行拍摄。氙气闪光灯管可提供瞬间的高强度光源,在对较远处、高速移动或弱光条件下的物体进行拍摄时,这

    02-06
下载排行榜
更多
广告