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
Wenn dein Programm richtig "beendet" wird, sprich mit einer Endlosschleife am Schluss, darf es nicht zu irregulärem Verhalten kommen. :-)
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.
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
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
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:
1 | int main (void) { |
2 | DDRD = 0b11100000; |
3 | while(1) |
4 | {
|
5 | PORTD ^= 0b00100000; |
6 | _delay_ms(500); |
7 | }
|
8 | return 0; |
9 | }
|
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
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.