MSP430 Ram Belegung

Gast #2255351
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
#2255584
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)...
Gast #2255601
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
Gast #2256045
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?
#2256710
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.
#2259790
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.

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