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
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.
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.