利用开发工具或开发软件,通过对用户程序进行编译、连接、执行等过程,可发现程序中存在的语法错误或逻辑错误并加以排除,或者对软件的功能进行改进和扩展。以下就汇编语言概述软件调试方法。
1.汇编系统的文件格式
汇编语言文件的格式以文件的扩展名作为区分的标志。程序源代码为*.ASM,经编译处理后生成的可执行目标文件为*.OBJ,可由转换程序转换成*.HEX(十六进制)或*.BIN(二进制)格式。这些文件需要借助编程器才能写入单片机,诸如NSP编程器对.HEX/·BIN/.OBJ三种文件格式均可接受。
2.编译的执行过程
1)第一次扫描,检查文件格式和提示语法错误。
2)在第一次扫描完全无错误的情况下,第二次扫描便生成目标文件。
用户根据第一次扫描所提供的错误报告,进行语句修改并再次编译,直至错误提示消失。
3.程序调试中的测试探针方法
软件调试各有不同方法,提倡实践探索并加以总结。现以在线仿真方式为例,介绍从实践中总结出来的一种称为“测试探针”的软件调试方法。该思路以图6-6所示的快捷调试方法的试验电路加以说明,供参考。
外部中断0作为触发信号的输入,同时设置有手动开关。由于调试过程中必然涉及电路对外中断信号是否响应、手动开关是否起作用等问题,因此只要分别对外部中断服务程序和手动开关检测程序进行测试,就能得到判断结果,具体步骤如下:
图6-6 快捷调试方法的试验电路(www.xing528.com)
1)该方法需要占用单片机的一条I/O口线(如P3.6),作辅助指示灯VL的驱动用。正因为有了指示灯的辅助,使得调试过程变得直观明了。
2)测试过程采用下面两条语句的组合作为测试探针:
分别把测试探针动态地插入到程序中需要测试的部位,然后每次从头开始执行在线仿真的全速运行操作,程序遇到探针语句AJMP$便自动停止,从LED的状态便可判断所测程序段的流向是否正确。
3)具体源代码段包含外部中断0服务程序、手动开关控制功能和减法运算等,测试如下:
要测试手动开关的开合动作是否正常,可以把探针语句插入部位①,即JB语句之后。开关合上时P1.7为低电平,若开关正常,则程序分支应使灯VL亮;若灯不亮可怀疑开关的硬件接触出问题,再把探针语句移到部位②,即NOP语句之后。若开关合上了,因该分支来自A03,灯VL应不亮;若灯亮了,说明前面P1.7处的判断语句有可能写反。
接着测试外部中断0的输入是否得到响应。因中断响应是瞬间的过程,其判断通常是电路调试中颇有难度的事情。采用测试探针就能很顺利地检测中断是否响应,具体的方法是:把探针移到中断服务程序的开始部位③,即NOP语句之后,然后提供外中断触发输入信号。若中断响应正常,灯VL亮;否则,应检查中断入口地址是否写错,初始化时是否设置了相应的中断条件以及外部中断信号是否满足要求。由于测试探针把故障范围集中在中断有关的部分,排除了其他因素的影响,因此能够起到快速检测的效果。
最后,检测运算过程比较复杂的减法程序。若利用在线仿真的单步操作来调试,过程未免烦琐而耗时,可以运用测试探针从总体上判断程序是否正确运行。在上述程序测试正常的前提下,把探针语句移到程序的出口部位④,即LCALL语句之后。若减法程序的执行结果能通过,灯VL亮;若灯VL不亮,则应进入减法程序内部的程序段来查找故障原因。用同样的方法把探针语句移到减法程序内部的合适部位,进行类似的操作和测试,很快就能发现问题所在并加以解决。
在未确认前面程序段是否正常的情况下,若要直接测试减法程序,只需在主程序的堆栈语句之后插入一条长跳转指令LJMP,跳转到减法程序的标号处(如SUB),该测试就不会受前面程序段的限制。
测试探针方法以在线仿真方式为基础,由硬件指示灯VL作为结果提示,简单、快捷,且同样适用于软件仿真和在线编程方式,是值得利用的快捷、有效的软件调试方法。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。