Plötzlich Memory Overflow

Gast #4623127
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.
Gast #4623136
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!
Moderator Persönliche Seite #4623278
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!
Gast #4623681
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!!
#4624652
> 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.)
Persönliche Seite #4624696
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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 10 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.