Compilerfehler? Speicherproblem? Sobald das Array zu groß wird funktioniert das Programm nicht mehr

Gast #1273176
Lesenswert?

Hallo Zusammen,

ich hab mit GCC eine Programm für einen Atmega64 AU geschrieben.
Sobald ich per Include ein großes Array einbinde mit 350 Double
einträgen, klappt nichts mehr....
Vorab verwende ich schon zwei Array mit je 500 Int Einträgen.

In der Summe als
Array 350 * double
Array 1000 * int

Kann es sein das da irgendwie eine Sperre ist?
Insg. ist das Programm nur
1
avrdude: 16832 bytes of flash written
groß. Hat Atmega hat ja 64kb, sollte eigentlich reichen.
GCC hat hat auch keine Fehler ausgegeben.

Die Array werden 'dynamisch' definiert.
z.B. so für die 350 Double einträge
1
void calculate(void) {
2

3
        //...
4

5
  static double cos[171]; // SIN COS
6
  static double sin[171];
7

8
  cos[0] = 0.08716; // -85
9
  cos[1] = 0.10453; // -84
10
  cos[2] = 0.12187; // -83
11
  cos[3] = 0.13917; // -82
12
  cos[4] = 0.15643; // -81
13
  cos[5] = 0.17365; // -80
14
  cos[6] = 0.19081; // -79
15
        //...
16
}

Gleiches für die Int Array.

Weiß wirklich nicht weiter, akutelle GCC Version hat nichts gebracht,
sobald ich das Double Array (siehe oben) nicht verwende funktioniert
alles besten.

Über Hilfe würde ich mich super freuen.

Vielen Danke & Viele Grüße
Bernd
#1273191
Lesenswert?

Ja dann rechne doch mal nach...

double gibt es afaik in der avr-libc eh nicht, da wird ein normaler 
single precision Float verwendet.

Der Mega64 hat 4KB SRAM.

int array1[1000] -> 1000*16 bits ~ 2 KB

double (float) array2[350] -> 350*32 bits ~ 1.5 KB

zusammen schonmal 3.5 KB verwendeter RAM

ich würde sagen dein RAM läuft einfach über. Schau dir mal in der LibC 
Doku an, wie du das Array ins Flash schieben kannst. Bei ner 
SinusTabelle ist alles andere Quatsch

Benjamin
#1273222
Lesenswert?

@  Bernd (Gast)
1
void calculate(void) {
2

3
        //...
4

5
  static double cos[171]; // SIN COS
6
  static double sin[171];
7

8
  cos[0] = 0.08716; // -85
9
  cos[1] = 0.10453; // -84
10
  cos[2] = 0.12187; // -83
11
  cos[3] = 0.13917; // -82
12
  cos[4] = 0.15643; // -81
13
  cos[5] = 0.17365; // -80
14
  cos[6] = 0.19081; // -79
15
        //...
16
}

 Benjamin Schmidt (demonk) hat das Problem ja schon benannt. Aber schau 
dir mal in einem C-Buch an, wie man konstante Arrays RICHTIG anlegt und 
mit Daten füllt.

MFG
Falk
Gast #1273362
Lesenswert?

Hi,

super vielen Dank, klappt jetzt wieder, apropos Array Deklaration
1
float PitchKurve[171] PROGMEM = {0.08716,0.10453,0.12187,0.13917,0.15643...}

ohne Index super unübersichtlich. Geht das nicht auch besser?
(bis dato nichts gefunden)

Nochmals vielen Dank

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