C-使用RAM而不是注册的Coldfire Force



我有一个用C上的应用程序,该应用程序在Coldfire处理器上运行。

我需要强迫它将RAM用于所有局部变量(在功能中声明(而不是使用寄存器;为了正确调试应用程序。

我该怎么做?

编辑以获取更多信息

有时,在主要应用程序中,由于功能中的返回值错误,我会遇到错误。这种情况很少发生,我在返回指令之前进行了检查和断点,但是许多变量都使用相同的寄存器,并且在发生错误时我无法清楚概述。如果我在功能开始时移动程序计数器,然后逐步移动结果,则结果是正确的。寄存器的管理可能有问题,我想发现它是什么。

提前感谢您。

用于调试目的的正常方法是

#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编译器,则它具有各种版本,默认情况下具有优化功能。您可能必须手动禁用各种优化以调试。

最新更新