BUG in Serial_IRQ_Info() !! Kategorie: Programmierung C (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 | ||
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) |
Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - Zum C-Control-I-Forum - Zum C-Control-II-Forum