Forum: Mikrocontroller und Digitale Elektronik MSP430 Ram Belegung


von anfänger (Gast)


Lesenswert?

Hallo Leute,

Ich benutze den MSP430f2132 mit 512 Byte Ram.
Nun habe ich folgende Variablen global deklariert :

unsigned  int i_test1[66];
unsigned  int i_test2[66];
unsigned  int i_test3[66];
unsigned  int i_test4[66];

Da integer 2 Byte Datenbreite hat müssten das insgesamt 2*4*66=528 Byte 
Speicher sein.
Ich benutze IAR embedded workbench und wenn ich das auf den Controller 
lade meldet er keinen Fehler.

Habe ich das falsch verstanden und die globalen Variablen werde nicht im 
RAM reserviert oder kann es sein, dass manche Werte dann einfach 
überschrieben werden und ich bekomme davon nur nichts mit?

Danke im Vorraus

von Daniel V. (danvet)


Angehängte Dateien:

Lesenswert?

Gibt's kein Listing? Vielleicht hat der IAR keine RAM Usage Überprüfung 
und meldet deswegen kein Fehler.
Der ICCAVR zeigt immer eine Zusammenfassung an (siehe Anhang).

von Max G. (l0wside) Benutzerseite


Lesenswert?

anfänger schrieb:

> Da integer 2 Byte Datenbreite hat müssten das insgesamt 2*4*66=528 Byte
> Speicher sein.
> Ich benutze IAR embedded workbench und wenn ich das auf den Controller
> lade meldet er keinen Fehler.

- Schaue Dir mal das MAP-File an.
- Was passiert, wenn Du auf die Variablen zugreifst?

von Daniel V. (danvet)


Lesenswert?

Max G. schrieb:
> anfänger schrieb:
>
>> Da integer 2 Byte Datenbreite hat müssten das insgesamt 2*4*66=528 Byte
>> Speicher sein.
>> Ich benutze IAR embedded workbench und wenn ich das auf den Controller
>> lade meldet er keinen Fehler.
>
> - Schaue Dir mal das MAP-File an.
> - Was passiert, wenn Du auf die Variablen zugreifst?

Joo, meinte natürlich MAP-File (statt Listing)...

von Wk (Gast)


Lesenswert?

Hallo,
verwendest du auch die Variablen im Programm?
Der IAR ist kreativ im optimieren :-)

Aus eigener Erfahrung kann ich dir nur sagen, dass IAR meldet wenn der 
Speicher voll ist.

Dass das bei dir nicht kommt kann liegen an:
- Optimierung (Nicht verwendete Variablen fliegen raus)
- Falsch eingestelltes projekt (falscher Typ eingestellt)

Häng einfach mal das map file an.

Grüße
Peter

von anfänger (Gast)


Lesenswert?

Du hattest recht :D. Hatte sie noch net im Programm eingebunden sondern 
nur deklariert. Sobald ich sie benutze wird gemotzt...
Also hab ich das richtig verstanden und alle deklarierten Variablen 
werden im RAM abgelegt, nur die Globalen sind halt fest belegt?

von Daniel V. (danvet)


Lesenswert?

Alle Variablen landen im RAM. Allerdings ist es ein Unterschied, ob die 
Variable Global oder Lokal definiert ist.
Globale Variablen werden auf eine feste Adresse gemappt (deswegen kann 
man im Map-File schauen, wo die Variablen liegen). Die lokalen Variablen 
werden zur Laufzeit "erzeugt" (wenn z.B. eine Funktion aufgerufen wird), 
und werden auf dem Stack bereitgestellt und bei verlassen der 
entsprechenden Funktion wieder "vernichtet".
Deswegen sollten die globalen Vriablen nicht den ganzen RAM 
auffressen,sondern es sollte noch genügend frei sein, damit der Stack 
nicht "überläuft". Meistens lässt sich einstellen, wie groß der Stack 
sein soll, damit der Compiler entsprechend die RAM-Benutzung überprüfen 
kann.

von Regbank (Gast)


Lesenswert?

Daniel V. schrieb:
> Alle Variablen landen im RAM.

Bist du dir da sicher? Gerade lokale Variablen können auch 
ausschließlich in Registern gehlaten werden. Das entscheidet der 
Compiler.

von Daniel V. (danvet)


Lesenswert?

Regbank schrieb:
> Daniel V. schrieb:
>> Alle Variablen landen im RAM.
>
> Bist du dir da sicher? Gerade lokale Variablen können auch
> ausschließlich in Registern gehlaten werden. Das entscheidet der
> Compiler.

Das ist natürlich korrekt! Da hab ich doch glatt nicht (mehr) dran 
gedacht. Wenn man Assembler programmiert (das war bei mir vor ca. 12 
Jahren.....), dann kann man ja gerade über die Register viel optimieren.

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.