Problem mit serieller Schnittstelle(C-Code Bsp. gesucht)

Gast #407419
Lesenswert?

Hallo Leute,
hocke seit 1 Woche an diesem besch.... Problem.
Ich versuche mit einem Rabbit 3000 uC ein serielles, asynchrones Signal
zu empfangen. Empfange aber immer nur 2 falsche characters und zwar
genau immer 2. Hat irgendjemand eine Idee was an meinem C-Code falsch
ist? Oder hat jemand ein C-Code Beispiel eines seriellen Empfangs(am
besten Rabbit, geht aber auch fuer andern uC). Waere sehr sehr dankbar
fuer Tipps,
Gruss Turbo-Pascal



#define EINBUFSIZE 255        //Ein-/Ausgangsbuffer
#define EOUTBUFSIZE 255
#class static

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

           auto int i;
           serEopen(9600);        //serieller Port Initialisierung
           serErdFree;
           serErdFlush;
       serEflowcontrolOff();
     serEdatabits(PARAM_8BIT);

  while(1) {i=serEread(*s,strlen(*s),20);
      printf("%s*%d*",*s,i);      }

//return-Wert
/*von serEread sind die erfolgreich empfangenen Bytes.*/

        serEclose();
                        }
//************************************************

main () {

          auto char *pointer;
          const char s1[]="Empfangseinheit_Version1";
          pointer=&s1;

          SerEReceive(*pointer);
      }
Gast #407420
Lesenswert?

Bin mir nicht so ganz sicher, aber vielleicht liegt der Fehler in den
wilden Pointer operationen.

Ich würde das main mal so abändern:

main()
{
  char s1[]="Empfangseinheit_Version1";

  SerEReceive(s1);
}

oder besser so:

main()
{
  char empfangsbuffer[EINBUFSIZE];

  SerEReceive(empfangsbuffer);
}

Der Empfangsbuffer sollte nicht const sein, sonst kann ja nicht
reingeschrieben werden.

Ok, als nächstes die Funktion "SerEReceive". In der Funktion
"serEread" übergibst Du "strlen(*s)" als Parameter. Das ist relativ
schlecht, da im Empfangsbuffer ja noch nichts gescheites drinsteht und
diese Funktion bestimmt nach einem Nullzeichen im String sucht, um
dessen Länge zu bestimmen. In Deiner Ursprünglichen hast Du zwar einen
String definiert gehabt, aber das schien mir nicht sehr sauber gelöst
zu sein.

Dann würde ich mir diese Punkte mal ansehen und wieder schreiben, wenn
Du nicht weiter kommst mit dem aktuellen Stand des Programmes.
Gast #407421
Lesenswert?

Zu den Pointern wurde schon mal was für Paul geschrieben und das gleiche
Problem ist hier auch vorhanden.
http://www.mikrocontroller.net/forum/read-1-425029.html#425074
http://www.mikrocontroller.net/forum/read-1-425029.html#425088

Nur so am Rande... Der Code für SerEReceive() übersetzt so nicht. Es
fehlt die abschliessende }. Es ist ineffizient, wenn man als
Fragesteller nicht den tatsächlichen Code postet.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren