Hallo, ich lasse auf einem Atmega324PA eine FFT (Elm Chan) laufen. Aber schon bei der minimalen Zahl an samples (64) ist mein Datenspeicher fast voll. "Device: atmega324pa Program: 8142 bytes (24.8% Full) (.text + .data + .bootloader) Data: 1575 bytes (76.9% Full) (.data + .bss + .noinit)" Kann ich die FFT Daten irgendwo anders ablegen ? Oder ist das shcon im Ansatz zum scheitert verurteilt ? Programmspeicher? EEPROM ? externe Speicher stehen nicht zur Verfügung. Besten Dank Grüße Luchieee
Hallo EEPROM ginge, sind aber auch nur 1024 Bytes. Programmspeicher wäre vermutlich die bessere Alternative, weil du da noch über 20kb hast. Es sei denn dein Programm wird noch deutlich grösser... LG
Aeh. Ja. Ein 644 waer im selben Gehause... mit doppeltem RAM. Ich denke trotzdem sollten mehr Samples moeglich sein. ... diese 64 Samples und FFT Koeffizienten sind Double ? Ich denk es sollte auch mit Integern gehen. Und daher wuerd ich bei 2k RAM mindestens 1kbyte davon fuer nutzbare Zahlen erwarten, das waeren dann bei 16bit Integern, 2 mal 256 Samples.
1,5 KBytes SRAM für eine FFT64 ist ziemlich viel. Bist du sicher, dass es nur 64 Samples sind? Poste doch bitte den Code.
Danke für die schnelle Hilfe: int16_t capture[FFT_N]; /* Wave captureing buffer */ complex_t bfly_buff[FFT_N]; /* FFT buffer */ uint16_t spektrum[FFT_N/2]; /* Spectrum output buffer */ uint8_t i; //Vec Zahler Wie geschrieben ist FFT_N 64, bei 128 hab ich 98,8% Auslastung. Wie richte ich den Programmspeicher ein ? Nur "PROGMEM" an meine arrays hängen?
Fe Li schrieb: > int16_t capture[FFT_N]; /* Wave captureing buffer */ > complex_t bfly_buff[FFT_N]; /* FFT buffer */ > uint16_t spektrum[FFT_N/2]; /* Spectrum output buffer */ 2 Bytes * 64 128 4 Bytes * 64 256 2 Bytes * 32 64 ----- 448 ===== Wofür geht der Rest des Speichers drauf? > Wie geschrieben ist FFT_N 64, > bei 128 hab ich 98,8% Auslastung. > Wie richte ich den Programmspeicher ein ? Nur "PROGMEM" an meine arrays > hängen? Funktioniert nicht, da viel zu langsam im Zugriff und nicht beliebig oft beschreibbar.
Hm... ansonsten sinds fast nur "kleine" hilfsvariablen. char value_str[3]; //LCD Ausgabewert uint8_t capture_norm; //Für Anzeige normiert uint8_t max_capture; Einen Cast vom ADC: capture[i]=((int16_t)ADCH-127); sonst nur 3 char-arrays zum Debuggen.
Davis schrieb: > Wofür geht der Rest des Speichers drauf? Wie find ich den verlorenen Speicher am besten? Kann der durch Header o.Ä. aufgefressen worden sein?
Allenfalls das ASM Listing anschauen. Der Linker sollte wissen was wor hinkommt.
Poste die .map Datei, in ihr ist die Speicherbelegung abgelegt.
Fe Li schrieb: > ich lasse auf einem Atmega324PA eine FFT (Elm Chan) laufen. Aber schon > bei der minimalen Zahl an samples (64) ist mein Datenspeicher fast voll. Atmega1284 - 16K RAM. mfg.
*(.bss*) *(COMMON) COMMON 0x00800106 0x400 Includes/lcd.o 0x00800106 lcd_framebuffer COMMON 0x00800506 0x60 Includes/uart.o 0x00800506 uart_outfifo Ja, Bilder brauchen viel Platz...
hp-freund schrieb: > *(.bss*) > *(COMMON) > COMMON 0x00800106 0x400 Includes/lcd.o > 0x00800106 lcd_framebuffer > COMMON 0x00800506 0x60 Includes/uart.o > 0x00800506 uart_outfifo > > Ja, Bilder brauchen viel Platz... wieviel denn ^^? Ist die erste Hexe die Adresse und die 2. eine Angabe in Byte?
Ok, das erklärt einiges. Werde versuchen das ding ohne Komplikationen rauszuwerfen. Besten Dank für die Hilfe. Lurchieee
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.