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 | }
 |