www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Wert in von Zeiger adressierte Speicherzelle schreiben/lesen


Autor: Siegfried Saueressig (dieleena)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
Habe Probleme beim schreiben/lesen einer vom Zeiger adressierter 
Speicherzelle.

unsigned int Array[20];
unsigned int *ArrayZeiger;
unsigned int *FifoBufferOutput[20];
unsigned int FifoCount;
unsigned int myArrayWert;


FifoCount = 0;
FifoBufferOutput[FifoCount++] = &Array[0];
FifoBufferOutput[FifoCount++] = &Array[1];
FifoBufferOutput[FifoCount++] = &Array[2];
FifoBufferOutput[FifoCount++] = &Array[3];

ArrayZeiger = FifoBufferOutput[3];
Array[*ArrayZeiger] = 1;
myArrayWert = Array[*ArrayZeiger];


**********
im FifoBufferOutput werden die Adressen des Arrays richtig abgelegt.
wenn ich per Zeiger die gewünschte Adresse ansprechen will, beschreibt 
oder list er immer die erste Adresse(Zelle) des Array, obwohl die 
richtige Adresse übergeben wird.


Gruß Siegfried

Autor: Fischi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Array[*ArrayZeiger] = 1;
> myArrayWert = Array[*ArrayZeiger];
*ArrayZeiger = 1;
myArrayWert = *ArrayZeiger;

Bei der Buffergrösse ist es sinnvoller mit Indizes zu arbeiten ...

Autor: Tassilo Böhr (big_t)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und aus meiner Sicht vorher statt
ArrayZeiger = FifoBufferOutput[3];

ArrayZeiger = &FifoBufferOutput[3];

es soll ja die Adresse und nicht der Inhalt zugewiesen werden.

Tassilo

Autor: Albo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das liegt wahrscheinlich daran, dass in Array[3] ne 0 drin steht und 
somit immer Array[0] addressiert wird.

Deine Zugriffe wirken irgendwie konfus und ich glaube nicht, dass du das 
bewirken willst, was du tust.

Autor: Albo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Tassilo Böhr

Nö, in FifoBufferOutput[3] steht ja ne Adresse drin.

Autor: Siegfried Saueressig (dieleena)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

das "FifoBufferOutput[] enthält eine Adresse, nicht den Wert, der 
bearbeitet werden soll.

FifoBufferOutput belegt die Adresse 02B - 231
Array belegt die Adresse 235 - 25B

übergebene Werte durch diese Code
->FifoBufferOutput[FifoCount++] = &Array[X];<-
FifoBufferOutput Adresse 20B Wert 0235
FifoBufferOutput Adresse 20D Wert 0237
FifoBufferOutput Adresse 20F Wert 0239
FifoBufferOutput Adresse 211 Wert 023B

Ich lege in FifoBufferOutput die Adresse ab, die ich im Array bearbeiten 
möchte.

Wenn ich dann

ArrayZeiger = FifoBufferOutput[3];

die Adresse aus dem FiFoBufferOutput[3] in den ArrayZeiger übergebe, ist 
der Wert "023B" enthalten.

Wenn jetzt der Wert des Array geändert werden soll wird nicht die 
Adresse "023B" genutzt, sondern die Adresse "0235", also die erste 
Adresse des Array. Bei anderen Adressen das gleiche.

Array[*ArrayZeiger] = 1;

Gruß Siegfried

Autor: Albo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Warum sollte denn auch die Adresse 03B genutzt werden? Ich glaube du 
hast die Zeiger-Logik nicht so ganz verstanden oder einen Denkfehler.

SO:
*ArrayZeiger = 1;
würdest du auf das Element unter der Adresse 03B zugreifen.

Autor: Siegfried Saueressig (dieleena)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
Ich gebe mich geschlagen.

-> *ArrayZeiger = 1; <-

das war es, was ich gebraucht habe.

an alle, vielen Dank

Gruß Siegfried

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.