Forum: Mikrocontroller und Digitale Elektronik MSP430G2553 Energia RAM überlauf??


von Markus G. (hulk85)


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?

von Guest (Gast)


Lesenswert?

Markus G. schrieb:
> Aber wieso soll
> es dann mit [60] [8] nicht mehr gehen.

Weil der RAM überläuft. Sonst noch Fragen?

von Guest (Gast)


Lesenswert?

Markus G. schrieb:
> Es liegt wohl an dem zweidimensionalen array "muster [60] [8]".

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.

von gust (Gast)


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.

von Peter K. (Gast)


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.

von Markus G. (hulk85)


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.

von Guest (Gast)


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.

von Peter K. (Gast)


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?

von Stefan K. (stefan64)


Lesenswert?

Was genau steht in dem Array? Konstanten oder Variablen?
Bei Konstanten hast Du die Möglichkeit, es ins Flash zu legen, dann 
belastest Du nicht Dein RAM.

Gruß, Stefan

von Stefan K. (stefan64)


Lesenswert?

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

Wenn hier nur Leute posten, die bereits alles begriffen haben, dann ist 
dieses Forum überflüssig.

Stefan

von Guest (Gast)


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.

von Peter K. (Gast)


Lesenswert?

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

Da stimme ich dir zu, kann man aber hald etwas netter auch sagen ;)

von Seher (Gast)


Lesenswert?

Markus G. schrieb:
> zweidimensionalen array "muster [60] [8]

Damit das Raten aufhört und der Ton netter wird: Stell bitte die echte 
Definition ein.

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.