具有非连续地址的指针数组

问题描述 投票:0回答:1

我正在使用 S32 Design Studio 为 ARM MCU 开发一些固件,S32 Design Studio 是一个基于 Eclipse 的 IDE。

我正在调试我遇到的全局变量的一些不正确行为(是的,我知道当本地可以时,全局不是首选)。

全局变量是一个 uint16_t 指针数组。当我使用这个数组读出最后两个元素的值时,我得到了意想不到的结果。

在 IDE 中,我可以在 main() 开始处暂停程序。当我将鼠标悬停在变量上时,它会显示数组元素的地址和内容。

第二个类似的数组工作正常:

不知道如何进一步调试。我还很困惑为什么整个数组的地址似乎指向数组的“末尾”而不是第一个元素。任何为什么会发生在行为不当的数组中间。

我确认编译器优化已设置为“无”。

uint16_t vshut  = 2000;
uint16_t vrec   = 2400;
uint16_t durams = 3000;
uint16_t otshut = 1100;
uint16_t scen   = 0;
uint16_t ldcos  = 0;
uint16_t * safetysettings[6] = {&vshut, &vrec, &durams, &otshut, &scen, &ldcos};

uint16_t tax1 = 2000;
uint16_t tax2 = 2400;
uint16_t tax3 = 3000;
uint16_t tax4 = 1100;
uint16_t tax5 = 0x0007;
uint16_t tax6 = 0x0009;
uint16_t * ssettings[6] = {&tax1, &tax2, &tax3, &tax4, &tax5, &tax6};
c pointers
1个回答
0
投票

scen
ldcos
被初始化为零,并被放入程序加载器和/或操作系统初始化为零的程序部分中。

其他对象使用非零数据进行初始化,并放入通过从磁盘上的程序可执行文件读取数据来初始化的程序部分中。

所以它们位于内存的不同区域。

© www.soinside.com 2019 - 2024. All rights reserved.