Forum: Compiler & IDEs Bootloader mit AVR Studio


von Ulrich (Gast)


Lesenswert?

Hi,
ich versuche gerade einen Bootloader für einen atmega8 zu bauen.

gcc version 4.1.2 (WinAVR 20070525)
AVR Studio Version 4.14

Zurzeit habe ich ein Program das ist 2048Bytes groß. Als erstes versuche 
ich mal dieses Program an die stelle 0x1800 zu schreiben, aber dann 
läuft es nichtmehr.

Ich habe sowohl -Wl,--section-start=.text=0x1800 und -Ttext=0x1800 
probiert.
Leider funktioniert dann mein Program nichtmehr?
Ich weiß jetzt nicht weiter.

Vor einem Jahr habe ich schonmal einen bootloader programmiert. Im 
Makefile dort habe ich es mit -Wl,--section-start=.text=0x1800 gemacht 
und damals ging es... aber jetzt geht es so nicht mehr. ist meine winavr 
Version dafür zu alt?

Zurzeit wird beim Start nicht direkt der Bootloader angesprungen(Boot 
resetvector enable). Aber das dürfte ja nichts ausmachen. Bisher kenne 
ich das von den avrs so, das sie den code davor einfach als nop 
interpretieren.

Jetzt mal ein Beispiel:

avr-gcc.exe -mmcu=atmega8 -Wl,-section-start=.text=0x1800 
-Wl,-Map=main.map main.o uart.o  -o main.elf

Im *.map File finde ich dann folgendes:

Memory Configuration

Name             Origin             Length             Attributes
text             0x00000000         0x00002000         xr
data             0x00800060         0x0000ffa0         rw !x
eeprom           0x00810000         0x00010000         rw !x
default        0x00000000         0xffffffff

Irgendwie komisch. Warum den bitte schön 0x00000000 ???


weiter unten siehts dann besser aus:

.text           0x00001800      0x7fe
 *(.vectors)
 .vectors       0x00001800       0x26 
c:/programme/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr4/cr 
tm8.o
                0x00001800                __vectors
                0x00001800                __vector_default
 *(.vectors)
 *(.progmem.gcc*)
 *(.progmem*)
                0x00001826                . = ALIGN (0x2)
                0x00001826                __trampolines_start = .
 *(.trampolines)
 .trampolines   0x00001826        0x0 linker stubs
 *(.trampolines*)
                0x00001826                __trampolines_end = .


Weiß jemand von euch weiter?

Mfg
Ulrich

von Ulrich (Gast)


Lesenswert?

wenn ich das Programm aber nur ein kleinwenig vergrößer dann kommt 
folgende Meldung:

c:\programme\winavr\bin\..\lib\gcc\avr\4.1.2\..\..\..\..\avr\bin\ld.exe: 
address 0x2006 of bus-slave.elf section .text is not within region text

passt ja auch den sobald ich mehr als 2048Bytes brauche passt es nimmer 
rein.

von Ulrich (Gast)


Lesenswert?

OK ich habs nun ;-)

GICR = 0x01;
GICR = 0x02;

war die Lösung.


Mein Program hat die falschen Inerruptvektoren angesprungen. Deswegen 
hat mein Program immer einen neustart gemacht....*das waren nun 6h für 
den arsch* ankotz

von Aike T. (biertrinker)


Lesenswert?

Ah, gut das du es schon selbst gefunden hast, das mit den 
Interupt-Vektoren wollte ich dir gerade sagen. Da war ich wohl zu 
langsam. Habe da neulich selbst dran gehangen.

viele Grüße

Aike

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.