www.mikrocontroller.net

Forum: Compiler & IDEs AVR-Studio Debugging hängt sich auf


Autor: *Lauflicht advanced* (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen.

Ich habe ein kleines Problem mit einem 3er-Lauflicht über 24 Ports.

Ich hab mich mal mit Switch-Case versucht, ich weiß sieht nicht sehr 
übersichtlich aus. Sollte ich vieleicht mal als AusgabeArray machen.

Aber jetzt zu meinem Problem:
#include <avr/io.h>


int main(){

DDRA=0xFF;
DDRB=0xFF;
DDRC=0xFF;

while(1){

   int state=0, a=7, b=0, c=0;

   while(state<26){


    switch (state){
  
      case 1 :
      case 2 :
      case 3 :
      case 4 :
      case 5 :          //Reines Verschieben auf PORTA
        a = a << 1;
        state++;
        PORTA=a;
        break;

      case 6 :          //Startup auf PORTB + Verschieben auf PORTA
        a = a << 1;
        b = 1;
        state++;
        PORTA=a;
        PORTB=b;
        break;

      case 7 :
        a = a << 1;    
        b = 3;
        state++;
        PORTA=a;
        PORTB=b;
        break;
  
      case 8 :
        a = a << 1;    
        b = 7;
        state++;
        PORTA=a;
        PORTB=b;
        break;
  
      case 9 :
      case 10 :
      case 11 :
      case 12 :
      case 13 :          //Reines Verschieben auf PORTB
        b = b << 1;
        state++;
        PORTB=b;
        break;

      case 14 :          //Startup auf PORTC + Verschieben auf PORTB
        b = b << 1;
        c = 1;
        state++;
        PORTB=b;
        PORTC=c;
        break;

      case 15 :
        b = b << 1;    
        c = 3;
        state++;
        PORTB=b;
        PORTC=c;
        break;
  
      case 16 :
        b = b << 1;    
        c = 7;
        state++;
        PORTB=b;
        PORTC=c;
        break;
  
      case 17 :
      case 18 :
      case 19 :
      case 20 :
      case 21 :          //Reines Verschieben auf PORTB
        c = c << 1;
        state++;
        PORTC=c;
        break;

      case 22 :          //Startup auf PORTA + Verschieben auf PORTC
        a = 1;
        c = c << 1;
        state++;
        PORTA=a;
        PORTC=c;
        break;

      case 23 :    
        a = 3;
        c = c << 1;
        state++;
        PORTA=a;
        PORTC=c;
        break;
  
      case 24 :    
        a = 7;
        c = c << 1;
        state++;
        PORTA=a;
        PORTC=c;
        break;

      default: break;
    }
  }
}
}

Wenn ich das File auf dem Simulator laufen lasse, hängt sich das 
AVR-Studio jedes mal bei

DDRC=0xFF;

auf (CPU auslastung 100% und ich muss das Debugging neu starten).

Es liegt nicht an dem DDRC sonder an dem, was danach kommt. Aber ich 
kann keinen Fehler entdecken.

Bin für jeden Tipp Dankbar !!

Gruß




Ich habe einen Atmega32 und

AVR Studio    4.13.571  Service Pack 2
GUI Version    4, 13, 0, 569
AVR Simulator    1, 0, 2, 0
ATmega32    229

Operating System
Major      5
Minor      1
PlatformID    2
Build      2600
Service Pack 2

Plugins:

AvrPluginAvrAsmObject  1, 0, 0, 46
AvrPluginavrgccplugin  1, 0, 0, 9
Stk500Dll      1, 0, 1, 10

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich bin jetzt nicht alles durchgegangen.  Aber Du startest im state 0. 
Dafür gibt es keine Bedingung (case).  Deshalb wird sich nichts tun; Du 
bleibst für ewig in diesem State hängen.  Ähnliches würde gelten, wenn 
Du alle states durch hast (aber bis dahin kommst Du gar nicht).

Autor: *Lauflicht advanced* (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also ich war bis jetzt der Ansicht, genau dafür gibt es
default: break;
ich muss doch nicht jeden möglichen Case extra auflisten.
Und das ändert nichts an meinem Problem, dass das Debugging nicht läuft.

Gruß

Autor: Toni (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und was passiert im default-case??

NICHTS, deshalb bleibt state auf 0!!!
Und weil State auf 0 bleibt.............

Autor: *Lauflicht advanced* (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
oh shit natürlich!!
Hat mich nur verwirrt, dass der Debugger sich dann selber in Art 
Endlos-Schleife setzt, obwohl ich stepbystep durch den Code gehen 
wollte. Aber selbst dass wird jetzt verständlich.

Danke für die Hilfe XD

Gruß

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.