daniel.weber
30.03.2011, 12:58
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.
#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;
}
}
}
}
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.
#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;
}
}
}
}