使用 Keil 调试

在前几个小节中, 我们已经将整个软硬件系统都下载到了 FPGA 中, 但是由于软件实现的是一个循环计数器, 我们无法通过外部的显示器件来观察程序的运行情况, 所以我们只能够通过调试器深入 Cortex-M0 内部, 去观察其寄存器值的变化情况.

这时候, 我们就需要用到 Keil 的调试功能了, 打开 Keil 的 Options 选项卡, 进入 Debug 一栏, 左边是仿真设置, 右边是调试设置, 在前几个小节中, 我们已经提前将该栏设置到了调试模式, 所以这里我们直接进行连接和调试即可.

连接

首先进行调试器的连接. 在建立连接时必须保证两点:

  1. 比特流已经下载完成, 且 FPGA 没有被复位 (指 FPGA 芯片复位, 对应板卡中间的复位按键), SoC 在使能状态 (板卡上 SW0 向上拨开), FPGA 不断电. 这样才可以保证 Cortex-M0 软核中的调试接口能够正常工作.

  2. 在 1 的基础上, 打开 PC 的设备管理器的端口一栏, 确保 PC 上检测到了调试数据线所连接的端口, 且端口准备就绪. 这样才可以保证 PC 与调试端口能够顺利连接.

35
正常情况下 PC 应当检测到两个端口

点击进入 Debug 页面右上角的 settings 进入调试器的设置, 注意选择调试接口为 SW, 这时会看到右侧出现了调试器的设备 ID 和名称, 说明已经成功建立连接, 点击 OK 完成连接. 若右侧显示未找到设备或连接失败, 则再次确认上述两个连接条件, 或尝试拔下数据线再重新插上.

33
调试器设置

调试

连接完成后, 点击 Keil 工具栏中的02-15图标进入调试, 这时会发现调试界面和 LAB1 中用到的仿真界面基本是一样的, 只是调试界面中运行的是实际板卡中的程序, 而不是软件仿真的程序.

单步运行程序, 可以观察到 r0 的值在 0-4 循环, 说明程序在 FPGA 中能够正常运行.

34
调试界面

实现在线下载程序

你有没有想过, 既然我们的软件程序是以 .hex 文件的形式被写入到比特流文件中, 然后被下载配置到 FPGA 中的, 那么这是不是意味着, 我们每次修改软件代码后, 都要重新编译, 综合, 实现, 下载比特流呢? 这样的话调试效率是不是就太低了? 按上面的道理来说确实是这样的, 但是不要忽视了 Cortex-M0 核中 DAP 的调试功能, 当我们在 Keil 软件中进行调试时, 刚刚编译得到的目标文件会通过 USB 数据线, 经过 FPGA 开发板的 DAP 接口以及我们约束的 SW 调试引脚进入 CortexM0 的 DAP 中, 实现程序的在线下载与运行. 这样, 我们就可以不必重新综合, 也能够调试最新的程序了. 这种 "硬件固定不动, 软件在线调试" 的思想对于我们之后的调试来说是非常重要的.

但是! 前提是必须要做到两点:
  • 在 Keil 的 Options -> Debug 选项卡中一定要勾选上 Load Application at Startup 选项.
38
要想实现在线下载程序, 一定要勾上这个选项
  • 每次修改软件后务必重新编译并确认目标文件顺利生成 (我有一个朋友改了软件不重新编译就又开始调试, 结果跑的还是旧程序, 查错查不到还把自己心态搞崩了).

results matching ""

    No results matching ""