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