4.1 软件调试基本规范
调试是软件开发过程中最艰巨的脑力劳动,调试开始时,软件开发者仅仅面对着错误的征兆,然而在问题的外部现象和内在原因之间往往并没有明显的联系,在组成程序的密密麻麻的元素中,每个都可能是错误的根源。如何能在浩如烟海的程序元素中找到有错误元素是调试过程中最关键的技术问题。总之,调试的目的就在于通过运行程序,找出其中的错误。按照软件工程的要求,调试要经过单元测试、组装调试和系统调试三个步骤。单元调试是对单个模块的调试;组装调试是将各模块在组装过程中对相互间接口的调试;系统调试要测试软件在整个系统中功能和性能是否达到要求。
具体地说,调试过程由两个步骤组成,它从表示程序中存在错误的某迹象开始,首先确定错误的准确位置,也就是找出哪个模块或哪个语句引起的错误。然后仔细研究推断代码以确定问题的原因,并设法改正。现阶段帮助调试的技术主要有输出存储器内容、打印语句和自动工具等。当然更重要的还是调试的策略。调试的策略主要有以下几种方法:试探法、回溯法、对分查找法、归纳法和演绎法。实验中要求实现这三步的调试,要制定出严格的调试计划,将调试用例、调试过程、调试结果和结论详细的记录下来。
4.2 本系统软件调试过程说明
在本系统软件调试过程中首先进行单元调试。单元调试是要进行的最低级别的调试活动,在单元调试活动中,软件的独立单元将在与程序的其他部分相隔离的情况下进行调试。本系统的软件基本都是用结构化编程语言C语言编写,所以单元调试对象是函数或子过程。在单元调试中还包括代码走读(Code review),静态分析(Static analysis)和动态分析(Dynamic analysis)。静态分析就是对软件的源代码进行研读,查找错误或收集度量数据,并不需要对代码进行编译和执行。动态分析就是通过观察软件运行时的动作,来提供执行跟踪、时间分析以及测试覆盖度方面的信息。 如:本系统包括A/D转换模块、PWM模块、定时器模块等功能模块。以PWM模块为例,它包括PWM初始化、PWM设置、延迟等子函数。对软件的单元调试就是对这些子函数及主函数的独立调试。
其次,是对系统的组装调试,如上的PWM模块,把它的主函数和各个子函数合起来组成一个PWM模块,并对函数和过程间接口的调试,即为组装调试。在调试过程中要检测PWM模块是否能有效驱动电机。
最后,进行系统调试。系统调试是将已经确认的软件、硬件、外设等其他元素结合在一起,进行智能小车系统的各种组装调试,其目的是通过与系统的要求相比较,发现所建成的系统与要求不符或矛盾的地方,并测试整个系统是否能正常协调的工作。

图4.1 智能车VB测试程序界面
表4.1 MCU与VB程序的通信格式

在调试的过程中,本人用VB特别编制了用于智能车测试的小软件。该测试程序可实时监测当前小车的速度、转向角、灰度传感器的采样值和PWM通道实时值输出值,对于每路AD值分别用高8位和低8位显示的十六进制数表示,其界面如图4.1所示,此外,在界面的右半部分设置了系统时间校准面板和在线控制面板,这样就可非常方便的进行系统参数的校准和相关功能调试。该软件与硬件MCU方通过串行SCI接口连接和通信,通信格式见表4.1所示,每个通信单元都由40个字节组成,即每次串行通信都需要将单元中的所有信息传送完毕,以免MCU方和PC方在解析时出错。其中[0:3]字节分别用来传送时分秒信息;[3:18]字节用来传送8路AD值的高低字节,ADJx_H为高字节,ADJx_L为低字节;[19:20] 字节分别表示动力电机速度和伺服电机的转向角度;[21:26]则表示PWMx(x为0-5)的数据;[31:32]字节表示蜂鸣器控制信息和运行模式选择字段。


