Verschiedene Variablen aus einem Empfangenen String in ein Array speichern

OP #1028812
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
#1029064
@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
   }
OP #1029236
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
Gast #1029258
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.
OP #1029288
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
Gast #1029314
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.
#1029334
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.
OP #1029346
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

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 18 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.