一次软件可靠性实践编程笔记
概况
产品的主机与显示器分立,两者之间用多芯线连接,产品到用户安装时才把主机与显示器通过接插件连接。
主机单片机使用AVR,显示为段式LCD,驱动为HT1621兼容芯片。
产品使用过程中,会频繁开关电源。
程序过程
上电è初始化显示器è进入{测试获得数据è显示}循环
改进
产品有几种显示器,LCD或LED。最初是不同显示器用不同的固件,后来改成全兼容式,即相同的硬件与相同的固件,可随意匹配不同的显示器。程序自动识别不同类型的显示器,调用不同的过程来进行显示。
改进后的程序过程
上电è识别显示器è初始化显示器è进入{测试获得数据è识别显示器è如果显示发生改变则初始化è显示}循环
其中显示间隔约100ms。
问题发现
显示循环中,在不断电的情况下,不断更换显示器进行测试,发现插入不同的LCD时,偶然会出现什么也不显示的现象。如果在接插显示器过程中,人为制造接触不良的过程(最终会插牢),此现象则更甚。但如果是LED类的显示器,或接好显示器后再通电,则几乎没发生此现象。
分析
连接显示器过程,从插入到插牢数据线需要一段时间,当数据线接触瞬间,主机检测到某显示器,于时立即送数据初始化,但初始化时,可能接触不良,初始化不成功,但程序不具备初始化成功与否的检测功能,于是继续下一步,送显示数据给显示器。LCD之类的初始化不成功,当然就不能显示了。
解决方案
(1) 增加初始化成功与否的检测程序,每次初始化后,调用这个过程,如果初始化不成功,则重复初始化。
(2) 识别显示器后,适当延时再初始化显示器。
方案(1)适用于可回读的显示器,(2)适用于不可回读的显示器。
由于本产品的显示器不能回读,采用方案(2)。
结果
进行上述的测试,不再发现不显示的现象。
结论
考虑每一个细节,对重要操作进行检测。
评论