Forum: Mikrocontroller und Digitale Elektronik AVR: eval anweisung?


von Sebastian Blatt (Gast)


Lesenswert?

Gibt es bei AVR Mikroprozessoren eine Möglichkeit, code aus dem SRAM
auszuführen? So etwas wie eine EVAL Anweisung, die etwa so ausschaut

  EVAL reg1, reg2

und den opcode aus Register REG1 mit Argument aus Register REG2
ausführt?

Danke im Voraus,
Sebastian

von Rufus T. Firefly (Gast)


Lesenswert?

Welcher (andere) Prozessor verfügt denn über einen derartigen
EVAL-Befehl?

von Sebastian Blatt (Gast)


Lesenswert?

Weiss ich nicht :-)

Ich möchte einen programmierbaren Controller für unsere Experimente
bauen. Dazu müsste ich allerdings ständig neue Programme raufladen und
das würde das Flash-Memory irgendwann nicht mehr mitmachen. Ich dachte,
daß es praktisch wäre, den hex-code über ein Interface einzulesen und im
SRAM abzuspeichern. Der Controller würde dann bei einem bestimmten
Signal mit dem Programm loslegen. Dazu bräuchte ich allerdings
irgendeine Möglichkeit, opcodes aus dem SRAM in die ALU zu bekommen.

Eine andere Möglichkeit wäre, eine virtual machine zu schreiben, die
dann eigene opcodes aus dem SRAM ausführt. Ich dachte mir, daß es
wesentlich weniger Arbeit wäre, wenn ich den Mikroprozessor direkt
ansprechen könnte.

Danke für die schnelle Antwort.
Sebastian

von thkais (Gast)


Lesenswert?

Aufgrund der Harvard-Architektur ist das beim Atmel nicht möglich. Code
wird ausschließlich aus dem Flash ausgeführt.
Für Dein Vorhaben bliebe noch ein Bytecode-Interpreter.

Überleg mal: Angenommen, Du würdest wirklich ein ganzes Jahr täglich 3x
neu programmieren, dann hält der Atmel das aus. Meistens geht sogar noch
mehr. Ich kann mir nicht vorstellen, daß Du das schaffst. Und wenn er
wirklich kaputt geht, dann kosten die Dinger ja wirklich nicht viel.

von Sebastian Blatt (Gast)


Lesenswert?

Da hast Du schon recht. Kann man denn ein ausgebranntes Flash Memory
irgendwie detektieren? Wenn ich das mache, müsste ich wenigstens
irgendeine LED aufleuchten lassen, die den Leuten sagt: "Bitte
Prozessor austauschen!"

von ...HanneS... (Gast)


Lesenswert?

Das wird dir der Programmer schon melden, wenn er ein defektes Flash
programmieren soll. Dann gibt es Verify-Error.

...

von Rufus T. Firefly (Gast)


Lesenswert?

Es gibt von Atmel eine AVR-Variante, bei der Code im RAM läuft (auf das
allerdings keine normalen RAM-Zugriffe möglich sind).

Diese Prozessoren werden äquivalent zur EzUSB-Serie von Cypress über
USB oder aus einem seriellen EEPROM mit ihrem Code befüllt und nutzen
dann ihr internes RAM als ROM-Ersatz.

Von der fehlenden Abnutzung dieser Variante abgesehen gibt es eine doch
deutlich höhere Geschwindigkeit (bis zu 48 MHz Takt) als kostenlosen
Nebeneffekt.

Ich rede vom AT76C712/713
http://www.atmel.com/dyn/products/product_card.asp?part_id=3579
http://www.atmel.com/dyn/products/product_card.asp?part_id=3556

Der ist aber so neu, daß den vermutlich noch kein Händler im Programm
führt.

von peter dannegger (Gast)


Lesenswert?

"Aufgrund der Harvard-Architektur ist das beim Atmel nicht möglich.
Code
wird ausschließlich aus dem Flash ausgeführt."


Das ist völlig falsch !


Die Atmel 8051 und die Atmel ARM können sehr wohl Code aus dem SRAM
ausführen, die ARM sogar aus dem internen.

Nur die Atmel AVRs mit internem Flash können das nicht.


Man sollte also schon zwischen einem Hersteller und seinen
Produktfamilien unterscheiden können.


Peter

von Sebastian Blatt (Gast)


Lesenswert?

Danke für die vielen Antworten. Ich werde mir auf jeden Fall
Alternativen zum Atmel AVR anschauen. Diese neuen AT76 sehen gut aus,
hab ich aber leider auch nirgendwo zum Kaufen gefunden.

Danke, Sebastian

von Josef Zimmermann (Gast)


Lesenswert?

Hallo Peter

wenn eine saubere Harvard-Architektur vorliegt, dürfte es wirklich
nicht funktionieren, Programmcode direkt im Daten-RAM auszuführen. Und
das ist beim AVR der Fall.

Grüsse Josef

von A.K. (Gast)


Lesenswert?

@Rufus: Diverse Maschinen aus den 60-ern und 70-ern besassen einen
derartigen Befehl. Darunter auch TI 990/9900 (z.B. im TI99/4A). Leider
habe ich nie ein Beispiel dazu gesehen - es muss ja irgendwas gegeben
haben wozu das nützlich ist.

von Kupfer Michi (Gast)


Lesenswert?

Bei IBM /370 Maschinen gabs den EXEC Befehl. Damit konnte man zwar nicht
den Opcode verändern aber zumindestens die Register oder Optionflags
eines im Program hinterlegten Befehls dynamisch zur Laufzeit verändern.
Man glaubt garnicht zu was man sowas missbrauchen konnte... (allerdings
erst nachdem man mit Assembler gelernt hatte 3 mal um die Ecke zu
denken)

von thkais (Gast)


Lesenswert?

@Peter: Du hast natürlich Recht.
Es ist nur so, daß ich "Atmel" grundsätzlich mit der AVR-Serie
assoziiere - mein Fehler.

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.