## c't-Projekte - Mailinglisten

[Voriger (Datum)] [Nächster (Datum)] [Voriger (Thread)] [Nächster (Thread)]
[Nach Datum][Nach Thread]

### Re: [ct-bot] Probleme mit dem Bootloader

Absender: Timo Sandmann
Datum: Fr, 19.10.2007 01:09:07
In-reply-to: <4717C8C2.2030701@xxxxxxx>
References: <46F96285.8020005@xxxxxx> <2CD3D281-AE62-4FBB-8419-C3EBB7DAFCE9@xxxxxxxxxxxxxxx> <4717C8C2.2030701@xxxxxxx>

    Hallo,

    Am 18.10.2007 um 22:57 schrieb Thomas Kregelin:

>     Hallo Werner.

>     ich kenne dieses Problem

>     Mir hat folgendes geholfen:

>     Suche die Funktion *jump_to_app* in *bootloader.c*

>     und ersetze diese Funktion durch:

>     *static void __attribute__ ((always_inline)) jump_to_app(void){
>     // setze Interrupt Vector Start address auf 0x0002
>     #ifdef __AVR_ATmega644__
>     MCUCR = 0x01;
>     MCUCR = 0x00;
>     #else
>     GICR = 0x01;
>     GICR = 0x00;
>     #endif

>     asm("jmp 0x0000"); // Run application code
>     }*

> `Mit dieser Modifikation wird sichergestellt, dass der` `Interruptvektor auf Adresse 0x0002 gesetzt wird.`

    das stimmt so aber nicht.
    GICR = 0x01;

`setzt das IVCE-Bit im GICR-Register, was nichts anderes tut, als für` `4 CPU-Zyklen die Veränderung des IVSEL-Bits zu erlauben und außerdem` `Interrupts zu deaktivieren. Um die Vektor-Start-Adresse zu ändern,` `müsste man zunächst GICR auf 1 setzen und anschließen (innerhalb von` `4 Zyklen) auf 2. Das Rücksetzen auf 0 ist außerdem eine No-Operation,` `weil das nach 4 Zyklen automatisch passiert.` `Abgesehen davon gibt es auch nichts im Code, das die Vektor-Start-` `Adresse verschiebt und per default liegt sie bei $0002, wie es sein` `muss. Das Einzige, was der o.a. Code bewirkt, ist das deaktivieren` `der Interrupts und ein leicht geändertes Timing (weil die Befehle` `noch ausgeführt werden).`

    Wie kommst du denn auf diesen Code?

> `Ich vermute, dass es sonst zu einer Endlosschleife kommen kann, in` `der sich der Bootloader ständig selbst aufruft.`

`Dass sich der Bootloader selbst aufruft, kann nicht sein, es wird ja` `explizit an Adresse 0 gesprungen, der Bootloader hingegen liegt ganz` `am Ende des Flash-Speichers. Vermutlich ist das eher ein Compiler-` `Problem, das so irgendwie umgangen wird. Oder das Int-Deaktivieren` `hat einen positiven Nebeneffekt, den ich gerade nicht sehe.`

    Viele Grüße,
    Timo

- Antworten:
  - Re: [ct-bot] Probleme mit dem Bootloader
    - From: Thomas Kregelin

- Referenzen:
  - [ct-bot] Probleme mit dem Bootloader
    - From: Mopsos
  - Re: [ct-bot] Probleme mit dem Bootloader
    - From: Timo Sandmann
  - Re: [ct-bot] Probleme mit dem Bootloader
    - From: Thomas Kregelin

- Voriger (Datum): [ct-bot] 2. (CPU-)Erweiterungsmodul, Timo Sandmann
- Nächster (Datum): Re: [ct-bot] 2. (CPU-)Erweiterungsmodul, Thorsten Thiele
- Voriger (Thread): Re: [ct-bot] Probleme mit dem Bootloader, Thomas Kregelin
- Nächster (Thread): Re: [ct-bot] Probleme mit dem Bootloader, Thomas Kregelin
- Indizes:
  - Datum
  - Thread