Also ich habe mich mit dem thema bootloader beschäftigt, aber ich habe
noch ein paar verständnisfragen, die mir vielleicht jemand beantworten
könnte.
Hab übrigens die artikel dazu auch durchgelesen.
ist ein bootloader ein MUSS für ein controller?
wenn ich über einen "MySmartUSB"-programmer mein mega8 flashe, was genau
passiert da? Ist da der Bootloader auch schon in aktion?
benötige ich den ISP nur, wenn ich den Mega erst in der Zielschaltung
flashen will oder hat das auch was mit dem bootloader zu tun?
Was kann man mit einem bootloader sinnvolles anstellen (mir fehlt ein
wenig die vorstellungskraft). vielleicht kann mir jemand ein wenig
helfen?
Danke im Voraus
und schönen abend
Spice
Hallo,
ein Bootloader ist ein (Hilfs-)Programm für den µC.
Das Programm macht es möglich, den µC über eine andere am µC verfügbare
Schnittstelle zu programmieren.
Erspart dann das Programmieren über ISP oder andere spezielle
Programmiergeräte/-software.
Mit einem Bootloader der z.B. eine serielle Schnittstelle am UART
unterstützt kann ich dann den µC einfach an einen beliebigen Rechner an
die seriell Schnittstelle stecken und ein neues Programm per
Terminalprogramm auf den µC programmieren.
Den Bootloader selbst muß man natürlich zuerst mit den üblichen Mitteln
(ISP o.ä.) auf den µC brennen. Der bleibt dann z.B. bei den AVR durch
passendes setzen der Fuse-Bits dort schreibgeschützt drauf.
Gruß aus Berlin
Michael
Vielen Dank für dein sehr aufschlussreiche Antwort...
Warum steht das so nicht in der Artikelbeschreibung...
Also wäre es möglich, wenn ich einem mega8 per ISP oder einem anderen
programmer vorerst einen bootloader flashe, dann diesen mega auf einer
zielplatine mit einem usb-seriell-wandler über den usb-anschluss eines
xbelibigen PCs meine softwareanwendung flashe?! verstehe ich das
richtig?
Also kurz zu meinem vorhaben, ich möchte einen mega8 per usb in einer
windowsapplikation nutzen und auch daten austauschen. Da dachte ich mir,
dass ich eventuell mit dem usb anschluss auskomme auch fürs
programmieren, anstatt mir noch die isp-pins herrauszuführen?!
ist das möglich?
danke und gruss
Spice
Hi spice,
ja, das ist so möglich. Es kommt dann halt drauf an, wie du es lösen
magst. Z.B. als Befehl an die Applikation, den Bootloader zu starten
(wenn schon ne Applikation drauf ist), oder den umgekehrten Weg, den
Bootloader vor der Applikation zu starten, der BL wartet eine gewisse
Zeit, wenn in dieser Zeit eine bestimmte Sequenz über die Schnittstelle
reinkommt, weiss der BL dass ein neues Programm kommt. Die zweite
Variante ist soweit ich weiss die üblichere. Ich experimentier grad auch
ein bisschen damit, will allerdings noch eine zusätzliche Variante, bei
die GPIOs des USB-Chips die ISP-Leitungen bedienen können. Hat bei
SMD-Controllern den Vorteil, dass ich sie zum Programmieren nicht erst
in eine andere Schaltung setzen muss, und ich muss auch keinen
"riesigen" Stecker für ein externes Tool aufs Board bringen.
Ralf
Ich habe auch eine Frage zum Thema Boot-Loader.
Ist es möglich im Rom mehrere kleine Programme abzulegen die je nach
Situation gewählt werden?
Ich hatte mir dass so vorgestellt:
Man schreibt die Programmen in den Speicher und wählt das Programm, dass
laufen soll über ein Mausklavier oder vergleichbares aus.
Ich habe nämlich dass Problem, dass ich eine zeitkritische Aufgabe habe,
die sich je nach angeschlossener Pheripherie ändert.
Und ich will nicht umbedingt, nur weil ich etwas an der Peripherie
umstecke, alles neu programmieren.
Ist dass so machbar?
Gast wrote:
> Und ich will nicht umbedingt, nur weil ich etwas an der Peripherie> umstecke, alles neu programmieren.
Schreiben mußt Du die einzelnen Funktionen ja in jedem Fall.
Bloß eben nicht als getrennte Programme, sondern als Unterfunktion, die
dann zu beginn des Main ausgewählt werden.
Das hat auch den Vorteil, daß gemeinsam benötigte Funktionen nicht
mehrmals im Flash stehen müssen.
Peter
So etwas wie einen selektiven boot loader würde mich auch reizen, da ich
auch schon dass eine oder andere mal 2 oder mehrere Programme auf einem
uC haben wollte.
>Bloß eben nicht als getrennte Programme, sondern als Unterfunktion, die>dann zu beginn des Main ausgewählt werden.
Diese Idee hatte ich auch schon.
Bei der Main funktioniert dass schön.
Aber mir ist noch keine vernünftige Lösung eingefallen wie ich dass dann
mit den Interrupt's lösen soll.
Denn wenn alles in einem Topf (Programm) gemacht wird, benötigt man am
Anfang jedes Interupt's eine Unterscheidung welches Programm jetzt
läuft.
Außerdem muß ich dann bei jeder zusätzlichen Funktion immer wieder
Überprüfen ob sich das Ganze mit den Takten noch ausgeht.
Außerdem finde ich dass wirklich reizvoll das Ganze schön abzutrennen
und sicher zu sein dass man nicht aus Versehen in's andere Programm
rüberkommt.
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.