MSP430G2553 Energia RAM überlauf??

OP #4309420
Lesenswert?

Hi Leute,
Ich habe ein Programm in Energia für mein MSP430G2553 erstellt und kann 
es nicht flashen weil angeblich der RAM überläuft.

Es liegt wohl an dem zweidimensionalen array "muster [60] [8]".

Wenn ich das array nur mit [5] [8] als Beispiel zu flashen probiere 
funktioniert es. Dann hat das Programm 1323Byte größe. Aber wieso soll 
es dann mit [60] [8] nicht mehr gehen. Ich verstehe das nicht. Kann mir 
jemand weiterhelfen?
Gast #4309438
Lesenswert?

geil bei TI steht Zizaz 0.5 kB RAM also wohl 512B, mehr hast du nicht, 
jetzt kannst du anfangen zu überlegen was du it jedem einzelnen BYte so 
anstellen willst , weil mehr hast du nicht zur Verfügung.
Gast #4309447
Lesenswert?

Guest schrieb:
> Ach übrigens: Das ist keine sinnvolle Codezeile. Das ist kein
> Minimalbeispiel. Nimm dir ne Stunde Zeit, die Frage RICHTIG zu
> formulieren oder lass es einfach und löse dein Problem selber.

Ich frage mich langsam ob man hier im Forum noch fragen stellen kann 
ohne gleich angeschnauzt zu werden....
Falls ich diese Antwort aber einfach nur falsch interpretiere tuts mir 
leid.

Ram überlauf bedeutet dass dein Programm mehr Speicher benötigt als der 
Controler Ram zur verfügung hat.

Ein 60x8 Array belegt nunmal alleine schon 480*sizeof(Datentyp) Byte. 
Wenn dieses Array dann auch noch als globales Array definiert ist 
bleiben dem Compiler auch keine großen Optimierungen mehr.

Womöglich brauchst du dieses Array nur in einer Funktion und nicht 
global dadurch kann der Compiler schon mal den Speicherverbrauch 
optimieren.

Da musst du aber wohl oder übel versuchen dein Programm so umzuschreiben 
dass möglichst wenig Speicher in Globalen Variablen steckt.
OP #4309448
Lesenswert?

Peter K. schrieb:
> Ich frage mich langsam ob man hier im Forum noch fragen stellen kann
> ohne gleich angeschnauzt zu werden....
> Falls ich diese Antwort aber einfach nur falsch interpretiere tuts mir
> leid.
>
> Ram überlauf bedeutet dass dein Programm mehr Speicher benötigt als der
> Controler Ram zur verfügung hat.
>
> Ein 60x8 Array belegt nunmal alleine schon 480*sizeof(Datentyp) Byte.
> Wenn dieses Array dann auch noch als globales Array definiert ist
> bleiben dem Compiler auch keine großen Optimierungen mehr.
>
> Womöglich brauchst du dieses Array nur in einer Funktion und nicht
> global dadurch kann der Compiler schon mal den Speicherverbrauch
> optimieren.
>
> Da musst du aber wohl oder übel versuchen dein Programm so umzuschreiben
> dass möglichst wenig Speicher in Globalen Variablen steckt.

Vielen Dank Peter, ich hab noch nicht so viel Erfahrung damit. Aber 
damit erklärt sich das Problem.


Und an alle anderen mit Ihren unnötigen Komentaren, das hättet ihr euch 
auch sparen können.
Gast #4309452
Lesenswert?

Peter K. schrieb:
> Ich frage mich langsam ob man hier im Forum noch fragen stellen kann
> ohne gleich angeschnauzt zu werden....

Ja kann man. Allerdings nur sinnvolle und überlegte. Wenn man Scheiße 
fragt, kommt auch Scheiße zurück.

Peter K. schrieb:
> 480*sizeof(Datentyp)

Genau DAS ist das Problem. Der OP hat es nicht nur versäumt, ein 
funktionierendes Codebeispiel bereitzustellen. Er hat es nicht einmal 
geschafft, zu schreiben welchen Datentyp er nutzt. Wie lächerlich ist 
das denn bitte?

Peter K. schrieb:
> Womöglich brauchst du dieses Array nur in einer Funktion und nicht
> global dadurch kann der Compiler schon mal den Speicherverbrauch
> optimieren.

Das führt aber tendenziell eher dazu, dass das Programm crasht, weil 
einfach der Stack überläuft.

Peter K. schrieb:
> Da musst du aber wohl oder übel versuchen dein Programm so umzuschreiben
> dass möglichst wenig Speicher in Globalen Variablen steckt.

Er muss wohl oder übel sein Programm so umschreiben, dass es überhaupt 
nur vorhandene und nicht herbeigewünschte Ressourcen benötigt.
Außerdem muss er mal nachschauen was der Unterschied zwischen Flash und 
RAM ist, das hat er offenbar auch noch nicht begriffen.
Gast #4309484
Lesenswert?

Guest schrieb:
> Ja kann man. Allerdings nur sinnvolle und überlegte. Wenn man Scheiße
> fragt, kommt auch Scheiße zurück.

Wenn jemand auf einem Gebiet hald noch keine Erfahrung hat dann kann er 
auch nicht Detailiert fragen, das wäre so als wenn man einem Schüler der 
nach dem Ohmschen Gesetz fragt, sagt die Frage ist Scheiße, frag lieber 
warum die die Stromdichte über die Leitfähigkeit mit der lokalen 
elektrischen Feldstärke zusammenhängt.

Guest schrieb:
> Genau DAS ist das Problem. Der OP hat es nicht nur versäumt, ein
> funktionierendes Codebeispiel bereitzustellen. Er hat es nicht einmal
> geschafft, zu schreiben welchen Datentyp er nutzt. Wie lächerlich ist
> das denn bitte?

Wie lächerlich ist es bitte dass du hier offensichtlich Unerfahrene 
Nutzer als Idioten beschimpfst? Er hat es hald versäumt, wenn er die 
nächste Frage stellt wird es wahrscheinlich schreiben welchen Datentyp 
er verwendet.

Guest schrieb:
> Das führt aber tendenziell eher dazu, dass das Programm crasht, weil
> einfach der Stack überläuft.

Irgendwo müssen die Variablen gespeichert werden und das Memorylayout 
von lokalen Variablen ist im Endeffekt kleiner als das globaler.

Guest schrieb:
> Er muss wohl oder übel sein Programm so umschreiben, dass es überhaupt
> nur vorhandene und nicht herbeigewünschte Ressourcen benötigt.

Genau das habe ich auch gemeint, er muss das Programm optimieren damit 
es passt.

Guest schrieb:
> Außerdem muss er mal nachschauen was der Unterschied zwischen Flash und
> RAM ist, das hat er offenbar auch noch nicht begriffen.

Woran erkennst du das?
Gast #4309715
Lesenswert?

Peter K. schrieb:
> Woran erkennst du das?

Daran dass er ja offenbar die Groesse des Binaries, welches im Flash 
liegt angegeben hat.

Peter K. schrieb:
> Er hat es hald versäumt, wenn er die nächste Frage stellt wird es
> wahrscheinlich schreiben welchen Datentyp er verwendet.

Wenn er das tut (zusammen mit allen anderen nuetzlichen Informationen), 
habe ich mein Ziel erreicht. Wenns ihm keiner sagt, wird ers auch nie 
machen.

Peter K. schrieb:
> Irgendwo müssen die Variablen gespeichert werden und das Memorylayout
> von lokalen Variablen ist im Endeffekt kleiner als das globaler.

Selbst wenn er ein array aus Bytes anlegen will passt das kaum in seinen 
RAM. 480 von 512 Bytes belegt, nur durch das Array. Da muss der Rest von 
Programm achon arg wenig Speicher brauchen, damit das ueberhaupt 
funktionieren kann.

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