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

BUG in Serial_IRQ_Info() !! Kategorie: Programmierung C (von Rico Sinnig - 25.05.2007 19:03)
Ich nutze:
C-Control Pro Mega32, CC-Pro 32 Application Board
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:

Re: BUG in Serial_IRQ_Info() !! (von PeterS - 1.06.2010 10:05)
    Re: BUG in Serial_IRQ_Info() !! (von Fabian - 1.06.2010 17:38)
Re: BUG in Serial_IRQ_Info() !! (von Fabian - 30.05.2010 11:57)