1

我正在做一个大型项目,现在我对这个“近数据段大于 64k”错误感到困惑。

如果我评论“FrmSetEventHandler(frm,DadosConstrutivos1HandleEvent);” 在 PilotMain 的 PrvAppHandleEvent 上,程序编译得很好。如果我尝试使用 de call,则会收到错误消息。

我已经在使用多段和“扩展模式”。

我该如何解决这个问题?

谢谢罗德里戈·雷特·戈米德

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 回答