CPP Code nach C portieren. endet in Stackoverflow.

#3939773
Lesenswert?

Hallo zusammen...

Ich versuche folgenden Code zu portieren:

http://developer.mbed.org/users/embeddedartists/code/app_lcdboard_demo_sphere/

Dabei versuche ich genauer gesagt nur die Dateien
SphereDemo.h und SphereDemo.cpp zu portieren.

Zielsystem ist ein STM32F105RB mit 128k Flash und 64k Ram
Umgebung ist ARM GCC mit CooCox.

Anbei findet ihr meine Portierung.

Mein Aufruf sieht wie folgt aus:
1
SphereDemo(800,480);
2
SphereDemo_run(100,100);

Leider erhalte ich vom Compiler folgende Meldung:

--> /ld.exe: region ram  overflowed with stack
--> /ld.exe: region `ram' overflowed by 1104 bytes

Ohne die SphereDemo ist die .bss Region 1068 bytes gross!

Hier die Angaben OHNE die SphereDemo

Program Size:
      text     data      bss      dec      hex  filename
      7348       20     1068     8436     20f4  7inch_sphere_demo.elf

Hat jemand eine Idee wie man dies entsprechend anpassen könnte?

Danke schonmal!
Angehängte Dateien:
#3939803
Lesenswert?

Alleine
int16_t sine[SCALE];
int16_t cosi[SCALE];
belegen 8192 * sizeof(int16_t) * 2 = 32768 Bytes RAM
Da könnte es helfen die ins Flash zu legen.

ungünstig sind auch die "großen" lokalen Arrays
int16_t xyz[3][N];
uint8_t rgb[3][N];

3  256  2 + 3  256  1 = 2304 Bytes könnten zu viel für den Stack 
sein
#3939820
Lesenswert?

A. K. schrieb:
> Die beiden Trigonometrietabellen sind in sphere.h definiert, nicht
> nur
> extern deklariert. Was eigentlich einen Linker-Fehler provozieren
> müsste, wenn zweimal included - oder macht der heute immer noch Commons
> draus?

Es gibt einen Error, wenn ich den Header von void matrix... ins h 
kopiere.
Ansonsten bin ich für offen für jegliche optimierungen!

Arc Net schrieb:
> Da könnte es helfen die ins Flash zu legen.

Wie macht man dies beim STM bzw. beim ARM-GCC?
Gast #3942479
Lesenswert?

Arc Net schrieb:
> Alleine
> int16_t sine[SCALE];
> int16_t cosi[SCALE];
> belegen 8192 * sizeof(int16_t) * 2 = 32768 Bytes RAM
> Da könnte es helfen die ins Flash zu legen.
>
> ungünstig sind auch die "großen" lokalen Arrays
> int16_t xyz[3][N];
> uint8_t rgb[3][N];
>
> 3  256  2 + 3  256  1 = 2304 Bytes könnten zu viel für den Stack sein

Das Richtig,
Wenn icb das als Tabelle mache muss ich ja für x und y jeweils 8192 
Werte Ausrechnen.
Besser wäre das schon dann bräuchte der stm nich so viel Rechnen.
Bloß wie mache ich das mit der Tabelle??

könnte mir einer von ihnen weiterhelfen.
Danke.

im Anhang mal meine umsetzung ich nutze ein stm32f103zet6
Angehängte Dateien:

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