如何使用CodeWarrior9解决Palm上的“近数据段大于64k”的问题?

时间:2009-05-04 13:59:43

标签: palm-os palm codewarrior

我正在开展一个大型项目,现在我正在堆叠“近数据段大于64k”错误。

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

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

如何解决此问题?

由于 Rodrigo Leite Gomide

2 个答案:

答案 0 :(得分:0)

我不使用CodeWarrior,但我使用PocketStudio而且“同样的问题”在我身上发生了很多。

每个单元都是“代码段”,因此当编译单元大于64k的代码时,编译器会发出警告并且不会链接您的代码。

尝试将一些代码从该单元移动到另一个单元。

或者您可以使用#pragma:

#pragma segment Seg1

... code ...

#pragma segment Seg2

... code ...

此致

基督教。

答案 1 :(得分:0)

没有好办法解决这个问题。 Palm OS中的68K代码只能访问少量静态程序数据,因为68K指令集仅为寻址数据提供+ -32K偏移。它需要对编译器进行重大更改以支持更进一步,因为编译器需要生成代码来执行复杂的指针运算,CodeWarrior或prc-tools都不支持这一点。

以下是一些提示:

  • 如果您有大型数据表,请尝试将它们移动到自己的资源中,您将在运行时加载和锁定它们的位置。这将使他们脱离数据部分。
  • 打开链接器映射功能,查看数据部分的分配方式,并查看是否存在不需要的大型数据对象或数组。
  • 不使用声明全局变量,而是使用全局指针指向使用MemGluePtrNew分配的内存。