Hallo, ich habe ein Projekt im AVR-Studio4, welches einen Bootloader.hex erzeugt und mir per "external makefile" die Daten in den Flash vom Microkontroller schreibt. Beim anschließenden Auslesen sehe ich, dass er an der richtigen Stelle geschrieben wurde. Dann habe ich noch die eigentliche Software, welche ich mit dem vom AVR-Studio generierten makefile kompiliere. Flashen funktioniert auch hier und beim Auslesen sehe ich, dass er den Code brav ab Adresse Null geschrieben hat. Das blöde ist nur, der andere Bereich wird dann wieder im Flash überschrieben. Ich habe nun zwar im Forum gelesen, dass ich die Bereiche auch im AVR-Studio unter den Einstellungen "Project Options -> Memory Settings" einstellen kann, aber wenn ich dort einen Speicherbereich reinschreibe, wird dieser trotzdem wieder überschrieben. Kann mir jemand sagen welche Einstellungen ich dort machen muss? Um mich nicht mit einem eigenen makfile rumärgern zu müssen würde ich es gerne im AVR-Studio machen, habe für die Speicheraufteilung aber nichts finden können.
1. Chip Erase durchführen 2. Bootloader flashen ohne Chip Erase 3. Programm flashen ohne Chip Erase Dann sollten beide im Flash sein. Gruß Skriptkiddy
Außerdem muss man natürlich den Linker anweisen, den Bereich, in dem der Bootloader sitzt, bei der Applikation nicht zu benutzen.
Skript Kiddy schrieb: > 1. Chip Erase durchführen > 2. Bootloader flashen ohne Chip Erase > 3. Programm flashen ohne Chip Erase Danke, so funktioniert es. Ich habe nicht beachtet, dass das Häckchen gesetzt war, dass AVR-Studio den Chip immer "ereasen" soll, bevor er programmiert. Christian R. schrieb: > Außerdem muss man natürlich den Linker anweisen, den Bereich, in dem der > Bootloader sitzt, bei der Applikation nicht zu benutzen. Du meinst doch jetzt den Fall, wenn ich ein eigenes makefile schreiben würde. Oder? Ich wollte es eigentlich über die GUI lösen.
Hallo Leute, Frage am Rande: Kann man eigentlich Applikation UND Bootloader nicht auch zusammen kompilieren? Und falls ja: Wie macht man das? (Also dass der Bootloader-Code an der richtigen Stelle landet?) Gruß, DetlevT
Detlev T. schrieb: > Frage am Rande: Kann man eigentlich Applikation UND Bootloader nicht > > auch zusammen kompilieren? Und falls ja: Wie macht man das? (Also dass > > der Bootloader-Code an der richtigen Stelle landet?) Nicht wirklich. Den Bootloader dort ins Flash zu packen, wo er hingehört ist die eine Sache, die andere ist dort auch die Vektortabelle und die Initialisierung anzulegen. Wenn der Bootloader nur ein Teil der Anwendung ist, fehlt das erstmal völlig und muß dann "per Hand" eingebaut werden. Wobei sich der C-Compiler dabei nicht sonderlich kooperativ zeigt. An dieser Stelle ist der µC auch noch kein Rechner, der C-Programme abarbeiten kann. Da geht's dann nur noch mit Assembler weiter. Der Controller ist zwar eigentlich durch die Anwendung initialisiert. Aber nach einem fehlgeschlagenen Upgrade muß das der Bootloader übernehmen. Deswegen nimmt man zwei unabhängige Programme. mfg.
Detlev T. schrieb: > Frage am Rande: Kann man eigentlich Applikation UND Bootloader nicht > auch zusammen kompilieren? Nein. Aber man kann die Hex-files zusammen packen. http://www.digipedia.pl/man/doc/view/srec_cat.1/ volker
Volker Zabe schrieb: > Detlev T. schrieb: >> Frage am Rande: Kann man eigentlich Applikation UND Bootloader nicht >> auch zusammen kompilieren? > > Nein. > Aber man kann die Hex-files zusammen packen. > http://www.digipedia.pl/man/doc/view/srec_cat.1/ > > volker Also ich habe einen Bootloader in C und das Programm zusammen in einem Projekt und es Funktioniert. Ich habe dann für Updates das Projektfile vom AVR-Studio (4.18) kopiert und in diesem dann den Bootloader herausgenommen. Ich kann dann über I2C das untere Programm Updaten und zwar ganz einfach. Über I2C gebe ich den Befehl verlasse das Programm und befinde mich dann im Bootloader. Nach dem Update lasse ich mir den Status des Updates geben. War alles erfolgreich gebe ich den Befehl verlasse den Bootloader und das Programm Arbeitet wieder. Beim Booten wird die Checksumme überprüft und wenn sie korrekt ist geht es vom Bootloader aus direkt in das Hauptprogramm. Das ganze läuft auf einem Atmega 88pa mit 8 KByte und der Bootloader Startet bei 0x1C00. Der C-Bootloader kommt so mit 1 KByte aus. Viel Platz ist allerdings nicht mehr aber seine Funktion wird ja erfüllt und die Kommunikation wie schon erwähnt läuft über I2C. Dafür gibt es schon sehr günstige USB-Adapter für Windows so das ein Update über PC genauso weinig ein Problem darstellt wie ein Update über einen Master-Controller (Renesas oder ähnlich) welcher dieses Interface Board dann Updaten kann. Also ist die gemachte Aussage über Bootloader und Programm in einem gemeinsamen C Projekt mit AVR-Studio nicht ganz Richtig so, hat allerdings ein wenig Schweiß gekostet bis es lief ohne den knappen Speicher zu Sprengen. Ausserdem hat dieses Thema hier im Forum schon einmal jemand angerissen und in einem Beitrag wurde genau diese Idee auch dargestellt. Allerdings nicht so das sich daraus gleich alles ableiten lies. Ich musste es im Rahmen eines zu erstellenden Treibers, der vorher in Assembler mit Bootloader und Programm in einem Assembler Projekt existierte, auf C übertragen. Also in Assembler geht es deutlich einfacher aber es sollte alles nach C hochgezogen werden auch wegen der leichteren Wartbarkeit. Es gab einige Hürden zu nehmen über die man in Assembler nicht nach zu Denken braucht. mfg
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.