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