Forum: Mikrocontroller und Digitale Elektronik C-Bootloader aus Artikelsammlung -- UART Overflow


von Michael N. (much)


Lesenswert?

Hi Leute,

ich arbeite mich gerade durch folgenden Artikel in der Artikelsammlung:
http://www.mikrocontroller.net/articles/AVR_Bootloader_in_C_-_eine_einfache_Anleitung
Ich hab gerade die entgültige Version aus dem Artikel in einer 
angepassten Form auf den Controller (Atmega644) geflasht. Der Bootloader 
scheint prinzipiell zu funktionieren. Allerdings meldet mir der 
Controller einen Buffer-Overflow des Eingangsbuffers (UART lib von Peter 
Fleury) wenn ich versuche ein hex-file zu übertragen. So wie ich das 
sehe wird das hex-file in einem Zug übertragen, was in meinen Augen 
zwangsläufig zu einem Overflow führen muss. Wie kann ich nun aber diesen 
Overflow umgehen?

lg much

von Oliver J. (skriptkiddy)


Lesenswert?

Michael N. schrieb:
> Wie kann ich nun aber diesen
> Overflow umgehen?

Indem du schnell genug die Daten aus dem Ringpuffer holst. Dazu gehört 
das du während das Hexfile ankommt auf alles, was lange blockiert oder 
zu große Delays verwendet, verzichtest.

Zeig am besten mal den Code.

Gruß Oliver

von Michael N. (much)


Angehängte Dateien:

Lesenswert?

Danke für deinen Antwort.

Ich hab meinen Quellcode mal im Anhang beigefügt. Allerdings ist er bis 
auf ein paar Kleinigkeiten identisch mit dem oben genannten Code.
Zeitaufwendige Routinen sind eigentlich nur die beiden Time-delays in 
der State-Machine (100ms).
Man könnte doch PC-Seitig ein kleines Program/Skript schreiben das das 
hex-file Zeilenweise überträgt (mit kleinen Pausen zwischendurch). Das 
würde doch auch helfen den Overflow zu vermeiden, oder?

lg much

von da1l6 (Gast)


Lesenswert?

Der AVR Beispiel Code verwendet Software Flow Control. Der Sender sollte 
dies nutzen.

von Michael N. (much)


Lesenswert?

Ich verwende zum Senden Putty. Dort habe ich unter Connection -> Serial 
den Punkt Flow control auf XON/XOFF gesetzt. Dadurch sollte es doch die 
Software Flow Control verwenden, oder?

von Bonzo (Gast)


Lesenswert?

>Zeitaufwendige Routinen sind eigentlich nur die beiden Time-delays in
der State-Machine (100ms).

Was soll das ? So wird das nie was. Vergiss es.

von Michael N. (much)


Lesenswert?

Bonzo schrieb:
> Was soll das ? So wird das nie was. Vergiss es.

Hab sie schon herausgenommen. Funktioniert aber immer noch nicht. Wiso 
sind die im Code im Artikel eigentlich drinnen?

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.