Forum: Compiler & IDEs Was bewirkt "boot_rww_enable()" ?


von Henning Petermann (Gast)


Lesenswert?

Hallo Forum,

ich habe mir einen Bootloader geschrieben in etwa nach der Anleitung 
"AVR Bootloader in C - eine einfache Anleitung" aus der Artikelsammung 
(vielen Dank für diesen tollen Artikel!). Mein Bootloader funktioniert 
auch soweit und ich kann das Flash korrekt programmieren und 
anschließend auslesen mit dem ISP-Programmmer. Nur gelingt mir der 
Rücksprung aus dem Bootloader in die Application nicht.

Ich habe gesehen, dass man dazu die Funktion

boot_rww_enable ();

aufrufen soll. Leider kann ich diese Funktion nicht kompilieren für den 
ATmega168A (WINAVR,AVR-Studio 4.19, AVRToolchain 3.3.2). Ich bekomme die 
Fehlermeldung

"../main.c:325:6: error: 'RWWSRE' undeclared (first use in this 
function)
"

Wenn ich verstehen würde was diese Funktion genau macht und bewirkt, 
dann würde ich sie mir selbst schreiben.

Kann mir das jemand erklären? Aus den Angaben im Datenblatt und der 
avr-libc-Doku werde ich nicht richtig schlau.

Vielen Dank für alle Tips!

Henning

: Verschoben durch Moderator
von Bernhard M. (boregard)


Lesenswert?


von Henning Petermann (Gast)


Lesenswert?

Hallo Bernhard,

vielen Dank für den Link oben. Scheint ähnlich zu sein.

Ich habe wie vorgeschlagen selbst definiert

#define RWWSRE 4

und kann nun kompilieren und mit Aufruf der Funktion

boot_rww_enable ();

klappt dann auch der Rücksprung. Der Bootloader funktioniert nun 
einwandfrei wie er soll.

Mich würde dennoch interessieren was genau da im Hintergrund passiert. 
Aus dem Datenblatt mit der Beschreibung der RWW und NRWW-Sections werde 
ich einfach nicht schlau.

vielen Dank nochmal,

Henning

von Stefan E. (sternst)


Lesenswert?

Henning Petermann schrieb:
> Mich würde dennoch interessieren was genau da im Hintergrund passiert.
> Aus dem Datenblatt mit der Beschreibung der RWW und NRWW-Sections werde
> ich einfach nicht schlau.

Während und auch nach dem Schreiben in die RWW-Section kann nicht von 
dort gelesen (und damit auch kein Code ausgeführt) werden. Die Section 
muss erst wieder "freigeschaltet" werden.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Henning Petermann schrieb:
> AVRToolchain 3.3.2

Da scheint der Support für die A-Devices wohl nicht sauber
eingearbeitet worden zu sein.  Im avr-libc-Projekt haben wir
dafür von Atmel für die "A"s nichts zurückbekommen, sprich: der
ATmega8A wird von der reinen avr-libc selbst nicht unterstützt.
(Es wäre schön, wenn Atmel hier nicht unnötigerweise sein eigenes
Süppchen kochen würde.)

ATmega8 und ATmega8A sollten aber softwaremäßig ohnehin
identisch sein, du kannst also dein Projekt auch gleich für
einen ATmega8 compilieren.

Du solltest den Bug also auf jeden Fall bei <avr[at]atmel.com>
eintüten.

von Henning Petermann (Gast)


Lesenswert?

Hallo,

vielen Dank für die beiden Tips und Hinweise.

Mir ist noch weiterhin aufgefallen, dass die beiden bits

IVSEL und IVCE ebenfalls nicht definiert sind (werden benötigt um die 
Interruptvektoren in die Bootsection zu legen).

Ich nutze diese AVR-Toolchain auch zum ersten Mal. Bisher hatte ich 
WINAVR und AVR-Studio 4.x. Ging immer hervorragend. Nach der 
Installation von AVR-Studio 5.1 ging aber nix mehr. Auch nach dem 
Entfernen und dem Neuinstallieren von AVR-Studio 4.19 habe ich die alte 
Toolchain nicht wieder zum Laufen gebracht. Goog... lieferte, dass das 
Problem mit der Installation der AVR-Toolchain 3.3.x behoben sein 
sollte. War auch so, nur bei den "defines" wurde wohl irgendwo gespart.

Bug habe ich gemeldet.

vielen Dank nochmal, damit ist der Fall erledigt denke ich.

Henning

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.