Moin Ich hab ein Problem. Momentan versuche ich einen String vom PC über RS232 an meinen kleinen Atmega32 zu senden. Das funktioniert auch ohne Probleme nun möchte ich den Empfangenen String am µC auswerten und die einzelnen Segmente die mit einem Komma getrennt sind in einem Array speichern. Also mein String sieht ungefähr so aus: String1,1,1,1,var1,var2,var3,var4 Nun sollen die verschiedenen Variablen in einem Array gespeichert werden. Leider habe ich keine Ahnung wie ich das machen soll. Das ganze wollte ich in C programmieren. Weiß jemand wie man das lösen kann? Ich bin für jede Hilfe dankbar. Gruß Simon
Die Standard-Funktionen, die mir da einfallen, sind sscanf und strtol.
Hi Hast du vielleicht ein Beispiel dazu? Ich kenn die Funktionen nicht. Gruß Simon
Ich würde das Ganze mit nem Zustandsautomaten und Arrays/Pointern machen. Das kann gleich in der Uart-Receive-ISR stattfinden.
@Simon K. Die ANSI-C Standardbibliotheken sollte man eigentlich irgendwo griffbereit haben. Das erspart viel Arbeit. http://linux.die.net/man/3/strtol http://linux.die.net/man/3/sscanf Es könnte folgendes gehen:
1 | int i = 0; |
2 | char * next = s; /* Eingabestring */ |
3 | while(* next) /* noch kein Stringende */ |
4 | {
|
5 | array[i++] = strtol(next, &next, 0); |
6 | if (* next) next++; /* Komma überspringen */ |
7 | }
|
Hi Ich habe das jetzt mal so versucht wie in dem Beispiel welches du gepostet hast, aber irgendwie haut das nicht hin. Oder hab ich das falsch gemacht? char Buffer[20]; unsigned char array[10]; uart_gets( Buffer ); // Auf eine Zeile vom Benutzer warten int i = 0; char * next = Buffer; /* Eingabestring */ while(* next) /* noch kein Stringende */ { array[i++] = strtol(next, &next, 0); if (* next) next++; /* Komma überspringen */ } Sorry aber ich bin noch Anfänger. Danke für die Hilfe. Gruß Simon
Simon K. wrote: > Ich habe das jetzt mal so versucht wie in dem Beispiel welches du > gepostet hast, aber irgendwie haut das nicht hin. > Oder hab ich das falsch gemacht? Wenn du nicht schreibst, was nicht geht, kann dir niemand helfen. > uart_gets( Buffer ); // Auf eine Zeile vom Benutzer warten Welcher Kompetenzbolzen hat denn die uart-Bibliothek geschrieben? Wenn die Eingabezeile laenger als dein Buffer ist, pinselt dein Programm hier schon schoen im Speicher rum. Da gibt's bestimmt noch eine Version mit Laengenbegrenzung.
Sorry Ich habe das so gemacht wie oben beschrieben. Und dann habe ich versucht das Array aus zu lesen und dann wenn eine 1 drin steht wollte ich einen Port schalten um zu testen ob es funktioniert. Nur da es nicht geklappt hat. Habe ich versucht das Array wieder zurück an den Rechner zu Senden. Das Senden hat auch geklappt aber da stand nichts drin. Deswegen habe ich gedacht der Fehler muss irgendwo in der Verarbeitung liegen. Gruß Simon
Dann zeige mal den ganzen Code, der Fehler kann ja nun ueberall liegen. Waere natuerlich besser, du wuerdest in kleinen Schritten arbeiten, also zum Beispiel erstmal ein einfaches Echo implementieren, damit du dir sicher bist, dass du empfangen und senden kannst. Einfacher geht das ganze natuerlich, wenn du ein Entwicklungssystem mit Display hast, dann kannst du wenigstens Debug-Ausgaben machen - die Ausgabe auf dem Display natuerlich vorher separat testen ;-) Und wenn du zum ersten Mal Text parst, machst du das am besten erst mal auf dem PC, mit einem Debugger, wo du in Ruhe und Schritt fuer Schritt nachpruefen kannst, was dein Programm tut.
Solche Konvertierungs-Geschichten sollte man erst einmal auf dem PC "trocken" testen bevor man es in dem µC flasht. Folgendes Programm funktioniert bei mir:
1 | #include <stdio.h> |
2 | #include <string.h> |
3 | |
4 | int main(void) |
5 | {
|
6 | int i = 0; |
7 | char Buffer[] = "1,5,2,3,6,2"; |
8 | char * next = Buffer; /* Eingabestring */ |
9 | int wert; /* Statt Array */ |
10 | |
11 | while(* next) /* noch kein Stringende */ |
12 | {
|
13 | wert = strtol(next, &next, 0); i++; |
14 | printf("%i:%i\n", i, wert); |
15 | if (* next) next++; /* Komma überspringen */ |
16 | }
|
17 | return 0; |
18 | }
|
Gibt aus: 1:1 2:5 3:2 4:3 5:6 6:2 Die Schleife bricht auch ordnungsgemäß ab. Übertragungsfehler dürfen hier natürlich nicht passieren, die müsstest du ggf. noch gesondert abfangen.
Hi Ja den Code stell ich Morgen mal rein. Das senden und empfangen funktioniert super. Ich habe es in kleinen schritten gemacht zuerst habe ich versucht einen String vom µC zum PC zu senden. Und dann habe ich einen String vom PC zum µC gesendet. Hat auch alles super funktioniert. Nur das mit dem Display klappt momentan leider nicht, mir fehlt die Hardware dafür :-D Nur ich will nachher 2 µC mit einander kommunizieren lassen und da wollte ich alle Daten in einem String zusammenfassen. Und die verschiedenen Variablen will ich dann wieder in einem Array Speichern. Gruß Simon
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.