Ich brauche bitte auch etwas Nachhilfe.
Ich verwende das Lernpaket uC von Franzis mit tiny13 und der Bootloader
der da dabei ist liegt von 0x17e bis 0x1fd ist also sehr winzig.
Bei 0x17E steht ein rjmp auf das Anwenderprogramm bei 0x10 (nach den
Int. Vektors).
Der übliche Verlauf ist nun so, dass man mit dem AVR Assembler ein
Programm schreibt, das am Resetvektor den Rjmp auf das Anwenderprogramm
hat.
Wenn man es mit dem beschriebenen Bootloader lädt, wird der Resetvektor
in der .hex file auf auf 0x180 verbogen und man gelangt über 0x017E dann
endlich ins Anwenderprogramm.
Da dieses Windowsprogramm, das den Restvektor verbiegt nicht als Source
vorliegt, hätte ich gerne gewußt, wenn ich z.B. Ponyprog für den
tiny2313 verwenden will, wie ich am Resetvektor rjmp 0x180 eintrage,
wenn das Anwenderprogramm viel kürzer ist.
Sonst überschreibt es ja den Bootloader. Mir fällt nur ein, diesen Rjmp
als databytes einzutragen.
Oder gibts eine Assembleranweisung, die auch auf außerhalb des
Anwenderprogrammes liegende Adressen springen kann?
LG aRudi
Rudi D. wrote:
> Sonst überschreibt es ja den Bootloader.
Der SPI-Programmer löscht in jedem Fall den Bootloader, da er kein
Sektor-Löschen kann.
Du mußt Dich entscheiden.
Entweder Du benutzt einen Bootloader mit dem dazu passendem PC-Programm
oder Du benutzt einen SPI-Programmer (Ponyprog).
Beides zusammen geht nicht!
Peter
Ich bin erst neu bei AVR uC's und bisher nur bei tiny13. Ich beziehe
mich auf die Doc Seite 98 "Self programming the flash" wo auch der
Bootloader erwähnt wird.
Ich habe Ponyprog noch nicht angewendet und weiss noch nicht, dass
dieses Programm keinen Bootloader bedienen kann, wie du schreibst.
Mir geht es hauptsächlich um die Frage wie ich den Resetvektor im
Anwenderprogramm, das ja sehr klein sein kann, z.B. ein Led-Blinker auf
den Beginn des Bootloaders setzen kann, der ja außerhalb des
Anwenderprogrammes sitzt.
Mit ISP setze ich den Resetvektor des Anwenderprogrammes auf z.B. .org
16
Mit Verwendung eines Bootloaders kann ich diesen natürlich auf z.B. bei
tiny2313 auf .org 0x380 setzen, wenn der Bootloader so klein ist wie bei
tiny13.
Aber ich verstehe nicht wie der Assembler das übersetzt, ohne dass das
Anwenderprogramm bis 0x37f reicht.
Das PCprogramm LPmikros, das ich jetzt für tiny13 werwende, verändert
den Resetvektor von selbst. D.h. ich programmiere rjmp 16 und wenn ich
dann nachschaue, dann steht im geladenen Programm rjmp 0x180.
Ein Bootloaderprogramm für den PC und die uC's gibt es ja von Dir.
Nur kenne ich mich damit noch nicht aus, da es sehr sparsam kommentiert
ist.
Welche Bootloader das Windowsprogramm bedienen kann, oder ob es nur mit
deinem Bootloader läuft weiss ich auch nicht.
Einen Bootloader der nur minimal Platz im uC braucht
traue ich mir selbst auch zu, da ich z.B. keine autom.
Baudratenerkennung brauche, aber kein Windows/Linux Programm das den
Bootloader bedienen kann. Da möchte ich gerne auf bekanntes
zurückgreifen.
Vielleicht kannst du mir da raushelfen.
LG aRudi
Rudi D. wrote:
> Mir geht es hauptsächlich um die Frage wie ich den Resetvektor im> Anwenderprogramm, das ja sehr klein sein kann, z.B. ein Led-Blinker auf> den Beginn des Bootloaders setzen kann, der ja außerhalb des> Anwenderprogrammes sitzt.
Der Resetvektor ist immer 0x0000 und den kannst Du nicht ändern.
Wenn Du meinen Bootloader benutzt, muß dort der erste Befehl ein RJMP zu
Deinem Programm sein, das ist alles.
Wenn Du keine Interrupts benutzt, kann dies z.B. ein RJMP nach 0x0001
sein.
Der Bootloader packt sich diesen RJMP und ermittelt daraus Dein
Sprungziel. Danach ersetzt er ihn durch einen RJMP auf sich selber.
Wenn Du aber versuchst, dem Bootloader ins Handwerk zu pfuschen, gehts
schief und Dein Programm läuft nicht.
Wenn Du wegen dem Bootloader Probleme mit dem Flash erwartest, nimm
einfach nen ATtiny25 (Reichelt: 1,25€), der ist kaum teuerer als ein
ATtiny13.
Peter
Ich glaube meine Terminologie ist nicht gut, oder ich drücke mich
schlecht aus.
Natürlich steht an 0x0000 der rjmp meinProgramm
Erstmals sagst du und das wollte ich wissen, dass dein PCprogramm zum
laden des uC Programms diesen rjmp meinProgramm ersetzt durch rjmp
bootloader und im Bootloaderbereich steht dann irdendwo rjmp
meinProgramm.
Das verstehe ich ja.
Also ich muß mein Programm nicht so schreiben, dass ich an der Stelle
0x0000 rjmp bootloader einsetzen muss, wenn ich den Bootloader und
nicht ISP verwenden will (das war ja meine eigentliche Frage, wie man
das bewerkstelligen könnte, da der rjmp bootloader ja nach außerhalb des
Bereiches "meinProgramm" ginge).
Das war ja der Punkt der mir Probleme machte. Dein PC Programm erledigt
das schon die .hex File anzupassen. Gut!
Eine Frage: Kann dein PCprogramm nur mit deinem uC-Bootloader arbeiten,
oder kann ich meinen eigenen, kleineren Bootloader ohne autom.
Baudratenerkennung genauso verwenden.
Was ist die aktuellste Version?
Ich will in Zukunft den tiny2313 verwenden für mehrere Projekte.
Ich habe eine Anzahl VFD's gefunden, die ich gerne als Anzeige verwenden
möchte und da brauche ich mehr Portpins als der tiny13 bietet.
Übrigens liefert Reichelt nach Österreich nur mit 150Euro
Mindestbestellwert, leider. Aber bei Pollin bekam ich tiny2313 um 1,40.
LG aRudi
Eine eigene Frage?
Dieser Thread ist über 18 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.