Initialisierung eines structs mit Pointer -Element

Gast #5136033
Lesenswert?

Hallo,

um möglichst Flexible zu sein, möchte ich das Element pTimeout im struct 
sTimer während der Laufzeit ändern können. Der Initialwert des Objekts 
sTimerData steht im Flash und wird beim starten ins RAM sTimerData_Ram 
geladen. Mit Hilfe eines Pointers psTimerData zeige ich auf die Adresse 
von sTimerData_Ram.

Der Code lässt sich so nicht kompilieren. Es wird angemeckert, dass 
"&(psTimerData->Timeout1)" nicht const ist. Nehme ich die variable 
sTimerData_Ram gibt es keine Probleme. In beiden Fällen übergebe ich 
jedoch einen Pointer. Warum klappt meine Vorgehensweise nicht? Liegt es 
dadran das dem Pointer noch keine Adresse zu gewiesen worden ist?

Vielen Dank.
1
T_TIMER sTimer[2] =
2
{
3
   { &Counter1, &(sTimerData_Ram.Timeout1) },
4
   { &Counter2, &(sTimerData_Ram.Timeout2) }
5
};
6

7
#include<stdio.h>
8

9
typedef struct
10
{
11
    unsigned char Timeout1;
12
    unsigned char Timeout2;
13
}T_TIMER_DATA;
14

15
typedef struct
16
{
17
    unsigned char *pCounter;
18
    unsigned char *pTimeout;
19
}T_TIMER;
20

21
static unsigned char Counter1;
22
static unsigned char Counter2;
23

24

25
const static T_TIMER_DATA sTimerData = { 100 ,10 };
26

27
T_TIMER_DATA sTimerData_Ram;
28
T_TIMER_DATA *psTimerData;
29

30
T_TIMER sTimer[2] =
31
{
32
   { &Counter1, &(psTimerData->Timeout1) },
33
   { &Counter2, &(psTimerData->Timeout2) }
34
};
35

36

37
int main()
38
{
39
    /*Copy from Flash to RAM*/
40
    sTimerData_Ram = sTimerData;
41
    
42
    psTimerData = &sTimerData_Ram;
43
}

--

Mit den [ c ] [ /c ] - Tags wirds lesbarer.
-rufus
Persönliche Seite #5136046
Lesenswert?

Tim schrieb:
> Es wird angemeckert, dass "&(psTimerData->Timeout1)" nicht const ist.

psTimerData ist ein nicht initialisierter Pointer, der ins Nirvana 
zeigt. Erst in main() weist Du dem Ding einen Wert zu; Deine globale 
Variable aber willst Du mit einer Dereferenzierung dieses (nicht 
initialisierten) Pointers initialisieren.

Und ja, natürlich ist das nicht const, weil Du psTimerData nicht const 
definierst.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren