-2

我有一个用 C 语言编写的应用程序,它在 Coldfire 处理器上运行。

我需要强制它对所有局部变量(在函数中声明)使用 RAM,而不是使用寄存器;为了正确调试应用程序。

我该怎么做?

编辑以获取更多信息

有时,在主应用程序中,由于函数的返回值错误,我会收到错误消息。这种情况很少发生,我在 return 指令之前放置了一个检查和一个断点,但是许多变量使用相同的寄存器,我无法清楚地了解错误发生时的情况。如果我在函数的开头移动程序计数器并逐步执行结果是正确的。登记册的管理可能有问题,我想知道是什么。

提前谢谢你,问候。

4

1 回答 1

1

出于调试目的执行此操作的正常方法是

#ifdef DEBUG_RELEASE
  volatile uint8_t x;
#else
  uint8_t x;
#endif

完成调试后,您可以删除所有编译器开关。但是它们很好,这样您就不会意外留下任何调试代码(非常常见的问题)。

在大多数编译器上,以上内容足以强制变量进入 RAM 位置。如果不是,您可以更进一步:

  volatile uint8_t x;
  volatile uint8_t* dummy = &x;

现在x 必须在 RAM 中分配,因为它的地址已被使用。

注意:如果您使用的是 Codewarrior 编译器,它带有默认启用优化的各种版本。您可能必须手动禁用各种优化以进行调试。

于 2017-04-18T11:01:29.640 回答