Forum: Mikrocontroller und Digitale Elektronik Data-Memorie is voll - In den Program-Memorie verschiebbar?!


von Matze N. (hupe123)


Lesenswert?

Hi,

ich habe eben mein Projekt fertig stellen wollen und bin nun über meinen 
Compiler erschrocken - oder über den Quellcode. Jenachdem...
Aber sieh selbst:
1
Creating Symbol Table: main.sym
2
avr-nm -n main.elf > main.sym
3
4
Size after:
5
AVR Memory Usage
6
----------------
7
Device: atmega128
8
9
Program:   27964 bytes (21.3% Full)
10
(.text + .data + .bootloader)
11
12
Data:       4254 bytes (103.9% Full)
13
(.data + .bss + .noinit)
14
15
16
17
-------- end --------
18
19
20
> Process Exit Code: 0
21
> Time Taken: 00:03
Ich habe sehr viel vorgefertigten Text, den ich auf eine SD Karte bei 
bedarf schreiben muss.
Kann ich den irgendwie im Programmspeicher abspeichern lassen?
Ich kenne mich mit sowas noch überhaupt nicht aus.
Kann mir jemand nen Tipp geben, wie ich das dennoch auf meine ATmega128 
bringen kann?

Danke

von Michael H. (michael_h45)


Lesenswert?


von gggg (Gast)


Lesenswert?

texte und konstanten am besten in den FLASH legen


beim lesen muss beachtet werden diesen vorher erst wieder von dort zu 
holen ..

von Mario G. (mario)


Lesenswert?

1
printf_P(PSTR("Text im Flash! Variablen gehen auch: %d"), value);

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Variablen im Flash gehen auch? Dann ist das Flash aber bald hinüber...

Oder sollte dein Text lauten:
1
  printf_P(PSTR("Text im Flash! printf-Argumente gehen auch: %d"), value);

von Mario G. (mario)


Lesenswert?

Ja natürlich, sorry :)
Aber es funktioniert prächtig. Ich habe dadurch meinen RAM-Verbrauch von 
70 auf 17% senken können (viele Debug-Ausschriften...)

von Vlad T. (vlad_tepesch)


Lesenswert?

Lothar Miller schrieb:
> printf_P(PSTR("

die variante mit dem großen P ist normalerweise ein Makro, dass das PSTR 
selbst macht.

also entweder printf_P("text") oder printf_p(PSTR("text"))

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.