调试是从软件或程序中识别和删除错误的过程。它指的是程序逻辑,机器代码和执行中的错误的标识。它逐步提供有关代码执行的信息,以识别程序中的故障。
机器代码的调试:将汇编语言转换为机器代码类似于从原理图构建电路。调试可以帮助确定:
- 寄存器的值。
- 程序流程。
- 函数的入口和出口点。
- 输入if或else语句。
- 代码循环。
- 计算检查。
常见的错误来源:
- 选择错误的密码
- 忘记指令的第二或第三字节
- 指定错误的跳转位置
- 在Jump指令中不反转高字节和低字节的顺序
- 用十进制而不是十六进制写入内存地址
- 两个数相加时无法清除累加器
- 无法清除进位寄存器
- 跳转指令前未设置标志
- 在跳转指令上指定错误的存储器地址
- 使用不正确的旋转指令组合
调试过程分为两部分:
- 静态调试:类似于电路板的外观检查,它是用纸和铅笔检查流程图和机器代码的。用于理解代码逻辑和程序结构。
- 动态调试:涉及在执行每条指令(单步技术)或一组指令(断点技术)后观察寄存器或输出的内容。
在单板微处理器中,动态调试中常用的技术和工具是:- 单一步骤:这项技术允许一次执行一条指令,并观察每条指令的结果。通常,这是使用硬连线逻辑电路构建的。当我们按下单步运行键时,我们将能够观察寄存器的内容和存储器的位置。这有助于发现:
- 地址错误
- 循环中错误的跳转位置
- 数据不正确或代码丢失
但是,如果存在较大的循环,则单步调试可能会非常累人且耗时。因此,我们可以减少迭代次数来检查循环的有效性,而不是运行n次循环。单步技术对于短程序非常有用。
- 断点:断点功能通常是一个软件例程,允许用户分节执行程序。可以使用RST指令设置断点。当我们按Execute键时,程序将执行到断点。可以检查寄存器的预期结果。使用断点功能,将程序段与错误隔离。然后可以使用单步工具调试该段。通常用于检查:
- 定时循环
- I / O部分
- 中断
- 寄存器检查:寄存器检查键使您可以检查微处理器寄存器的内容。该技术与单步或断点工具结合使用。
- 单一步骤:这项技术允许一次执行一条指令,并观察每条指令的结果。通常,这是使用硬连线逻辑电路构建的。当我们按下单步运行键时,我们将能够观察寄存器的内容和存储器的位置。这有助于发现: