Bootloader page program cli?

Gast #2914373
Lesenswert?

Hallo Leute,

ich hab ein kleines Problem mit meinem bootloader (den ich aus einem 
Beispiel hier abgeleitet habe 
http://www.mikrocontroller.net/articles/AVR_Bootloader_in_C_-_eine_einfache_Anleitung).

Die gesamte programmgröße ist ca. 30kbyte. Wenn ich mir nun ein via 
bootloader programmiertes image zurücklese gibt es auf diesen 30kbyte 
etwa 3 - 4 unterschiede.
Das gestaltet sich so, dass 2 - 4 bytes fälschlicherweise den Wert 0xff 
haben.

Die Daten gehen allerdings am pc korrekt raus und werden auch korrekt 
empfangen! (crc8 pro 16 bytes)

Ich musste allerdings in der program_page methode die interrupt-sperre 
deaktivieren, da mein rs485 bus kein "warten" unterstützt. Dieser läuft 
aber auch nicht über in der zeit.

Ist ein cli() unbedingt notwendig während dem page programmieren? Also 
kann nicht während dessen weiter in den uart buffer gelesen werden?


Das ist die programmiermethode:


1
void program_page (uint32_t page, uint8_t *buf)
2
{
3
    uint16_t i;
4
    //uint8_t sreg;
5

6
    /* Disable interrupts */
7
//    sreg = SREG;
8
//    cli();
9

10
    eeprom_busy_wait ();
11

12
    boot_page_erase (page);
13
    boot_spm_busy_wait ();      /* Wait until the memory is erased. */
14

15
    for (i=0; i<SPM_PAGESIZE; i+=2)
16
    {
17
        /* Set up little-endian word. */
18
        uint16_t w = *buf++;
19
        w += (*buf++) << 8;
20

21
        boot_page_fill (page + i, w);
22
    }
23

24
    boot_page_write (page);     /* Store buffer in flash page.    */
25
    boot_spm_busy_wait();       /* Wait until the memory is written.*/
26

27
    /* Reenable RWW-section again. We need this if we want to jump back */
28
    /* to the application after bootloading. */
29
    boot_rww_enable ();
30

31
    /* Re-enable interrupts (if they were ever enabled). */
32
//    SREG = sreg;
33
}

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