Prost Neujahr erst einmal an Alle!
---
Muß jetzt mal mein erstes Leid in 2011 klagen ;-)
Seit zwei Tagen bin ich daran den Grund für ein sporadisches Byte auslassen der UART zu begründen.
Gerade vor 5min habe ich den Fehler bei mir im Code entdeckt.
Ich fahre derzeit mit 250k Baud zwischen einem ATMega168 / FTD232R und dem PC.
Sporadisch wenn ich etwas an den uC sende, "verlegt" dieser plötzlich ein Byte des Streams und der Befehl kann somit nicht aufgelöst werden - Der uC sendet dann ein NAK zurück.
Nachdem ich etliche Zeilen Code aus der ISR verbannt hatte (die eigentlich nicht zeitkritisch waren) ist mir dann aufgefallen, das ohne Optimierung auf Speed die UART wie gewünscht funktioniert.
Ich habe in der UART ISR zwei Variablen die die empfangenen Bytes händeln (uart_stream & uart_data).
Keine ist global, sondern nur in der ISR benutzbar.
Leider habe ich es verpennt das uart_stream Array als static zu deklarieren. Somit ist bei jedem neuen Byte das Array wieder leer :) ABER NUR wenn man den Optimizer auf Speed stellt! Ohne Optimizer funktioniert das Array wie vorgesehen...
Kann mir das bitte einmal jemand erklären?
Björn