mikrocontroller.net

Forum: Compiler & IDEs Compiler optimiert fehlerhaft


Autor: Malte Marwedel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Malte Marwedel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.