Hallo zusammen,
ich habe ein Problem mit einem Array von Structs in C, durch welches ich
so langsam nicht mehr durchblicke.
In der Header Datei eeprom.h habe ich ein Struct definiert:
1 | typedef struct
|
2 | {
|
3 | UINT16 ids;
|
4 | UINT16 days;
|
5 | UINT16 switchOnTime;
|
6 | UINT16 switchOffTime;
|
7 | }s_settings;
|
am Anfang meiner eeprom.c erzeuge ich mir ein Array davon, sodass ich in
dieser c-Datei von überall darauf zugreifen kann:
1 | s_settings settings[20];
|
Das Lesen und Beschreiben dieses Arrays scheint normal zu funktionieren.
Jetzt kommt das Komische: Ich habe eine Funktion in dieser Datei:
1 | UINT8 I2C_EE_PageRead( uint16_t ReadAddr, uint16_t NumByteToRead, UINT8* pBuffer)
|
2 | {
|
3 | UINT8 retVal;
|
4 | .....
|
5 | }
|
Wenn ich mir die größe in Bytes anschaue, ergibt sizeof(settings) = 160,
was plausibel ist. Die Adresse von settings ist bei mir: 0x20003130. Ich
würde jetzt erwarten, dass nun Speicher von 0x20003130 bis 0x200031D0
reserviert wird. Allerdings ist die Adresse von der funktionslokalen
Variable retVal = 0x20003177 was mitten drin im Speicherbereich von
meinem Array liegt und natürlich zu Problemen führt. Wie kann das sein?
Initialisiere ich mein Struct falsch?
Ich hoffe ich habe das Problem ausreichend beschrieben, damit mir jemand
auf die Sprünge helfen kann, was ich falsch mache.
Viele Grüße, Heiko