首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PIC32设备上的指针与调试器中的期望值不匹配

PIC32设备上的指针与调试器中的期望值不匹配
EN

Stack Overflow用户
提问于 2014-11-21 19:06:12
回答 1查看 548关注 0票数 1

这里的快速问题是关于指针的行为(我正在PIC32MX270F256D上做一个项目)。

我目前实现了以下代码:

代码语言:javascript
复制
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编译器。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-11-21 23:36:49

这可能是一个优化问题。您的编译器确定您的代码实际上什么都不做,所以它没有费心地生成代码。具体来说,您的代码实际上没有使用您在check中存储的值。

您可以将指针声明为volatile,以强制编译器不要对其进行优化。也就是说,int *ptr;变成了volatile int *ptr;

您还可以以一种有意义的方式使用check的值,比如打印出来。

代码语言:javascript
复制
printf("My pointer %p points to %u.\n", ptr, check);

或者,您可以查看编译器文档,找出如何关闭优化。调试时,在不进行优化的情况下编译通常是有帮助的,以便编译的代码与您的源代码非常匹配。

注意:您将在某个时候访问已映射到内存地址的硬件或芯片寄存器。当您这样做时,确保这些指向映射内存的指针是不稳定的,否则您将遇到同样的问题!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27068499

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档