5.调试提示

CLA 可以停止、分步执行并独立于主 C28x CPU 运行。CLA 和 C28x 都从相同的 JTAG 端口进行调试。

  • 启动调试会话时,调试视图(CCS 中的窗口)将包含 C28x 和 CLA 条目。
  • 点击 CLA 会更改 CCS 中所有窗口的上下文以反映 CLA 数据。
  • 连接到 CLA 内核进行调试可实现单步执行
  • 通过“Target”菜单选项将“Program Symbols”加载到 CLA 以开始调试
_images/cla_debug1.png

调试 CLA 代码

  1. 在 CLA 代码中插入断点

    • __mdebugstop() 内在函数是 CLA 断点。它将指令 MDEBUGSTOP 放在汇编指令中的相应位置。
    • 如果未连接到 CLA 内核(即禁用单步执行),则内在函数的行为类似于 MNOP(无操作)
  2. 开始任务:CLA 将执行代码,直到 MDEBUGSTOP 位于 D2 中

  3. 单步执行或运行到下一个断点:单步执行将 CLA 流水线一次移动一个周期

_images/cla_debug2.png

注意

调试 CLA 代码时,调试器无法执行“run to line”或“step over”。

5.1.求助!为什么我的 CLA 代码无法使用?

在 CLA 代码中放置一个断点。确保 CLA 已连接并查看是否命中断点。逐步检查代码以尝试缩小问题范围。

如果断点从未被命中,那么任务可能没有开始。检查 CLA 设置(向量、任务已启用等)

5.2.我的 CLA 任务无法开始。

尝试使用软件开始任务以缩小问题范围。这将有助于确认任务向量设置正确。

如果外设触发任务未能启动,请检查外设初始化何时完成。CLA 任务仅在配置的中断源发生电平转换(边沿上)时触发。如果外设在 CLA 初始化之前触发了一个中断,那么它可能会被错过。解决此问题的一种方法是清除外设的中断标志。

5.3.为什么我不能使用软件 (IACK) 强制执行任务?

验证以下信息:

  1. MCTL 寄存器中未启用此功能。此寄存器受 EALLOW 保护。
  2. MIER 寄存器中已启用中断。此寄存器受 EALLOW 保护。
  3. 软件配置为任务触发源。请参阅器件特定 TRM。
  4. 您对 IACK 使用了正确的参数。例如,IACK #0x0003 将标记中断 1(位 0)和中断 2(位 1)。
  5. 请参阅 C2000Ware 中的 SW 示例。

5.4.为什么我的 Code Composer Studio (CCS) GEL 文件会在复位时启用 CLA 时钟?

当您复位器件时,CLA 断点被禁用,并且 CLA 时钟本身也被禁用。为了更加轻松地调试 CLA 代码,CCS 将监视复位条件并在复位后重新启用 CLA 断点。正因如此,CLA 时钟本身必须被重新启用。如果您不喜欢这个运行方式,则可以从 GEL 文件中注释掉或删除此行。

5.5.我可以从“debug”窗口开始任务吗?

您可以使用 CLA 强制寄存器 MIFRC 来启动任务。这个寄存器在 CLA 寄存器窗口中提供。

5.6.点击“run”后,为什么 CLA 开始执行另一个任务而不是在 MSTOP 处停止?

如果在运行到 MSTOP 时有一个任务同时处于挂起和启用状态,挂起的任务将自动开始执行。为了防止这一情况发生,您可以修改 MIER 寄存器,这样的话,无任务被启用。

5.7.为什么 CLA 代码中的变量没有按预期更新?

一个原因是,.scratchpad.bss_cla 段被错误地分配给只读 CLA 程序存储器。任务将运行,但分配给 .bss_cla 段的变量将不会更新。此外,编译器使用 .scratchpad 段,分配给只读存储器可能会导致未定义的行为。