技巧 1——用已知值填充 ROM
软件开发人员往往都是非常乐观的一群人,只要让他们的代码忠实地长时间地运行就可以了,仅此而已。微控制器跳出应用程序空间并在非预想的代码空间中执行这种情况似乎是相当少有的。然而,这种情况发生的机会并不比缓存溢出或错误指针失去引用少。它确实会发生!发生这种情况后的系统行为将是不确定的,因为默认情况下内存空间都是 0xFF,或者由于内存区通常没有写过,其中的值可能只有上帝才知道。
不过有相当完备的 linker 或 IDE 技巧可以用来帮助识别这样的事件并从中恢复系统。技巧就是使用 FILL 命令对未用 ROM 填充已知的位模式。要填充未使用的内存,有很多不同的可能组合可以使用,但如果是想建立更加可靠的系统,最明显的选择是在这些位置放置 ISR fault handler。如果系统出了某些差错,处理器开始执行程序空间以外的代码,就会触发 ISR,并在决定校正行动之前提供储存处理器、寄存器和系统状态的机会。
技巧 2——检查应用程序的 CRC
对嵌入式工程师来说一个很大的好处是,我们的 IDE 和工具链可以自动产生应用程序或内存空间校验和(Checksum),从而根据这个校验和验证应用程序是否完好。有趣的是,在许多这些案例中,只有在将程序代码加载到设备时,才会用到校验和。