Forum: Mikrocontroller und Digitale Elektronik Bootsektion Problem


von gg (Gast)


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
}

von Purzel H. (hacky)


Lesenswert?

Was sollen Delays ? Delays bedeuten eine Library, die man nicht haben 
will.
Und Interrupts sollte im bootblock auch keine haben.

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


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.

von gg (Gast)


Lesenswert?

danke, sollte ein simples Testprogramm sein, deswegen nur blinkende 
leds. Ohne delays läufst auch nicht. Ich halte euch auf dem laufenden, 
wenn ich was finde.

von gg (Gast)


Lesenswert?

ok, seltsam aber mit AVRStudio 6 funktioniert alles wie geplant. Keine 
Ahnung was bei AVRStudio 4 kaputt war in der Toolchain. Danke für die 
Antworten, trotzdem.

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.