Forum: Mikrocontroller und Digitale Elektronik Programm auslagern


von Frank (Gast)


Lesenswert?

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

von beta-frank (Gast)


Lesenswert?

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.

von Thomas K. (thkais)


Lesenswert?

Nein.
Einzige Alternative: Einen Interpreter schreiben, der dann die
Programmcodes im externen Speicher interpretiert.
Oder einen anderen Prozessortyp verwenden (z.B. MCS-51).

von Nik Bamert (Gast)


Lesenswert?

>>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

von leo9 (Gast)


Lesenswert?

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

von Frank (Gast)


Lesenswert?

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

von Andreas (Gast)


Lesenswert?

"Geht es das man z.B. Text der auf einem LCD erscheinen soll
auslagert."


Kein Problem.

von Marcel Pokrandt (Gast)


Lesenswert?

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...

von Frank (Gast)


Lesenswert?

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

von Rolf Magnus (Gast)


Lesenswert?

> 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.

von Frank (Gast)


Lesenswert?

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?

von Ssss S. (sssssss)


Lesenswert?

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

von Marcel Pokrandt (Gast)


Lesenswert?

Sonst versuch doch mal, die Optimierung beim Compiler einzuschalten...
der dampft das ganze meist auch noch um nen guten Faktor ein.

von Peter D. (peda)


Lesenswert?

15 Menüpunkte in 32kB, das sind ja 2000 Zeichen pro Menüpunkt, wer soll
das denn alles lesen ?


Peter

von Anton W. (antonwert)


Lesenswert?

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...

von Frank (Gast)


Lesenswert?

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.

von Marcel Pokrandt (Gast)


Lesenswert?

@Frank:
Die Hex-Datei?

von Frank E. (erdi-soft)


Lesenswert?

Ö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.

von Frank (Gast)


Lesenswert?

die Hex hat nach dem kompilieren 32 kb!!
Frank

von Frank E. (erdi-soft)


Lesenswert?

Hast du evtl. jede verfügbare Bibliothek eingebunden?

von Christian (Gast)


Lesenswert?

@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?

von Winfried (Gast)


Lesenswert?

Das sind dann aber maximal 12-16KB binär. Ist doch Intel-Hex-Format.

von Frank (Gast)


Lesenswert?

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?

von TravelRec. (Gast)


Lesenswert?

Hexx ist immer mindestens doppelt so groß, wie dei reine Flash-Datei
später, also hast Du jetzt gerade mal so um die 13k!!!

von TravelRec. (Gast)


Lesenswert?

Hex mit einem x hätte auch gereicht ;-)

von Frank (Gast)


Lesenswert?

Also kann man nirgends auslesen wie gross die Hex nun wirklich ist also
wieviel Platz man noch hat????

von Christian (Gast)


Lesenswert?

@Frank: Wenn Du avrdude zum Flashen benutzt, erzählt er Dir, wie viele
Bytes er geflasht hat.

von Winfried (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.