www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik AVR: eval anweisung?


Autor: Sebastian Blatt (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Rufus T. Firefly (Gast)
Datum:

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

Autor: Sebastian Blatt (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: thkais (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Sebastian Blatt (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!"

Autor: ...HanneS... (Gast)
Datum:

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

...

Autor: Rufus T. Firefly (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...
http://www.atmel.com/dyn/products/product_card.asp...

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

Autor: peter dannegger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Sebastian Blatt (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Josef Zimmermann (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Kupfer Michi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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)

Autor: thkais (Gast)
Datum:

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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.