Forum: Mikrocontroller und Digitale Elektronik Ausführbarer Code ins EEPROM schreiben?


von Dennis A. (dede1989)


Lesenswert?

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?

von Peter D. (peda)


Lesenswert?

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.

von Dennis A. (dede1989)


Lesenswert?

Peter Dannegger schrieb:
> Wozu?
> Ich sehe keinen Sinn darin.

Ähnlich wie beim Gameboy. Macht ja schon irgendwie Sinn.

von Εrnst B. (ernst)


Lesenswert?

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.

von Peter D. (peda)


Lesenswert?

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
von Dennis A. (dede1989)


Lesenswert?

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.

von Εrnst B. (ernst)


Lesenswert?

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.

von c-hater (Gast)


Lesenswert?

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