Hallo Gibt es eine Möglichkeit den Programmcode, der sonst in den Flash des AVR geschrieben wird, auszulagern in ein EEprom oder externes Flash. So das er zur Laufzeit den Code von da holt? Ich würde dafür einen Meg16 nehmen wollen und den externen Speicher mit dem i2c ansteuern. Der Speicher müsste > 128kb haben. Gruss Frank
Geht mit dem AVR nicht, es sei denn, Du würdest quasi einen Interpreter aus seinem Flash ausführen, der Dein EEPROM-Code interpretiert -> aufwändig, langsam. Der AVR kann auch seinen eigenen Flash beschreiben, da könnte man häppchenweise immer den nötigen Code aus'm EEPROM ins Flash kopieren. Genauso belämmert, zumal der Flash nicht beliebig oft beschreibbar ist. Bleibt Dir fast nix anders übrig, als Dich mi nem µC anzufreunden, der Deinen vorstellungen näher kommt und Code aus externem Speicher ausführen kann oder besser genug Flash intus hat. >128KB Programmspeicher (ATmega128 hat 128KB Flash) mußte erstmal gefüllt kriegen!! Wenn der wegen Grafiken oder ähnlichen Daten so vollgestopft wird: Die lassen sich natürlich ganz gut auslagern.
Nein. Einzige Alternative: Einen Interpreter schreiben, der dann die Programmcodes im externen Speicher interpretiert. Oder einen anderen Prozessortyp verwenden (z.B. MCS-51).
>>Der Speicher müsste > 128kb haben.
ATMEGA 2561 ? Der hätte 256kb flash und 8kb ram und gibt's auch schon
bei csd-electronics.de
eigentlich sind die "Nein" ja richtig, aber "von hinten durch die Brust ins Knie geschossen" könnte man doch einen bootloader schreiben der auf neue Daten im externen Flash konntrolliert und gegebenenfalls den AVR neu programmiert. Obs Sinn macht sei dahingestellt, aber vielleicht wäre es ein work around. @Frank: was ist die Idee hinter der Fragestellung? grüße leo9
Danke für die Antworten aber der Atmega sollte schon in DIP Formbleiben. Für mich als Anfänger besser zu verarbeiten. Geht es das man z.B. Text der auf einem LCD erscheinen soll auslagert. Der scheint ja auch viel Flash in Anspruch zu nehmen? Frank
"Geht es das man z.B. Text der auf einem LCD erscheinen soll auslagert." Kein Problem.
Aber ich versteh das noch nicht ganz. Du bist Anfänger und schon an der 32k-Grenze des AtMega32? Puh, ich glaub das größte, was ich bisher geschafft hab, liegt derzeit so bei 15k...
Hallo Das liegt daran das ich ein relativ grosses Menü habe mit vielen LCD Textanzeigen. Ausserdem ist mein Code wohl noch nicht so effektiv das er sich noch sehr aufbläht. Ich kann nur DIP AVR verarbeiten. Alle anderen AVR laßt meine "Lötkünste" noch nicht zu. Frank
> Hallo > Das liegt daran das ich ein relativ grosses Menü habe mit vielen > LCD Textanzeigen. Um einen signifikanten Teil von 32k vollzubekommen, ist aber auch schon eine ziemlich große Menge Text nötig. Wieviele Tausend Menüeinträge hast du denn? Generell kannst du aber durchaus Daten auch aus dem EEPROM (welches aber normalerweise verhältnismäßg klein ist) oder externem Speicher holen. Nur Programmcode kann von dort nicht ausgeführt werden. > Ausserdem ist mein Code wohl noch nicht so effektiv das > er sich noch sehr aufbläht. Ich kann nur DIP AVR verarbeiten. > Alle anderen AVR laßt meine "Lötkünste" noch nicht zu. Es gibt auch Module mit größeren AVRs, die man auf eine normale Lochrasterplatine stecken kann.
Na ja es sind so 15 Menüpunkte, aber es ist noch der soft i2c und eine DCF integriert und halt noch anderer Funktioncode.Und es fallen mir noch mehrere Sachen ein die mit rein könnten. So habe ich dann schon die 32Kb des Meg32 ausgenutzt. Wie ist den das Meg128 Modul zu flashen? Auch über den ISp? Kann ich dann auch meinen ISP (den ich hier aus den Shop habe und für den Meg32 nehme) für den Meg128 nehmen?
Also ich bezweifle das du mit den 15 Menüpunkten und allem anderen 32k voll bekommen hast. Wo hast du denn die 32kbyte her ? Sagt das der programmer oder hast du evtl geguckt wie groß die main.c/main.asm/main.hex ist ? Bye, Simon
Sonst versuch doch mal, die Optimierung beim Compiler einzuschalten... der dampft das ganze meist auch noch um nen guten Faktor ein.
15 Menüpunkte in 32kB, das sind ja 2000 Zeichen pro Menüpunkt, wer soll das denn alles lesen ? Peter
Hatte mal ein Menü auf einem Mega128 implementiert (per Comandline) und dazu noch so ziemlich jede verfügbare Hardware genutzt --> 1,7k !! Glaub irgendetwas läuft da schief bei dir...
Ich habe mir die Grösse der main angeguckt. Die hat 31kb . Wie gesagt da ist noch ne DCF und I2c Steuerung, Drehgeber auslesen u.s.w.! Ich denke manches ist nicht optimal programmiert. Dakönnte man auch noch Platz einsparen.
Öhhh, dir ist aber schon klar, dass du das Programm noch kompilieren musst? Da schrumpfen 31kB ASCII-Text (wohl inkl. Kommentaren und allem drum rum) schnell mal auf 2-3kB reinen HEX-Code runter.
@Frank: Die HEX-Datei ist mind. um den Faktor 2 größer als der Platzbedarf Deines Programms im uC. Was sagt denn avrdude beim Flashen?
Ne ich habe nur die Dateien eingebunden die sein müssen. Notepad sagt 31KB und wenn ich mir die Hex im Verzeichniss ansehe ist die 32 KB? Ist sie nun so gross oder nicht? wie kann man das rauskriegen?
Hexx ist immer mindestens doppelt so groß, wie dei reine Flash-Datei später, also hast Du jetzt gerade mal so um die 13k!!!
Also kann man nirgends auslesen wie gross die Hex nun wirklich ist also wieviel Platz man noch hat????
@Frank: Wenn Du avrdude zum Flashen benutzt, erzählt er Dir, wie viele Bytes er geflasht hat.
Außerdem kannst du die Hex-Datei in einem Editor öffnen und in den ersten Spalten sollte die Speicheradresse der jeweiligen Zeile stehen. In Hex - versteht sich ;-) Die Adresse der letzten Zeile + die Bytes der letzten Zeile ergeben dann deine Größe. Siehe auch: http://www.schulz-koengen.de/biblio/intelhex.htm
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.