www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Bootloader mit boot.h


Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

ich versuche gerade einen Bootloader auf dem ATMega88 zu implementieren. 
Ich benutze die Version 4.13 + Service Pack des AVR Studios, WINAVR 
sowie ein STK500 und einen JTAGICEmkII.

Nun habe ich folgenden Code der Daten zum Test ins Flash schreiben soll:

#include <avr/io.h>
#include <avr/boot.h>
#include <avr/pgmspace.h>+
#include <avr/interrupt.h>

unsigned char buffer[64];

int main(void)
{
unsigned char c, *p;
unsigned int i;
unsigned long address = 0x1800;

  DDRB |= (1 << PB2);
  PORTB |= (1 << PB2);

  p = buffer;

  for(c=0;c<64;c++)
    *p++ = c;
  cli();
  eeprom_busy_wait();

  boot_page_erase( address );
  boot_spm_busy_wait();

  for( c=0, p=buffer; c<SPM_PAGESIZE; c+=2 )
  {
    i = (unsigned int)*p++;
    i += (unsigned int)(*p++ << 8);
    boot_page_fill( address+c, i );
  }

  boot_page_write( address );
  boot_spm_busy_wait();

  for(;;)
  {
    PORTB &= ~(1 << PB2);
  }

  return(0);
}


Nun hängt das Program sich bei "unsigned long address = 0x1800;" auf und 
der Controller kann danach nicht mehr gedebuggt werden. Erst ein High 
Voltage Programming holt den Controller zurück.

Wenn ich es mit dem Simulator kompiliere und aufspiele, funktioniert das 
Programm zwar auch nicht aber wenigstens ist dann der Controller nicht 
hin.

Was ist das Problem? Warum verträgt sich das Programm mit dem Debugger 
nicht?

Gruß

Autor: 1234 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das Applikationsprogramm ist von Null weg. Bis wahrscheinlich zu den 
0x1800.
Wenn man in den Bootloader selbst schreiben will, so geschieht nichts 
mehr nebenbei. Ich wuerd mal im Datenblatt das Kapitel Bootloader 
nachlesen.
Der obige Code macht wenig Sinn. Zudem sind interrupts im bootloader 
overkill. Den Debugger im bootloader zu benutzen bedingt einiges an Mut.

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gut, das es zusammen mit dem Debugger nicht so optimal ist habe ich 
jetzt auch festgestellt.

Also Ziel soll ein Softwareupdate über die serielle Schnittstelle sein. 
Je nachdem welche Daten dort ankommen, soll das Anwendungsprogramm 
ausgeführt oder die neue Software aufgespielt werden.

So wie ich das Verstanden hab, können mit Hilfe der Funktionen aus der 
boot.h der Bootloaderbereich bzw. das Flash beschrieben werden.

Nur weiß ich noch nicht so wirklich, wie ich das ganze umsetzen muss, 
bzw. wie ich da jetzt genau vorgehen sollte.

Kann mir da wer helfen?

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.