Compiler optimiert fehlerhaft

Gast #75725
Hallo,
ich habe folgende Prozedur geschrieben:

void checkempfang(void) { //untersucht, ob es was anzuzeigen gibt
empfangbuff = empfang;
//sendet den Inhalt von empbuff an das LCD
if (empfangbuff > 0) {
sendelcd(0xc0,0);//zweite zeile des LCDs
for (durchinabfrage = 0;durchinabfrage<16;durchinabfrage++){
if ((empfangbuff & 1) == 1) { //bit ist ne eins
sendelcd(0x31,1);//1
}else{
sendelcd(0x30,1);//0
}
empfangbuff = empfangbuff / 2;
}
}
}

Ohne Compiler Optimierung (OPT = 0) läuft die Prozedur wie gewünscht
(allerdings laufen dann andere Programmteile nicht). Mit Optimierung
(OPT = 1) verhält es sich so, als ob die Prozedur garnicht vorhanden
wäre. Wenn ich "if (empfangbuff > 0) {" entferne, läuft die Prozedur
auch mit Optimierung (aber der alte Wert soll halt nicht ständig
überschrieben werden, wenn empfangbuff == 0 ist).
empfangbuff und empfang sind beide vom Typ volatile unsigned short.
Die Variable empfang wird nur in einer interrupt Routine (timer1)
beschrieben. Aber da ja volatile vorsteht dürfte sie ja nicht
wegoptimiert werden.
Ich verwende winavr20030913 und einen AT90S2313 mit 2MHZ
Gast #75726
Ooops, war mein Fehler. Hatte gerade angefangen den Fehler zu umgehen,
als ich feststellte, dass die Hauptroutine timer1 ständig auf null
setzte. Ohne Optimierung war der Code wohl langsam genug, so dass der
Interrupt trotzdem ausgelöst wurde, mit Optimierung jedoch nicht mehr.
Ich habe den Fehler halt an der falschen Code Stelle gesucht.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 22 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.