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


von Andy (Gast)


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

von Matthias L. (Gast)


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.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


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.

von MagIO (Gast)


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.

von Andy (Gast)


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

von Bernd (Gast)


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

von jl (Gast)


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

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.