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