You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
广州周立功单片机发展有限公司 Tel (020)38730976 38730916 Fax 38730925 http //www.zlgmcu.com<br />
存器一节<br />
5.18 调试中的程序计数器<br />
调试中的程序计数器<br />
调试器必须对 PC 进行跟踪 这样 <strong>ARM7TDMI</strong>-S 内核才能通过分支跳转到由于调试而中断的程序位置<br />
程序流可以被下列事件中断<br />
断点<br />
观察点<br />
带有其它异常的观察点<br />
调试请求<br />
系统速度访问<br />
5.18.1 断点<br />
断点<br />
断点的调试状态入口占用了 PC 4 个地址或 16 个字节 调试状态下执行的每个指令占用 PC 1 个地址或<br />
4 个字节<br />
通常在断点后退出调试状态的方法是撤消断点并通过分支跳转回之前发生断点的地址<br />
例如 如果 <strong>ARM7TDMI</strong>-S 处理器在一个给定地址处设定的断点进入调试状态 并且执行了两条调试<br />
速度的指令<br />
指令<br />
那么必须产生一个-7 地址的分支指令 4 个调试入口 加上 2 个指令 再加 1 个最后的分支<br />
下面的指令序列所示为扫描到扫描链 1 的数据 最高位在前 第一个数据位的值存入 DBGBREAK<br />
指令数据进入扫描链 1 的其余部分<br />
0 E0802000 ;ADD R2,R0,R0<br />
1 E1826001 ;ORR R6,R2,R1<br />
0 EAFFFFF9 ;B -7 (2 的补码)<br />
在 <strong>ARM7TDMI</strong>-S 处理器进入调试状态后 它在执行分支指令之前必须至少执行两条指令 即使都为<br />
NOP 指令 MOV R0,R0 对于小的分支 您可以将 PC 作为目的数执行减法来替换最后的分支指令 在上<br />
面的例子中为 SUB PC,PC,#28<br />
5.18.2 观察点 观察点<br />
观察点<br />
在进入观察点后返回程序执行的处理与断点所采用的方法相同<br />
调试入口使 PC 增加了 4 个地址 每个指令增加 1 个地址 与断点的区别在于 产生观察点的指令已<br />
经执行 程序必须返回到下一条指令<br />
5.18.3 具有另外异常的观察点<br />
具有另外异常的观察点<br />
如果对观察点的访问同时导致了一次数据中止 <strong>ARM7TDMI</strong>-S 处理器进入中止模式的调试状态 进入<br />
调试的入口被拖延到内核进入中止模式并从中止向量取指为止<br />
当一个中断或其它异常发生在观察点存储器访问时也遵循相似的过程 <strong>ARM7TDMI</strong>-S 处理器在异常模<br />
式中进入调试状态 调试器必须通过检查当前和先前的模式 在 CPSR 和 SPSR 中 以及 PC 的值来确定是<br />
否产生了异常 当发生了异常时 您可以选择在调试之前服务异常<br />
调试状态的入口在发生异常时使 PC 增加 3 个指令而不是 4 个 在退出调试状态时进行返回分支计算<br />
时必须考虑到这一点 例如 假设一个异常发生在观察点访问时 并且执行了 10 条指令来确定这一偶然事<br />
件 那么您可以使用下面的指令序列返回程序执行<br />
0 E1A00000; MOV R0,R0<br />
1 E1A00000; MOV R0,R0<br />
- 53 -