Plötzlich Memory Overflow

Gast #4623127
Lesenswert?
• ▲
▼
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.
Moderator Persönliche Seite #4623278
Lesenswert?
• ▲
▼
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
Lesenswert?
• ▲
▼
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
Lesenswert?
• ▲
▼
> 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
Lesenswert?
• ▲
▼
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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren