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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

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.