Forum: Digitale Signalverarbeitung / DSP / Machine Learning Dummy Handle bei for-Schleife mit size 8000


von Daniel X. (ddmw)


Lesenswert?

Hallo zusammen,

ich versuche gerade einen Algorithmus zu programmieren.

Nachfolgend ein Teil der Berechnung:

  int sample_size=8000;
  int dateisize=8000;
  int a[sample_size];
  int y[sample_size];
  /* Initialize the SAM system. */

  memset(a,0,sample_size);
  memset(y,0,sample_size);

  int c = 0;

  int N[dateisize-1]; //double N[dateisize - 1] = {0};
  // N=SUMME_K=1(w(k))  w(k)=(i(k)-i(k-1)+j(k)-j(k-1))
  int N_SUMME = 0;

  for (int i = 1; i < dateisize; i++) { //dateisize

    N[i] =(a[i] - a[i - 1] + y[i] - y[i-1]);
    N_SUMME = N_SUMME + N[i];

  }

Ich benutze einen ATSAM4S16C Xplained Board Cortex M4. Ich bekomme einen 
Dummy Handler an der stelle mit der for-Schleife und ich weis einfach 
nicht wieso.

Ich habe einen size von 8000, wenn ich diesen auf 100 stelle, 
funktioniert es ohne den Dummy Handler.

Bei Visual Studio funktioniert es...

Vielleicht habt Ihr mir einen Tipp.


Viele dank


Grüße

DDMW

von A. S. (Gast)


Lesenswert?

Welche Sprache?
Wieviel RAM?
Sind die Arrays auf dem Stack? Wenn ja, wie groß ist der?

von g457 (Gast)


Lesenswert?

> Vielleicht habt Ihr mir einen Tipp.

Zu verschwenderisch mit Speicher.

von Daniel X. (ddmw)


Lesenswert?

Mit Atmel Studio also C

Bin mir gerade nicht sicher wo die Arrays legen, habe gedacht die werden 
immer sofort in den RAM gelegt.

Der SAM4S16C hat 128kbyte RAM

von g457 (Gast)


Lesenswert?

> Der SAM4S16C hat 128kbyte RAM

Und wieviel davon hast Du schon verschwendet?

von Daniel X. (ddmw)


Lesenswert?

Nach dem erstellen habe ich:

Program Memory Usage   :  100524 bytes   9,6 % Full
Data Memory Usage     :78752 bytes   60,1 % Full

Theoretisch habe ich bei einem Array von (8000*(int 32bit))/8=32000Bytes

Für das Array a = 32000 und y = 32000 als auch N = 32000

-> 96000 Bytes ohne den restlichen Ram

Oder ?

von Dergute W. (derguteweka)


Lesenswert?

Moin,

Daniel W. schrieb:
> int dateisize=8000;

Daniel W. schrieb:
> int N[dateisize-1]; //double N[dateisize - 1] = {0};

Hmm - und diese 2 Zeilen hintereinander in einem C Programm frisst dein 
Compiler so ganz kommentarlos und ohne Mecker? Da hab' ich doch leichte 
Zweifel...

Gruss
WK

von Stefan E. (sternst)


Lesenswert?

Dergute W. schrieb:
> Hmm - und diese 2 Zeilen hintereinander in einem C Programm frisst dein
> Compiler so ganz kommentarlos und ohne Mecker? Da hab' ich doch leichte
> Zweifel...

Nennt sich "variable-length arrays" und ist seit C99 im Standard.

von MUC (Gast)


Lesenswert?

Hallo

  int dateisize=8000;
  ...
  int N[dateisize-1]; //double N[dateisize - 1] = {0};
  ...
  for (int i = 1; i < dateisize; i++) { //dateisize

    ...
    N_SUMME = N_SUMME + N[i];
  }

Größe von N ist 7999. Der letzte gültige Index ist somit 7998.
In der Schleife erfolgt der letzte Zugriff aber auf 7999!

Beitrag #4964375 wurde von einem Moderator gelöscht.
Beitrag #4964378 wurde von einem Moderator gelöscht.
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.