Coldfire 强制使用 RAM 而不是寄存器
Coldfire force to use RAM instead of register
我有一个应用程序,用 C 编写,运行在 Coldfire 处理器上。
我需要强制它为所有局部变量(在函数中声明)使用 RAM 而不是使用寄存器;为了正确调试应用程序。
我该怎么做?
编辑以获取更多信息
有时,在主应用程序中,由于函数的 return 值错误,我会收到错误消息。这种情况很少发生,我在 return 指令之前放置了一个检查和一个断点,但是许多变量使用相同的寄存器,我无法清楚地了解错误发生时的情况。如果我在函数的开头移动程序计数器并逐步执行,结果是正确的。可能寄存器的管理有问题,我想发现它是什么。
提前致谢,问候。
出于调试目的执行此操作的正常方法类似于
#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 编译器,它会附带各种默认启用优化的版本。您可能必须手动禁用各种优化以进行调试。
我有一个应用程序,用 C 编写,运行在 Coldfire 处理器上。
我需要强制它为所有局部变量(在函数中声明)使用 RAM 而不是使用寄存器;为了正确调试应用程序。
我该怎么做?
编辑以获取更多信息
有时,在主应用程序中,由于函数的 return 值错误,我会收到错误消息。这种情况很少发生,我在 return 指令之前放置了一个检查和一个断点,但是许多变量使用相同的寄存器,我无法清楚地了解错误发生时的情况。如果我在函数的开头移动程序计数器并逐步执行,结果是正确的。可能寄存器的管理有问题,我想发现它是什么。
提前致谢,问候。
出于调试目的执行此操作的正常方法类似于
#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 编译器,它会附带各种默认启用优化的版本。您可能必须手动禁用各种优化以进行调试。