Bootsektion Problem

Gast #2888758
Lesenswert?

Hallo zusammen,

ich versuche mich an einem Bootloader und habe ein Problem:
Mein simples LED-Blink Textprogramm läuft nicht mehr, wenn ich das 
Programm in den Bootbereich lege. Ich arbeite mit einem ATmega128 auf 
einem STK500 unter AVRStudio 4. Fuses: BOOTRST ist gecheckt, BOOTSZ 
steht auf 4096 words, addr. 0xF000.
Wenn ich nun unter Memory Settings .text nach 0xF000 mappe läufst nicht 
mehr.
Das map-file sagt mir folgendes:
...
Linker script and memory map
Address of section .data set to 0x800100
Address of section .text set to 0x1e000
…
Prima, 0x1E000 ist die byteaddresse zu 0xF000.

Was mache ich falsch? Muss ich Lockbits setzen? Muss ich die Interrupts 
verbiegen obwohl ich sie nicht nutze? Muss ich RAMPZ verwalten?
Bin für alle Ratschläge dankbar,
Gary
1
#include <avr/io.h>
2
#include <avr/boot.h>
3
#include <util/delay.h>
4

5
int main(void) 
6
{
7
  DDRB |= (1<<PB0)|(1<<PB1);
8
  PORTB |= (1<<PB0)|(1<<PB1); 
9

10
  for(;;) {  
11
    // blink
12
    _delay_ms(200);  
13
    PORTB |= (1<<PB1); 
14
    PORTB &= ~(1<<PB0); 
15

16
    _delay_ms(200);
17
    PORTB |= (1<<PB0); 
18
    PORTB &= ~(1<<PB1); 
19
  } 
20
     return 0;
21
}
(Firma: TravelRec.) Persönliche Seite #2888950
Lesenswert?

Drei von Vier schrieb:

> Und Interrupts sollte im bootblock auch keine haben.

Quatsch mit Soße. Dafür kann man die Interruptvektoren umsetzen. Da hier 
aber keine Interrupts verwendet werden, ist das irrelevant. Das Programm 
sollte hier sogar laufen, wenn weder BOOTRST noch BOOTSZ explizit 
gesetzt sind, da der Controller einfach durch den lleren Flash 
durchläuft und irgendwann zwangsläufig auf das Programm in der 
Bootsektion trifft und dieses dann auch ausführt.

Ich denke, dass es an den Delays liegt. Diese müssten natürlich mit 
dahin, wo auch der Rest des Codes ist. Sorry, bin kein C-Experte, aber 
einem ASM-Programm ist es unter den hier genannten Bedingungen egal, wo 
genau es im Flash liegt.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren