在通过FoxICE For ARM仿真器单步调试 ARM 目标板时,调试器报告 “ Can't Step ”或者 Can't set point ”错误。一般情况下,在调试 ROM 内的代码时,比较容易发生这个错误。
ARM7 、 ARM9 / ARM9E 系列的内核的 EmbeddedICE 模块,包含两套观察点单元的控制寄存器,用于设置硬件断点、软件断点。
设置一个硬件断点,需要使用一个观察点单元,不需要修改断点处的代码,适合在 ROM 中的代码上设置断点。
设置软件断点,全部软件断点使用一个观察点单元,但需要修改断点处的代码,适合在 RAM 中的代码上设置断点。设置一个观察点,需要使用一个观察点单元。
在调试 ARM7 系列的处理器,如果在调试器中设置了异常矢量捕获,需要使用观察点单元。ARM9 / ARM9E 系列的处理器,有专门的硬件支持异常矢量捕获,不需要使用观察点单元。
由于单步调试时,实际上是需要在下一条指令上设置断点,在调试结束后,再自动撤销此断点。用户在遇到 “ Can't Step ”或者 Can't set point ”错误时,需要尽量释放其他断点、观察点;对于 ARM7 系列处理器,可能还需要需要取消全部的异常矢量捕获。在确保有一个空闲的观察点单元的情况下,用户便可以单步调试 ROM 中的代码。
|