www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Address space overflow, wegen arrays


Autor: Andy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Ich programmiere mit Keil µVision 3. Mein Programm enthält ein paar 
arrays, bzw ich kann nur ein array machen, weil sonst kommt Address 
space overflow, wegen den data size limit denk ich, da sich die größe 
vom code nicht ändert.
Program Size: data=142.1 xdata=0 code=4075

Bei: Program Size: data=109.1 xdata=0 code=4075 funktioniert das 
compelieren noch.

Ich will ein paar arrays machen die etwa so aussehen:

int hex[13]= 
{0x85,0x110,0x134,0x183,0x232,0x287,0x342,0x440,0x537,0x702,0x866,0xc26} 
;

int hex2[13]= 
{0x84,0x106,0x128,0x168,0x207,0x256,0x305,0x415,0x525,0x689,0x854,0xb89;

Brauchen arrays echt so viel platz? Für was sind sie dann gut....

Anscheinend hab ich gehört das es am Keil µVision liegt und man das 
durch library umschreiben umgehen kann, aber wie das geht weis ich 
leider nicht.

mfg

Autor: Matthias Lipinsky (lippy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Brauchen arrays echt so viel platz?

Mit dieser Angabe:
>>int hex[13]

Kannst du selbst ermitteln, wieviel Platz das Array braucht.

Tip:
Dreizahlen Int-zahlen als Array brauchen ungefähr genausoviel Platz 
wie dreizehn Int-Zahlen nicht als Array.


Übrigens: Deine Array sind zwölf Elemente lang.

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> int hex[13]
Jedes der Arrays braucht 4*13 Bytes, jeweils 52 Bytes. Insgesamt also 
hex[]+hex2[] = 104 Bytes. Initialisierte Arrays wie du sie hast brauchen 
den Speicherplatz im RAM und im ROM (Programmspeicher).

> Brauchen arrays echt so viel platz? Für was sind sie dann gut....
Seltsame Frage... :-o
Auch auf eine andere Art wirst du nicht weniger Speicherplatz brauchen.

EDIT:
> Übrigens: Deine Array sind zwölf Elemente lang.
Und brauchen trotzdem Platz für 13 Elemente, weil sie so ([13]) 
deklariert sind.

Autor: MagIO (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Antworten sind ja echt hilfreich!

Ich kann jetzt zwar nichts mit µVision anfangen und weiß auch nicht um 
welchen Controller es sich handelt, aber ich gehe mal davon aus, dass es 
auch in dieser Kombination möglich sein sollte das Array nicht im RAM, 
sondern im code-segment anzulegen. Hoffe mal das hilft eher ein wenig 
weiter.

Autor: Andy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
aso ok, ja also das mit den feldern ist echt ein problem, werd ich wohl 
eine mathematische formel erstellen müssen.

danke an alle

mfg

Autor: Bernd (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Andy,

wenn wir jetzt noch wüssten um welchen µC es sich handelt, könnte man 
noch weitere Tipps geben.

Abhängig vom µC könnte noch der xdata Bereich in Frage kommen......

Gruß Bernd

Autor: jl (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also so wie es aussieht hats du ein 8051 Derivate.

Was willst du mit dem array eigentlich tun - nur lesen oder zur Laufzeit 
modifizieren?

Ist es nur lesen? -> dann leg es in den CODE als const
Hat dein Derivate XDATA? -> dann leg es dorthin

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.