2009-05-04 11 views
1

Je travaille sur un grand projet et maintenant je suis pile sur cette erreur "Le segment de données est plus grand que 64k".Comment résoudre le problème 'Le segment de données proche est plus grand que 64k' sur Palm en utilisant CodeWarrior9?

Si je commente le "FrmSetEventHandler (frm, DadosConstrutivos1HandleEvent);" sur PrvAppHandleEvent dans PilotMain le programme le compile bien. Si j'essaie d'utiliser de call, j'ai reçu le message d'erreur.

J'utilise déjà plusieurs segments et "Expanded Mode".

Comment résoudre ce problème?

Merci Rodrigo Leite Gomide

Répondre

0

Je ne me CodeWarrior, mais j'utiliser POCKETSTUDIO à la place et le « même problème » me arrive beaucoup. Chaque unité est un "segment de code", donc lorsque votre unité compilé dépasse 64k de code, le compilateur vous avertit et ne lient pas votre code.

Essayez de déplacer du code de l'unité vers l'autre.

Vous pouvez aussi utiliser #pragma:

#pragma segment Seg1 

... code ... 

#pragma segment Seg2 

... code ... 

Cordialement,

Christian.

0

Il n'y a aucun moyen de résoudre ce problème. Le code 68K dans Palm OS ne peut accéder qu'à une petite quantité de données de programme statique, car le jeu d'instructions 68K fournit uniquement un décalage de + -32 K pour les données d'adressage. Cela nécessiterait une modification majeure du compilateur pour supporter d'aller plus loin, car le compilateur aurait besoin de générer du code pour faire de l'arithmétique de pointeur complexe, et ni CodeWarrior ni prc-tools ne le supportent.

Voici quelques conseils:

  • Si vous avez de grandes tables de données, essayez de les déplacer dans leurs propres ressources où vous allez charger et verrouiller leur emplacement lors de l'exécution. Cela les fera sortir de la section de données.
  • Activez la fonction de l'éditeur de liens et examinez la façon dont votre section de données est allouée et déterminez si vous disposez d'objets ou de tableaux de données volumineux dont vous n'avez pas besoin. Au lieu de déclarer des variables globales, utilisez des pointeurs globaux dans la mémoire allouée à l'aide de MemGluePtrNew.