Coldfire强制使用RAM而不是寄存器
问题描述:
我有一个用C编写的应用程序,它运行在Coldfire处理器上。Coldfire强制使用RAM而不是寄存器
我需要强制它使用RAM的所有局部变量(在函数中声明),而不是使用寄存器;以正确调试应用程序。
我该怎么办?
编辑更多信息
有时,在主应用程序,我得到一个错误,因为从功能上一个错误的返回值。很少发生这种情况,我在返回指令之前放置了一个检查点和一个断点,但是许多变量使用相同的寄存器,并且在发生错误时我无法清楚地了解情况。如果我在程序开始处移动程序计数器并逐步执行,结果是正确的。可能是寄存器的管理有问题,我想知道它是什么。
预先感谢您的问候。
答
的正常方式用于调试目的这样做是一样的东西
#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.我会尽快尝试您的解决方案。 –
是不是简单地把调试开关打开工作?试试'volatile'关键字。 – Matt
XY问题。没有必要将所有当地人存储在RAM中以进行适当的调试(并且这对于操作员来说将如何工作?)。它也会大幅减慢你的代码。 – Olaf
有时,在主应用程序中,由于函数的返回值错误,我得到一个错误。很少发生这种情况,我在返回指令之前放置了一个检查点和一个断点,但是许多变量使用相同的寄存器,并且在发生错误时我无法清楚地了解情况。 如果我在功能开始处移动程序计数器并逐步执行,结果是正确的。可能是寄存器的管理有问题,我想知道它是什么。 –