Forum: Compiler & IDEs Daten im Flash (PROGMEM etc. )


von P. M. (beginner)


Lesenswert?

Hallo miteinander,

nachdem ich bei meinen Recherchen in diesem Forum auf das "Problem" mit 
der speziellen Behandlung von Daten im Flash ( um nicht zuviel RAM 
benutzen zu müssen ) gestossen bin, möchte ich meine spezielle Frage in 
den Raum werfen.

Ich möchte mit einem ATmega128 und einem LCD incl. Tastatur eine kleine 
Bedieneinheit entwickeln.
Ich habe dazu eine kommerzielle Grafik-Library zur Verfügung. Diese 
Bibliothek kann auch Fonts einbinden. Fuer diese Fontdaten müsste ich 
wohl mit der bekannten Vorgehensweise ( PROGMEM ) dafuer sorgen, dass 
diese im Flash abgelegt werden, weil die 4k wohl nicht ausreichen 
würden.

Jetzt wollte ich aber ungern in der LIB etwas ändern ( alle Tabellen, 
Zugriffe auf Daten etc. )

Meine Frage: Ist ein AVR oder speziell der ATmega128 dann überhaupt noch 
die richtige Wahl, oder geht das Alles doch einfacher??

von Oliver (Gast)


Lesenswert?

Ganz einfach: Wenn deine "kommerzielle Grafik-Library" nicht in der Lage 
ist, die Fonts und sonstige Grafikelemente ins Flash zu packen, passt 
sie nicht zum Mega128. Dann brauchst du entweder eine andere lib, oder 
einen anderen Prozessor, je nachdem, was für dich einfacher zu handeln 
ist.

Wobei ich mich schon frage, was das für eine lib ist, die zwar 
prinzipiell auf einen Mega angepasst ist, daber trotzdem darauf gar 
nicht richtig funktionieren kann.

Oliver

von P. M. (beginner)


Lesenswert?

Hallo,

die LIB ist fuer alle denkbaren Controller geschrieben worden und 
(Zitat)
"For use with embedded processors" konzipiert.
Nur eben das spezielle "Problem", wie die statischen Daten abgelegt 
werden müssen berücksichtigt sie nicht. Mit ausreichend RAM wäre das 
sicher kein Problem.

Deswegen frage ich mich, ob der AVR der Richtige ist. Oder ist die 
Verwendung von externem RAM eine mögliche Lösung?
Den Prozessor zu wechseln ist prinzipiell auch kein Problem, wenn ich 
mir damit weniger Probleme aufhalse.

von Oliver (Gast)


Lesenswert?

Das ist doch ganz einfach: Ein 96-Zeichen-Font in 12*8 Punkt belegt ca. 
1kB Speicher. Einer in 8*5 mit 40 Zeichen weniger. Wenns mal große 
Buchstaben werden sollen (48 Punkt sind für eine zweistellige Anzeige 
auf einem 128*64 Display gerade richtig), sind alleine für die Ziffern 
0-9 schon 2kB weg. Icons brauchen Länge mal Breite, usw.

Rechne dir selber aus, ob du alles, was du benötigst, neben Stack und 
sonstigen Variablen in deine 4kB reinbekommst. Wenn du nur eine Font, 
keine Icons, ect. benötigst, mag das funktionieren, aber dann brauchst 
du eigentlich die lib nicht.

Also entweder eine andere lib, oder einen Prozessor mit größerem oder 
externem Ram.

Oliver

von P. M. (beginner)


Lesenswert?

Hallo Oliver,

danke fuer die (moralische) Unterstützung. Ich werde pro Font wohl auch 
mehrere Spachvarianten anbieten müssen. Die 4k Grenze ist damit weit 
überschritten.
Bin bereits auf der Suche nach einem geeigneterem Prozessor. Wollte mich 
hier nur noch vergewissern, dass ich nicht total daneben liege und 
Probleme sehe, wo keine sind.

Patrick

von P. M. (beginner)


Lesenswert?

Ergänzung zu diesem Thema.

Ich musste mich zwangsläufig weiter mit diesem Thema beschäftigen, weil
ich eine zugekaufte Bibliothek einsetzen möchte, um möglichst einfach,
möglichst viele Fonts ( Sprachvarianten ) nutzen zu können.

Mit AVR-GCC ist da nur umständlich voran zu kommen. So gut die Tools 
auch sind, da stoßen sie an die Grenzen.

Mit kommerziellen Compilern/Linkern ( habe IAR und ImageCraft probiert )
ist das Thema der const Daten im FlashRAM sehr einfach zu handeln.


Gruß
PM

von Hmm... (Gast)


Lesenswert?

Wie möchte die Lib den die Daten haben? Wenn du zur Laufzeit einfach 
über einen Zeiger neue Daten zuliefern kannst, wäre es vielleicht eine 
Idee die Daten alle ins Flash zu packen und nur die gerade verwendeten 
"Häppchen" ins RAM zu laden.

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.