电脑技术学习

Palm OS 5开发概述

dn001

建议测试访问不支持的结构的非常好的方法是在 .c 和 .cpp 文件之前添加 “#define DO_NOT_ALLOW_ACCESS_TO_INTERNALS_OF_STRUCTS 。这样做会导致编译器在编译时会产生非正确的访问的标记。(在 4.0 SDK 更新版当中默认有这个预定义。) Palm OS 模拟器 3 、 4 或者更高的版本和 Palm OS 仿真器一样,也会产生非正确访问的标记,而编译器可能不会注意到这些非正常的访问。

用户不会知道应用程序正在 PACE 上运行 - 他们感觉不到任何以前的环境因素,也感觉不到额外的启动时间。相反,他们通常可以感觉到他们的应用程序和以前一样 - 由于操作系统和硬件的进步,也许能够感觉到比以前运行得更好、更快了。

尽管 PACE 这个缩写和 Palm OS 仿真器的缩写 “POSE 很相似,但是它们却是完全不同的两个概念。 PACE 让 68k 应用程序能够在基于 ARM 的 Palm OS 5 的设备上运行,从本质上来说, PACE 也是一个在 Palm OS 5 上运行的应用程序。和 PACE 形成对照的是, POSE 模拟一个物理设备的硬件和处理器,而且操作系统本身是由 POSE 来运行的。 POSE 通常仅仅被开发者使用,而 PACE 被包含在所有发售给最终用户的 Palm OS 5 的设备中。

1.6. Palm OS 仿真器

Palm OS 仿真器是 Palm OS 平台代码的一种实现方式,而 Palm OS 平台代码被编译后会在 Windows 上运行。从表面上看, Palm OS 仿真器和 Palm OS 模拟器( “POSE )很相似,都是运行在桌面电脑之上、都有一个运行 Palm OS 的设备窗口,而且都和调试器(比如 Metrowerks CodeWarrior 和 PalmDebugger )相连接。 这两个工具的使用方法也很相似,但是它们的实现和能力却大不相同。大多数开发者会在日常的开发当中同时使用 POSE 和仿真器,因为它们都有各自独特的、有用的调试和测试功能。

仿真器包含一些新的调试工具,比如交互式的数据库和内存堆观察器以及事件跟踪窗口。可以通过在仿真器窗口上点击鼠标右键来使用这些调试工具,而且这些工具已经被证明在常规的应用程序开发中是非常有用的。仿真器还包含一些其它功能,例如 Gremlins 和内置 VFS RAMDisk ,和 POSE 非常相似。

仿真器和 POSE 不同的地方在于,仿真器包含一个带 .ROM 扩展名的文件,这个文件不包含任何设备中的某种 ROM ,而且这个 .ROM 文件中没有任何可执行的代码。取而代之的是, Palm OS 系统代码、用户界面、网络栈等等都包含在 Windows 的动态链接库( DLL )文件中,这些 DLL 文件包含了仿真器大多数的内容, .ROM 文件只包含资源,如位图、窗体和其它数据。所以包含可执行代码、 DLL 和 .ROM 文件的整个仿真器 “ 包 可以看作是一个单个的程序包。不要把仿真器的某些部分和其它仿真器的某些部分混搭,也不要把仿真器的 ROM 文件和 POSE 使用的 ROM 文件混搭。

在 POSE 和仿真器的其它区别当中,仿真器对应用程序代码进行主动错误检查要比 POSE 少。例如, POSE 会观察内存分配,并且会告诉你内存溢出发生的地方,而仿真器没有这种机制。 POSE 非常接近于设备,它会模拟包括内存分布在内的所有方面,但是仿真器不会模拟某个特殊的设备,而只是实现操作系统的 API 和性能。应用程序在仿真器上运行要比在模拟器上运行快的多,运行 Gremlins 的时候就非常明显。所以仿真器和 POSE 是相互补充的,而不是相互替代的。

因为仿真器是以一个本地应用程序的方式在桌面电脑的操作系统上运行的,所以在 Mac OS 这样的 big-endian 系统运行就不能够可靠地仿真真实的 Palm OS 5 ( little-endian 系统)设备。(这实际上和 Palm OS 5 之前就存在的情形是相同的:因为 Mac OS 的处理器和字节顺序碰巧和 Palm OS 设备的相同,所以仿真器先前只能运行于 Mac OS 之上,但是现在仿真器也能运行于 Windows 之上了。) PalmSource 公司正在为 Mac OS 和 UNIX 平台 (现在仿真器不可用于这些平台)开发可以运行基于 ARM 处理器的 Palm OS 的模拟器。

1.7. 安全 API

Palm OS 5 新增加强大的安全功能。这种安全功能可以满足加密 / 解密、散列法、安全的通信和签名验证的需要。开发者可以访问下面的 API :

通过使用 RC-4 加解密代码实现加密 / 解密功能。 RC-4 是一种众所周知的、标准的流算法,它能够提供强大的数据加密和解密功能,一次只处理一个字节。
根据输入产生散列。 SHA-1 是另外一种标准的加解密算法, 它能够用于生成和输入唯一对应的 160 位输出的散列。生成的散列是无冲突的,而且不会暴露任何输入信息。
创建互联网标准的安全通道。由于支持 SSL3 ,所以 Palm OS 5 支持和所有安全的网络服务(如网站、安全的 SMTP 等等)通信。
通过使用 RSA 验证算法实现鉴权。经过 RSA 密码系统(工业中使用最广泛的系统)加密的数据能够通过 Palm OS 5 安全功能的检验。
1.8. 高密度 API

在具有新的高密度特性的 Palm OS 设备上,操作系统新增了对双密度屏幕( 320×320 )的支持,所以应用程序可以不需要经过任何改动就可以运行,而且在现在的屏幕上的效果看上去和在以前的屏幕上的效果一样地好。特别是字体和标准的用户界面控件将会受益于屏幕像素点的增加,而且根本不需要应用程序做任何修改。应用程序可以在现有的位图族中添加高密度版本的位图,从而获得更好的视觉效果。

系统通过定义两个坐标系统来使得现有的应用程序可以忽略屏幕的密度。系统默认使用的是 “ 原始 坐标系统,即使用 0 到 159 的坐标,符合现有的大多数 Palm OS 设备上 160×160 的屏幕。每一个原始坐标所表示的像素点的数目会根据屏幕密度发生变化。所以,当一个应用程序绘制一条从原始坐标( 0 , 0 )到( 5 , 0 )的直线时,在高密度屏幕上绘制 10 个像素点,而在低密度屏幕上则只绘制 5 个像素点。

如果应用程序想要特别地处理高密度屏幕,可以调用 WinSetCoordinateSystem() 函数来切换到 “ 本地 坐标系统。在 “ 本地 坐标系统中,坐标和屏幕上的像素点相匹配。诸如图像编辑器之类的应用程序为了能够以最大的精度来绘制像素点会这么做。因为如果位图族中包含一个高密度的位图成员的话,操作系统会自动绘制它,或者会根据屏幕格式把它转换为最佳大小的位图,所以在绘制位图时不需要改变坐标系统。

因为离线窗口默认为低密度,所以应用程序仍然可以直接访问离线窗口的数据位。(但是,如果应用程序直接访问屏幕的话,可能不能够获得想要的结果,因为由于屏幕技术不同会导致屏幕可能不是所期望的密度、不同的字节顺序或者其它的不同。) Palm OS 5 新增加了一些 API 函数,所以应用程序在必要时可以在一个较低层面来同时处理高密度和低密度位图, PalmOSGlue 提供一些非常有用的代码,应用程序可以借助这些代码在保持密度和处理器兼容性的同时直接创建和处理位图。

1.9. 性能

很多供应商都提供各种不同速度的 Palm OS 5 所采用的 ARM 系列处理器。在 Palm OS 5 的介绍中,时钟速度的范围很广,从几乎和现有的摩托罗拉的龙珠处理器相近的速度到可以让所有系统性能提高 100 倍的速度。

因为 Palm OS 5 是在 ARM 处理器上本地运行的,所以每一个操作系统的调用都会在保证和现有的、在龙珠处理器上编写的应用程序保持极好的兼容性的同时,在 ARM 处理器上全速运行。也就是说,因为大多数应用程序花费的绝大多数的时间都是在操作系统调用内的,所以在所有的环境中都可以获得高性能。在某些特殊环境(应用程序包含一个冗长的、耗时的算法, 而这个算法在操作系统程序上只花费很少的时间),性能可能会比期望的要差。下一节 支持ARM原码 稍微介绍了这些情况并讲述如何在保持应用程序和 68k 设备保持便于携带和兼容性的同时提供最佳的性能。

1.10. 支持 ARM 原码

几乎所有的 Palm OS 5 应用程序开发都是在现有的、面向 68k 的开发环境中进行的,而且所产生的 PRC 文件只包含 68k 代码。这样可以继续使用现有的、成熟的开发工具。早期版本的新的开发工具是 2002 年推出的,支持将来版本 Palm OS 的完全 ARM 原码的应用程序开发。但是在 Palm OS 硬件向 ARM 转变的过程当中,应用程序开发者还是基本上致力于 68k 应用程序(可借助于 Palm OS 应用程序兼容性环境 “PACE 运行于 ARM 硬件上)开发。

某些特殊情况(应用程序包含冗长、耗时的算法, 而这个算法在操作系统程序上只花费很少的时间),运行速度可能(出于最坏的考虑,比如在比较慢的 ARM 处理器上运行)还不如在 68k 处理器上的运行速度快。可以这么处理这些极少的情形:把耗时的算法转变成自包含的应用程序 ARM 原码代码块。初步的测试表明这么处理的效果非常好,算法的运行速度比在 68k 设备上的运行速度快很多倍。一般来说,在 200MHz 的 ARM 处理器上的运行速度是在 33MHz 龙珠处理器上的运行速度的 60 倍。

编译成 ARM 原码的算法可以调用 Palm OS 内部的程序,并且返回调用它的应用程序,但是它不能直接访问 68k 应用程序的全局或者局部变量(除非他们的指针已经传递给 ARM 原码), ARM 原码不能有全局变量或者静态变量,也不支持需要操作系统运行库支持的任何程序。 PACE 跳转到指定地址的 “ 原始代码 ,开发者的代码负责建立所需要的所有运行环境。一些参数会被传递给 ARM 原码,用于在应用程序和操作系统回调,还有一个应用程序定义的指针,这个指针指向的缓冲区的内容是应用程序定义的。在调用操作系统和 68k 应用程序时,原码必须对被传递的数据进行字节顺序差异的处理,同时也要处理结构封装、队列和参数组的字节顺序。

这是一个复杂的主题,而且到目前为止只有一些简单的工具可用,所以只建议那些具有丰富经验的 C 程序员在确实需要的情况下这么做。在 资源馆 网页的开发种子计划模块中会提供一些基于 gcc 的工具和范例代码。

1.11. 采样声音 API

现有的声音管理器在 Palm OS 5 中明显得到了增强。现在声音管理器支持播放和记录 8 或者 16 位立体声和 mono 任意(整数)采样率的采样声音,具有一个重复采样器和一个 16 通道的软件混音器,还包含用于播放标准 WAV 格式(没有压缩的 PCM 或者 IMA4 位自适应微分,被称为 IMA ADPCM )的声音。许可商的硬件可能包含对混音器或者其它功能的支持。

可以同步或者异步播放声音,多个声音流会被自动混合在一起。每一个声音流可以单独启动和停止,而且可以单独调节音量或者立体声均衡。可以在一个单独的缓冲区中播放声音,或者应用程序提供一个回调函数,这样声音就可以变成声音流:实时解码和生成。

系统因点击屏幕、错误音等等而播放的声音也已经被转换成了采样声音了。(目前,预发布的仿真器有的声音是用于测试目的的,将来不会用于发行的设备上。)

1.12. Mac OS 管道开发工具( CDK )

现在 Mac OS 管道开发工具( CDK )包含有为 Mac OS 9 或者 Mac OS X 上的 Palm 桌面软件 4.0 版本开发 HotSync 管道所必需的库和头文件。这个 CDK 中的新的用户管理器 API 包含一套新的辅助管道和应用程序安装的 API 函数。有几个以前只是在 PC 的 CDK 中包含的同步管理器 API 函数已经别添加到 Mac CDK 中了。 HotSync 的用户界面也已经针对 Mac OS X Aqua 升级了,提供和 Mac OS X 一致的外观和体验。 C/C++ Sync Suite 中关于 Macintosh 的 Companion 和 Reference 文档已经更新了关于新的 API 的细节和 Mac OS X 的 CDK 功能内容。

1.13. Windows 管道开发工具( CDK )

现在 Windows CDK 包含了更新后的 Visual Studio.NET 的项目文件 / 向导。另外, Windows CDK 中 COM Sync Suite 部分也已经更新了扩展的 API 函数。那些以 Visual Basic 或其它与 COM 适应的语言来使用 COM Sync Suite 来开发管道的开发者现在可以访问管道管理器、用户数据、安装助手和 HotSync API ( HSAPI )了。管道管理器对象可以用来在安装时为 HotSync 管理器注册管道。用户数据对象可以用来访问存储在桌面电脑中的用户数据, HSAPI 对象可以用来控制 HotSync 管理器应用程序。安装助手对象可以用来查询设备安装的数据库和应用程序。那些在 C/C++ 管道开发中使用上述 API 的开发者将会发现在 COM Sync Suite 中也具有相同的功能。

1.14. Palm 桌面软件的可扩展性框架

Palm 桌面软件 4.1 版本新增了两项允许开发者扩展其功能的技术: 插件和扩展件。 Palm 桌面软件 SDK 支持使用 Visual C++ 和 Visual Basic 来开发插件和扩展件。可扩展性框架可以让开发者插入应用程序到 Palm 桌面软件,并且可以让桌面应用程序的开发者提供集成的、完整的 Palm OS 解决方案。