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

Re: BUG in Serial_IRQ_Info() !! Kategorie: Programmierung C (von Fabian - 30.05.2010 11:57)
Als Antwort auf BUG in Serial_IRQ_Info() !! von Rico Sinnig - 25.05.2007 19:03

Gibt es eine solche Methode schon? Ich bin nämlich grade auf den selben Fehler gesto�en,
bzw denke, dass es sich um diesen handelt.


> Achtung:
> Die Funktion Serial_IRQ_Info(); hat einen Fehler beim Zurückmelden der verwendeten Elemente im
> Empfangspuffer. Sobald die Elemente im Ringpuffer sich über den Nullindex hinweg erstrecken,
> wird ein falsches Ergebnis zurückgeliefert!
>
> Beispiel:
> Empfangen von 3 Nachrichten mit 49 Zeichen, wobei jede zunächst gesondert aus dem Puffer
> (Grö�e 120 Byte) gelesen wird, bevor die Nächste eintrifft:
> 1. Nachr. Indizes 0...48
> 2. Nachr. Indizes 49...97
> 3. Nachr. Indizes 98...199 & 0...26
>
> Ruft man nun Serial_IRQ_Info(0, RS232_FIFO_RECV); auf, so liefert dieses 185 und nicht 49!
> 185 entspricht dem Bitmuster von (-71) = 27 - 98
> Offensichtlich wird immer der Index des ältesten Elementes im Ringpuffer vom Index des dem
> neuesten Elementes folgenden abgezogen, was im Nullüberschreitungsfall aber falsch ist!
>
> Im Zweifelsfall sollte man also nicht diese Funktion verwenden, sondern eine eigene Routine verwenden,
> welche buffer[2] und buffer[3] auswertet. --> buffer ist das Array, welches man Serial_Init_IRQ() übergeben
> hat. In diesen beiden Elementen steht der Index des ältesten Elementes, bzw. der Index, an welchem das
> nächste eingehende Element gespeichert wird.
>
> Grü�e, Rico Sinnig


    Antwort schreiben


Antworten: