【问题标题】:How to see the local variable in DDC-I debugger?如何在 DDC-I 调试器中查看局部变量?
【发布时间】:2015-10-21 11:05:42
【问题描述】:

我试图在 DDC-I 调试器中查看 for 循环的索引值,它总是显示错误。

与汇编相同,显示如下指令:

cmp cr7,0,r20,r23

所以它比较了r20r23,但是这两个寄存器都不保存索引值。我不确定cr7 是什么?

【问题讨论】:

  • 你用的是什么CPU?电源PC?
  • 其基于 DEOS RTOS 的小型嵌入式系统..
  • 当然,但是什么 CPU 呢?对我来说,它看起来像是一条 PowerPC 指令?
  • 是的,它是 PowerPC CPU
  • OK - 为您清理问题和固定标签。

标签: debugging embedded powerpc rtos


【解决方案1】:

简而言之,大多数嵌入式工具链(包括您付费购买的工具链)对于在即使是轻微优化的代码中重构本地/自动变量也很糟糕。他们中的许多人根本无法重建从不存储的变量,因为它们一直存在于寄存器中(像你看不到的循环索引变量是典型情况)。有些甚至在临时计算持有者和参数方面存在问题(因为它们几乎总是作为寄存器传递)。

典型的策略可能是:

  1. 暂时关闭对相关代码的优化
  2. 暂时将有问题的变量移动到全局范围
  3. 精通阅读反汇编。

这不是一个非常实用的答案,但对于许多刚接触嵌入式世界或从未在其嵌入式平台上使用过源代码级调试器的人来说,这让他们感到惊讶。

【讨论】:

  • 与其将变量移动到全局范围,不如暂时将其声明为 volatile。
  • 是的,看来阅读 dissembley 是获得或玩 volatile 的唯一方法。
【解决方案2】:

在 PowerPC 上有八个 CR 字段,cr0cr7。如果您没有为比较结果指定 CR 字段,则默认为 cr0,但在这种情况下指定了 cr7,因此字段 cr7 中的标志将指示比较操作的结果。每个 CR 字段中有 4 个条件码位:ltgteqso。通常,比较之后会出现一个条件分支bc

在这篇 IBM developerWorks 文章中有一些有用的信息:Assembly language for Power Architecture, Part 3: Programming with the PowerPC branch processor

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-09
    • 1970-01-01
    • 2019-01-24
    • 2021-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多