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
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
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.
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!"
Das wird dir der Programmer schon melden, wenn er ein defektes Flash programmieren soll. Dann gibt es Verify-Error. ...
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.
"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
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
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
@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.
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)
@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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.