Ist es möglich den internen EEPROM oder einen externen EEPROM oder gar eine SD-Karte als FLASH-Erweiterung zu benutzen um dort Programmcode abzulegen in der Art einer DLL- oder SO-Datei? Beispielsweise um dort Funktionen für LCD und ähnliches abzulegen die dynamisch in den Arbeitsspeicher geladen werden um sie nutzen zu können. Mir ist durchaus bewusst dass das eine ziemliche Frickelei sein muss, allein schon wegen der Sprungadressen und dergleichen.
ATMEGA8 PS: das hier habe ich gelesen Beitrag "Atmega8 Programm in Hex, aus EEPROM ausführen" hex will ich nicht, wenn dann schon fertig binäres... klar
den unterschied zwischen hex und bin würd ich mir nochmal durch den Kopf gehen lassen. Was steht denn in einer Hex Datei die du auf den AVR packen willst?
... ... schrieb: > ATMEGA8 > > PS: das hier habe ich gelesen Beitrag "Atmega8 Programm in Hex, aus EEPROM ausführen" > > hex will ich nicht, wenn dann schon fertig binäres... klar Dann hast du sicher auch das hier gelesen: Michael U. schrieb: > einfache Antwort: geht nicht. Die AVR können Programmcode nur aus dem > Flash ausführen.
Oh bitte, ich bin doch nicht blöd. Natürlich kenne ich den Unterschied zwischen einer HEX-Datei und einer BIN-Datei. Das wird in dem von mir erwähnten Thread sogar noch erwähnt. Das musste ja jetzt wohl nicht sein. Ich verwende hier zum "spielen" einen Display (SDA5708) aus einer alten D-BOX. Die Tabelle mit dem Zeichenstz (Zeichen 0x20 - 0x7F = 5 x 16 x 6 = 480 Byte) könnte ich im EEPROM ablegen. Das ist aber nicht wirklich Programmcode. Soetwas im EEPROM ablegen kann jeder, das ist kein Kunststück. Mir geht es dann um funktionen wie lcd_put oder dergleichen. Man kann mich jetzt auch absichtlich falsch verstehen um mich als ... genau. mach mich zum TROLL und fütter mich. Und jetzt bitte wieder ernsthaft!
Stefan Noack schrieb: > Dann hast du sicher auch das hier gelesen: > > Michael U. schrieb: >> einfache Antwort: geht nicht. Die AVR können Programmcode nur aus dem >> Flash ausführen. Natürlich habe ich das gelesen. Ich will den Programmcode auch nicht aus dem EEPROM ausführen sondern aus dem FLASH und den zuvor aus dem EEPROM in den FLASH kopieren... an eine freie Stelle im FLASH. Habe ich mich wirklich so ungeschickt ausgedrückt??? FLASH ist nicht Arbeitsspeicher, Ich weiss... ja ...
... ... schrieb: > Stefan Noack schrieb: >> Dann hast du sicher auch das hier gelesen: >> >> Michael U. schrieb: >>> einfache Antwort: geht nicht. Die AVR können Programmcode nur aus dem >>> Flash ausführen. > > Natürlich habe ich das gelesen. Ich will den Programmcode auch nicht aus > dem EEPROM ausführen sondern aus dem FLASH und den zuvor aus dem EEPROM > in den FLASH kopieren... an eine freie Stelle im FLASH. > > Habe ich mich wirklich so ungeschickt ausgedrückt??? > > FLASH ist nicht Arbeitsspeicher, Ich weiss... ja ... das kann schon irgendwie, lass dir da nichts einreden. ich bin nicht so sehr in die architektur der avrs vertraut, möglicherweise kannst du den code aus dem eeprom in den ram kopieren und direkt aus dem ram ausführen. das macht dann auch mehr sinn. oder per sd karte - es gibt genug bootloader im netz. diese können auch den internen flash beschreiben und danach ausführen. was du also machen kannst ist einen dieser bootloader zu modifizieren, je nach state können also andere .bin dateien in den internen flash geladen und ausgeführt werden. die aktuelle state könntest du bspw. am ende des internen srams schreiben damit dieser nach dem watchdog reset nicht verloren geht.
Wenn du immer wieder in den Flash schreibst, was soll das werden, ein selbstgebasteltes Gerät was nach industriellem Vorbild ein Maximalhaltbarkeitsdatum hat?
> das kann schon irgendwie, lass dir da nichts einreden. [...] > ich bin nicht so sehr in die architektur der avrs vertraut Eben. Also mach ihm auch keine Hoffnung. > möglicherweise kannst du den code aus dem eeprom in den ram kopieren und > direkt aus dem ram ausführen. Nein, das geht nicht, da beim AVR Datenspeicher und Programmspeicher (Flash) über getrennte Busse angesteuert werden und damit auch getrennte Adressbereiche haben. Es ist schlicht nicht möglich, in das SRAM zu springen und dort Code auszuführen. Siehe auch: http://de.wikipedia.org/wiki/Harvard-Architektur > oder per sd karte - es gibt genug bootloader im netz. diese können auch > den internen flash beschreiben und danach ausführen. > was du also machen kannst ist einen dieser bootloader zu modifizieren, > je nach state können also andere .bin dateien in den internen flash > geladen und ausgeführt werden. Das ist theoretisch möglich, auch wenn nicht alle AVRs den Schreibzugriff auf das Flash vom Programm aus erlauben. Aber was "nomatrix" machen möchte und was ein Bootloader tut, sind zwei völlig verschiedene Paar Schuhe. Den Flash zu löschen und neu zu schreiben dauert vergleichsweise sehr lange. Die Schreibzyklen sind begrenzt, das heißt das Flash verschleißt beim Schreiben und erzeugt irgendwann Bitfehler. Die Prozedur ist zudem recht kompliziert, bitte lies den entsprechenden Abschnitt im Datenblatt. Bei Firmware-Updates, die sehr selten mal vorkommen, sind diese Nachteile akzeptabel. Zur Laufzeit des Programms allerdings ständig benötigte Code-Teile zwischen Flash und einem externen Speicher hin- und herzukopieren, ist Schwachsinn und führt zu einer langsamen Programmausführung und dem baldigen Ableben des Flashs. Wenn dein Flash zu klein ist, schreib effizienteren Code, oder wechsele zum nächsthöheren Modell mit mehr Flash. Das EEPROM als dritte Art von Speicher ist übrigens nicht ohne Grund in die meisten AVRs eingebaut: Atmel hat durchaus die Notwendigkeit erkannt, einige wenige Variablen nicht-flüchtig zu speichern, zum Beispiel die Konfiguration eines Gerätes, und hält den Flash-Speicher dafür anscheinend selbst nicht geeignet. Für dein Problem (was ist das genau?) gibt es mit Sicherheit eine bessere Lösung.
Was man extern speichern kann, sind Konstanten und Tabellen mit Zeichensätzen oder Grafiken. Da man diese dann nicht im internen Flash ablegen muss, hat man mehr Platz für das Programm. Ansonsten würde ich diesen Tipp beherzigen: Oliver Döring schrieb: > Wenn dein Flash zu klein ist, schreib effizienteren Code, oder wechsele > zum nächsthöheren Modell mit mehr Flash.
Dazu kommt, dass dieser Mechanismus einigen Einschränkungen unterliegt. Du kannst den Flash nur aus dem Bootsektorbereich heraus beschreiben. Und ich gebe auch noch zu bedenken: So ein Mechanismus mit dynamischen Nachladen ist nicht trivial. Auch der benötigt Code. Und aus dem Bauch heraus würde ich mal sagen: Der Mechanismus alleine braucht mindestens so viel Code, wie du für LCD Routinen, UART Routinen und noch 2 bis 3 typische AVR-Module zusammen verbrutzeln wirst. Du treibst also den Teufel mit dem Belzebub aus.
Ich benutze unter anderem einen ATMEGA1284 für Webserver mit diversen Schalt- und Anzeigemöglichkeiten. Nur habe ich da mittlerweile soviel Krims-Krams draufgepackt dass da gelegentlich den Speicherplatz überschreiten würde und ich irgendwelche Bestandteile ausbauen muss. Ein kleines ITX-Mainboard wäre wohl nicht verkehrt. Nein nein. Einmal darüber schlafen brachte mich auf die Idee die Funktionen für die SD-Karte auf einen weiteren kleineren Prozessor zu packen der nur für dieses Gerät zuständig ist. Die Menge an Code für die SD-Karte ja nun nicht gerade gering. Ich werde mich nun damit beschäftigen eine Schaltung anzufertigen die zwischen AVR-NET-IO und dem Add-On gesteckt wird. Eben mit weiterem Prozessor. Mal gucken was das wird. Das dürfte mich eine Weile beschäftigen. Nicht von externem Speicher ausfühen können ist echt Mist.
Es geht doch, allerdings braucht man dazu eine Art 'Interpreter' ,der logischerweise im Flash residiert. Habs neulich mal auf AVRFreaks gelesen und als Spässchen abgetan, denn im Prinzip isses ja Quatsch bei dem im Vergleich zum Flash winzigen Speicherplatz. Aber wers braucht :P Bin bloss zu faul, den Thread rauszusuchen.
... ... schrieb: > Nicht von externem Speicher ausfühen können ist echt Mist. Dann hast Du schlichtweg die falsche Prozessorarchitektur gewählt. Dein Fehler! ARM und MIPS (PIC32 z.B.) können das. fchk
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.