mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Programmreste im Flash / Flash-Speicher löschen mit Bootloader möglich?


Autor: Tobias G. (tobi1435)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe vor einiger Zeit angefangen AVRs in C zu programmieren.
Da mein Notebook keine serielle Schnittstelle besitzt, verwende ich 
einen USB-RS232-Konverter und, da ansonsten das Hochladen sehr, sehr 
lange dauert, den Bootloader FBoot.
Ich programmiere zur Zeit einen ATmega32. Hierbei ist mir schon mehrfach 
aufgefallen, dass nach mehrmaligen Hochladen des Programmes der 
Mikrocontroller ungewollte Dinge tut, die nicht programmiert sind.
Ich vermute, dass noch Programmreste vom vorherigen Programm gespeichert 
sind. Ich hatte nämlich zum Testen nach einem großen Programm ein ganz 
einfaches Programm hochgeladen, indem lediglich eine LED blinken sollte. 
Der µC hatte zusätzlich aber auch noch andere Ausgänge angesteuert, die 
in dem vorher hochgeladenen Programm verwendet wurden.
In der kompilierten hex-Datei sind ja nur die Adressen enthalten, die 
für das Programm gebraucht werden. Der Rest ist ja nicht "ff", sondern 
steht garnicht in der Datei. Vermutlich wird der Rest, der nicht mehr 
gebraucht wird, durch das neue Programm nicht überschrieben.

Um dieses Problem nach dem Auftreten zu beheben, habe ich bisher immer 
den Bootloader neu hochgeladen. Allerdings muss ich hierfür jedes mal an 
einen PC mit serieller Schnittstelle gehen.
Ich würde daher gerne wissen, ob ich den Flash-Speicher auch mit FBoot 
komplett bis auf dien entsprechenden Bereich des Bootloaders löschen 
kann oder ob ich beim Bootloader bzw. Kompiler einstellen kann, dass 
dieser das vor jedem Hochladen tut bzw. nicht verwendete Bytes auf "ff" 
setzt.


Im Voraus vielen Dank für eure Antworten.

Viele Grüße,

Tobi

Autor: Floh (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn dein Programm richtig "beendet" wird, sprich mit einer 
Endlosschleife am Schluss, darf es nicht zu irregulärem Verhalten 
kommen.
:-)

Autor: Thomas Hempe (tux85)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hi
mit welcher software programmierst du? avrdude oder so? weil da kannst 
du vor dem flashen einen chip erase machen dann ist der chip vorm 
proggen leer und wird nur mit deinem compilierten programm geflasht. was 
ich mir noch vorstellen könnte ist wenn du ein programm für den avr 
kompilierst und dann hoch lädst dann was änderst im programm und dann 
neu compilierst ohne ein make clean zu machen dann könnte es sein dass 
noch "reste" rumfliegen.

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

>Wenn dein Programm richtig "beendet" wird, sprich mit einer
>Endlosschleife am Schluss, darf es nicht zu irregulärem Verhalten
>kommen.

???

Aber ein funktionierendes Programm interessiert es herzlich wenig, was 
sonst noch im Speicher steht.

MfG Spess

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tobias G. schrieb:
> Ich hatte nämlich zum Testen nach einem großen Programm ein ganz
> einfaches Programm hochgeladen, indem lediglich eine LED blinken sollte.
> Der µC hatte zusätzlich aber auch noch andere Ausgänge angesteuert, die
> in dem vorher hochgeladenen Programm verwendet wurden.

Zeig mal dieses seltsame Blinkprogramm.

Ein C-Compiler weiß eigentlich immer, welchen Code er erzeugt und dann 
anspringen darf. Er springt nicht einfach in ungenutzte Bereiche und 
daher ist es egal, was da drin steht.


Peter

Autor: Tobias G. (tobi1435)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

vielen dank für die schnellen Antworten.

meine Programme führen eigentlich immer in eine Endlosschleife.

> mit welcher software programmierst du? avrdude oder so?
Nein, ich lade die Programme mit FBoot hoch, da ich keine echte 
RS232-Schnittstelle habe. Bei FBoot habe ich keine Option zum Löschen 
des Flashes gefunden.
Den Bootloader selbst habe ich an einem anderen PC mit RS232 mit der 
Software PonyProg2000 hochgeladen, dies ging groblemlos.
Make Clean habe ich bisher eigentlich nicht gemacht. Kann das der Grund 
sein?
Allerdings habe ich bei dem jetzt hochgeladenen Programm auch mit Make 
Clean Probleme, da das AVR Pull-Up-Widerstände der Eingänge ausschaltet, 
obwohl dies nicht so programmiert ist. Vielleich hat dies aber auch eine 
andere Ursache als das bisherige "Programmresteproblem".

Das Blinkprogramm, mit dem ich das damals getestet hatte, habe ich nicht 
mehr, aber es sah in etwa so aus:
int main (void) {
   DDRD = 0b11100000;
     while(1)
     {
       PORTD ^= 0b00100000;
     _delay_ms(500);
     }
     return 0;
    }
Hierbei summte zusätzlich der an PC7 angeschlossene Piezosummer, wenn 
man einen an PC2 bzw. PC3 angeschlossenen Taster betätigte. Dies sollte 
allerdings nur in dem vorher hochgeladenen Programm der Fall sein.


Viele Grüße,

Tobi

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schaust Du Dir auch die Ausgaben des FBOOT an?
Schreib mal das Pause Kommando in die Batch rein, damit das Fenster 
offen bleibt.

Die CRC muß o.k. sein, sonst hats irgendwo gehangen.
Dann kann es gut sein, daß das neue Programm nur teilweise geflasht ist 
und in das alte reinläuft.

Wenn es öfter hängt, mal die Baudrate ändern.


Peter

Autor: Tobias G. (tobi1435)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ja, ich achte immer auf die Ausgabe.
Es gibt zwar manchmal Fehler, aber ich lade das Programm so oft hoch, 
bis CRC o.k. ist.
Ich nehme an, sicherer wird es mit einer geringeren Baudrate?


Viele Grüße,

Tobi

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.