当前位置:首页 > 单片机 > 单片机
[导读]系统地介紹软件陷阱技术实现的原理、方法和具体措施。首先,给出程序跑飞的概念和软件陷阱技术的基本含义,然后,从不同方面比较分析软件陷阱技术实现的两种形式,指出第一种形式的两个严重隐患,给出克服这两个隐患的第二种形式.详细讨论系统上电复位与软件回复不同初始化过程的问题,以及软件陷阱在用户应用程序中安排位置的问题。

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

1 程序跑飞和软件陷阱技术概述
    程序正常运行时,程序计数器PC始终指向正在执行的这条指令的下一条指令的第一个字节的程序存储器单元地址,这样就保证了单片机能够正确地读取每一条指令的各个字节,即CPU先读取操作码,再读取操作数(如果有操作数字节的话)。在MCS-51系列单片机中,程序计数器PC的寻址范围是0000H~FFFFH,共64 KB。用户应用程序中,根据系统要求,规定了程序运行的惟一路径。这体现在系统上电后,程序计数器PC有唯一的变化历程,保证了程序正常、有序地运行。程序跑飞是指系统受到某种干扰后,程序计数器PC的值偏离了给定的唯一变化历程,导致程序运行偏离正常的运行路径。程序跑飞因素及后果往往是不可预计的。
    在很多情况下,程序跑飞后系统会进入死循环而导致死机。这时,应采取有效措施引导跑飞的程序尽快退出死循环并迅速复位。实践证明,软件陷阱技术能有效引导跑飞的程序尽快退出死循环并迅速复位。

2 两种软件陷阱技术的比较分析
    当单片机应用系统的CPU受到干扰时,不良影响的主要形式有:①非正常修改程序计数器PC指针;②改写可编程输出端口的状态;③非正常修改重要数据区的数据。以上三个方面的不良影响会使单片机应用系统程序失控,控制状态失灵,其后果是非常严重的,它甚至会使系统崩溃,造成严重的工业事故。以上几个方面的不良影响可以使用软件陷阱技术加以解决。现将这一技术的实现方法归纳总结为两种。
2.1 软件陷阱技术实现形式之一
    单片机应用系统的用户应用程序一般由循环结构的主程序和中断服务子程序组成,主程序的结构如图1所示。将下面的软件陷阱程序段插入到用户应用程序中(如何插入的问题将在下面的第3点中详细讨论),即在用户应用程序存储器不用区域写入代码“OO00020000H”。

    NOP
    NOP
    LJMP O000H
    当单片机应用系统工作正常时,单片机的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是MCU的复位入口,程序启动后,首先判断是上电复位,还是程序跑飞后软件陷阱回复。上电复位是开机操作,要建立上电标志,并进行系统的完全初始化。程序跑飞后软件陷阱回复应该进行相关资源的检查与修复,以防止系统运行出错。另外,根据系统特点,需要保留一些过程数据,不得进行完全初始化。

    为了解决上述两个隐患,有如下具体编程。其中,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系列单片机为例,在系统初始化时将MCU内部的定时器/计数器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的内容,而且无法将跑飞的程序纳入正确的轨道。可以使用下面的软件陷阱技术解决这个问题。
    如图3所示,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的写入是由“MOVX@DPTR,A”指令来完成的。当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种形式的软件陷阱技术是一种有效实用的单片机应用系统抗干扰技术。本文所介绍的软件陷阱技术已成功地使用在多个实际的单片机应用系统中,保证了系统的可靠运行。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

助力科研与检测新突破 上海2024年5月15日 /美通社/ -- 全球知名的科学仪器和服务提供商珀金埃尔默公司今日在上海举办了主题为"创新不止,探索无界"的新品发布会,集中展示了其在分析仪器领域的最...

关键字: 质谱仪 BSP DSC 气相色谱

上海2024年5月16日 /美通社/ -- 2024年5月10日至5月13日,富士胶片(中国)投资有限公司携旗下影像产品创新力作亮相北京P&E 2024。在数码相机展览区域,全新制定的集团使命"为世界绽...

关键字: 富士 数码相机 影像 BSP

贝克曼库尔特目前已成为MeMed Key免疫分析平台和MeMed BV检测技术的授权经销商 在原有合作的基础上,继续开发适用于贝克曼库尔特免疫分析仪的MeMed BV检测 加州布瑞亚和以色列海法2024年5月16日...

关键字: BSP IO 检测技术 免疫分析仪

英国英泰力能的燃料电池是可产业化的产品解决方案 英国首个专为乘用车市场开发的燃料电池系统 在 157kW 功率下,此燃料电池比乘用车的其他发动机更为强大 &...

关键字: ENERGY INTELLIGENT 氢燃料电池 BSP

引领供应链数字化转型新潮流 上海2024年5月16日 /美通社/ -- 5月14日,"第七届亚太智慧供应链与物流创新博览会"在上海顺利举办,作为中国和亚太区最大规模,最有影响力的顶流供应链物流盛会,...

关键字: 数字化 软件 供应链管理 控制

深爱人才,共赴"芯"程 深圳2024年5月15日 /美通社/ -- 5月11日,深圳国资国企"博士人才荟"半导体与集成电路产业专场活动在深圳市重投天科半导体有限公司(简...

关键字: 半导体 集成电路产业 BSP 人工智能

武汉2024年5月15日 /美通社/ -- 北京时间4月26日-5月4日,2024 VEX 机器人世界锦标赛于美国得克萨斯州达拉斯市举办。本届 VEX 世锦赛为期九天,设有 VIQRC 小学组/初中组、V5RC 初中组/...

关键字: 机器人 BSP RC POWERED

上海2024年5月15日 /美通社/ -- 由生成式人工智能(AI)驱动的临床阶段生物医药科技公司英矽智能宣布,与复星医药(600196.SH;02196.HK)合作开发的潜在"全球首创"候选药物IS...

关键字: ISM BSP PC 人工智能

上海2024年5月13日 /美通社/ -- 5月8日,浦东新区国资委组织陆家嘴集团等9家区属企业与立邦中国召开合作交流会,旨在贯彻落实浦东新区区委、区政府工作要求,进一步放大进博会溢出带动效应,持续扩大区属企业与进博会重...

关键字: BSP 数字化 自动化立体仓库 智慧园区

上海2024年5月13日 /美通社/ -- 在数字化时代,高效的税务管理和ERP系统成为企业发展的关键。为了满足这一需求商应信息科技与Exact Software 易科软件就金四全电票税系统与ERP系统集成及商务合作建立...

关键字: AC 软件 BSP 数字化
关闭
关闭