有时候程序异常了,还不如死了算了
扫描二维码
随时随地手机看文章
打个比方,一个自动售货机,顾客给钱买东西,应该找顾客零钱。程序上需要做A-B的减法。在没有任何人购物的情况下,受到干扰而异常运行到这个位置,而参与计算的寄存器保持在某个子程序中的数值,因此你启动找钱的程序,白白的吐出钢崩……
我们来做个数值分析,假设确认用户输入钞票到找零钱之间的指令总共有200条指令(让用户选择商品),总共的程序空间是10K,那么我把程序搞乱,从而白白的拿到钢崩的概率就是2%。我肯定会拿着电子大伙器从早到晚不停的折腾这个售货机。
当然,你可以说你会对敏感数据进行防护,但是你的程序不会跑飞,仍然会继续运行。假设一个输入密码的程序,异常之后刚好落在密码合法性检查之后。那简直等于没有密码。你做的任何防护都是白搭。
这些问题在其他单片机中也可能存在,但是其他的单片机绝大部分情况下都会跑飞,从而最终被看门狗复位,虽然死了一次,但是没造成什么损失,活过来以后照样正常运行。
总结:联想一下载人航天,我们的目的不是确保航天器绝对不死机,而是确保即使航天器死机了,也能把人安全的送回来。