www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Pointer als Member einer Struktur - danach Zuweisungsprobleme


Autor: Markus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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
typedef struct  
{
  uint8_t TimerStartStopBit;
  uint16_t TimerActualValue;
  uint16_t TimerCompareValue;
  uint8_t *Flagx;
}
OS_TIMER;

uint8_t flag[1];


OS_TIMER timer[1];

uint8_t OS_TimerSet(OS_TIMER *_timer, uint8_t *p_flag, uint16_t timerValue)
{
  _timer->TimerCompareValue = timerValue;
  _timer->Flagx = p_flag;
  return 0;
}


uint8_t TimerRoutine(void)
{
int i=0;
  
for(i=0;i<OSCFG_MaxTimer;i++)
{
if (timer[i].TimerStartStopBit == 1)
{
   timer[i].TimerActualValue++;
      
   if (timer[i].TimerActualValue == timer[i].TimerCompareValue)
   {
     timer[i].Flagx = 1;
     timer[i].TimerActualValue = 0;
   }
}
else
  {
    timer[i].TimerActualValue = 0;
  }
}

return 0;
}

Autor: P. S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Markus wrote:

> Wo liegt mein Fehler???

Der Pointer muss dereferenziert werden, das macht man mit einem 
vorangestellten *. Also:

*( timer[i].Flagx) = 1;

Deswegen ist es wichtig C aus einem guten Buch zu lernen, statt aus 
Beispielen. Was ein Pointer ist und wie Pointerarithmetik funktioniert, 
muss sitzen - so schwer ist das aber eigentlich nicht.

Autor: Volker Zabe (vza)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
*timer[i].Flagx = 1;

wie wäre es mal mit Bücher lesen oder mit :
http://home.fhtw-berlin.de/~junghans/cref/CONCEPT/...

Autor: Markus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich würde gern antworten, leider verwehrt mir das Forum meine antworten 
abzusenden.
Max

Autor: Markus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Verdammt das nimmts

Autor: Markus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hab ich schon versucht nur hab ich es im AVR Studio übersehen.
Am Oszi funktioniert es.
Gute Bücher hab genug:-)
Der Tip mit dem lesen wär mir nicht eingefallen:-(
Max

Autor: Markus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also nochmal:
Beim debuggen bin ich mit "run to cursor" über die Stelle drüber 
gefahren.
Hab im watchwindow das natürlich nicht gesehen, dass das Flag geschaltet 
wird.
Hätte ich das Oszi früher angeschlossen wär ich selbst draufgekommen.

Danke,
Max

Autor: P. S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Markus wrote:

> Der Tip mit dem lesen wär mir nicht eingefallen:-(

Haettest du deine guten Buecher gelesen, haettest du weder mit dem 
Debugger, noch mit wilden Casts rumgespielt. Du entwickelst nicht, du 
bastelst rum - aber offensichtlich brauchst du gar keinen Rat.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.