variable wird wegoptimiert

OP (Firma: privat) #6748105
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.
#6748110
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 #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
(Firma: egal) #6748128
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.
OP (Firma: privat) #6748137
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.
#6758388
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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 5 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.