Forum: Compiler & IDEs AVR-Gcc:Maximale Struct-Größe


von Ageraluon (Gast)


Lesenswert?

Hey zusammen,

Gibt es eine maximale Größe für Structs in AVR-GCC? Ich lege mir gerade 
das folgende Element an:
1
typedef struct  { 
2
//   uint8_t Second; 
3
//   uint8_t Minute; 
4
//   uint8_t Hour; 
5
  uint8_t Wday;   // day of week, sunday is day 1
6
  uint8_t Day;
7
  uint8_t Month; 
8
  uint16_t Year;   // offset from 1970; 
9
} tmElements_t,  TimeElements, *tmElementsPtr_t;

bis zu der gerade aktiven Größe lässt sich mein Code prima auf einem 
ATMega169PA ausführen. Nehme ich jedoch eine der auskommentierten Zeilen 
hinzu (egal welche), kommt es zu merkwürdigem Verhalten meines Geräts, 
z.B. stark verzögerte Reaktion auf Tasteneingaben, nicht 
nachvollziehbare Variablenwerte bei Debugging mit dem JTAGICE3 im AVR 
Studio (aktuelle Verson), etc. Könnte dieses Verhalten andere Ursachen 
haben? Plage mich jetzt schon ziemlich lange mit diesm Problem herum und 
bin für jede Hilfe dankbar!

Beste Grüße,
Ageraluon

von OldMan (Gast)


Lesenswert?

Was sagte avr-size zu Deinem Code? Hast Du dir einmal angeschaut?
Die Größe einer struct ist grundsätzlich nicht begrenzt, aber wenn
Du zusammen mit dem restlichen Code den Flash und den RAM schon gut 
ausgereizt hast, kann es sehr schnell Probleme mit dem SP geben.
Gerade die time-Funktionen die Du anscheinend hier auf den AVR gezogen 
hast, brauchen ziemlich viel Speicher (SP).

von Ursus P. (unwichtig)


Lesenswert?

Ageraluon schrieb:
> Hey zusammen,
>
> Gibt es eine maximale Größe für Structs in AVR-GCC?
Bis der RAM an Anschlag ist ;-), mit struct definierst du nur die 
Struktur und sobald du ein Objekt von dieser Struktur erzeugst wird der 
RAM verbraten.

>
1
> typedef struct  {
2
> //   uint8_t Second;
3
> //   uint8_t Minute;
4
> //   uint8_t Hour;
5
>   uint8_t Wday;   // day of week, sunday is day 1
6
>   uint8_t Day;
7
>   uint8_t Month;
8
>   uint16_t Year;   // offset from 1970;
9
> } tmElements_t,  TimeElements, *tmElementsPtr_t;
10
>
>
> bis zu der gerade aktiven Größe lässt sich mein Code prima auf einem
> ATMega169PA ausführen. Nehme ich jedoch eine der auskommentierten Zeilen
> hinzu (egal welche), kommt es zu merkwürdigem Verhalten meines Geräts,
> z.B. stark verzögerte Reaktion auf Tasteneingaben, nicht
> nachvollziehbare Variablenwerte

Dann genaue da liegt der Fehler ;-))) aber definitiv nicht an der 
Structgröße. Wie viele "Objekte" von der Struktur erzeugst du denn 
überhaupt?

von Ageraluon (Gast)


Lesenswert?

Laut der Ausgabe im AtmelStudio belegt der Code 46.6% des Flash und 
25.5% data memory. Damit müsste ich eigentlich noch auf der sicheren 
Seite sein, oder?

von Ageraluon (Gast)


Lesenswert?

Derzeit initialisiere ich zwei Instanzen der Struct. In der Tat basiert 
der Code auf einer (stark abgespeckten) Version der time.c.

von (prx) A. K. (prx)


Lesenswert?

Ageraluon schrieb:
> Gibt es eine maximale Größe für Structs in AVR-GCC?

32KB

von Ursus P. (unwichtig)


Lesenswert?

Ageraluon schrieb:
> Derzeit initialisiere ich zwei Instanzen der Struct. In der Tat basiert
> der Code auf einer (stark abgespeckten) Version der time.c.

Dann einfach weiter die Schritte mit JTAG durchrappeln und nachgucken, 
mache auch ab & zu Fehler die ein Tritt in die Eier wert sind ;-)))

von Ageraluon (Gast)


Lesenswert?

Vielen Dank euch für die Hilfe, dann werde ich das mal tun. Gut zu 
wissen, dass es schon mal nicht an der Größe liegt.
Beste Grüße,
Ageraluon

von Bernd K. (prof7bit)


Lesenswert?

Otto Rohrpott schrieb:
> Dann einfach weiter die Schritte mit JTAG durchrappeln

Und dabei mal besonderes Augenmerk auf den Wert des Stack-Pointer 
richten und wie nah der an das Ende des Heaps herankommt.

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.