首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >STM8:全局变量上的本地声明指针

STM8:全局变量上的本地声明指针
EN

Stack Overflow用户
提问于 2020-10-27 12:53:12
回答 1查看 141关注 0票数 0

在我使用Compiler的STM8 Disco板上,我尝试了如下代码,并期望'ptr_a‘和'ptr_aLocal’是相同的:

代码语言:javascript
复制
int a, b, *ptr_a, *ptr_b;

void main()
    {
    int *ptr_aLocal;
    a = 4;
    b = 5;
    ptr_a = &a;
    ptr_b = &b;
    ptr_aLocal = &a;
    }

然而,“ptr_a”变量“a”的地址是正确的,而“ptr_aLocal”包含错误的附加项。

使用gcc编译相同的代码时,'ptr_a‘和'ptr_aLocal’是相同的。

在主文件中声明指针本地时,这里的问题是什么?

谢谢你的帮助。拉斐尔

编辑:

现在我真的很困惑:当在代码末尾添加'ptr_b = ptr_aLocal;‘行时,ptr_b显示变量'a’(0x106)的正确入口,尽管'ptr_aLocal‘仍然包含变量a (0x108)的错误入口。

在这里输入图像描述

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-27 14:12:41

各种早期版本的misc编译器倾向于对代码进行某种程度的优化,即使假设优化被禁用时也是如此。尤其是宇宙和代码战士在老版本中有这样的怪癖。由于不使用局部变量,所以对其进行了优化。

通过查看生成的汇编程序,您可以看到这一点--任何半体面的调试器都将支持程序组装步骤调试。如果没有堆栈推送或索引寄存器存储指令,则对其进行优化。

您可以强迫变量与volatile int *ptr_aLocal一起使用。

与您的问题无关,在编写8位微控制器时,您应该尽可能使用uint8_t而不是int

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

https://stackoverflow.com/questions/64554859

复制
相关文章

相似问题

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