Forum: Mikrocontroller und Digitale Elektronik SD Bootloader kompiliert, schreibt sich in den Speicher aber tut NIX, Atmega32, C, AVRStudio


von HeGr (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Gemeinde!
Ich brauche mal wieder Hilfe. Ich fertige ein Update nach dem anderen 
für meine Anwendung und die soll auf 12 verschiedenen Megas laufen. Nur 
2 davon haben einen Programmieradapter in Reichweite. Da eine SD-Karte 
angeschlossen ist lag es nahe an den Bootloader von Stefan zu denken.
Ich kompiliere den Bootloader und spiele das .hex-file auf. Danach lese 
ich testweise aus und erhalte ein hex-file was ca. so aussieht:

...
1077B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD9
:1077C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC9
:1077D000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB9
:1077E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA9
:1077F000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF99
:107800000C942A3C0C94473C0C94473C0C94473C09
:107810000C94473C0C94473C0C94473C0C94473CDC
:107820000C94473C0C94473C0C94473C0C94473CCC
...

Für mich heisst das, das die Anwendung wie gewollt ab 0x7800 in den Mega 
geschrieben wurde. Fuses im Anhang.

Leider macht er nichts. Ich habe Testweise mal gleich zu Beginn der main 
einen Pin high gesetzt. Er kommt nicht einmal da an.

Hat jemand eine Idee, wo der Fehler liegen könnte?

Ich danke Euch!

von HeGr (Gast)


Lesenswert?

Ich habe nun einmal testweise eine funktionierende Anwendung ab 0 
geschrieben. Die wird nicht gestartet. Der Mega sucht also im Bootsektor 
wie er soll. Der Bootloader ab 0 geschrieben startet (natürlich ohne 
bootrst) auch nicht. Das Problem scheint also das Kompilat des 
Bootloaders zu sein.
Hier habe ich nur die empfohlenen Dinge im Makefile geändert:

MCU = atmega32
F_CPU =  4000000
FORMAT = ihex
DEVID = 0x12345678
TARGET = bootloader
BOOTLOADERSTARTADR = 0x7800 (bzw. derzeit testweise 0x0000)
BOOTLDRSIZE = 0x800

und dann mit make all kompiliert (keine Warnings,Errors oÄ). Das 
hex-file habe ich dann aus AVR Studio gebrannt. (USBProg mit AVRISP mk 
II clone).

Was kann da falsch gelaufen sein?

von HeGr (Gast)


Lesenswert?

Ok, ich bin jetzt weiter. Der Bootloader startet. Nun habe ich ein neues 
Problem. Mein Programm das aus AVR Studio kompiliert 22k braucht 
benötigt nun wenn ich das hex mit hex2bin bearbeite über 30k und passt 
darum nicht mehr. Gibt es ein brauchbareres Tool dafür oder muss ich von 
Hand aus kompilieren. Ein Makefile für mein doch recht umfassendes 
Projekt zu erstellen scheint mir sehr aufwändig...

von holger (Gast)


Lesenswert?

Die Hellseher haben alle unbegrenzten Urlaub genommen.
So in den nächsten 10 Jahren kommt der erste wieder.

von HeGr (Gast)


Lesenswert?

Ah, ok. Danke, cool. Man braucht also nen Hellseher um zu erfahren ob 
jemand ein Tool kennt das aus hex-files .bins in anständiger Größe 
macht. Oder hast Du einfach nur die ersten paar Zeilen gelesen und Dir 
gedacht: "mann, da muss ich jetzt aber unbedingt austeilen. ich fühl 
mich heute wieder so klein"?

von holger (Gast)


Lesenswert?

>Oder hast Du einfach nur die ersten paar Zeilen gelesen und Dir
>gedacht: "mann, da muss ich jetzt aber unbedingt austeilen. ich fühl
>mich heute wieder so klein"?

Nein. Möglicherweise benutzt du sogar mein hex2bin ;)
Ich hab jetzt aber keinen Bock mehr dir zu antworten.

von HeGr (Gast)


Lesenswert?

Kann ich verstehen ;)

von HeGr (Gast)


Angehängte Dateien:

Lesenswert?

Ich habs mal mit Deinem Probiert. Kann mir jemand die Differenz der 
angegebenen Bytes zu der Dateigröße erklären?
Grüße!

von HeGr (Gast)


Lesenswert?

Wer lesen kann ist klar im Vorteil: Fillbytes. Hmm... sollte ich die aus 
dem Hex einfach entfernen?

von Peter D. (peda)


Lesenswert?

HeGr wrote:
> Mein Programm das aus AVR Studio kompiliert 22k braucht
> benötigt nun wenn ich das hex mit hex2bin bearbeite über 30k und passt
> darum nicht mehr.

Da hilft kein Tool, zu groß bleibt zu groß.
Vermutlich hast Du den Bootloader mit reingemanscht.

Der Bootloader darf nie in die Applikation mit rein !!!

Entweder verweigert er dann das Programmieren oder er zerstört sich 
selber.


Peter

von holger (Gast)


Lesenswert?

@ HeGr

>Wer lesen kann ist klar im Vorteil: Fillbytes. Hmm... sollte ich die aus
>dem Hex einfach entfernen?

Nein das geht nicht. Die Bin Datei muß so groß sein (30720 Bytes).
Ich frag mich nur was bei dir da jetzt nicht passt?
Die höchste eingelesene Adresse ist 0x77FF und passt damit
bis aufs Byte genau vor den Bootloader.

von HeGr (Gast)


Lesenswert?

Ich suche den Fehler noch ein bisschen. Ich habe halt einfach mal eine 
Funktion geschrieben die 5 mal einen Pin toggled und ne LED 
angeschlossen.
Den Aufruf habe ich vor den return bei checkfilesize geschrieben. Die 
Led blinkt also und es passiert weiter nichts.
Ich habe das Hex (kompiliert mit dem wie in dem howto manipulierten 
Makefile) mal selbst aufgespielt und leider einige Probleme. Die 
Anwendung läuft zwar aber nicht wie gewohnt. Worans da hapert weiss ich 
absolut nicht aber auf einmal wird nur noch die Hälfte dargestellt oder 
bestimmte Funktionsaufrufe führen auf einmal zum Reset. Ich wünschte, es 
gäbe einen deutlich simpleren Bootloader. Alles was mit der Manipulation 
des Hauptprogramms zu tun hat ist für mich nämlich völlig unnötig. Ich 
bräuchte was, was überprüft ob es eine Datei bestimmten Namens auf der 
SD-Karte gibt und diese dann einspielt. Existiert die Datei nicht, 
startet er an 0x0000. Versioning etc. sind für mich gar nicht wirklich 
wichtig...
Leider bin ich zu unbedarft um das selbst zu realisieren. Ich melde mich 
wenn ich auf der fehlersuche weiterkomme.
Danke!

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.