mikrocontroller.net

Forum: Compiler & IDEs Struktur, auf die gezeigt wird, löschen


Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe eine Struktur mit verschiedenen Bits. Ich denke, der Aufbau der
Struktur sollte hier keine Rolle spielen. Die Struktur nutze ich, um die
Bits besser auswerten zu können.

Diese Struktur werte ich in einer Funktion aus; Zugriff von anderer
Stelle auf diese Struktur zu diesem Zeitpunkt ist ausgeschlossen.
Nachdem ich die Struktur ausgewertet habe, muss ich sie komplett
löschen - bevor ich wieder Daten in die Struktur fülle.

//globale variable
volatile uint16_t mem_buffer;

//Funktion zum auswerten:
{
struct rx_incomming *rx_buffer;
rx_buffer = (struct rx_incomming *)(uint16_t)&mem_buffer;
//...verschiedenes
//und dann löschen
rx_buffer = 0;
}

Das löschen von rx_buffer, wobei es sich eigentlich um mem_buffer
handelt funktioniert aber nicht. Folge sind falsche Werte in den
nächsten Schritten. ersetze ich "rx_buffer = 0" geg. "mem_buffer =
0" arbeitet es tadellos! Ich kann das nicht ganz nachvollziehen.
lst-File gibt mir auch keinen Aufschluss.

Evtl. hat jemand einen Tipp! Ich nutze solche Funktionalität zum ersten
male (also Struktur über Variable legen (wie nennt man das eigentlich?
;-) ).

Danke

Autor: Patrick Dohmen (oldbug) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
    *rx_buffer = 0;

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nein - leider nicht!
Wird mit folgender Meldung quittiert:
main.c:69: error: incompatible types in assignment

Autor: RAM (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das geht so:
struct rx_incomming *rx_buffer;
rx_buffer = (struct rx_incomming *) &mem_buffer;

//und dann löschen
memset(rx_buffer, 0, sizeof (struct rx_incomming));

BTW: "incoming" wird mit einem m geschrieben

Autor: -daniel- (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
struct rx_incomming *rx_buffer;
*rx_buffer = (struct rx_incomming){0};

memset setzt allerdings auch padding bits zu null
wenn du allerdings immer über -> oder *. zugreifst
dann spielt es keine Rolle

hth, Daniel

Autor: foox (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
nagge danse ganse nachte lang!

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Guten Morgen,

der Stern vor "rx_buffer", also "*rx_buffer" hat bei mir stets
Fehler-Meldungen beim build zur Folge.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das liegt aber sicher nicht am Stern. Der ist nämlich
syntaktisch völlig in Ordnung.

Was denkst du eigentlich: Gibt der Compiler die Fehlermeldungen
nur so zum Spass aus?

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"Ich habe eine Struktur mit verschiedenen Bits. Ich denke, der Aufbau
der Struktur sollte hier keine Rolle spielen."


Wenn Du dadurch eine Fehlermeldung kriegst, na klar spielt das ne Rolle
!!!


Peter

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du hast nen Pointer auf ne struct deklariert. Wenn Du Deine Werte
löschen willst, darfst Du natürlich nicht den Pointer selbst '0'
setzen, sondern Du musst die Komponenten der Struct löschen. Mit
'rx_buffer = 0' löschst Du aber nur den Zeiger, der dann auf die
Adresse '0' zeigt, was sicher nicht das ist, was Du willst. Einer
struct-Variablen kannst Du aber auch nicht einfach eine '0' zuweisen,
da sie ja vermutlich aus mehreren Komponenten besteht. Deshalb meckert
Dein Compiler auch bei der (für eine einfache Variable, also kein
struct, auch korrekte) Variante '*rx_buffer = 0'. Deshalb spielt die
struct selber eine sogar sehr wichtige Rolle.

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.