ST意法半导体
直播中

王英

7年用户 1313经验值
私信 关注
[问答]

STM32H745:VMA与给定变量的实际内存地址不匹配怎么处理?

在我的应用程序中,我使用共享内存中的初始化数据用于用户界面。内存位于 SRAM2 中的 0x30020000。两个核心都需要访问相同的数据。
此代码放置在 Common 目录中,以便在编译时分别为 CM4 和 CM7 提取它。
当我在编译后查看内存详细信息时,我得到了 CM4 的以下内容:

对于 CM7,我得到:

所以在这两种情况下,根据内存详细信息,变量 uiDisplayArea 的地址是 0x30020960。请记住,无论我使用优化 -O0 还是 -O3 都没有关系,以上两个快照始终相同。
在我的代码中,我使用以下语句准备转储此变量的内存地址:
  • sprintf(strg, "uiDisplayArea pointer: %p.
    ", uiDisplayArea);
如果我在没有优化的情况下编译,打印的结果是 0x30020960,完全符合预期。但是,如果我使用优化级别 -03 进行编译,CM7 会给我一个不同的地址,即 0x300200b8(对于 CM4,它仍然是 0x30020960)。这个怎么可能?
最后我需要的是两个内核之间的变量地址是相同的,无论我使用的是什么优化级别。鉴于上述行为,我不知道如何实现这一点。








回帖(1)

刘艳芳

2022-12-9 11:24:24
好吧,与此同时,我已经能够运行我的代码了。我认为我遇到的问题与以下事实有关,即除非将变量嵌入到结构中,否则无法控制变量的顺序。在我将共享内存的所有变量放在一个结构中之后,代码开始正常运行。
在调试期间将优化模式从 -O0 更改为 -Og 后,我开始注意到不同的 VMA 地址。我仍然不清楚为什么报告的 VMA 与运行时报告的实际地址不同。无论如何,它现在正在工作。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分