Forum: Mikrocontroller und Digitale Elektronik kurzen String senden...


von Paule (Gast)


Lesenswert?

Hei Leute,
komme einfach nicht auf die Loesung des folgenden Problems:

Will eigentlich nur das der uC das sendet was ich vorher eingebe. Der
uC sendet aber mit untem geposteten Programm nix, nur wenn ich eine
Endlosschleife mit serDwrite mache, dann klappts einwandfrei. Das
versteh ich ueberhaupt nicht, ist doch sehr komisch oder, dass er nur
bei einer Endlosschleife sendet. Er gibt auch immer an, dass er 6
Zeichen erfolgreich gesendet hat, also ich versteh nur noch Bahnhof.
Kann vielleicht jemand den Code checken oder weiss jemand sont was???
Bin solangsam am verzweifeln.....
VG Paule

#define DINBUFSIZE 127
#define DOUTBUFSIZE 127
#class static

//************************************************
void SerDwrite(char *s) {

      int i,j;
      j=0;
      serDopen(9600);
      serDwrFree;
      serDwrFlush;
      serDflowcontrolOff();
      serDdatabits(PARAM_8BIT);

      while(j<6) { j=serDwrite(s,6); } //return-Wert von j ist
                                       //erfolgreich
                                       //gesendete Bytes
//hier funktionierts nur mit Endlosschleife!!!!!!??????????

serDclose();
                   }
//************************************************

main () {

          char s1[50];
          gets(s1);

          SerDwrite(s1);  //Habe unten die Fkt-Def. von SerDwrite
                          //angehaengt, falls es was hilft
         }

/* START FUNCTION DESCRIPTION
********************************************
serDwrite                   <RS232.LIB>

SYNTAX:       int serDwrite(void *data, int length);

DESCRIPTION:   Transmits length bytes to serial port D.
               This function is non-reentrant.

PARAMETER1:    data  : data structure to write to serial port D
               length: number of bytes to write

RETURN VALUE:  The number of bytes successfully written to serial port
D.

END DESCRIPTION
**********************************************************/

nodebug int serDwrite(void *data, int length)
{
   static int bytesleft;
   static char *p;

   p = (char *)data;
   bytesleft = length;
   if (cbuf_wrlock(spd_ocbuf))
   {
      while (bytesleft)
      {
         bytesleft -= cbuf_put(spd_ocbuf, p+(length-bytesleft),
bytesleft);
         spd_starttx();
      }
      cbuf_wrunlock(spd_ocbuf);
   }
   return length - bytesleft;
}

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.