嵌入式系统BUG的分类
第一类,硬件bug.
- ASIC数字电路设计疏漏,比如连线错误和模块参数失效等,亦或者是芯片生产过程中产生的连线异常,或者是硬件性能问题,比如ddr不稳定等。
- 板子设计异常。
这类bug一般在测试验证是发现和和bringup阶段发现,解决。
第二类,软件代码的bug。
-
软件代码的bug,c/c++的bug,50%是由于指针导致的,如果定位到一段代码工作异常,首先就要看这段代码中有没有指针,指针本身有没有被更改(直接指针++),会不会越界,是不是空指针等;
-
30%是函数参数异常,变量和参数的值没有传递到正确的函数中去,或者变量清零赋值异常,该清零没清零,该赋值没有赋值,运算符的执行优先级问题,以及逻辑错误,比如>>3是除以8,却被当成是除以6等等,这类bug需要整理参数和变量的传递和赋值改变过程;
-
15%是系统互相影响问题,多线程互踩,阻塞,锁等异常,需要看看线程运行空间,加索释放锁以及中断的运行情况;
-
5%是其他问题,比如内存堆栈分配导致的大数组溢出,编译器编译指令的问题,比如优化和出现某些不合预期的指令的情况等,以及段指定问题,比如把定义的数组放到rodata去了,只能读不能写,一写就data abort等。