Danke für den Hinweis mit dem Linker. Hat mich auf den richtigen weg gebracht.
Ich habe nun mittes __attribute__ ((section (".bootloader"))) eine neue section eingeführt die ich anschliessend mittels der Option -Wl,--section-start=.bootloader=0x1C00 beim linken an die entsprechende Stelle platziere.
Nun habe ich aber dennoch folgendes Problem. Der Eigentliche Code ist zwar an der gewünschen stelle, nur wird auch ein code erzeugt der (habe den flash mittels pony prog ausgelesen) an 0x0000 gespielt wird.
Ich erzeuge ein srec file das folgendermaßen aussieht
Code:
S0130000626F6F746C6F61646572432E73726563A3
S11300000C942A000C9445000C9445000C94450073
S11300100C9445000C9445000C9445000C94450048
S11300200C9445000C9445000C9445000C94450038
S11300300C9445000C9445000C9445000C94450028
S11300400C9445000C9445000C9445000C94450018
S11300500C94450011241FBECFE5D4E0DEBFCDBF14
S113006010E0A0E6B0E0EEE8F0E002C005900D92EA
S1130070A036B107D9F710E0A0E6B0E001C01D92A8
S1110080A036B107E1F70C94000E0C940000BA
So hier beginnt das eigentliche Programm
S1131C00CFE5D4E0DEBFCDBFF8948FEF80933400EE
S10B1C108FEA80933500FFCF39
S9030000FC
Der dazugehörige quellcode meines kleinen Programms sieht so aus
Code:
#include <avr/io.h>
#include <avr/boot.h>
int main(void) __attribute__ ((section (".bootloader")));
int main(void)
{
__asm("cli;");
DDRC = 0xFF;
PORTC = 0xaf;
while(1)
{
}
}
Also nur Leds einschalgten und dann nix mehr tun. Meine frage ist, was ist der code der an den Anfang geschrieben wird? Ist das die Interrupt vector tabelle??
Eine weitere frage ist, ob ich wenn ich nur __attribute__ ((section (".bootloader"))); schreibe die foglenden Anweisungen automatisch in die bootsection gespielt werden?
PS: Bin a ein Wiener
Lesezeichen