嵌入式开发中最具挑战,最有别于纯软件开发的一大特点就是解决非逻辑性问题。纯软件的开发一般基于成熟的底层平台(硬件、操作系统、虚拟机、中间平台),
诸如:PC机,
JVM。纯软件的开发中出现的问题,一般都是逻辑性的代码错误,总的来说都能靠逻辑思维去解决,绝大多数情况下没人会怀疑PC机或者JVM出问题。并且这
类问题解决途径很简单,顺着逻辑走,难点则在于代码量的大小和复杂程度,代码复杂则问题解决越困难,但总是能符合逻辑。
嵌入式开发中,大多数问题和纯软开发一样属于逻辑性的,但又不能排除非逻辑性。关键是嵌入式开发的底层平台并非那么稳定,比如我们自己的开发板。开发板做
的越小,功能越复杂,它的抗外界条件干扰能力就越差:电流、电压、绝缘体、导体、遗物,再加上开发板本身的设计和制作工艺,都在很大程度上影响着嵌入式平
台的稳定性。因此在嵌入式开发中,常常会碰到一些不能靠debug,review
code来解决的问题,有些甚至根本让人模不找头脑。上星期我们就碰到过这样的事情,硬件各个部分存在一定的干扰,导致在LCD打开时触摸屏不稳,使板子
挂住(kernel
stuck,无panic)。当时我们是毫无头绪,只能从现象中分析入手点,后来又发现有几个板子上触摸屏在LCD不打开时也会让板子死掉。分析范围一下
从IPU/LCD/AD缩小到了触摸屏上,最后再将触摸屏的操作流程分解,发现用户即使不操作触摸屏,程序去读写AD的寄存器也会死。要不是AD硬件有问
题,就是访问AD寄存器时出错。当然AD硬件有问题,我们是无能为力,所以首先排除这个假设,从访问寄存器下手。最终在修改了访问寄存器的SPI总线波特
率后彻底的解决了这个问题。
不过至今这个问题的根源或者说根本的原因,我们依然不清楚。这大概就是这类问题的无理头特色吧。
阅读(1881) | 评论(2) | 转发(0) |