2009-05-04 3 views
1

Ich arbeite an einem großen Projekt und jetzt bin ich auf diesem Fehler "Near Datensegment ist größer als 64k" Fehler.Wie löst man das Problem 'Fast Datensegment ist größer als 64k' auf Palm mit CodeWarrior9?

Wenn ich den "FrmSetEventHandler (frm, DadosConstrutivos1HandleEvent)" kommentieren, auf PrvAppHandleEvent in PilotMain das Programm kompiliert es nett. Wenn ich versuche, De Call zu verwenden, habe ich die Fehlermeldung erhalten.

Ich verwende bereits Multi-Segment und "Expanded Mode".

Wie kann ich das beheben?

Dank Rodrigo Leite Gomide

Antwort

0

Ich benutze Codewarrior nicht, aber ich benutze Pocket statt und das „gleiche Problem“ passiert mir sehr viel.

Jede Einheit ist ein "Code-Segment". Wenn Ihre kompilierte Einheit größer als 64 KB Code wird, warnt Sie der Compiler und verbindet Ihren Code nicht.

Versuchen Sie, einen Code von diesem Gerät in ein anderes zu verschieben.

Oder Sie können mit Pragma:

#pragma segment Seg1 

... code ... 

#pragma segment Seg2 

... code ... 

Grüße,

Christian.

0

Es gibt keinen guten Weg, dieses Problem zu lösen. 68K-Code in Palm OS kann nur auf eine kleine Menge statischer Programmdaten zugreifen, da der 68K-Befehlssatz nur einen +32K-Offset für die Adressierung von Daten bietet. Es würde eine wesentliche Änderung des Compilers erfordern, um weiter zu gehen, da der Compiler Code generieren müsste, um komplexe Zeigerarithmetik auszuführen, und weder CodeWarrior noch prc-tools unterstützen dies.

Hier einige Tipps:

  • Wenn Sie große Datentabellen haben, versuchen, sie in ihre eigenen Ressourcen zu bewegen, wo Sie geladen werden kann und ihre Position zur Laufzeit sperren. Dadurch werden sie aus dem Datenbereich entfernt.
  • Aktivieren Sie die Linker-Map-Funktion, und sehen Sie sich an, wie Ihr Datenabschnitt zugeordnet wird, und prüfen Sie, ob große Datenobjekte oder Arrays nicht benötigt werden.
  • Anstatt globale Variablen zu deklarieren, verwenden Sie globale Zeiger auf Speicher, die Sie mit MemGluePtrNew zuweisen.
Verwandte Themen