Forum: Compiler & IDEs Programm im RAM laufen lassen


von Schwimmbadpinkler (Gast)


Lesenswert?

Hi, mir ist da eine eventuelle blöde Idee gekommen: Ob man teile eines 
Programms irgendwie ins RAM eines Attiny bzw. ATmega verschieben kann 
und dort laufen lassen kann? Mir ist klar, es macht eventuell wenig Sinn 
weil die Attinys haben nur wenig RAM und es läuft da auch nicht 
schneller. Mir geht es nur um's Prinzip, wie würde man das Verschieben 
machen? Und wie würde man das Programm/die Funktion im RAM dann 
anstarten?

von Karl H. (kbuchegg)


Lesenswert?

Schwimmbadpinkler schrieb:
> Hi, mir ist da eine eventuelle blöde Idee gekommen: Ob man teile eines
> Programms irgendwie ins RAM eines Attiny bzw. ATmega verschieben kann
> und dort laufen lassen kann?

Wenn du nicht gerade einen Interpreter schreibst, der sich sein Programm 
aus dem SRAM holt, dann ist die Antwort ein klares 'nein'. Genau das ist 
der Sinn einer Harvard Architektur mit getrennten Adressräumen, dass 
genau das nicht möglich ist und sich ein Programm nicht durch gewollte 
und ungewollte Programm-'features' selbst verändern kann.

von Stefan (Gast)


Lesenswert?

Nein, das geht beim ATmega nicht. RAM und Flash werden unterschiedlich 
angesprochen, Programmcode aus dem RAM ist von der Architektur her nicht 
möglich.

Viele Grüße, Stefan

von Joachim B. (jar)


Lesenswert?

Stefan schrieb:
> Programmcode aus dem RAM ist von der Architektur her nicht
> möglich.

auch nicht wenn er durch eine Routine den Code im Flash verändert?

mir ist so als wenn Bootloader den flash ändern können, gleichwohl 
könnte ich Programmcode im RAM haben, ok etwas kontruiert, aber 
unmöglich?

von Karl H. (kbuchegg)


Lesenswert?

Joachim B. schrieb:
> Stefan schrieb:
>> Programmcode aus dem RAM ist von der Architektur her nicht
>> möglich.
>
> auch nicht wenn er durch eine Routine den Code im Flash verändert?

Ich würde das allerdings jetzt eher als 'gewolltes Hintertürchen' sehen. 
Die einzuhaltenden Auflagen, damit das auf einem AVR möglich ist sind 
dergestalt, dass man das sicherlich nicht als 'regulären 
einzuschlagenden Weg' in 08/15 Programmen sehen kann.

> könnte ich Programmcode im RAM haben, ok etwas kontruiert, aber
> unmöglich?

Von der Sache her hast du natürlich recht. Möglich ist es über Umwege 
Code aus dem RAM zur Ausführung zu bringen, wenn auch nicht direkt. 
Trotzdem würde ich es mehr als notwendiges Übel ansehen, denn als 
Feature einer Architektur.

: Bearbeitet durch User
von Peter II (Gast)


Lesenswert?

Joachim B. schrieb:
> Stefan schrieb:
>> Programmcode aus dem RAM ist von der Architektur her nicht
>> möglich.
>
> auch nicht wenn er durch eine Routine den Code im Flash verändert?
>
> mir ist so als wenn Bootloader den flash ändern können, gleichwohl
> könnte ich Programmcode im RAM haben, ok etwas kontruiert, aber
> unmöglich?

nein. Die CPU lädt ja selbstständig den nächsten Befehl und das macht 
sie bei dem Atmel nur vom Flash.

Man müsste dafür die CPU um verdrahten.

von ?!? (Gast)


Lesenswert?

Karl Heinz schrieb:
> Von der Sache her hast du natürlich recht. Möglich ist es über Umwege
> Code aus dem RAM zur Ausführung zu bringen.

Zur Ausführung bringen kannst du den Code wirklich nur aus dem Flash. 
Aus dem RAM geht nicht. Wenn man den Vorschlag von Joachim ansiehr, 
möchte er den Code ja von RAM in den Flash laden und dann im Flash 
ausführen.
Im RAM kannst du ihn auf keinen Fall ausführen.

von Stefan (Gast)


Lesenswert?

Nein, auch der Bootloader läuft im Flash. Der ATmega kann seine Opcodes 
nur aus dem Flash laden. Natürlich gibt es Möglichkeiten, das Flash aus 
dem Programmfluss heraus zu ändern (dafür gibt es einen speziellen 
Opcode). Aber dieser Opcode wird wiederum NUR aus dem Flash heraus 
ausgeführt.

Schau Dir mal den Wiki-Eintrag an, da ist das ganz gut erklärt:

http://de.wikipedia.org/wiki/Harvard-Architektur


Viele Grüße, Stefan

von Joachim B. (jar)


Lesenswert?

Schwimmbadpinkler schrieb:
> Ob man teile eines
> Programms irgendwie ins RAM eines Attiny bzw. ATmega verschieben kann
> und dort laufen lassen kann?

?!? schrieb:
> Zur Ausführung bringen kannst du den Code wirklich nur aus dem Flash.

Stefan schrieb:
> Nein, auch der Bootloader läuft im Flash. Der ATmega kann seine Opcodes
> nur aus dem Flash laden.

ist klar habe ich auch verstanden, im RAM läuft nix, aber das heisst 
nicht das Code aus dem RAM nicht zum Laufen gebracht werden kann ;-)

von Stefan (Gast)


Lesenswert?

Also Du meinst:

* Code von irgendwoher (Schnittstelle ..) ins RAM laden
* Code vom RAM ins Flash kopieren
* den kopierten Code im Flash starten

Ja das geht.
Genauso funktioniert ja auch der Bootloader.

Viele Grüße, Stefan

von Karl H. (kbuchegg)


Lesenswert?

Joachim B. schrieb:

> ist klar habe ich auch verstanden, im RAM läuft nix, aber das heisst
> nicht das Code aus dem RAM nicht zum Laufen gebracht werden kann ;-)

:-)
mit derselben Argumentation könnte man allerdings dann auch sagen, dass 
ein AVR Code von einem Barcode ausführen kann.
:-)

von ?!? (Gast)


Lesenswert?

Karl Heinz schrieb:
> mit derselben Argumentation könnte man allerdings dann auch sagen, dass
> ein AVR Code von einem Barcode ausführen kann.
> :-)

richtig... Oder von der Festplatte. Nichts anderes machst du ja, wenn du 
den µC über ISP programmierst. Deswegen kann man ja auch nicht sagen: 
"mein µC führt sein Programm von der Festplatte aus". :-)
Irgendwo muß man mal eine Grenze setzen. Und die ist für mich beim Wort 
"ausführen" erreicht. Ausführen kann man den Code nur vom Flash. Woher 
man den Code und über welchen Weg in den Flash befördert, ist doch nicht 
von Belang. Ausgeführt wird er nur aus dem Flash heraus.

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.