AVR: eval anweisung?

Gast #153961
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
Gast
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
Gast
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.
Gast
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!"
Gast
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.
Gast
"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
Gast
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
Gast
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
Gast
@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.
Gast
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)

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 21 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.