www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Maximale Arraygröße GCC + MSP430F169


Autor: Patti (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich benutze den GCC Compiler und einen MSP430F169
ich habe mir ein Array angelegt:

int test[2000];

nun bekomme ich die Fehlermeldung im Dateianhang.
Es scheint ja zu groß zu sein. Aber ich habe noch über 45kB frei. Wo 
liegt mein Denkfehler? Oder liegt das am Compiler?

Danke Euch.

Autor: Hauke Radtki (lafkaschar) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich bin zwar kein C spezialist aber ich denke er will die daten im SRAM 
ablegen. Bei AVRs und C muss man PROGMEM verwenden um Daten im Flash zu 
speichern.

Autor: Jörg X. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@OP:
Tja, scheinbar hast du nicht so viel Platz für Variablen, da der MSP 
eine von-Neumann Architektur hat (der ganze Speicher im selben 
Addressraum) sollte ein "const int test[2000];" das Array in den flash 
verschieben -- dann kann man das aber nicht mehr so ohne weiteres 
ändern.

hth. Jörg

Autor: Jörg X. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Entschuldigung wegen dem Doppelpost, aber der Titel ist irreführend.
Der GCC hat mit dem Limit in diesem Fall nichts zu tun - das GCC-Limit 
sollte  dem Maximum eines "signed int" entsprechen d.h. 32767 Elemente 
beim AVR, beim MSP wahrscheinlich auch.

gruß ~Jörg

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der 169 hat ja nur 2048 Byte RAM, von denen ein paar ja auch für den 
Stack reserviert sind....also nen RAM-Array mit 2000 WORTEN is dann 
nich. Das sind ja schon 4000 Byte...

Autor: Patti (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stimmt ja, das kommt ja in den RAM. Daran habe ich garnicht gedacht!
Gibt es eine einfache Möglichkeit das array im internen Flash abzulegen?

Autor: Jörg X. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Beim MSP(von.Neumann-Architektur) sollte es ein "const int name[]" schon 
tun. (hab ich btw. oben auch schon geschrieben ;) )

hth. Jörg

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, mit const. Aber dann kann man es nicht beschreiben. Ansonsten das 
TI-Demo zum Benutzen des FLASH-Speichers angucken....

Autor: Patti (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oh sorry Jörg, hab ich glatt überlesen!

Aber ich will das arry auch beschreiben. Ich werde mir das TI-Demo mal 
ansehen.

Danke euch!

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn du mehr als die 256 Byte des Info-memory brauchst, musst du dem GCC 
dies aber mitteilen, indem du eine eigene Section im Linker-File dafür 
erstellst und im Quellcode dann angibst, dass das Array in eben diese 
Section muss. Sonst kanns passieren, dass du Programmcode oder andere 
Konstanten löscht, der FLASH kann nämlich immer nur in Sektoren gelöscht 
werden.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.