inschenjoer
28.11.2006, 22:28
Hallo,
ich bin dabei meinen PIC zu programmieren. Und zwar gehts um die serielle Verbindung zu einem PC.
Dazu habe ich folgende while-Schleife, die eine Zeile einlesen soll:
recvd = recvline232();
while (recvd != '\0')
{
handlecommand(recvd);
recvd = recvline232();
}
Die Funktion recline232 ist wie folgt definiert:
char recv232()
{
if (RCIF == 1)
{
char s = RCREG;
return s;
}
return '\0'; // empty string
}
char *recvline232()
{
#ifdef DEBUG
sendmessage("recvline232 start");
#endif
char recvBuffer[64];
int pos = 0;
while (1)
{
char s = recv232();
#ifdef DEBUG
sendstring232("m recvd: -");
sendstring232(s);
sendstring232("- "+strlen(s));
sendstring232("-\n");
#endif
recvBuffer[pos++] = s;
if (s == '\0') break;
if (s == "")
{
recvBuffer[pos] = '\0';
break;
}
pause(10);
}
#ifdef DEBUG
sendmessage("recvline232 stop");
#endif
return recvBuffer;
}
Die recv232-Funktion funktioniert. Das habe ich ausgetestet. Aber die recvline232 endet in einer Endlosschleife. Die Ausgabe am PC sieht wie folgt aus:
m recvline232 start
m recvd: --
m recvline232 stop
m recvline232 start
m recvd: --
m recvline232 stop
m recvline232 start
m recvd: --
m recvline232 stop
....
Hat evtl. jemand ne Idee woran das liegen könnte? Ich bin mit meinem Latein am Ende...
mg
inschenjoer
ich bin dabei meinen PIC zu programmieren. Und zwar gehts um die serielle Verbindung zu einem PC.
Dazu habe ich folgende while-Schleife, die eine Zeile einlesen soll:
recvd = recvline232();
while (recvd != '\0')
{
handlecommand(recvd);
recvd = recvline232();
}
Die Funktion recline232 ist wie folgt definiert:
char recv232()
{
if (RCIF == 1)
{
char s = RCREG;
return s;
}
return '\0'; // empty string
}
char *recvline232()
{
#ifdef DEBUG
sendmessage("recvline232 start");
#endif
char recvBuffer[64];
int pos = 0;
while (1)
{
char s = recv232();
#ifdef DEBUG
sendstring232("m recvd: -");
sendstring232(s);
sendstring232("- "+strlen(s));
sendstring232("-\n");
#endif
recvBuffer[pos++] = s;
if (s == '\0') break;
if (s == "")
{
recvBuffer[pos] = '\0';
break;
}
pause(10);
}
#ifdef DEBUG
sendmessage("recvline232 stop");
#endif
return recvBuffer;
}
Die recv232-Funktion funktioniert. Das habe ich ausgetestet. Aber die recvline232 endet in einer Endlosschleife. Die Ausgabe am PC sieht wie folgt aus:
m recvline232 start
m recvd: --
m recvline232 stop
m recvline232 start
m recvd: --
m recvline232 stop
m recvline232 start
m recvd: --
m recvline232 stop
....
Hat evtl. jemand ne Idee woran das liegen könnte? Ich bin mit meinem Latein am Ende...
mg
inschenjoer