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 Blackdragon - 30.08.2010 19:57)
Als Antwort auf rs232 pufferüberlauf? von matze - 30.08.2010 18:54
Ich nutze:
C-Control Pro Mega128
>
> 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 ++]);
>
> 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
>
>
>
>
>
Hallo,
ich benutze die RS232 auch und musste eine Abfrage einbauen ob in dem Puffer noch etwas drin ist.
Den Empfangspuffer würde ich in deinem Fall etwas grösser machen.

Bei mir sieht das wie folgt aus...
Ich habe die RS232 in einem eigenem Thread laufen.
Ich habe dir mal einen Auszug zusammen gestellt. Vieleich kannst du den Code bei dir anpassen.

Dim RS232_Wert_1 as Single
Dim Wertin as Single

Sub Thread_RS232()
    'RS232 Ausgabe
    Dim Text(37) As Char    ' Arrays deklarieren
    Dim count, sz As Integer
    Dim Rs232_read_count As Integer
   
    'Init RS232: 38400 bps, 8 Bit, 1 Stop, NP
    '20 Byte Empfangspuffer - 100 Byte Sendepuffer
    Serial_Init_IRQ(0,Buffer,20,100,SR_8BIT Or SR_1STOP Or SR_NO_PAR,SR_BD38400)

    Do While True     'Endlosschleife

    'Abfrage wieviel Zeichen empfangen wurden
    count=Serial_IRQ_Info(0,RS232_FIFO_SEND)

    If count>0 Then
    Goto W1
    End If

    'Wert 1   - senden
    Str_WriteFloat(RS232_Wert_1,2,Text,0)
    Serial_WriteText(0,Text)

    ...
    Wert xxx
   
    'Ende Schreibe Linefeed
    Serial_Write(0,LF)


    '################## RS232 Empfangen ##############################

     'Abfrage wieviel Zeichen empfangen wurden
    count=Serial_IRQ_Info(0,RS232_FIFO_RECV)

    If count<=15 Then
    Goto W1
    End If

    Rs232_read_count = 0

    Do While True
        sz=Serial_ReadExt(0)                'Puffer auslesen
        If sz=&H100 Then
            Exit                            'bei 0x100 ist der Puffer leer
        Else
            Msg_WriteChar(sz)               'Zeichen als Message ausgeben
            'Serial_Write(0,sz)             'Zeichen auf der seriellen ausgeben

        Rs232_read(Rs232_read_count) = sz
        Rs232_read_count = Rs232_read_count + 1

        End If
    End While


      '------------------------------------------
      '0 bis 3
      Wertin = byte2float(Rs232_read(0),Rs232_read(1),Rs232_read(2),Rs232_read(3))

      '4 bis 7

      '------------------------------------------

Lab W1:

    Thread_Delay(5) '5x10ms Anzahl von 10ms Ticks, die gewartet werden soll

    End While
End Sub

Gruss Christian



    Antwort schreiben


Antworten:

Re: rs232 pufferüberlauf? (von matze - 1.09.2010 17:40)