Forum: Mikrocontroller und Digitale Elektronik Befehle aus Externem Speicher?


von Ferdinand Stehle (Gast)


Lesenswert?

Hallo;

Ich habe mich gefragt, ob man aus einem extrnem Speicher (E²Prom,Flash)
auch irgendwie mit einem AVR Befehle auslesen kann. Dann könnte man
größere Programme schreiben und diese evtl. auch aus Compact Flash
Karten o.ä. lesen. Oder muss man dann einen Controller ohne internen
Programmspeicher benutzen?

Ich bedanke mich schonmal für jede Antwort!

von DerInder (Gast)


Lesenswert?

Hallo,
AVRs können ausschliesslich Programme im internen Flash ausfühen.

Gruß
-=jens=-

von Khani (Gast)


Lesenswert?

Also ganz ohne weiteres geht es nicht.
Aber folgende Überlegung : µC läuft mit einer Art Betriebssystem. Man
kann jetzt ein Programm auswählen und der µC lädt sich das ins flash.
Dann kann er es auch ausführen - habe ich schon mal im Internet gesehen
- weiß aber nicht mehr wo. Sorry.

MfG, Khani

von Dirk (Gast)


Lesenswert?

Hi,

das Zauberwort was Khani meinte heisst: Bootloader.

Mfg
Dirk

von Khani (Gast)


Lesenswert?

Sorry Dirk,

ich meinte so eine Art erweiterten BootLoader, welcher auch mit der FAT
auf einem Medium umgehen kann, bzw. wie ein richtiges Betriebssystem
Programme laden und starten kann. Wenn dann nämlich ein Programm fertig
ist, dann könnte man ja ein anderes laden und das starten. Kann das der
Bootloader ? Wenn man so ein Betriebssystem als Bootloader aufbauen
kann, dann nehme ich alles zurück ;-).

MfG, Khani

von womisa (Gast)


Lesenswert?

Hallo zusammen,

ich habe da so eine "wahnsinnige IDEE". Mehr als Spielerei gedacht.
Man implementiert auf dem AVR einen JAVA Interpreter so eine Art JME
und holt die "DATEN bzw. das zu interpretierende Programm über eine
ser. Schnittstelle vom PC.
Eine Implementierung einer JVM (java virtuelle machine) alleine auf dem
AVR scheitert an den resourcen (1MB Flash 1MB RAM).
Man könnte dann den AVR leicht programmieren und hat super,kostenlose
Entwicklungsumgebungen.
Ziel ist die einfache Anbindung von Hardware zur Datenerfassung.

Etwa so wie das "TINI" von Dallas, jedoch läuft dort alles auf eine
8051.
Falls von Interesse DSC80C400 bzw DSTINIm400 mit DSTINIs400.
Kennt sich jemand mit diesen "Dingern" aus.
Board mit Internetanschluß und ser Schnittstellen ca. 100$

Bitte nicht schimpfen, was haltet Ihr davon?

MfG
Achim

von Stefan (Gast)


Lesenswert?

Wenn es Dir nur darum geht, den Speicher zu erweitern (also z.B. keinen
mobilen Speicher, Flashcard etc.) dann würde ich vorschlagen, den
"echten" Programmcode von den konstanten Daten (Strings, Graphiken
etc.) zu trennen. Die konstanten Daten kannst Du dann im externen
Speicher halten und bei Bedarf ins RAM kopieren.
Um mit reinem Programmcode das Flash vollzukriegen, musst Du wohl
ziemlich viel programmieren. Meistens machen Daten einen Großteil des
"Codes" aus (Texte, Menues ...).

Externen Code im AVR auszuführen ist dagegen immer mit Programmieren
des internen Flash verbunden.

Stefan

von Markus Kaufmann (Gast)


Lesenswert?

@Ferdinand:
Warum muß es unbedingt ein AVR sein? Es gibt so viele Prozessorfamilien
und die AVRs sind für diese Art der Aufgabe eher ungeeignet. Daß die
AVRs internen Speicher haben hat mit dem Problem nicht direkt zu tun;
es liegt daran, daß die AVRs Daten- und Codebus getrennt haben
(Havard-Architektur) und der Codebus nicht nach außen geführt ist.

@Khani:
Das funktioniert im Prinzip schon so, die Frage ist, ob man die
FAT-Unterstützung in den Bootloader bringt. Außerdem: Warum sollte man
einen für die Aufgabe völlig ungeeigneten Microcontroller benutzen und
dann von hinten durch die Brust ins Auge ?

@Achim:
Auf einem AVR würde man ja auch nicht eine volle JVM sondern eher eine
KVM implementieren. Laut
http://developers.sun.com/techtopics/mobility/midp/articles/api/ ist
der Speicherbedarf dort bei 40-80KB, was für einen Mega128 durchaus
machbar wäre.

@Stefan:
Wenn man die Definition von Code nicht so eng sieht, dann kann man bei
den AVRs schon Code im RAM ausführen, z.B. den erwähnten Javabytecode
oder auch Code für einen Basicinterpreter. Aber natürlich keinen
Maschinencode (außer man interpretiert auch den).

Markus

von Sascha Biedermann (Gast)


Lesenswert?

Hallo!

Also hier http://www.cinetix.de/avise/ findet man eine art
Forth-Interpreter, der mit nem AVR aufgebaut ist. Das Programm im
AVR-Flash führt dann ein in einem ext. EEPROM als ASCII-Text
gespeichertes Programm aus.

von Ferdinand Stehle (Gast)


Lesenswert?

Also, ich habe diese Sache mit dem Bootloader nicht verstanden...der
soll dann Assempler Befehle in den Flash laden und dann ausführen?


Und da währe ja nioch diese Idee mit dem Java Programm...das wäre dann
aber doch auch ziemlich langsam...der würde dann doch die Java Befehle
aus einem externem Speicher laden, dann interpretieren und dann
ausführen. Also auch viele Asm-Befehle hintereinander?

von Markus Kaufmann (Gast)


Lesenswert?

@Ferdinand:
Genau. Der Bootloader ist bei den AVRs die einzige Möglichkeit, wie ein
Programm den Flashspeicher ändern kann. Nach dem Einschalten (oder
einem Reset) wird der Bootloader gestartet (wenn es einen gibt) und der
entscheidet dann, ob das Flash programmiert werden soll. Das normale
Programm kann das Flash nicht verändern, damit bei einem Absturz das
Programm sich nicht versehentlich selbst überschreibt.

Java und Basicinterpreter sind auf jeden fall relativ langsam (im
vergleich zu reinem Maschinencode), aber bei vielen Anwendungen stört
dies auch nicht. Es gibt eben keine einzelne Lösung die für Probleme
geeignet ist.

Markus

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.