前言
一、问题的分类
1、逻辑问题
在基于MCU/单片机实现的嵌入式产品中大多使用C语言开发,存在逻辑功能与设计相悖时大多为代码实现的逻辑存在问题;
通过拆分功能为各个子功能将子功能对应为相应的函数,将大问题进行分解由大到小将复杂逻辑问题变简单;
产品的代码设计最好具有清晰的逻辑分层,便于对问题的分块排查;
2、重启、死机问题
重启往往在产品运行一段时间后出现,属于稳定性性方面的问题,如产品运行着温度越来越高、内存越来越少、需求功耗的变化等;
重启可以理解为CPU的一种自救,死机是CPU或者系统卡死在某个地方永远无法出来的情况;
二、问题的量化方面
1、变量值被处理的量化
一般一个局部变量处理过程比较简单,可能作为中间值被临时赋值后转移给其它变量,而一个全局变量可能需要经过多个文件中的多个函数进行操作传递;
对于逻辑问题的定位可以从一些全局变量入手,在多个文件中对其的具体数值打印量化;
2、寄存器初始化的量化
嵌入式产品软件上层的操作大多数情况会落到对寄存器值的操作,不同的寄存器特性可能不同,比如有的只读、只写、读写、读清空等;
有的寄存器操作和其它寄存器的赋值有相互依赖关系;可以从此入手对寄存器的配置值进行打印量化,有时候你认为的值实际并非如此;
这里寄存器可以是主控MCU的寄存器,也可以是被控器件的寄存器;
3、电平状态的量化
有测试条件的可以结合示波器、万用表等对引脚电平的状态是否符合预设状态进行测量判定,没有条件时可以结合软件配置的检查对电平状态进行判定;
4、代码逻辑块功能量化
代码整体逻辑没有达到预定功能时,可以对代码进行注释挨着调试子块确保每个子块正常后逐步释放代码块再进行整体调试;
5、运行资源的量化
MCU下对CPU占用率的量化在非操作系统下可能没有封装好的接口,使用rtos时可以使用一些接口进行量化;
对于内存的量化可以结合代码段、全局数据段、堆内存等,对使用情况有一个清晰的认识,结合打印等手段量化产品运行中内存资源的具体使用情况;
6、主控运行情况量化
结合仿真器和集成开发环境,对调试位置打断点观察CPU指针运行过程;
三、量化调试方式
1、日志打印
以上量化大多可以使用打印进行展示、调试;
2、测量仪器
使用仪器时需要有仪器的条件,同时板卡上有方便连接的测试点,这在硬件设计时对硬件可测试性应该有所考量;
3、状态指示
有时候打印调试口没有时,可以结合一颗LED灯进行复用调试,在不确定的逻辑点进行点灯操作从而检查代码逻辑;
4、仿真器
需要板卡留有仿真器接口,且能熟练使用仿真器;