-         

Ergebnis 1 bis 3 von 3

Thema: Simulation mit AVR-Studio funktioniert, in Realität nicht

  1. #1
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    25.11.2003
    Beiträge
    1.111

    Simulation mit AVR-Studio funktioniert, in Realität nicht

    Anzeige

    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ß

  2. #2
    Benutzer Stammmitglied
    Registriert seit
    24.09.2006
    Beiträge
    84
    Hi Gock,
    ich weiß ja nicht, in wie weit sich dein Tiny2313 anders verhält als der Simulator.
    Dieses if (Status_ISR.TWI=1){ ist immer wahr. Ich denke mal sowohl im Simulator, als auch auf deinem Tiny?!?
    Weiterhin werden nicht alle Variablen in C mit 0 initialisiert. Laut http://www.mikrocontroller.net/topic/78754 läuft das folgendermaßen:

    Nur globale und statische Variablen werden bei Programmstart automatisch
    mit 0 initialisiert! Lokale Variablen haben keinen definierten
    Startwert.
    Viele Grüße
    CsT

  3. #3
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    25.11.2003
    Beiträge
    1.111
    Ja, dass ich das Gleichheitszeichen vergessen habe, schrieb ich. Mir geht es um die Unterschiede der Simulation zur Realität. Aber mit der Info über die Variableninitialisierung kann ich auch was anfangen, das war mir so nicht klar. Ich befürchte allerdings, dass das nicht der Grund im vorliegenden Fall ist, weil die Variable als struct global definiert wurde. Es sei denn, ein struct bildet eine Ausnahme.
    Gruß

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •