使用 Keil 调试

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

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

使用 keil 进行硬件调试

如果你已经忘记了如何配置硬件调试环境, 可以回看2.2.2 搭建 Keil 工程中的内容.

连接

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

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

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

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

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

33
调试器设置

未找到设备或连接失败

如果是提示No Debug Unit Device found,说明板子没有找到调试器,检查调试器类型选择是否正确,USB线是否连接正确。

如果是提示SWD/JTAG Communication Failure,说明 DAP-LINK 调试器和电脑连上了,但是 DAP-LINK 无法和 FPGA 上我们之前写的硬件部分进行通信,请检查比特流是否正确下载/固化到 FPGA开发板上,并检查硬件部分是否正确。

很多时候,通过报错提示就能分析判断问题在哪,所以要善于去看错误信息,并尝试搜索解决问题,英文的报错信息不是什么乱码,而是能够帮助你解决问题的线索。

调试

连接完成后, 点击 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 ""