Forum: Mikrocontroller und Digitale Elektronik Funktion zur Laufzeit neu flashen


von Cyclon (Gast)


Lesenswert?

Moin,
ich entwickel im Rahmen eines Uni-Projekts kleine Softwarmodule mit 
AVR-Prozessoren, von denen mehrere an einem RS485 Bus hängen werden. Nun 
möchte ich die Software gerne so halten, dass diese später einmal über 
den Bus ausgetauscht werden kann, ohne noch extra irgendwelche Pins 
anfassen zu müssen. Klar, "nimm nen Bootloader" wird jetzt als Antwort 
kommen. Hab ich auch zuerst dran gedacht. Allerdings möchte ich gerne, 
das einige Funktionen immer zur Verfügung stehen und nicht abhängig von 
der aufgespielten Software sind. Beispiele hierfür sind: Reset 
ausführen, Versionsnummer Bootloader/UserApplication abfragen und noch 
einiges was in einem Bootloader nicht so einfach möglich ist, mir aber 
grade nicht mehr einfällt. Der Reset ist aber ein gutes Beispiel: Wenn 
die UserApplication keine Reset-Funktion implementiert, ist es später 
umständlich in den Bootloader zu gelangen (Strom an->Rechtzeitiges 
Senden des entsprechendem Befehls).
Meine Idee war nun ein Framework zu schreiben, das einige 
Initalisierungen übernimmt und Nachrichten, die über den Bus kommen 
entgegenimmt, auswertet und ggf. an die UserApplikation weiterleitet. 
Diese wiederum müsste aus mindestens zwei Funktionen bestehen - einer 
die die BusDaten auswertet und einer, ähnlich 'main', die das eigentlich 
Programm darstellt.

Nun stellt sich mir die Frage, ob dieser Ansatz überhaupt lösbar ist, da 
ich
a) nicht mit Sicherheit wissen kann, wo eine der beiden Funktionen im 
Flash liegt. Der Einsprungspunkt ändert sich ja je nach Größe der 
vorangehenden Funktion.
b) nicht weiß, wie ich sowas, also ohne main, in meiner IDE(Eclipse, 
GCC) überhaupt kompiliert bekomme.

von (prx) A. K. (prx)


Lesenswert?

Cyclon schrieb:

> a) nicht mit Sicherheit wissen kann, wo eine der beiden Funktionen im
> Flash liegt. Der Einsprungspunkt ändert sich ja je nach Größe der
> vorangehenden Funktion.

Sprung/Vektorleiste an feste Position legen, z.B. hinter die 
Interrupt-Sprungleiste.

von holger (Gast)


Lesenswert?

Das übliche "ich wünsche mir Code nachladegeraffel"
auf einem uC der das ohne Klimmzüge nicht kann.
Bau dir einen Basic Interpreter und interpretiere
dann Code den du aus einem EEPROM ausführst.

Oder besorg dir einen Prozessor der Code aus dem RAM
ausführen kann. Da kannst du dann nachladen so oft du willst.
Von SD Karte, aus irgendeinem Flash oder dem Internet.

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
Noch kein Account? Hier anmelden.