Hallo zusammen,

ich bin derzeit damit beschäftigt ein kleines "Protokoll" zu schreiben, das es mir ermöglicht über RS232 Schnittstelle Befehle an den Mikrocontroller zu senden.

Ein Befehl hat derzeit die Form: c123;
Das abschließende Zeichen ist also ';'
Es soll später einmal ein Wert auf den integer Wert '123' gesetzt werden.

Ich habe mir gedacht gut, ich mache mir einen kleinen Buffer und zähle die aktuelle Position mit, das funktioniert soweit auch ganz gut, nur treten seltsame Dinge auf. Zum einen werden einige Ausgaben mehrfach ausgegeben und sobald ich eine Eingabe gemacht habe und er mir das Ergebnis angezeigt hat, funktionieren weitere Ausgaben nicht mehr. Es kommt nur noch "Befehl wurde abgeschlossen".

Bin da so langsam mit meinem Latein am Ende, vielleicht entdeckt ihr ja den Denkfehler.
Ich verwende die UART Lib von Peter Fleury.
Code:
#define BUFFER_SIZE 128

unsigned char buffer[BUFFER_SIZE];
unsigned char buffer_temp[BUFFER_SIZE];
unsigned char buff_ptr = 0;

while(1) {
c = uart_getc();
        if (c & UART_NO_DATA)
        {    

        
        }
        else
        {
            
            buffer[buff_ptr] = (unsigned char)c;
            if (++buff_ptr >= BUFFER_SIZE)
            {
                buff_ptr = 0;
            }

            if (buffer[buff_ptr-1] == ';')
            {
                uart_puts("Befehl wurde abgeschlossen \n");
                uart_puts("Buffer Zaehler: ");
                uart_puts(itoa( buff_ptr, s, 10));
                uart_puts("\n");
                // Buffer kopieren
                for (int i=0; i < BUFFER_SIZE; i++)
                {
                    buffer_temp[i] = buffer[i];
                }

                // Kommando auswerten
                if (buffer_temp[0] == 'c')
                {
                    char iTemp[3];
                    // Zalen auslesen
                    for (int i=0; i<3; i++)
                    {
                        iTemp[i] = buffer_temp[i+1];
                    }
                    int a;
                    a = atoi(iTemp);
                    uart_puts("Zahlenwert lautet: ");
                    uart_puts(itoa( a, s, 10));
                    uart_puts("\n");
                }
                // Buffer löschen
                buff_ptr = 0;
                for (int i=0; i < BUFFER_SIZE; i++)
                {
                    buffer[i] = 0;
                }
            }
}
}