Hallo zusammen, ich such schon die ganze Zeit, mein Atmelstudio haut mir immer wieder die String-Variablen weg Einfaches Beispiel: void test(void) { char zeit[5]=" "; zeit[2]=','; return; } Warning variable 'zeit' set but not used [-Wunused-but-set-variable] Nach all dem.. https://www.mikrocontroller.net/articles/String-Verarbeitung_in_C Ich versteh das nicht, was macht die Schicht 8 falsch? Auch getestet: volatile __attribute__((unused)); Grüße Klaus
Klaus H. schrieb: > ich such schon die ganze Zeit, mein Atmelstudio haut mir immer wieder > die String-Variablen weg > Einfaches Beispiel: > void test(void) > { > char zeit[5]=" "; > zeit[2]=','; > return; > } > Warning variable 'zeit' set but not used [-Wunused-but-set-variable] Wir wärs, wenn du die Variable einfach benutzt? Der Compiler verhält sich korrekt.
Klaus H. schrieb: > Hallo zusammen, > ich such schon die ganze Zeit, mein Atmelstudio haut mir immer wieder > die String-Variablen weg Nö, das macht der compiler. Weil die Variable niemals gelesen, sprich, benutzt wird. Und WOM (write only memory) ist uncool. > Warning variable 'zeit' set but not used [-Wunused-but-set-variable] Steht doch hier. > Auch getestet: > volatile > __attribute__((unused)); Schmarn.
Klaus H. schrieb: > Ich versteh das nicht, was macht die Schicht 8 falsch? Evtl. ungeeignete Einstellung für die Compiler-Optimierung gewählt?
Zeit wird weg optimiert wäre klasse 🤣 Du erstellst die Variable in deiner Funktion Beschreibst diese Und springst wieder raus. Die Funktion macht nichts und könnte ebenfalls weg optimiert werden. Oder du verheimlichst einiges aus der Funktion
Klaus H. schrieb: > Ich versteh das nicht, was macht die Schicht 8 falsch? Die angelegte Variable nicht nutzen. Und der Compiler merkt das und optimiert sie weg.
Klaus H. schrieb: > Ich versteh das nicht, was macht die Schicht 8 falsch? Sie versteht die völlig zurecht ausgegebene Fehlermeldung nicht:-) Du schreibst zwar Werte in deine Variabel Zeit, aber wärend deren Gültigkeitsbereich machst du danach nichts mehr sinnvolles damit. So nebenbei, das "return" ist hier überflüssig, des denötigst du nur wenn du auch was zurückgeben willst.
Hallo zusammen Danke! wie ich schon sagte Schicht 8 Ich hatte mir zur Fehlersuche eine Funktion geschrieben und den Teil wo die Variable kopiert wird nicht übernommen. Danke für eure Unterstützung ! Der Wald und viele Bäume...
Hallo, wenn man SPI verwendet, dann muss man ja den Eingangspuffer lesen, um das Interupt Flag BF (Buffer full) zu löschen. Wenn der enthaltene Wert kann aber nicht benötigt werden, weil es Dummy ist. Ich glaube einfaches lesen der Hardwareregisters auf eine Variable wird dann auch wegoptimiert..... Sollte man die Variable als volatile deklarieren ? Was ist der richtige Weg, um den Puffer wieder frei zu kriegen.
Hanswurst schrieb: > Ich glaube einfaches lesen der Hardwareregisters auf eine Variable wird > dann auch wegoptimiert..... Nö. > Sollte man die Variable als volatile deklarieren ? Nö, denn das Register ist volatile. Es reicht ein
1 | SPDR; |
Hier MUSS der Compiler SPDR lesen, auch wenn er das Ergebnis wegschmeißt.
Falk B. schrieb: > Es reicht ein >
1 | SPDR; |
Und wenn man das für den Leser noch klarer ausdrücken will, dass der gelesene Wert verworfen werden soll, dann schreibt man
1 | (void)SPDR; |
Jörg W. schrieb: > Und wenn man das für den Leser noch klarer ausdrücken will, dass der > gelesene Wert verworfen werden soll, dann schreibt man > (void)SPDR; Das ist so oder so kyptische C-Syntax, da reißt ein (void) auch nix mehr ;-)
Falk B. schrieb: > Das ist so oder so kyptische C-Syntax, da reißt ein (void) auch nix mehr Für mich schon. ;-) Mir ist dann sofort klar, dass es Absicht war, den Wert wegzuwerfen. Ich glaube, einige statische Code-Checker kann man damit auch überzeugen. :)
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.