Forum: Mikrocontroller und Digitale Elektronik Bootloader page program cli?


von Steven (Gast)


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
}

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.