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
Gast
#6748107
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.
Gast
#6748112
Klaus H. schrieb: > Ich versteh das nicht, was macht die Schicht 8 falsch? Evtl. ungeeignete Einstellung für die Compiler-Optimierung gewählt?
Gast
#6748115
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...
Gast
#6758377
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 | |
Hier MUSS der Compiler SPDR lesen, auch wenn er das Ergebnis wegschmeißt.
Gast
#6758496
Ah. So einfach. Danke
Falk B. schrieb: > Es reicht ein >
1 | |
Und wenn man das für den Leser noch klarer ausdrücken will, dass der gelesene Wert verworfen werden soll, dann schreibt man
1 | |
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. :)
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.