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