Forum: Mikrocontroller und Digitale Elektronik LPC935, uVision 3


von Albert K. (buzzed)


Lesenswert?

Hallo Leute

Ich bin kürzlich auf ein Problem gestoßen und zwar schreibe ich gerade 
ein etwas umfangreicheres Programm für meinen Phillips NXP LPC 935 (oder 
936 falls dies beim Problem helfen könnte) und ich kann dieses ab einer 
gewissen Größe nicht mehr kompilieren. (bekomme kein Hex-File mehr)

Ich bekomme folgende Fehlermeldung.

Program Size: data=196.1 xdata=0 code=2589
Target Not Created

Im Moment schaffe ich es noch den Code kleiner zu machen in dem ich alle 
Felder usw. im Codespeicher ablege, dass Problem ist aber, dass das 
Programm noch lange nicht fertig ist.

Meine uVision Version ist: C51v805 (lizensiert)

Ist es möglich irgendwie diese Kompilier beschränkung aufzuheben oder 
kann man dagegen etwas unternehmen?

Hoffe auf Antworten

MfG Alber K.

von Matthias K. (matthiask)


Lesenswert?

>data=196.1

Schon reichlich interner RAM belegt, Stack? Hast Du den internen RAM auf 
256 eingestellt?

Ab welcher exakter Codegröße tritt das Problem auf? Bis 2k kann die 
Demoversion. Lizenzversion sollte da kein Problem haben.

von Albert K. (buzzed)


Lesenswert?

Hey, danke für die Antwort

aber ich verstehe nicht ganz was du meinst :)
Ich bin nicht soo erfahren was RAM, Stack usw. anbelangt

also code = 2325 funktioniert noch und darüber gehts dann nicht mehr.
Ich habe mein Programm lizensiert und es steht

PK51. Prof. Developers KIT

Bzw. wo stell ich den internen RAM ein bzw. geht das überhaupt mit 
meinem Stick?

Es kommt halt:

Error L107: Address Space Overflow
Space: Data
Length: 0068H

MfG
Albert K.

von Matthias K. (matthiask)


Lesenswert?

>Error L107: Address Space Overflow
>Space: Data
>Length: 0068H

Du belegst wie schon vermutet zu viel interen RAM. Der hat nur 256 Byte. 
Versuch mal paar Variablen in den XDATA auszulagern, Bsp.:

char xdata my_variable;

Hoffentlich hast Du bei den Options auch den richtigen µC eingestellt?

von Albert K. (buzzed)


Lesenswert?

Ahh das erklärt einiges danke :)

8K Bytes ISP/IAP Flash, 512 Bytes Data EEPROM,
256 Bytes RAM

da stehts in der Beschreibung und ja ich hab das ganze Projekt für den 
LPC935 erstellt.

Aber ist xdata nicht für externen speicher?

ich habs bis jetzt mit "code char" oder "code unsigned char" versucht.

geht dann xdata auch für mich?
bzw wie kann ich was in den Flash speichern, weil der wäre ja um einiges 
größer.

MfG

Alber K.

von Matthias K. (matthiask)


Lesenswert?

Datenblatt:
XDATA Auxiliary (‘External Data’) on-chip memory that is accessed
using the MOVX instructions (P89LPC935/936)512

Der hat internen XDATA von 512 Byte.

Variablen kommen so in den XDATA:

char xdata my_variable;

von R. W. (quakeman)


Lesenswert?

Albert K. schrieb:
> ich habs bis jetzt mit "code char" oder "code unsigned char" versucht.

Also mit dieser Syntax kommst du sowieso nicht weit, denn das Wort 
"code" hat bei Variablen nichts verloren. Dies benutzt du nur bei 
Konstanten die nachträglich nicht mehr verändert werden können.
Entweder du machst "unsigned char", wobei der Compiler selber versucht 
den Speicherbereich festzulegen anhand der Projekteinstellungen. Oder du 
sagst ihm explizit, in welchem Bereich die Variablen liegen sollen. Z.B. 
"unsigned char data" oder "unsigned char idata" oder "unsigned char 
xdata" (oder ohne unsigned davor). Die internen 256 Bytes Ram sind 
eingeteilt in 128 Bytes data/idata und 128 Bytes nur idata. Letzteren 
kannst du dann nicht per "data" ansprechen.
Du solltest bei deinem Projekt auch darauf achten, dass du die Code Rom 
Einstellungen in den Projekteigenschaften auf "compact" stellst und 
nicht auf "small". Ebenfalls muss "use on-chip xram" aktiviert sein.
Du solltest dir das Speichermodell des Controllers noch mal genau 
anschauen, damit du verstehst, wie und wo der Speicher verteilt ist und 
du ihn benutzen kannst.

Ciao,
     Rainer

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.