denk daran umzurechnen, 1 wort = 2 bytes
Der Bootloader muß nicht, er darf max. 1024Worte lang sein. Entscheidend ist die sich daraus ergebende Startadresse. Die Fusebits Einstellungen müssen mit dem erzeugten Hex-File übereinstimmen, sonst startet der Boootloader nicht. Über die BOOTSIZ Fusebits wird ja durch die Länge des Bootloaders gleichzeitig die Startadresse des Bootloaders festgelegt.Muss der Bootloader dann auch 1024 Worte lang sein oder was hat es damit auf sich?
Wenn dein Bootloader fertig ist und kleiner als 512 Worte ist, kannst du das ja immer noch ändern.
Warum nicht, probier es halt aus. Bei 20Mhz läuft der mega168 allerdings nur ab 4,5V.Kann ich eigentlich den ATmega168 auch mit einem 20 MHz Quarz betreiben, wenn ich den vorhandenen durch solch einen ersetze?
denk daran umzurechnen, 1 wort = 2 bytes
Also muss ich zum Schluss von meinem assemblierten Code die Größe in Wörter umrechnen?
Hab da mal ne Frage zu den was MARVIN geschreiben hat
Ok so macht man das wenn man C hat. Aber wie macht man wenn man nur ASM hat da gibt es Optionen also Pre Assembling kann man da was machen finde leider nichtsAuf welche Startadresse wird gelinkt? Dies wird im Makefile mit
Code: [View More of this Code] [View Even More of this Code] [View Less of this Code] [Select All of this Code]
--section-start=.text=0x3800
als Linkeroption übergeben.
![]()
Wäre nett wenn ihr mir helfen könntet.
MFG ALBI
ist das nicht unerheblich? das ist ein befehl für den linker, nicht für den assembler...
H3IIGhost: du schreibst den bootloader. kompilierst ihn, so dass er wie oben beschrieben erst bei einer bestimmten startadresse anfängt und das hex-file davor nur nullen hat (oder irgendwas anderes, hauptsache keinen programmcode.)
nehmen wir mal an, dein bootloader ist am ende 1kb groß. dann kompilierst du ihn und sorgst wie beschrieben dafür, dass er bei 7kb beginnt, das hex-file ist also 8k groß. 7kb nix, 1kb bootloader. dieses flashst du dann in den prozessor. nun rechnest du um: 1kb = 512 words. mit den fusebits stellst du also eine bootloadergröße von 512 words ein, dann weiss der prozessor wo die startadresse ist. von nun an wird der bootloader ausgeführt, und nach seinem ende sollte an die adresse 0x0000 gesprungen werden um das hauptprogramm, welches vom bootloader in den ehemals leeren bereich geschrieben wurde, auszuführen.
hm ... mal ne ganz blöde frage, ich wundere mich hier schwer, ich hab n atmega8 ... die hexfile iss aber schon ü.ber 24kB groß ... flashen geht ohne probleme (AVR DRAGON) und das programm funktioniert auch in allen seinen einzelheiten .... was hat die größe der hexfile mit dem speicher des chips in wirklichkeit zu tun ?
etwa die hälfte würde ich grob schätzen, 24kb ist sehr groß. im hex file sind noch zeilenangaben und prüfsummen.
das programm beinhaltet ne mittel-komplizierte wegführung anhand der linindaten , breitepfadsuche, 10x10 uchar matrix und n CRC kommunikationsprotokoll fürs Funkmodul >_< ich war schon drauf und dran nen mega32 zu montieren aber bisher sieht es ganz gut aus ich mach später unter Projekte mal n topic von unserer bastelgruppe auf
weg mit OT spam
also wie du es beschrieben hast, könnte ich theoretisch einen fertig übersetzten bootloader (also die .o file) per linkerbefehl an ein beliebiges programm hinten dran hängen ?
ja so sollte das gehen... du musst in jedem fall schaffen, dass das programm am ende des flashbereiches liegt, und zwar entweder beim beginn des 8. kilobytes, oder am beginn des 16. halben kilobytes.
achte also drauf, dass due startadresse mit einer der möglichen (datenblatt!) übereinstimmt, und dass du dann auch die fuses einstellst.
mal was anderes: wofür brauchst du einen bootloader?
Ok vlt nicht richtig gefragt. Also wenn ich in AVR-Studio bei einem C Projekt unter Configurations Option - Custom Option - Linker Option den Befehl -Wl,--section-start=.text=0x3800 funktionier wunderbar. wenn ich aber ein ASM Projekt starte dann gibs das nicht
Lesezeichen