这里的快速问题是关于指针的行为(我正在PIC32MX270F256D上做一个项目)。
我目前实现了以下代码:
void main(void)
{
int size = 15;
int check;
int *ptr;
ptr = &size;
check = *ptr;
while(1); //just so it hangs at the end
}现在,我正在通过程序与可变手表。在size声明之后,我可以在“监视”窗口中看到,size的值为15,并且位于地址0xA000FFC8 (到目前为止还不错)。在行ptr = &size;之后,监视窗口显示ptr的值为0xA000FFC8 (如预期的)。在最后一行(check = *ptr;)之后,监视窗口显示check的值为0xA000FFC8。
在我看来,这似乎是非常简单的功能。最后,当挂在while循环中时,检查应该有值15,不是吗?如果是,我的代码是错误的,还是微芯片IDE显然有问题?如果没有,我还缺什么让它像它一样工作呢?
谢谢。
-Sean
注意:我使用的是MPLAB和微芯片的XC32编译器。
发布于 2014-11-21 23:36:49
这可能是一个优化问题。您的编译器确定您的代码实际上什么都不做,所以它没有费心地生成代码。具体来说,您的代码实际上没有使用您在check中存储的值。
您可以将指针声明为volatile,以强制编译器不要对其进行优化。也就是说,int *ptr;变成了volatile int *ptr;。
您还可以以一种有意义的方式使用check的值,比如打印出来。
printf("My pointer %p points to %u.\n", ptr, check);或者,您可以查看编译器文档,找出如何关闭优化。调试时,在不进行优化的情况下编译通常是有帮助的,以便编译的代码与您的源代码非常匹配。
注意:您将在某个时候访问已映射到内存地址的硬件或芯片寄存器。当您这样做时,确保这些指向映射内存的指针是不稳定的,否则您将遇到同样的问题!
https://stackoverflow.com/questions/27068499
复制相似问题