Uart while schleife führt zu absturz
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?
Liste der Anhänge anzeigen (Anzahl: 1)
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
Liste der Anhänge anzeigen (Anzahl: 1)
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