Hallo,
Ich komm einfach nicht mehr weiter.
Ich hab eine Struktur OS_Timer mit einem Pointer (Flagx).
In der Funktion OS_TimerSet übergebe ich die Adresse eines Flags
(_timer->Flagx = p_flag;) was auch funktioniert.
Dann möchte ich in der "Timerroutine" dem Flag direkt den Wert 0 oder 1
zuweisen. Nur leider spielts das nicht. Entweder der zugewiesene Wert
bewirkt gar nichts oder wird als Adresse verwendet, wo er dann eben
irgendwo und nicht mehr auf mein flag[0] zeigt.
Habe schon alle möglichen Casts probiert, nur leider kein Erfolg.
Wie kann man denn folgendes verstehen:
timer[i].Flagx = 1;
laut meinen Debugging Sessions wird 1 als neue Adresse gesehen.
Ich möchte "1" aber als Wert an die Adresse übergeben, auf die der
Pointer bereits zeigt.
Wo liegt mein Fehler???
Danke
Max
1 | typedef struct
|
2 | {
|
3 | uint8_t TimerStartStopBit;
|
4 | uint16_t TimerActualValue;
|
5 | uint16_t TimerCompareValue;
|
6 | uint8_t *Flagx;
|
7 | }
|
8 | OS_TIMER;
|
9 |
|
10 | uint8_t flag[1];
|
11 |
|
12 |
|
13 | OS_TIMER timer[1];
|
14 |
|
15 | uint8_t OS_TimerSet(OS_TIMER *_timer, uint8_t *p_flag, uint16_t timerValue)
|
16 | {
|
17 | _timer->TimerCompareValue = timerValue;
|
18 | _timer->Flagx = p_flag;
|
19 | return 0;
|
20 | }
|
21 |
|
22 |
|
23 | uint8_t TimerRoutine(void)
|
24 | {
|
25 | int i=0;
|
26 |
|
27 | for(i=0;i<OSCFG_MaxTimer;i++)
|
28 | {
|
29 | if (timer[i].TimerStartStopBit == 1)
|
30 | {
|
31 | timer[i].TimerActualValue++;
|
32 |
|
33 | if (timer[i].TimerActualValue == timer[i].TimerCompareValue)
|
34 | {
|
35 | timer[i].Flagx = 1;
|
36 | timer[i].TimerActualValue = 0;
|
37 | }
|
38 | }
|
39 | else
|
40 | {
|
41 | timer[i].TimerActualValue = 0;
|
42 | }
|
43 | }
|
44 |
|
45 | return 0;
|
46 | }
|