-         

Ergebnis 1 bis 5 von 5

Thema: Uart while schleife führt zu absturz

  1. #1

    Uart while schleife führt zu absturz

    Anzeige

    Hallo,

    ich habe ein Problem mit dem UART. Ich benutze die lib von Peter Fleury. Der MC bekommt von einm VB Programm(oder Terminal) Start und Endbefehl
    und soll command füllen. Allerdings hängt er sich auf sobald er die while Schleife verlässt, also wenn die 254 gesendet wird. Manchmal funktioniert es ein, zweimal aber meistens gibt er direkt den Geist auf und macht was er will. Setzte ich jedoch delays von 5ms in die while Schleife läuft es(was das Problem ja nicht beseitigt)

    Hier die Code Stelle:
    Code:
       
    ci = 0;
    c = uart_getc();
    if( c != UART_NO_DATA  && c == 250){          
    //Startbedingung für alle Eingehenden Daten, 
    //wenn 250 gesendet wird und Daten vorhanden
      
    while( c != 254 ){
    // Lese solange, bis von der anderen Seite 254 als Endbedingung kommt!
    c = uart_getc();
    if(c != UART_NO_DATA) {
    command[ci++] = c;
    //_delay_ms(5);
    uart_putc(c);       // überprüfen am terminal
    //_delay_ms(5);        
             }
         
            }
    
        command[ci] = '\0';
        }
    Weiß einer wo der Fehler liegen könnte?

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    27.08.2013
    Ort
    Region Basel
    Alter
    59
    Beiträge
    2.435
    Hallo,

    1. Da fehlt etwas: Wie gross ist command[] ?
    Und wie sieht die Deklaration von c und ci aus?

    2. Egal wie gross command[] deklariert wird, es besteht die Möglichkeit dass mehr Zeichen gesendet werden, als in command gespeichert werden können.
    Dann überschreibst du irgendwelche anderen Daten oder Programmteile!

    MfG Peter(TOO)

    Übrigens war ein solcher Programm-Fehler die Basis für SASSER, ein typischer Anfängerfehler.
    Manchmal frage ich mich, wieso meine Generation Geräte ohne Simulation entwickeln konnte?

  3. #3
    Hallo,
    Die Arrays sollten groß genug sein, ich sende maximal 13 Byte zurzeit.(zum testen einzeln über Terminal)
    Hab mir jetzt mal ci über UART ausgegeben. Ci wird immer größer mit delays dauerts was länger ohne delays kommts da denke ich zum überlauf.
    Er führt die If - Abfrage nicht nur einmal für ein empfangenes Byte aus sondern öfters obwohl er das nicht dürfte? Habe jetzt UART_NO_DATA alleine abgefragt und die LED, die am PCF angeschlossen ist
    schaltet nicht um und bleibt aus. Hier mal der ganze Code im Anhang.
    Ich weiß nicht mehr weiter normal sollte ci nur einmal pro Zeichen erhöht werden?

    MfG Philipp
    Angehängte Dateien Angehängte Dateien

  4. #4
    Hallo,

    das Problem ist gelöst. Hatte auch bei mikrocontroller.net mein Problem geschildert.
    c war als unsigned char deklariert, musste aber als unsigned int deklariert werden, da sonst UART_NO_DATA nicht richtig gesetzt wird.
    Der Code im Anhang

    MfG Philipp
    Angehängte Dateien Angehängte Dateien

  5. #5
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    27.08.2013
    Ort
    Region Basel
    Alter
    59
    Beiträge
    2.435
    Hallo Philipp,
    Zitat Zitat von Bremsenreiniger Beitrag anzeigen
    c war als unsigned char deklariert, musste aber als unsigned int deklariert werden, da sonst UART_NO_DATA nicht richtig gesetzt wird.
    Der Code im Anhang
    ... und genau diese Informationen hast du geheim gehalten
    So kann man nicht helfen!

    MfG Peter(TOO)
    Manchmal frage ich mich, wieso meine Generation Geräte ohne Simulation entwickeln konnte?

Ähnliche Themen

  1. RS-232 verursacht absturz...
    Von Silence07 im Forum C - Programmierung (GCC u.a.)
    Antworten: 3
    Letzter Beitrag: 24.09.2007, 10:37
  2. mutmaßlicher absturz nach _delay_ms
    Von Stein im Forum C - Programmierung (GCC u.a.)
    Antworten: 5
    Letzter Beitrag: 26.05.2007, 11:54
  3. uart tx führt zu reset
    Von CowZ im Forum C - Programmierung (GCC u.a.)
    Antworten: 4
    Letzter Beitrag: 12.03.2007, 22:27
  4. [ERLEDIGT] PIC absturz
    Von *Mario* im Forum PIC Controller
    Antworten: 11
    Letzter Beitrag: 28.03.2006, 23:49
  5. Wieso führt mein Mega32 If-Schleife nicht korrekt aus?
    Von Foooob im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 8
    Letzter Beitrag: 05.03.2006, 19:28

Berechtigungen

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