GDB,JTAG和CPU32问题

时间:2013-07-05 15:15:22

标签: gdb 68000 jtag

我正在使用GDB和JTAG设备Abatron BDI2000来调试在Motorola M68332上运行的程序。

68332没有任何硬件断点寄存器。它具有非常原始的调试功能。 构建工具不生成'elf'文件,因此没有GDB使用的符号。 我正在调试的程序也在Flash中运行。

实际上68332只有一个调试指令ti。 ti自己进入下一个汇编指令。 ti xxx步骤,直到达到地址xxx。 [是的,这是穴居人日,冷锤和凿子:))

我可以将GDB与目标远程连接到BDI2000并发出GDB命令'nexti'。由于68332的限制,'stepi'相当于'nexti'。

单步执行只有命令可用。

监视命令'monitor ti'状态将程序计数器更改为步骤。

如果使用'monitor'命令更改寄存器,则GDB不知道该命令,并且其寄存器高速缓存变得不同步。我创建了GDB函数,它们在每个函数的末尾都有GDB命令'flushregs'。这标志着寄存器缓存变脏。 GDB命令将获取一组新的寄存器。

我想创建一个用于调试的符号表文件,但是没有找到有关GDB符号文件格式的任何文档。

我有什么替代品吗? 我确实有Flash区域的RAM覆盖。这会允许软件断点吗?

提前感谢任何建议。

1 个答案:

答案 0 :(得分:0)

我发现我可以使用'便利'变量作为符号的替代,因为我没有在程序中同时使用任何符号。

set $Symbol=(unsigned int*)<address>

每个'Symbol'被声明为指向地址的unsigned int的指针。可以将这些语句放在.gdbinit中,并随着时间的推移添加它们。

然后可以陈述

break $Symbol

我展示了一个GDB命令函数,可以在下面链接的问题中传递这些'方便'变量之一。

How do I write a GDB function to make a comparison to the program counter