我们在嵌入式的软件调试不能像PC机上那样方便,过程的控制很难去跟踪,比如调试USB枚举,你很难看到先进行的哪一步,这里总结几条嵌入式调试的方法。
1. 串口跟踪调试。这种方法可以应用于不支持在线调试的主控,如at89S51单片机。因为串口的实现比较简单,在调试51程序时可以用串口实时输出调试信息。
2. 模拟断电调试,这个需要按键和LED灯配合,很多单片机是不支持仿真的,所以设断点的方法比较难实现。不过可以在要设断点的地方加while语句,并且关掉所有中断。然后检测按键,如果按下继续往下走,LED灯负责指示那个地方的断点。
void BreakPoint(void)
{
EA=0;
LED=RED;
while(key!=0);
LED=NULL;
EA=1;
}
void test(void)
{
a=1;
wreakPoint();
a=3;
}
3. 变量存过程,如果串口不好实现,那可以把所有的过程保存到一组数组中,也可以把程序中的某些要查看的值保持到这组数组中,好比一张记录过程的纸,把过程的记录依次记录下来。比如我在USB调试程序中的一段代码
//高校电子联盟--肖继达
//Master Studio
#define Debug 1 uchar test[50]; uchar conters=0;
switch (type)
{
case STANDARD_TYPE:
switch (device_request.bRequest) {
case CLEAR_FEATURE:
#ifdef Debug
test[conters]='1';
conters++;
#endif
func_Clear_Feature(); break;
case GET_CONFIGURATION:
#ifdef Debug
test[conters]='2';
conters++;
#endif
}
|