再上一篇:20.3 使用 UART 输出“Hello World”
上一篇:20.4 测试示例程序
主页
下一篇:20.6 指令模拟器
再下一篇:20.8 使用中断实现的秒表示例程序
文章列表

20.5 使用调试器

《Cortex-M3 权威指南》,嵌入式处理器开发教程。

uVision中附带了调试器,这是一个可视化的源码级调试器。可以把它连接到目标板上(通过

JTAG仿真器)。在设置时,单击“魔术棒”按钮,

再在弹出的对话框中选择”Debug”选项卡,并且如下设置:

接下来就可以启动调试了。但要注意的是:如果板子已经在运行并且连上了超级终端,则需要 关闭超级终端,断开USB电缆,并且在开始调试之前再重新连接。

当调试器开始工作后,IDE会提供一个寄存器视图,显示当前寄存器的内容(通用寄存器和特 殊功能寄存器都有)。还可以从源码级上看到程序当前的执行进度。从下图中我们可以看出刚开始 执 行 时 的 情 况 — — 内 核 停 止 在 Reset_Handler 上 :

为了测试,我们可以在main()的入口处设置断点。通过右击代码并且在在菜单中执行 “Insert/Remove Breakpoint”即可(也可以在调试选项中如下设置:。这样 会在运行到main()时自动停止)。

(也可以双击main()入口处“SetClockFreq()”前面的空白,或者是它的行号“25”来快速 切换断点)。

上图的红色实心矩形表示断点已经设好。接下来运行程序:

程序将停在断点处:

黄色小箭头表示停止后即将执行的语句。从图中还可以看到,反汇编窗口也对应地显示了这个断点所处的指令

位置。译者使用的是模拟器,因此还能记录曾经执行过的语句。图中绿色小块就表示已经执行过的语句/指令。细心 的读者可能会发现,“{”竟然也被“执行”了(因为是绿色小块)!事实上,“{”被编译后产生了汇编指令。看一下 反汇编窗口——原来“{”处的机器码是一条“PUSH {r4,lr}”指令。