Hallo!
Ich habe jetzt zum 2. Mal heute die Erfahrung machen müssen, dass mein Tiny2313 sich in der Realität anders verhält, als AVR-Studio simuliert.
Es geht um folgende Zeilen Code:
Code:
//...
struct {
unsigned Timer1CompA:1;
unsigned TWI:1;
} Status_ISR;
//...
void TWITransfer(){
//SLAVEROUTINE FÜR TWI
}
//...
void Timer1_Comp_Match(){
Status_ISR.Timer1CompA=0;
...
return;
}
//...
int main(void){
init();
while(1){
if (Status_ISR.Timer1CompA==1){
Timer1_Comp_Match();
}
// if (Status_ISR.TWI=1){
// TWITransfer();
// }
}
}
Offensichtlich befindet sich ein Fehler in der unteren if Abfrage, weil ich ein Gleichheitszeichen vergessen habe. Dass der Compiler keinen Fehler meldet ist schade, mir aber klar.
Was ich nicht verstehe, ist, dass AVR-Studio diese Zeilen scheinbar anders interpretiert, als der Compiler, denn im Studio läuft alles einwandfrei. Ist das ein Bug vom Studio, der nicht in den "Known Issues" aufgeführt ist oder mache ich hier einen Fehler? Oder kann mir jemand sagen, warum AVR-Studio diese If Abfrage anders interpretiert? Gibt es noch mehr solcher Dinge zu beachten?
Übrigens: das erste Mal heute war es ein leicht anderes Problem: Obwohl ich dachte, alle Variablen werden in C automatisch mit 0 initialisiert, musste ich Status_ISR.Timer1CompA am Anfang 0 setzen. Habe ich das nicht getan, hat der µC mit einer Verzögerung von ca. 5sekunden erst begonnen. Das habe ich mir damit erklärt, dass unentwegt IRQs ausgelöst wurden und der µC quasi nicht vorangekommen ist. Die Simulation hingegen lief problemlos.
Ich programmiere mit AVRISP MKII.
Es ist mir klar, dass der Tiny2313 kein TWI besitzt. Den entsprechenden Vector habe ich auch weggelassen. Die Funktionen heißen so, weil ich auf dem Tiny testen muss, bevor ich auf einen Mega32 gehe.
Schönen Dank schonmal,
Gruß
Lesezeichen