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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.