Re: BUG in Serial_IRQ_Info() !! Kategorie: Programmierung C (von PeterS - 1.06.2010 10:05) | |
Als Antwort auf BUG in Serial_IRQ_Info() !! von Rico Sinnig - 25.05.2007 19:03
| |
> 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 Jupp, kann ich bestätigen. Habe ich inzwischen für den neuen Interpreter gefixed. Bei einer Nullunterschreitung hatte die Funktion nicht richtig die Puffergrö�e addiert, sondern meist 256. Das kommt aus einer Zeit als die Interrutproutinen mal fest auf 256 Byte Puffergrö�e waren. Gruss Peter | |
Antwort schreiben Antworten: Re: BUG in Serial_IRQ_Info() !! (von Fabian - 1.06.2010 17:38) |
Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - Zum C-Control-I-Forum - Zum C-Control-II-Forum