我在内存中声明并设置了一个结构,我有一个指向该结构的全局常量指针,在我的程序中,我都取消引用了该指针以访问该结构的不同部分。但是,有时从特定功能取消引用后指针存储器地址会发生变化。
我的结构
typedef struct configData_t
{
uint8_t version[4];
inputConfig_t inputModuleConfig [MAX_INPUT];
outputConfig_t outputModuleConfig [MAX_OUTPUT];
notificationConfig_t notificationConfig [MAX_NOTIFICATIONS];
functionConfig_t autoFunctionConfig [MAX_FUNCTIONS];
uint16_t Crc16;
} configData_t;
通过设置数据的内存地址(外部加载和应用程序内存之外)来声明常量指针
//Pointer points to memory location on uC (data already in memory)
const configData_t* theConfigData = (configData_t*)0x0460000;
要从'notificationConfig'数组中获取通知,请通过[1]取消引用'theConfigData':
const notificationConfig_t *pNotificationConfig = theConfigData->notificationConfig + notificationID;
单步执行uC上的代码时,会发生以下情况:
函数B不会以任何方式更改'theConfigData'。在调试器内存视图中,以任何方式都不会更改0x0460000 + sizeOf(configData_t)中的数据。
从函数A到B时'pNotificationConfig'指针如何更改地址?
答案 0 :(得分:1)
您需要确保:
configData_t
的定义完全相同configData_t
的{{3}}完全相同针对您的特定问题的上述红色标记将是例如。 :
sizeof(configData_t)
不同offsetof(configData_t, notificationConfig)
不同sizeof(notificationConfig_t)
不同如果这些红色标记中的一个或多个被引发(并在注释中确认),则需要确定两个较早选项中的哪个导致它:
MAX_INPUT
,MAX_OUTPUT
,根据您的情况……)