avrgcc AtMega128 Bootloader Section

Gast #2602034
Hallo zusammen,
ich habe ein kleines Problem mit meinem Bootloader auf dem Mega128. Der 
Code funktioniert auf Mega32 und Mega64 einwandfrei, nur auf dem Mega128 
wills nicht hinhauen. Schreibe ich ihn direkt an den Anfang vom Flash 
tuts soweit (natürlich kann er sich nicht selbst überschreiben), wenn 
ich ihn dann in den Bootloader-Bereich schreibe funktioniert gar nichts 
:((

Ich habe dem avr-gcc linker mit --section-start=.text=1E000 gesagt, der 
soll den Code bei der Bootloader-Section schreiben (4096 Word 
Bootloader, erstmal so zum testen).
Allerdings scheint in der HEX-Datei der Code nicht auf der richtigen 
Adresse zu landen:

:020000021000EC
:10E000000C9452F00C9471F00C9471F00C9471F02B
:10E010000C9471F00C9471F00C9471F00C9471F0FC
:10E020000C9471F00C9471F00C9471F00C9471F0EC
:10E030000C9471F00C9471F00C9471F00C9471F0DC
:10E040000C9471F00C9471F00C9471F00C9471F0CC
:10E050000C9471F00C9471F00C9471F00C9471F0BC...

Wenn ich das richtig deute startet das bei Adresse E0000 (also noch in 
den unteren 64kB ??) .. nanu??

Weis da jemand eine Lösung zu?

Hier scheint ein ähnliches Problem vorliegen: 
Beitrag "WinAvr 2010 Bootloader Atmega128 Problem"
Allerdings werd ich da nicht wirklich schlau raus, wo soll ich da denn 
was umstellen?
Ich benutze Eclipse mit WinAvr2010, die Fuses BOOTSZ0, BOOTSZ1 und 
BOOTRST sind gesetzt.

Schöne Grüße aus Aachen

Marco
Gast
Jup, hast recht, daran liegt es also nicht:
1
avr-objdump -h CAN-Bootloader-Life.hex
2

3
CAN-Bootloader-Life.hex:     file format ihex
4

5
Sections:
6
Idx Name          Size      VMA       LMA       File off  Algn
7
  0 .sec1         00000808  0001e000  0001e000  00000011  2**0
8
                  CONTENTS, ALLOC, LOAD

Damit komme ich aber dann auch nicht weiter. Der Code wird zwar 
irgentwie begonnen, aber das ganze CAN-System funktioniert einfach 
nicht. Wie gesagt, wenn ich das Offset raus nehme klappt alles. Da bin 
ich mit meinem Latein am Ende...

Marco
Gast
Datenblatt Table 112: Boot Reset Address (start Boot Loader Section): 
$F000

Die Adressen sind alle in Words angeben, mal zwei macht das also 
0x1E000. Das Offset scheint zu passen.
Gast
Hallo Stefan,

ja M103 ist definitiv deaktiviert, keine Interruptroutinen. Um die 
Verwirrung komplett zu machen, hier das Resultat eines kleinen 
Experiments:
Ich hab die Hex vom Bootloader hinter die Hex vom Nutzerprogramm kopiert 
(den ersten End-Of-Record Eintrag entsprechend gelöscht) und dann 
geflashed.
Die Boot-LED war ganz brav eine halbe Sekunde lang an, dann ist das 
Nutzerprogramm gestartet worden. Allerdings ist keine CAN-Nachricht 
gekommen - und das obwohl das Programm folgendermaßen aussieht:
1
int main(void){
2
  set_bootled_ddr;
3
  // CAN-Adapter initialisieren
4
  while(!can_init(BITRATE_1_MBPS)){
5

6
  }
7
  // Timer starten
8
  TCNT1 = TIMER_PRELOAD;
9
  TCCR1A = 0;
10
  TCCR1B = TIMER_PRESCALER;
11
  TIMER_INTERRUPT_FLAG_REGISTER = (1 << TOV1);
12
  //### Test-Nachricht versenden ###
13
  msg.flags.rtr = 0;
14
  msg.id = 111;
15
  msg.length = 0;
16
  while(can_send_message(&msg)==0){
17

18
  }
19
  led_on;

Es wird also so lange in der Schleife gewartet, bis der Adapter 
initialisiert wurde und die Nachricht (angeblich) erfolgreich verschickt 
wird. Erst DANACH geht die LED an. Tja, die Nachricht kommt halt 
trotzdem nie.
Das Nutzerprogramm benutzt die gleich CAN-Lib (die von Creatives-Chaos) 
und da funktionierts einwandfrei. Und wenn ich nun nur den Bootloader 
ohne den Adress-Offset kompiliere und flashe dann wird auch die 
Nachricht ordnungsgemäß abgeschickt.

Nun bin ich absolut ratlos...

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.