MC68HC(9)08系列MCU具备防止代码跑飞的功能,而且即使发生了代码跑飞,它也能防止应用出现故障。导致代码跑飞的原因可能是错误的代码、超出规范允许范围运行MCU、或者是严重的EMI或电气噪声事件。从定义来看,并没有明确指出在代码跑飞期间会出现什么情况,但是由于它是超出规范运行环境而导致的,很容易破坏程序计数器,从而导致MCU出现不可预测的行为。
在可能发生这种现象的MCU应用中, 我们建议采取下文中介绍的各种预防措施。但是即使采取了这些推荐预防措施,在异常情况下,仍然存在着较小的代码跑飞的可能性。正因为如此,我们还介绍了能够防止MCU或应用硬件在这种情形下遭到损坏的技术。在下列应用中,这些预防措施尤为重要:使用了任何类型的片上或外部非易失性存储器(闪存、EEPROM或备份RAM)的应用、以及外部硬件有可能进入一种异常状态,甚至是破坏状态的应用。
根据定义,在代码跑飞后,MCU的运行是不可预测的,甚至不能相信其I/O端口会继续输出可接受的状态。这就有可能使其端口进入一种不可预测的状态,进而导致外部硬件也进入不可预测的状态。
在使用非易失性存储器的应用中,储存器中的内容有可能被MCU的失控行为破坏。如果闪存或EEPROM存储器中包含应用代码,问题会更严重。如果代码遭到破坏,整个应用可能都无法运行,而且不可能通过局部的重新编程来恢复。这就要求我们通过在线重新编程,甚至可能必须更换包含MCU的整个PCB,来修复这些设备。
在基于ROM的简单应用中,可能不使用非易失性存储器,也无需关心I/O出现无法预测的状态。在这种情况下,采取预防措施来防止代码跑飞就显得不那么紧迫,尽管它仍然具备一些作用, 例如在电压下降时防止LED指示灯或其它显示器的混乱闪烁。
即使事先没有迹象表明一个应用可能出现某种有害的故障,我们还是强烈建议您采取所有必要的预防措施,以防止代码跑飞,这是一个非常好的做法。这些建议都是一些老生常谈,但人们有时会置若罔闻,因此也并非总是被采用的。虽然我们在这里讨论的是MC68HC(9)08 这款特定的器件, 但这些技术适用于所有MCU的应用。
文章评论(0条评论)
登录后参与讨论