Forum: Compiler & IDEs Chip45 Bootloader-Debugging, Mega128 mit AVRStudio und JTAG


von Bernhard D. (pc1401)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

ich möchte den Bootloader von chip45 
(http://www.chip45.com/download/chip45boot_070725.zip) verwenden. Die 
vorgefertigten Images passen nicht zur gegebenen Taktfrequenz, also ist 
Neuübersetzen angesagt.
Meine Version des Ganzen habe ich angehängt.

Erstes Problem: Ich verwende WinAVR 20070525 statt 20060421. Dies führt 
dazu, dass der Code bei eingeschalteter Optimierung (-s) nicht mehr 
vollständig compiliert wird. Die Endlosschleife ab Zeile 279 in 
chip45boot.c wird wegoptimiert, obwohl da wirklich mehr als gar nichts 
passiert. Erst mit OPT=0 ist die Schleife wieder da. Was kann man da 
tun?

Nun bekomme ich den Code zwar übersetzt, doch der Bootloader läuft 
nicht. (Die Fusebits stimmen, auch der Code steht ab F800 im Flash, wo 
er hingehört). Nach Resetten bekomme ich über die RS232 den Prompt und 
die Eingabe eines "f" am Terminalprogramm macht den Loader scharf. Das 
erste gesendete Zeichen eines SRECORDS führt zum Neustart.

Hier im Forum wurde vor einger Zeit schon einmal vermutet, dass die 
Interruptroutine in chip45boot.c fehlerhaft ist, und ich möchte dem auf 
den Grund gehen. Also bemühe ich hierfür AVRStudio (aktuelle Version 
4.13.557) und einen JTAG-Adapter von Olimex. Im Makefile ist als 
Debug-Format dwarf-2 eingestellt.

Nach dem Öffnen von chip45boot_Mega128_16MHz_4k.elf mit AVRStudio 
bekomme ich folgende Warnung:
JTAG ICE: Warning: Boot reset fuses are programmed, but the program 
entry function is located in the application section. Wrong boot reset 
fuses will probably cause erronous execution.

Im Disassembler bzw. Memory Window erscheint der Code denn auch nicht 
wie erwartet an Adresse F800, sondern ab 7C00. Also exakt F800/2. Der 
Code steht im Flash aber tatsächlich ab F800.
Ich dachte zuerst, es handelt sich dabei um folgendes Problem: 
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=19087
Das sollte doch behoben sein?
Oder habe ich irgend etwas übersehen?


Etwas ratlose Grüße,
Bernhard

von Ulrich (Gast)


Lesenswert?

also ich konnte den bootloader mit dem crumb128 problemlos verwenden. Es 
dauerte halt eine gewissen zeit bis ich alle möglichkeiten durch hatte 
(größe des boolaoderbereichs)

von Bernhard D. (pc1401)


Lesenswert?

Hallo Ulrich,

ja gut, viel einzustellen gibt es ja nicht in dem Makefile. Startadresse 
des Bootloaders, Controllertyp und Taktfrequenz. Das erklärt halt nicht, 
warum ein Teil des Codes bei eingeschalteter Optimierung nicht übersetzt 
wird, eine Endlosschleife, in der einiges passiert.
Womit hast Du denn das Paket übersetzt?

Gruß,
Bernhard

von Oliver (Gast)


Lesenswert?

>Dies führt
>dazu, dass der Code bei eingeschalteter Optimierung (-s) nicht mehr
>vollständig compiliert wird. Die Endlosschleife ab Zeile 279 in
>chip45boot.c wird wegoptimiert, obwohl da wirklich mehr als gar nichts
>passiert. Erst mit OPT=0 ist die Schleife wieder da. Was kann man da
>tun?

Nochmal genau nachsehen. Ganz weg kann die Schleife nicht sein.

Oliver

von Erik Lins (Gast)


Lesenswert?

Hallo,

es gibt einen neuen Bootloader von chip45: chip45boot2. Er ist komplett
überarbeitet und liest nun direkt Intel Hex Files über einen UART ein
(kein SREC Erzeugen mehr notwendig) und stellt seine Baudrate
automatisch ein! Es gibt viele vorkompilierte Hexfiles, die nur vom
Controllertyp und vom UART abhängig sind, ansonsten aber unabhängig von
jeglicher Clock Einstellung laufen!

www.chip45.com/chip45boot2

Viele Grüße,
ER!K

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.