www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Problem mit serieller Schnittstelle(C-Code Bsp. gesucht)


Autor: Turbo-Pascal (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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);
      }

Autor: Johnny (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...
http://www.mikrocontroller.net/forum/read-1-425029...

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.

Autor: Johnny (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oh ja stimmt, danke Stefan.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.