Hallo,
ich nutze folgenden Code auf meinem ATmega8
1 | int main()
|
2 | {
|
3 | // [ein paar Interrupts anschalten]
|
4 |
|
5 | // Interruptvektoren verschieben
|
6 | char tmpGICR = GICR;
|
7 | GICR = tmpGICR | (1 << IVCE);
|
8 | GICR = tmpGICR | (1 << IVSEL);
|
9 | sei();
|
10 |
|
11 | while(1) {}
|
Wenn ich den Code im "normalen" Flash-Bereich kompiliere und die
Verschiebung der Interruptvektoren weglasse, läuft das Programm
einwandfrei. Wenn jedoch oben gezeigten Code im Bootloader-Bereich des
Flashs ausführe, so springt das Programm nach kurzer Zeit (beim Auslösen
eines der aktivierten Interrupts) zurück an den Anfang des Programms.