Moin an alle, ich will für den ATmega16 einen Bootloader programmieren. Dazu muß der Linker zwei Aufgaben erledigen: 1. Die Startadresse des ersten Befehls muss verschoben werden. 2. Der Linker darf keine Vektor-Tabelle für die Interrupts anlegen Hat jemand einen Plan, wie man das macht? Thanx, Markus
Hallo, du weist, das es fertige Bootloader gibt ? Ich selbst benutze Megaload (www.microsyl.com) mit einem ATMega16, funktioniert prima. Gruß Thorsten
Das Verschieben des Textsegmentes ist in der FAQ dokumentiert. Das komplette Weglassen der Interruptvektortabelle ist derzeit nicht konfigurierbar, d. h. dafür wäre ein eigenes gcrt0.o file notwendig. Das ist aber auch gar nicht zwingend erforderlich, sofern man nicht gerade auch noch die letzten paar Bytes im Bootloader-Bereich des ROMs unbedingt braucht. Zum anderen können die neuere ATmegas ja sogar die Interruptvektoren per fuses auf den Bootloader-Bereich drehen...
Hi ich hab meinen Bootloader in ASM geschrieben. Habs im AVRGCC versucht allerdings kommt man auch da nicht um Inline-ASM rum. Also gleich richtig ran. @Thorsten Nicht jeder kann etwas mit einem Bootloader über RS232 anfangen. Meiner bekommt das Programm z.B. über den USB. Der nächste wird das Programm wohl aus einem ser. EEPROM rauslesen. Matthias
Mit dem aktuellen <avr/boot.h> müßte man einen Bootloader komplett in C hinbekommen. OK, vorausgesetzt, man zählt den inline-asm aus <avr/boot.h> noch als C :-), aber inline asm in Headerfiles ist ja ohnehin gang und gäbe.
Hi @Jörg Das bezieht sich aber nicht auf den aktuellen WINAVR sondern auf die CVS Version oder? In meinem WINAVR kann ich keine boot.h entdecken. Matthias
Ja, ist im Moment nur im CVS. Kannste Dir aber locker über das CVSweb-Interface von savannah.nongnu.org rausziehen, das File ist »self-contained«, Du kannst das also beliebig in eine ältere Version nachträglich reinstecken. Die nächste WinAVR-Version wird es infolge Urlaub von Eric wohl erst im August geben, so sein Plan.
Mal eine Frage an Matthias, mit welchem Baustein hast Du denn die USB-Anbindung gemacht? Und wie steuerst Du den vom PC aus an (Treiber usw.) ? Markus
Hi FT245BM von www.FTDIchip.com Die lassen sich dann entweder als ganz normale COM-Schnittstelle oder per DLL ansprechen. Treiber liefert der Chiphersteller kostenlos für diverse OSs. Matthias
Hmm, dabei fing der Thread so gut an... :) Ich bin am gleichen Problem, wie Markus. Ich möchte auch einen Bootloader nutzen. Dabei geht es grundsätzlich nicht darum welchen und fertig oder nicht. Es geht um das zusammenpacken von Applikation und Bootloader. Wenn ich die boot.h einbinde, dann hatte ich erwartet, dass ich ein Segment definieren kann, ab dem Bootloader Code steht. Ich hatte auch erwartet, dass der Linker den eigentlichen Applikationscode dann bis maximal zur Grenze des Bootloaderanfangs erzeugt. Leider bekomme ich das nicht hin. Ausgangspunkt: Ich habe einen Bootloader, der vom AVR Studio assembliert und an die korrekte Adresse geflasht wird. Fein. Ich habe einen Code in WinAVR, mit AVR-Studio compiliert und geflasht, funktioniert auch. Problem: Die Applikation wird immer für den kompletten Speicher gelinkt, d.h. das letzte Segment liegt immer über dem Bootloader. Rumms! Wie kann ich dem AVRStudio resp. dem WinAVR klar machen, dass der Controller weniger Speicher hat, als er denkt. Oder wie kann ich ein Dummy-/Bootloader Segment an die korrekte Adresse der per Fuses eingestellten Bootloader-Region definieren, dass der Linker hübsch darunter bleibt? Der erzeugte Hex-File darf ruhig weiter die volle Größe in Anspruch nehmen, das Problem werde ich schon lösen, bzw der Bootloader achtet darauf, sich nicht selbst zu überschreiben. Ich habe im boot.h bislang nur alle möglichen Zugriffsfunktionen auf den Flash gesehen. Aber wie gesagt keine Optionen ein Bootloader-Segment zu definieren. Mir wurde mal gesagt, dass man den Bootloader im eigentlichen Applikations-Code unterbringen soll/muss. Selbst da ist mir nun nicht klar, wie ich das tue. Schließlich müsste ich ja dem Compiler/Linker irgendwann sagen, dass der folgende Code bitte oben in die BL-Sektion geschrieben werden muss. Aber wenn ich das wüßte, dann hätte ich vermutlich auch das Problem insgesamt gelöst, da ich dort dann einfach einen Dummycode platzieren würde. Ich bin verwirrt... Gruß, Ulrich
Ulrich P. wrote: > > Problem: > Die Applikation wird immer für den kompletten Speicher gelinkt, d.h. das > letzte Segment liegt immer über dem Bootloader. Rumms! Wieso? Die Applikation beginnt doch bei Adresse 0. Der Bootloader liegt (adreßmäßig) hinter der Applikation bzw. besser gesagt "linksbündig" am Ende des verfügbaren Flash-Bereichs. Der Bereich zwischen Applikation und Bootloader ist frei. > > Wie kann ich dem AVRStudio resp. dem WinAVR klar machen, dass der > Controller weniger Speicher hat, als er denkt. Oder wie kann ich ein Das brauchst Du doch garnicht. Du mußt bei der Applikationsprogrammentwicklung lediglich aufpassen, daß das Appl.-Programm nicht so groß wird, daß es den Bootloader-Bereich erreicht. > Mir wurde mal gesagt, dass man den Bootloader im eigentlichen > Applikations-Code unterbringen soll/muss. Wie soll das gehen? Der Bootloader ist doch im Prozessor festprogrammiert und soll Applikationen nachladen, da kann der Bootloader doch kein Teil der Applikation sein.
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.