Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - Zum C-Control-I-Forum - Zum C-Control-II-Forum

Re: rs232 pufferüberlauf? Kategorie: Programmierung C (von matze - 1.09.2010 17:33)
Als Antwort auf Re: rs232 pufferüberlauf? von PeterS - 30.08.2010 20:02

> >
> > hallo, bitte seid milde gestimmt , es ist main aller erster Forums Eintrag! Ich habe nur
> > leider über die Suchfunktion nicht das richtige gefunden.
> >
> > folgender Fall:
> >
> > Messdaten von cc-pro 128  auf  pc via rs232 nach Aufforderung übertragen.
> > Sprich der pc sendet Steuercodes 10byte, nach dem auswerten auf der cc-pro
> > soll diese antworten mit den jeweiligen Messdaten. ca 1-2 sec Takt.
> >
> > initialisiert wird mit:
> > Serial_Init_IRQ(0,Buffer_rs232,10,32,SR_8BIT|SR_1STOP|SR_NO_PAR,SR_BD19200);
> > am Anfang des Programms.
> >
> > wenn ich über ein Terminal Programm 10 Zahlen sende:
> >
> > while (count <=9)
> >    {
> >     count=Serial_IRQ_Info(0,RS232_FIFO_RECV);
> >    }
> >
> >
> >
> > so sieht die Antwort meistens aus.
> > i=0022 0000 0001 0000 0002 0000 0003 0000 0004
> >        0000 0005 0000 0006 0000 0007 0000 0008  10 Zeichen im IRQ empfangen
> >
> >
> > aber wenn ich in dem Terminal Programm auf einer Taste drauf bleibe
> >  und er fortlaufend bytes schicke,
> > sieht es ab und an so aus.
> >
> >
> > i=002E 0000 0001 0000 0002 0000 0003 0000 0004
> >        0000 0031 0031 0031 0000 0007 0000 0008  19 Zeichen im IRQ empfangen
> >
> >               ^    ^    ^
> >            da ist der fehler!!  die drei 31
> >
> > Wie sage ich ihm, das er nur 10 Zeichen lesen soll und danach den Puffer zurücksetzen mu�
> > damit er nich in den Sendepuffer schreibt
> >
> > Es ist doch auch richtig, das ich die zu sendenden Daten in den "Buffer_rs232" + 10
> > direkt hineinschreibe bzw :  Serial_Write(0,Buffer_rs232[10+count ++]);
>
> Ã?h, nein! Bitte den Buffer in Ruhe lassen! Mit Serial_Write() einfach Daten schreiben, und
> Serial_ReadExt() Daten lesen, um den Rest kümmert sich die Interruptroutine. Da mu� nichts
> zurück gesetzt werden.
>
> Gruss Peter
>
> >
> > ich hoffe ich habe mich einigerma�en klar ausgedrückt.
> > ich benutzte derzei noch keine threads eine schleife zählt puffer:
> > Serial_IRQ_Info(0,RS232_FIFO_RECV);
> >
> > danke
> >
> >
> >
> >
> >

ok, dann lege ich mir wohl besser einen
Rs232_Buffer, Rs232_Buffer_read, Rs232_Buffer_write an.

Ich denke , da die Abfrage ja nur alle ca 1-2 sec. ausgeführt wird ,
sich damit senden und empfangen nicht überschneidet sollte es hoffentlich funktionieren.
Ich habe ja nur 10 feste bytes und nicht mehr die gesendet werden sollen.

danke.....





    Antwort schreiben


Antworten: