MSP430 Ram Belegung

Gast #2255351
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
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
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
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?
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.
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

Eine eigene Frage? Dieser Thread ist über 15 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.