www.mikrocontroller.net

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


Autor: P. P. (prophet)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: P. P. (prophet)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: P. P. (prophet)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sieht so aus als programmierst du da AVRs? Anscheinend unter C:
http://www.mikrocontroller.net/articles/AVR-GCC-Tu...

Autor: Matthias (Gast)
Datum:

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

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: ajax (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: P. P. (prophet)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht 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.

...

Autor: Christoph H. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.