Zitat von
KR-500
Hi,
also ich gehe mal davon aus, dass deine Routine zum Empfangen funktioniert. Dann kannst du einfach die ersten vier Bytes von deinem Teststring nehmen ("prb=") und diese dann mit memcmp (
http://www.cplusplus.com/reference/c...string/memcmp/) vergleichen. Sollte der String dann übereinstimmen, kannst du mit atoi() oder einer selbst geschriebenen Funktion den String in einen Integer umwandeln und dem Register zuweisen.
Viele Grüße
KR-500
Diesen Vergleich mach ich schon mit der strcmp Funktion das funktioniert auch ganz gut.
Hab gerade noch ein viel schlimmeres (triviales?) Problem:
Und zwar hat mein Betreuer eine Subset Funktion gebaut,
die nach einem Leerzeichen schaut, wenn dieser in dem zu sendendem String vorhanden ist,
wird dieser String an der Stelle des Leerzeichens getrennt, und der String vor dem Leerzeichen als str_1 ausgegeben,
der nach dem Leerzeichen als str_2.
Allerdings funktioniert das alles nicht so richtig, wenn ich das mit dem Terminal überprüfen möchte.
Hab mal die 2 kritischen Code stellen hier in die code-tags gepackt:
Code:
while(1)
{
if (uart_str_complete == 1) //wenn der empfangene string komplett ist, dann
{
if (strcmp( uart_str, "Hzgaus" ) == 0 ) //soll empfangene string mit "LED aus" vergliechen werden, wenn die gleich sind, dann
{
LED_PORT = 0; //LED soll ausgehen
//uart_puts("aus"); //und puts soll mir eben den Text rausgeben
}
if (strcmp( uart_str, "Hzgan" ) == 0 ) //wenn aber der empfangene String "LED an" heisst, dann
{
LED_PORT = 1; //dann soll die LED angehen
//uart_puts("ein"); //und puts eben dazu
}
if (strcmp( uart_str, "snd")== 0)
{
wert_ausgabe();
}
if (strcmp(uart_str, "xxx yyy")==0)
{
//atoi (uart_str) ;
strcpy(str_in, uart_str);
subset();
uart_puts(str_1);
uart_puts(str_2);
}
uart_str_complete = 0; //das uart_str_complete wieder auf 0 setzen, damit die ISR weitere Dinge empfangen kann und nicht
} //dauernd zeug sendet
}
}
und die stringsubset funktion:
Code:
char str_in [10];
char str_1 [10];
char str_2 [10];
void subset()
{
char index_in, index_out;
index_in = 0;
index_out = 0;
while (str_in[index_in] != 0x20)
{
str_1[index_out] = str_in[index_in];
index_in++;
index_out++;
}
index_out = 0;
while (str_in[index_in] != 0x0a && str_in[index_in] != 0x0D)
{
str_2[index_out] = str_in[index_in];
index_in++;
index_out++;
}
}
Rest funktioniert.
Grüße.
Lesezeichen