Autor Thema: gets() Problem  (Gelesen 4951 mal)

Offline Max Pohl

  • Jr. Member
  • **
  • Beiträge: 65
    • Profil anzeigen
gets() Problem
« am: April 30, 2010, 14:30:08 Nachmittag »
Hallo zusammen,
ich ben�tige mal wieder eure Hilfe.

Mein PIC kommuniziert �ber eine RS232 Schnittstelle mit einem Servo-Regler.
Der PIC sendet z.B. einen Abfragebefehl an den Regler, dieser Antwortet dann entsprechend.


      puts("Befehl"); //�bertrage Abfragebefehl
      gets(Antwort); //Empfange Antwort


Nun habe ich schon �fters das Problem gehabt das der PIC beim Empfangen stehen bleibt, da er auf eine Antwort
des Reglers wartet.
Da dieser zu diesem Zeitpunkt jedoch ausgeschalten oder noch nicht bereit war hatte er den Abfragebefehl auch nie erhalten.

Bisher hat das zwar funktioniert ist mir aber zu unsicher.

Nun m�chte ich eine Funktion die z.B nach 50ms ohne Antwort vom Regler den Befehl erneut sendet.

Hat jemand eine Profi L�sung f�r dieses Problem?

Vielen Dank schonmal

MfG Max

slowslow

  • Gast
Re:gets() Problem
« Antwort #1 am: Mai 01, 2010, 00:49:17 Vormittag »
Du hast doch die L�sung schon beschrieben. Sende halt einfach die Message noch einmal, wenn Du 50 msec keine Antwort erhalten hast.

Was Du unter "profim��ig" verstehst, erschlie�t sich mir nicht wirklich. Interrupt f�r den Timeout oder was?

Offline Max Pohl

  • Jr. Member
  • **
  • Beiträge: 65
    • Profil anzeigen
Re:gets() Problem
« Antwort #2 am: Mai 03, 2010, 21:44:02 Nachmittag »
Ohne Interrupt ist das nicht möglich oder?

slowslow

  • Gast
Re:gets() Problem
« Antwort #3 am: Mai 03, 2010, 21:53:55 Nachmittag »
Das Problem stellt die Funktion "gets" dar. Wenn sie nur verlassen wird, sobald eine Antwort empfangen wurde und wenn das Programm hängen bleibt, wenn keine Antwort empfangen wird, so ist die Funktion für Deine Zwecke nicht brauchbar.

Wenn "gets" ein Timeout zuläßt, so hast Du gewonnen, wenn nicht brauchst Du eine andere Funktion, die den Empfangsbuffer der seriellen Schnittstelle ausliest und die Anwort auf dem String(?) "Antwort" hinterlegt.

Das Timeout kanns Du über einen Interrupt des Timers realisieren, oder ohne Interrupt im Hauptprogramm durch einen Software-Zähler.

Dazu muß das Hauptprogramm regelmäßig diesen Zähler bedienen und auch regelmäßig die Empfangsroutine laufen lassen. Dann wirds was.

Offline Max Pohl

  • Jr. Member
  • **
  • Beiträge: 65
    • Profil anzeigen
Re:gets() Problem
« Antwort #4 am: Mai 04, 2010, 14:52:45 Nachmittag »
Genau danach suche ich ja.
Hat schonmal jemand eine gets() Funktion mit Timeout geschrieben?

 


* Recent Topics