Forum: Mikrocontroller und Digitale Elektronik Speicher für statische variablen.


von P. P. (prophet)


Lesenswert?

Moin,

wir schreiben an einem Programm zur ausgabe von musik über einen 
Atmega16 Wir haben das ganze so realisiert das wir unsere musik datei in 
einen c-header umwandeln der ein array enthält in dem alle werte stehen. 
Das programm gibt die werte dann aus. Es kommt aber nur rauschen. Wir 
haben schon alles mögliche ausprobiert aber nicht hilft. Nun wollte ich 
hier mal anfragen ob variablen im ram oder im falsh abgelegt werden? Das 
array hat eine gesamtgröße von ca. 5kb bis 10kb. Kann es sein das der 
compiler es in den ram schreibt und ein großer teil der daten einfach 
ins nirvana verschwindet? Oder wird das array vom compiler mit in den 
flash geschrieben? Damit haben wir nämlich geplant weil sonst der 
speicher nicht ausreicht.

Gruß, Prophet

von Simon K. (simon) Benutzerseite


Lesenswert?

Ähm Variablen sollten im besten Falle variabel sein ;)
Diese Vorraussetzung kann das FLASH nicht (ganz) erfüllen..

Deshalb landen Variablen (sowohl statisch, als auch lokal) im RAM.

Wie groß ist denn das Sound-Array?

von P. P. (prophet)


Lesenswert?

Das array ist ca. 5-10kb groß je nach datei die wir konvertieren. Dafür 
reicht der ram ja niemals... Aber warum gibt der compiler keine warnung 
aus?

Wie kriege ich das ganze denn in den flash speicher? Muss ich dann eine 
riesige listen von ausgaben machen? Aber selbst wenn der kompiler die 
auf eine assamble anweisung optimiert wird dadurch die die benötigte 
größe verdoppelt oder sogar verdreifacht...

EDIT: Bringt es was wenn ich das array als const definiere? Oder wird 
damit nur der pointer konstant? Würde eine const variable in de flash 
geschrieben?

EDIT2: Kann ich dem array vll wie bei EPRom variablen eine modifizierer 
verpassen der den compiler veranlasst es mit in der falsh zu schreiben?

von P. P. (prophet)


Lesenswert?

Ich habe gerade gelesen das man mit PROGMEM eine variable im flash 
ablegen kann. Kann ich das ganze dann so realisieren wenn ich das array 
damit "markiere" und per pgm_read_... darauf zugreife?

von Simon K. (simon) Benutzerseite


Lesenswert?

Sieht so aus als programmierst du da AVRs? Anscheinend unter C:
http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Programmspeicher_.28Flash.29

von Matthias (Gast)


Lesenswert?

hier stehts auch beschrieben (ziemlich am ende)
Beitrag "Versions Nummer wohin speichern?"

von Falk B. (falk)


Lesenswert?

@ P. P.

>wir schreiben an einem Programm zur ausgabe von musik über einen
>Atmega16 Wir haben das ganze so realisiert das wir unsere musik datei in

>array hat eine gesamtgröße von ca. 5kb bis 10kb. Kann es sein das der

>speicher nicht ausreicht.

Mit 5-10kb RAM ist der MEAG16 ein "klein" wenig überfordert. Der 
Compiler müsste da auch meckern.

MFg
Falk

von ajax (Gast)


Lesenswert?

Hallo P.P.

könntest Du den C-Header mit den Musikdaten hier mal posten? Ich 
interessiere mich auch für das Thema und würde gerne versuchen, die 
Noten mit einem anderen Programm auszugegen.

Gruss,
ajax

von P. P. (prophet)


Angehängte Dateien:

Lesenswert?

Hi,

das sind die header. Habe den PROGMEM modifizierer noch nicht eingefügt. 
Werde es wahrscheinlich auch erst irgendwann die nächsten tage testen. 
Dem konvertierer fehlen noch zwei semikola, die musst du selber 
eintragen.

Ich muss dazu aber noch sagen das wir den laautsprechen über einen 
externen DA-Wandler an der atmega16 angeschlossen haben.

>Mit 5-10kb RAM ist der MEAG16 ein "klein" wenig überfordert. Der
>Compiler müsste da auch meckern.

Leider sagt er uns gar nichts zu diesem Problem. Der nimmt das einfach 
hin und gibt uns eine hexdatei.

Gruß, Prophet

von Hannes L. (hannes)


Lesenswert?

> Würde eine const variable in de flash
> geschrieben?

Was ist eine "const variable"???

Vielleicht solltest Du mal den Unterschied zwischen Variable und 
Konstante ergründen.

In einem ähnlichen Projekt lege ich die Sounddaten in den Flash und lese 
sie (timersynchron) mittels LPM aus. Allerdings in ASM.

...

von Christoph H. (Gast)


Lesenswert?

Hallo P.P.

gerade habe ich mir das "sound.zip" File mal angeschaut. Wie sind die 
Daten zu interpretieren? Sind die Daten Abtastwerte, die an den 
AD-Wandler ausgegeben werden, oder sind die Daten als Tonhöhe zu 
interpretieren?

Wenn es Abtastwerte sind, dann wird der Speicher eines Atmega nicht für 
eine Soundausgabe reichen, sondern Ihr braucht einen zusätzlichen 
externen Speicher.

Falls die Daten als Tonhöhe zu interpretieren sind: Welchem Ton 
enspricht der Wert 128,129 usw.

Gruss,
Christoph

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.