Forum: Mikrocontroller und Digitale Elektronik Address Space Overflow


von carola (Gast)


Lesenswert?

Hallo,
ich programmiere zur Zeit mit der Software µVision3 von Keil einen 
Mikrocontroller. Die Programmiersprache ist C. Nachdem ich einige 
Berechnungsfunktionen hinzugefügt habe, bekomme ich nun folgende 
Fehlermeldung :
*** ERROR L107: ADDRESS SPACE OVERFLOW
    SPACE:   DATA
    SEGMENT: DATA_GROUP
    LENGTH:  0073H
Daraufhin habe ich versucht einige Variablen zu verkleinern, indem ich 
den Datentyp geändert habe. Das Ergebnis ist, dass sich in der 
Fehlermeldung der Wert der LENGTH von 78h auf 73h verkleinert hat. Hat 
jemand eine Idee, was ich noch tun kann, damit wieder alles compiliert 
wird?
Danke schonmal für die Hilfe.
Carola

von Nullpainter (Gast)


Lesenswert?

Tja. Es scheint immer noch zuviel Daten zu haben. Mach doch mal einen 
Kommentar um was groesseres.

von carola (Gast)


Lesenswert?

Das funktioniert, aber ich benötige die Berechnung für meine Aufgabe. 
Was kann ich denn statt auskommentieren machen, damit mein Code weniger 
wird?
Vor dem Auskommentieren habe ich folgende Angaben :
Program Size: data=159.1 xdata=6766 code=22583

nach dem Auskommentieren sieht es so aus:
Program Size: data=106.0 xdata=6766 code=17047

von Johannes M. (johnny-m)


Lesenswert?

> Nachdem ich einige Berechnungsfunktionen hinzugefügt habe,
Was für Berechnungsfunktionen? Sicher, dass Du die wirklich brauchst? 
Riecht stark nach Gleitkomma-Arithmetik...

von carola (Gast)


Lesenswert?

ich muss einen Frequency Sweep über den I2C-Bus initialisieren und die 
aufgenommenen Werte umrechnen und im Terminalprogramm zur 
Weiterverarbeitung ausgeben. Deswegen bin ich mir sicher, dass ich die 
Berechnungen benötige.

von Stefan (Gast)


Lesenswert?

Mach doch in ASM - da weisst wenigstens was passiert!!!

Gruß
Stefan

von Falk (Gast)


Lesenswert?

@ carola (Gast)

>ich muss einen Frequency Sweep über den I2C-Bus initialisieren und die
>aufgenommenen Werte umrechnen und im Terminalprogramm zur
>Weiterverarbeitung ausgeben. Deswegen bin ich mir sicher, dass ich die
>Berechnungen benötige.

Klingt eher nach wenig aufwändiger Berechnung. Zeig doch mal deinen 
Code.
Ausserdem.

Festkommaarithmetik

@ Stefan (Gast)

>Mach doch in ASM - da weisst wenigstens was passiert!!!

Käse.

MFG
Falk

von ARM-Fan (Gast)


Lesenswert?

Leider schreibst du nicht, um welchen Controller es sich handelt.
Was bei dir überquillt ist die data_group, sprich die automatisch
/lokalen Variablen, welche sich aufgrund des von dir eingestellten
Speichermodells (SMALL) im DATA-Bereich befinden.

>Was kann ich denn statt auskommentieren machen,
>damit mein Code weniger wird?

Nicht der Code (=Bedarf an Flash-Speicher) sondern der Bedarf
an (i)Data muß weniger werden. Dies kannst du ändern, indem
du entweder das Speichermodell änderst oder explizit dort wo
du vielleicht Arrays innerhalb einer Funktion deklarierst diese
in den XDATA Bereich legst.

Alles klar?

von Nullpainter (Gast)


Lesenswert?

Es gibt nahezu beliebig viele Tricks auf Floatingpoint zu verzichten. 
Und es gibr auch fast beliebig viele Tricks Berechnungen zu 
vereinfachen. Sobald der controller zB mit einem PC zusammenarbeitet, 
kann man Berechnungen dem PC anhaengen.

von carola (Gast)


Lesenswert?

Hallo,
danke für die vielen Antworten.
Ich habe jetzt die Variablen so klein wie möglich gemacht und soweit es 
ging, meine Berechnungen in Funktionen ausgelagert. Da diese Maßnahmen 
noch nicht ausgereicht haben, habe ich zusätzlich noch, wie von ARM-Fan 
vorgeschlagen, die Variablen und Arrays explizit in den XDATA-Bereich 
gelegt.

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.