Alila

A.02.11—功能定义—运行复位

0
阅读(1446)
  运行复位(running reset)是指MCU在运行过程中因不可控制的原因所发生的复位,运行复位理论上应该是不允许的,它就像电脑死机一样,没人希望它发生但实际使用时就是可能发生。提这道需求只不过是对这种异常已经发生后的处理。

  因本人愚钝,此处仅提列两个方面的需求。

  第一是输出数据。分总线和硬线两种。总线数据例如电源状态,假设复位后的很短时间内还未完成电源输入开关的采样,但是本模块又是电源档位发送方,那一旦复位发生后到准确判断出电源档位前该发送哪种电源状态呢?是OFF还是上次的值?推荐为上次所发值,如果是OFF则可能引起其他模块电源档位的错误变化,因为其他模块作为接收方,他们可能正处于非OFF,这个时候发送了OFF会使他们立即关闭非OFF才有的功能。把硬线信号的输出也看成一种输出数据,在复位发生后到准确识别应具备的输出状态之前,相关的输出应该是什么状态?应如何驱动这段时间的输出,有时需要定义清晰;有时并不一定需定义,和硬件本身相关(如SPI控制的驱动芯片会自动保持复位前的状态)。如果这种低概率的复位事件发生了,然后造成了用户抱怨,则由于无法复现、又无法追溯的话不管是对整车厂还是对技术人员都是十分头痛的(就如有次看到过某自主品牌车企一辆SUV的气囊无故爆炸把用户的眼球搞掉了、相信如果没有定义完整的故障追溯体系那个事件的根本原因是异常难查的),所以最好定义一个诊断码。因为这种场景下是不可控的,如果做了定义,至少是可观的。

  第二是输入数据。主要指一些开关的输入,这些数据将影响首次输出的状态,所以他们和上面提到的输出是有联系的。一般情况下可以将输入定义为与复位前的输入保持一致或采用定义者规定好的默认值这两种之一。
  运行复位时的这个需求是很多做定义的人容易忽略的,它是一个补偿性或者说是保护性的定义,实际中使用到的机率很小但重要性却一点也不亚于其他需求,但是在一些重要自主品牌的整车厂中均没做任何定义(起码2年前是如此)。

(2015-1-13 发表于本人QQ空间)