gpt4 book ai didi

palm-os - "background"中的多段 PalmOS 应用程序/库

转载 作者:行者123 更新时间:2023-12-04 07:12:01 26 4
gpt4 key购买 nike

我遇到的问题是:当使用 sysAppLaunchCmdNormalLaunch 以外的启动代码运行我的应用程序时,我不能使用默认代码段之外的代码 - 但我可以使用多段共享库,从而规避这个问题吗?

一些背景信息:我正在评估将现有移动应用程序移植到 PalmOS 的可能性。这个应用程序的一个核心部分是它每隔 10 分钟左右在后台进行一些网络通信,或者当它接收到传入数据时(通过网络/套接字回调)。在此期间,我无法访问全局变量,因此无法访问我的应用程序中除默认代码段之外的任何代码段。

现在的问题是,通信中涉及的操作(协议(protocol)、数据处理等)需要大量代码,而这些代码不适合一个段。除了在“后台”运行这么多代码是否有意义的问题之外,显而易见的问题是:我将如何运行它?因此,问题是,将代码放入共享(多段)库是否会有所帮助。

期待您的见解。

最佳答案

我没有使用共享库的经验,但是我们的软件遇到了这个问题,我们遇到了三种不同的方法来解决这个问题。

可能最简单的方法是在使用 Metrowerks 编译器时启用扩展模式,但我不完全确定这是否有效。这种特殊模式允许您在从非全局启动调用时访问某些常量全局数据。但是,使用这种方法有很多注意事项。此外,我还没有确认扩展模式肯定允许段间跳转。 Ben Combee 写的白皮书详细解释了如何使用扩展模式。它的标题是“支持 Palm OS 上的扩展模式”。我在网上找不到它,所以我在我的网站上放了一个副本:http://www.normsoft.com/tim/technical/Codewarrior_Expanded_Mode.pdf

另一个更复杂的选择是自己加载全局变量并将指向它们的指针放在 A5 中。为此,您必须修改(或复制)加载全局变量的 Metrowerks 启动代码,然后在收到非全局启动时调用此修改后的代码。 Metrowerks 包含运行时这部分的完整源代码,因此您可以很容易地做到这一点,尽管其中一些代码非常神秘。我们在 Pocket Tunes 的一个版本中成功地使用了这种技术,以在从非全局启动代码调用时访问全局变量和无限数量的段。只需确保从启动代码返回时恢复 A5。

最后的选择是将所有(或部分)代码移入 PNOlets。这可能会很痛苦,因为您必须将代码分割成 68K 和 PNO,这很快就会成为维护的噩梦。我们也成功地使用了这种方法,但是交互代码的维护很糟糕。我们最终使用 PEAL 加载程序将整个代码移动到 PNOlet,这对于大型代码非常有效,因为它会自动将代码分割成 64KB 的 block 并就地运行 ARM 代码。但是,这是一项非常大的工作,因为 PNOlet 开发在 ARM 上没有得到很好的支持,因此您必须自己提供很多低级支持(例如调用每个 API 函数的 thunk)。

关于palm-os - "background"中的多段 PalmOS 应用程序/库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/194445/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com