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
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.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.