一种快速响应9s12x系列单片机程序跑飞的方法

文档序号:10612191阅读:323来源:国知局
一种快速响应9s12x系列单片机程序跑飞的方法
【专利摘要】本发明提供一种快速响应9S12X系列单片机程序跑飞的处理方法,用于程序到错误内存地址中取指令的跑飞处理。针对单片机程序运行的机制,通过在单片机未使用的内存中填充TRAP指令,使单片机在陷阱区域取指令后,能够落入到陷阱中从而使程序回到陷阱处理程序的入口地址处执行预先设定的代码。本发明采用在Flash内填充TRAP指令,通过对每个运行函数地址的主动校验,在程序跑飞后,通过中转跳转至程序的某一确定位置,使得微控制器在受到外界干扰导致程序出错或跑飞后的恢复时间优于1ms,提升了系统的安全性和可靠性。普适于9S12X系列单片机程序跑飞处理。
【专利说明】
一种快速响应9S12X系列单片机程序跑飞的方法
技术领域
[0001]本发明涉及单片机软件编程领域,提供一种快速响应9S12X系列单片机程序跑飞的处理方法。
[0002]
【背景技术】
[0003]单片机程序“跑飞”分为两种情况,一种是程序代码中存在while、f0r构成的死循环语句块或由于干扰等原因而进入死循环,导致单片机无法响应除中断之外的任务;第二种是单片机运行到错误的内存地址,导致单片机取指令错误。
[0004]第一种情况,严格意义讲这不是跑飞,只是循环块的程序占用CPU,这种情况下可以采用“看门狗”监视技术。看门狗的原理是不断监测程序循环运行的时间,一旦发现程序运行时间超过循环设定的时间,就认为系统已陷入死循环,然后强迫程序返回到已安排了出错处理程序的入口地址处,使系统回到正常运行。这种技术存在的不足之处是程序异常后,需要等待设定的时间才能得到响应。针对第二种情况,除了可以采用“看门狗”技术进行监测外,还可以采用TRAP(陷阱)指令实现错误指令的纠错。目前,TRAP指令通常运用到操作系统中实现用户模式转换为内核模式的系统调用中,在单片机编程中鲜有TRAP指令的运用。

【发明内容】

[0005]本发明提供一种快速响应9S12X系列单片机程序跑飞的处理方法,用于程序到错误内存地址中取指令的跑飞处理。单片机程序运行的机制是:程序执行到某一内存地址后,需要到该内存地址中进行取指令的操作,然后根据指令执行相应的动作。针对单片机的这种特点,通过在单片机未使用的内存中填充TRAP指令,使单片机在陷阱区域取指令后,能够落入到陷阱中从而使程序回到陷阱处理程序的入口地址处执行预先设定的代码。
[0006]912X系列单片机有两页指令对比表,每一页有256个指令。第一页中指令0x18表示单片机需要到内存中取出下一个指令,并与第二页进行指令对照从而确定指令类型;第二页中定义了227个指令,29个未定义的指令。这29个未定义的指令拥有同一个中断向量即未定义指令陷阱。如果9S12X单片机试图执行第二页中剩余的未使用指令,将发生非法指令陷阱。程序正常进入未定义指令陷阱的顺序是:取出第一页中的0x18后,获取下一个内存地址的指令,并对照第二页中的指令进行对照。如果下一个指令是27个未定义的陷阱指令,那么发生TRAP指令异常,跳转到异常向量的处理入口。
[0007]因此,陷阱区域由“0x18与第二页中的某个指令”两个字节填充形成。为了选取合适的第二页指令,需要考虑进入陷阱时取第一指令的值。假设第一指令是0x18,则按照正常陷阱程序,在下一个地址中取出未定义的指令,从而落入陷阱;假设第一指令不是0xl8,SP当前Flash地址填充的值不是0x18,说明下一个地址存放的是0x18,那么为保证程序忽略当前指令,采用NOP指令,实现当前指令的跳过,从而保证执行下一条指令时,进入到TRAP陷阱中。因此,在选用第二页的操作码时,采用与NOP指令相应位置的指令即0xA7。最终确定在未使用的内存区域填充的TRAP指令为0xl8A7或0xA718,确保异常程序在3个指令周期内被中断系统捕捉。
[0008]本发明具体步骤如下:
I)选取TRAP指令:将0xA718选定为填充的TRAP指令。
[0009]2)填充TRAP指令:在所有的Flash区域用FILL命令进行TRAP指令的填充,实现Flash存储空间的初始化。应用程序经过编译后,程序使用的Flash区域,其相邻两个字节分别填充数值0xA7和0x18。
[0010]3)程序跑飞处理:程序落入TRAP陷阱后,将被强制返回到陷阱处理的入口函数中。在该入口函数中进行系统的复位或启动系统异常保护程序。
[0011]本发明的有益效果是采用在Flash内填充TRAP指令,通过对每个运行函数地址的主动校验,在程序跑飞后,通过中转跳转至程序的某一确定位置,使得微控制器在受到外界干扰导致程序出错或跑飞后的恢复时间优于lms,提升了系统的安全性和可靠性。
[0012]
【附图说明】
[0013]图1是程序落入陷阱区域后执行过程的流程图。
[0014]
【具体实施方式】
[0015]为了使本发明目的、技术方案更加清晰,以下结合附图对本发明进行详细说明。应当理解,此处描述的【具体实施方式】仅用以解释本发明,并不用于限定本发明。
[0016]以Freescale的MC9S12XET256为例,该单片机具有两页指令码,分别为pagel和page2,每个page具有256个指令码。其中,page I中的指令0xA7表示汇编指令NOP,指令Ox 18表示取出单片机Flash区域的下一条指令并与page2进行对照。在page2中的指令0xA7表示系统陷阱指令。因此采用陷阱指令0xA718,并用FILL命令填充到Flash区。
[0017]当程序落入陷阱后,按照图1所示的方法实现异常捕捉和处理,捕捉的方法由单片机的中断系统完成。在中断处理函数中,可以采用复位的方法实现单片机重启,实现系统的快速恢复;也可以将异常情况通过通信总线通知系统中的其它单片机或控制器,从而确保程序异常后系统能够紧急处理,提升系统的安全性和可靠性。
【主权项】
1.一种快速响应9S12X系列单片机程序跑飞的方法,其特征在于:通过在未使用的单片机内存中填充TRAP陷阱指令0xl8A7或0xA718,使落入到陷阱区域的异常程序在3个指令周期内被单片机中断系统捕捉,具体步骤如下: (1)选取TRAP指令:将0xA718选定为填充的TRAP指令; (2)填充TRAP指令:在所有的Flash区域用FILL命令进行TRAP指令的填充,实现Flash存储空间的初始化,应用程序经过编译后,程序使用的Flash区域,其相邻两个字节分别填充数值0xA7和0x18; (3)程序跑飞处理:程序落入TRAP陷阱后,将被强制返回到陷阱处理的入口函数中,在该入口函数中进行系统的复位或启动系统异常保护程序。
【文档编号】G05B19/042GK105974838SQ201610302992
【公开日】2016年9月28日
【申请日】2016年5月10日
【发明人】张悦诚, 史昇, 朱国雷
【申请人】镇江恒驰科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1