程序是不是运行在有效的存储器范围内
发布时间:2014/4/22 22:11:40 访问次数:677
检测这些情况并不困难,可能只需要额外的几行编码。可用的技术包括:看门狗(程序的健全性)定时器、软件检查点、错误捕获、无操作返回码以及对未使用的中断向量位置的捕获。
应对死循环最有效的保护是使用一个sanity定时器或看门狗定时器。现在,UCC1895J很多微处理器包含集成的sanlty定时器,如果没有定时器,则可以用外部电路实现。这种想法就是设置一个定时器,当它计数到某设定值时使微处理器复位。编写的软件输出周期性的sanlty脉冲以使定时器在超时前复位。如果每个程序都运行正常,定时器就不会超时,因此,也不会使微处理器复位。如果处理器陷入死循环,定时器就不输出samty脉冲,于是,定时器超时,微处理器复位,系统从死循环中退出。在这个过程中,系统可能会出错,但它不再处于锁死状态并且很快平稳恢复。sanity脉冲的代码可以写为一个子程序,主程序重复调用这个子程序。这仅仅需要加几行编码即可。
软件令牌是另一种方法。令牌通常加在软件模块的入口和出口处,人口和出口令牌都设成相同的值。退出一个模块时,如果出口令牌与入口令牌不匹配,就可以从某个地方跳转到例行程序。然后就可以退到错误恢复程序,这就可以减少可能的掼害,实现平稳恢复。
如果存储器是分区的,则程序被限制在存储器的特定区域。如果程序存储器是只读存储器(ROM),软件中可以设置陷阱,防止程序试图从有效存储范围外存取指令。未使用的部分程序存储器应该填充“无操作”(或相似的)指令,最后跳转到错误处理程序。按照这种方式,如果因疏忽跳转至未使用或不存在的存储区时,将会调用错误处理程序。
未使用的微处理器硬件中断向量位置经常成为程序流程错误的源。如果静电放电瞬态过程出现在未使用中断的输入上,那么它将导致程序跳转至中断向量的位置。如果这个位置包含一条程序指令或存储的数据,那么,结果将难以预料。简单的解决办法就是在所有未使用的中断向量位置设置一条“返回”指令或一条跳转至错误处理程序的指令。
一旦检测到程序流程错误,就需要使系统返回到一个已知的稳定状态,尽可能使损害降到最小。这可以通过将控制转移到错误处理程序来实现。最简单的错误处理程序是使系统复位。然而,在某些情况下,这种强制复位的办法是不可接受的。错误恢复应该包括损害评估和必要时对程序进行修复。具体怎么处理依赖于特定系统的具体问题,这个问题超出了本书的范围。
检测这些情况并不困难,可能只需要额外的几行编码。可用的技术包括:看门狗(程序的健全性)定时器、软件检查点、错误捕获、无操作返回码以及对未使用的中断向量位置的捕获。
应对死循环最有效的保护是使用一个sanity定时器或看门狗定时器。现在,UCC1895J很多微处理器包含集成的sanlty定时器,如果没有定时器,则可以用外部电路实现。这种想法就是设置一个定时器,当它计数到某设定值时使微处理器复位。编写的软件输出周期性的sanlty脉冲以使定时器在超时前复位。如果每个程序都运行正常,定时器就不会超时,因此,也不会使微处理器复位。如果处理器陷入死循环,定时器就不输出samty脉冲,于是,定时器超时,微处理器复位,系统从死循环中退出。在这个过程中,系统可能会出错,但它不再处于锁死状态并且很快平稳恢复。sanity脉冲的代码可以写为一个子程序,主程序重复调用这个子程序。这仅仅需要加几行编码即可。
软件令牌是另一种方法。令牌通常加在软件模块的入口和出口处,人口和出口令牌都设成相同的值。退出一个模块时,如果出口令牌与入口令牌不匹配,就可以从某个地方跳转到例行程序。然后就可以退到错误恢复程序,这就可以减少可能的掼害,实现平稳恢复。
如果存储器是分区的,则程序被限制在存储器的特定区域。如果程序存储器是只读存储器(ROM),软件中可以设置陷阱,防止程序试图从有效存储范围外存取指令。未使用的部分程序存储器应该填充“无操作”(或相似的)指令,最后跳转到错误处理程序。按照这种方式,如果因疏忽跳转至未使用或不存在的存储区时,将会调用错误处理程序。
未使用的微处理器硬件中断向量位置经常成为程序流程错误的源。如果静电放电瞬态过程出现在未使用中断的输入上,那么它将导致程序跳转至中断向量的位置。如果这个位置包含一条程序指令或存储的数据,那么,结果将难以预料。简单的解决办法就是在所有未使用的中断向量位置设置一条“返回”指令或一条跳转至错误处理程序的指令。
一旦检测到程序流程错误,就需要使系统返回到一个已知的稳定状态,尽可能使损害降到最小。这可以通过将控制转移到错误处理程序来实现。最简单的错误处理程序是使系统复位。然而,在某些情况下,这种强制复位的办法是不可接受的。错误恢复应该包括损害评估和必要时对程序进行修复。具体怎么处理依赖于特定系统的具体问题,这个问题超出了本书的范围。
上一篇:瞬态加固软件设计
上一篇:在输入输出接口处检测错误