Forum: PC Hard- und Software Seriellen String mit C empfangen


von Mike H. (Gast)


Lesenswert?

Hallo zusammen!

Ich bin gerade dabei ein kleines Programm in C zu schreiben um einen 
String, der an der seriellen Schnittstelle ankommt zu empfangen. Der 
String ist maximal 160 Bytes lang. Das Öffnen des Ports und 
initialisieren funktioniert soweit, jedoch komme ich beim String nicht 
weiter.

Hier mal ein Ausschnitt, wie es bis jetzt läuft (allerdings werden hier 
nur einzelne Bytes empfangen):
1
void readdata(int iFd){
2
  char buf[160];
3
  int res=0;
4
5
  res = read(iFd,(char *)buf,160);
6
  
7
  printf("readfunction %d \n", res);
8
9
  if(res == -1) {
10
    printf("read was unsuccesfull\n");
11
    buf[0]='\0';
12
  }
13
  else {
14
    buf[res]='\0';
15
    printf("read succesfull\n",buf);
16
    printf("read:%s\n",buf);
17
  }
18
  printf("values read(printf):%s\n",buf);
19
}

Ich scheitere momentan am Zusammensetzen der einzelnen Bytes zu einem 
String. Vielleicht kann mir jemand an einem kleinen Beispiel das 
Vorgehen erklären; ich bin Anfänger in Sachen C.

Vielen Dank schonmal!

Grüsse, Mike

von B e r n d W. (smiley46)


Lesenswert?

Hallo Mike

Eigentlich gehören da noch ein paar Infos dazu. Du schreibst ja im 
PC-Forum, also gehe ich davon aus, dass Du ein PC-Programm schreibst. Um 
welches C handelt es sich denn?

1
#define BUFSIZE 160
2
3
void readdata(int iFd)
4
{
5
  char buf[BUFSIZE];
6
  char c;
7
  int  res;
8
  int  n = 0;
9
10
  do {
11
    res = read(iFd, (char *)&c, 1);  // Teste, ob ein Byte da ist
12
    
13
    if (res < 0) {                   // Falscher Fehler
14
      n = 0;                         // Anzahl Bytes zurücksetzen
15
      break;                         // abbrechen
16
    }
17
18
    if (res == 1 && c > '\0') {      // alternativ auf >= ' ' testen
19
      buf[n++] = c;                  // gültiges Byte in den Buffer
20
    }
21
  } 
22
  while (n< BUFSIZE-1 && c != '\0'); // Stringende erreicht
23
  buf[n] = '\0';                     // abschliessende Null anhängen
24
25
  if (res < 0) {
26
    printf("read was unsuccesfull\n");
27
  }
28
  else {
29
    printf("read succesfull\n");
30
    printf("read: %s\n", buf);
31
  }
32
  printf("bytes: %d\n", n);
33
}

Das Beispiel ist nicht getestet. Es hat keinen Timeout und bleibt in 
einer Endlosschleife, falls keine Daten mehr kommen.

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
Noch kein Account? Hier anmelden.