2017-04-18 50 views
-2

我有一个用C编写的应用程序,它运行在Coldfire处理器上。Coldfire强制使用RAM而不是寄存器

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

我该怎么办?

编辑更多信息

有时,在主应用程序,我得到一个错误,因为从功能上一个错误的返回值。很少发生这种情况,我在返回指令之前放置了一个检查点和一个断点,但是许多变量使用相同的寄存器,并且在发生错误时我无法清楚地了解情况。如果我在程序开始处移动程序计数器并逐步执行,结果是正确的。可能是寄存器的管理有问题,我想知道它是什么。

预先感谢您的问候。

+0

是不是简单地把调试开关打开工作?试试'volatile'关键字。 – Matt

+2

XY问题。没有必要将所有当地人存储在RAM中以进行适当的调试(并且这对于操作员来说将如何工作?)。它也会大幅减慢你的代码。 – Olaf

+0

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

回答

1

的正常方式用于调试目的这样做是一样的东西

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

当完成调试,您可以删除所有的编译器开关。但是它们很好,所以你不会遗漏任何调试代码(非常常见的问题)。

在大多数编译器上,上述内容足以将变量强制到RAM位置。如果不是,你可以走一步还是:

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

现在必须在RAM中得到分配,因为使用x其地址。

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

+0

感谢您的回答,优化级别已设为0.我会尽快尝试您的解决方案。 –

相关问题