Ich hätt da mal wieder ein Problem. Ein Programm dass eigentlich schon funktioniert hat bringt jetzt beim compilieren einen Memory Fehler. Data Memory Usage war plötzlich bei 500%. Nach Löschen von drei von vier Fonts bin ich jetzt bei 130%. Wieso brauchen die Fonts jetzt auf einmal so viel Speicherplatz? Das einzige was ich an dem Programm geändert habe ist "prog_uchar" durch "unsigned char" zu ersetzen. Werden die Fonts durch die Änderung in den falschen Speicher geladen? Aber das hat ja auch schon mal funktioniert.
Das musst du in deinem Lua-Compiler richtig einstellen! Eventuell wird der Font in zwei verschiedenen Funktionen verwendet und deshalb nimmt er den doppelten Platz weg!
Matthias schrieb: > Werden die Fonts > durch die Änderung in den falschen Speicher geladen? Vermutlich ja. Da du uns aber viele Details vorenthältst können wir das nicht wirklich beurteilen.
Matthias schrieb: > Das einzige was ich an dem Programm geändert habe > ist "prog_uchar" durch "unsigned char" zu ersetzen. Damit wandern die vom Flash in den RAM. Bei ARM könnte "const unsigned char" helfen, bei AVR reicht das eventuell nicht (Stichworte: Pointer und Havard Architektur).
Matthias schrieb: > Das einzige was ich an dem Programm geändert habe > ist "prog_uchar" durch "unsigned char" zu ersetzen. Was hindert dich daran, das wieder zurückzuändern? Oliver
Matthias schrieb: > Das einzige was ich an dem Programm geändert habe > ist "prog_uchar" durch "unsigned char" zu ersetzen. Mach das wieder rückgängig. Hinter dem Typ prog_uchar verbirgt sich bestimmt PROGMEM, was den Compiler veranlasst, die Fonts lediglich im Flash vorzuhalten. Deine Änderung bringt den Compiler dazu, die Fonts zur Laufzeit im viel zu kleinen RAM anzulegen. Peng!
Habs gelöst. Rückgängig machen geht nicht da es den Befehl "prog_uchar" anscheinend in neueren Compilern nicht mehr gibt. (Fehlermeldung: kein zulässiger Name). Ersetzt werden muss er durch "const unsigned char _attribute_ ((progmem))". Dann funzt es. peng!!
Matthias schrieb: > Ersetzt werden muss er durch "const unsigned char attribute ((progmem))". Das hätte ich dir gleich sagen können, wenn ich gewußt hätte, um welchen Compiler es geht. :-(
Matthias schrieb: > Rückgängig machen geht nicht da es den Befehl "prog_uchar" > anscheinend in neueren Compilern nicht mehr gibt. Nö, das hat nichts mit dem Compiler zu tun. Du hast einfach nur im Code das
1 | #include <avr/pgmspace.h> |
gelöscht.
> Du hast einfach nur im Code das > #include <avr/pgmspace.h>gelöscht. Muß nicht sein. Wahrscheinlich hat er nur eine neuere avr-libc installiert, und nicht (nur) einen neuen Compiler. http://nongnu.org/avr-libc/user-manual/group__avr__pgmspace.html
1 | prog_uchar |
2 | |
3 | Note |
4 | DEPRECATED |
5 | This typedef is now deprecated because the usage of the __progmem__ attribute |
6 | on a type is not supported in GCC. However, the use of the __progmem__ attribute |
7 | on a variable declaration is supported, and this is now the recommended usage. |
8 | |
9 | The typedef is only visible if the macro __PROG_TYPES_COMPAT__ has been defined |
10 | before including <avr/pgmspace.h> (either by a #define directive, or by a |
11 | -D compiler option.) |
Oliver S. schrieb: > Matthias schrieb: >> Das einzige was ich an dem Programm geändert habe >> ist "prog_uchar" durch "unsigned char" zu ersetzen. > > Was hindert dich daran, das wieder zurückzuändern? avr-gcc behandelt progmem als Variablen-Attribut, nicht als Typ-Attribut. avr-gcc gibt nur deshalb keinen Fehler für progmem in Typen aus, weil das anno dulles mal (zufälligerweise) funktionierte und von der avr-libc per typedef unters Volk gebracht wurde.
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.