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
Nein - leider nicht! Wird mit folgender Meldung quittiert: main.c:69: error: incompatible types in assignment
Das geht so:
1 | struct rx_incomming *rx_buffer; |
2 | rx_buffer = (struct rx_incomming *) &mem_buffer; |
3 | |
4 | //und dann löschen
|
5 | memset(rx_buffer, 0, sizeof (struct rx_incomming)); |
BTW: "incoming" wird mit einem m geschrieben
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
Guten Morgen, der Stern vor "rx_buffer", also "*rx_buffer" hat bei mir stets Fehler-Meldungen beim build zur Folge.
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?
"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
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.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.