1

私は大規模なプロジェクトに取り組んでいますが、現在、この「データセグメントが64kより大きい」というエラーが発生しています。

「FrmSetEventHandler(frm、DadosConstrutivos1HandleEvent);」とコメントすると PilotMainのPrvAppHandleEventで、プログラムはそれをうまくコンパイルします。de callを使おうとすると、エラーメッセージが表示されます。

私はすでにマルチセグメントと「拡張モード」を使用しています。

これを解決するにはどうすればよいですか?

ありがとうRodrigoLeiteGomide

4

2 に答える 2

0

私は CodeWarrior を使用していませんが、代わりに PocketStudio を使用しており、「同じ問題」が頻繁に発生します。

各ユニットは「コードのセグメント」であるため、コンパイルされたユニットが 64k のコードを超えると、コンパイラは警告を発し、コードをリンクしません。

そのユニットから別のユニットにコードを移動してみてください。

または #pragma を使用できます。

#pragma segment Seg1

... code ...

#pragma segment Seg2

... code ...

よろしく、

キリスト教徒。

于 2009-05-27T16:39:25.760 に答える
0

この問題を解決する良い方法はありません。Palm OS の 68K コードは、少量の静的プログラム データにしかアクセスできません。これは、68K 命令セットがデータのアドレス指定用に +-32K オフセットしか提供しないためです。コンパイラーは複雑なポインター演算を行うためにコードを生成する必要があり、CodeWarrior も prc-tools もこれをサポートしていないため、さらに進んでサポートするにはコンパイラーに大幅な変更が必要になります。

ヒントは次のとおりです。

  • 大きなデータ テーブルがある場合は、実行時にその場所を読み込んでロックする独自のリソースにそれらを移動してみてください。これにより、データ セクションから移動されます。
  • リンカー マップ機能をオンにして、データ セクションがどのように割り当てられているかを調べ、必要のない大きなデータ オブジェクトまたは配列があるかどうかを確認します。
  • グローバル変数を宣言する代わりに、MemGluePtrNew を使用して割り当てるメモリへのグローバル ポインターを使用します。
于 2009-07-14T05:28:15.310 に答える