Hallo, ist es möglich ausführbaren und kompilierten Code in das EEPROM zu schreiben und zur Ausführungszeit in den Flash Speicher zu laden und auszuführen? Teilweise kann ich mit die Frage auch selbst beantworten. Natürlich geht es so naiv nicht, da die Sprungadressen die der Assembler festgelegt hat ja alle vermurkst werden. Gibt es denn Ideen wie man das ganze angehen kann?
Dennis A. schrieb: > ist es möglich ausführbaren und kompilierten Code in das EEPROM zu > schreiben und zur Ausführungszeit in den Flash Speicher zu laden und > auszuführen? Nur wenn der unbekannte MC das unterstützt (Bootloader-API). Dennis A. schrieb: > Natürlich geht > es so naiv nicht, da die Sprungadressen die der Assembler festgelegt hat > ja alle vermurkst werden. Nur wenn die Ladeadresse im Flash eine andere ist, als zur Linkzeit angegeben wurde. Dennis A. schrieb: > Gibt es denn Ideen wie man das ganze angehen kann? Wozu? Ich sehe keinen Sinn darin.
Peter Dannegger schrieb: > Wozu? > Ich sehe keinen Sinn darin. Ähnlich wie beim Gameboy. Macht ja schon irgendwie Sinn.
Dennis A. schrieb: > Macht ja schon irgendwie Sinn. Dann nimm einen µC, der Code aus dem RAM ausführen kann. (div. ARM bieten sich an) Ständig das Flash zu Löschen ist nicht gerade Lebensdauerförderlich. Oder mach's wie verschiedene Basic-, Forth-, Java- Projekte am AVR: Pack eine VM in den Flash, Pack vorkompilierten Bytecode dafür ins EEProm.
Dennis A. schrieb: > Ähnlich wie beim Gameboy. Macht ja schon irgendwie Sinn. Ich hab keine Ahnung, was wozu und wie beim Gameboy gemacht wurde. Ich weiß daher nicht, was ähnlich sein soll. Ein EEPROM ist bei den meisten MCs viel zu klein, um Code zu speichern. Er dient nur dazu, um Daten beim Ausschalten zu erhalten.
:
Bearbeitet durch User
Peter Dannegger schrieb: > Ein EEPROM ist bei den meisten MCs viel zu klein, um Code zu speichern. > Er dient nur dazu, um Daten beim Ausschalten zu erhalten. Es kann sich ja auch um einen externen EEPROM handeln... Da geht dann einiges mehr.
Dennis A. schrieb: > Es kann sich ja auch um einen externen EEPROM handeln... Da geht dann > einiges mehr. Beim Gameboy (Z80) war das Steckkarten-(E)Prom einfach in den Adressraum eingeblendet, und der Prozessor konnte direkt darauf arbeiten (Von Neumann-Architektur). Beim AVR ist das nicht so (Harvard) Deshalb, wenn man sowas vorhat: Geeignete CPU wählen.
Dennis A. schrieb: > ist es möglich ausführbaren und kompilierten Code in das EEPROM zu > schreiben und zur Ausführungszeit in den Flash Speicher zu laden und > auszuführen? Wenn der µC grundsätzlich self-programming beherrscht: Natürlich. > Teilweise kann ich mit die Frage auch selbst beantworten. Natürlich geht > es so naiv nicht, da die Sprungadressen die der Assembler festgelegt hat > ja alle vermurkst werden. Bei relativen Sprüngen gibt's überhaupt kein Problem, bei absoluten nach "außerhalb" des nachgeladenen Codes ebenfalls nicht. Und der Rest (falls es einen gibt) muß halt beim Laden in den Flash "reloziert" werden. Das ist trivial, man übersetzt den Code für Basisadresse 0 und addiert die tatsächliche Ladeadresse an allen Stellen, wo es nötig ist. > Gibt es denn Ideen wie man das ganze angehen kann? Entweder den fraglichen Code gleich "position-independent" übersetzen oder man schreibt ein *.obj-File in's EEPROM. Das enthält alle zur Relozierung nötigen Informationen (außer der tatsächlichen Zieladresse natürlich, die ist ja erst zur Laufzeit bekannt)
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.