Palm OS 5开发概述
1.1. 内容简介:
- 介绍
- 发布时间表
- 基于 ARM 处理器的 Palm OS
- Palm 应用程序兼容性环境
- Palm OS 仿真器
- 安全 API
- 高密度 API
- 性能
- 支持 ARM 原码
- 采样声音 API
- Mac OS 管道开发工具( CDK
- Windows 管道开发工具( CDK )
- Palm 桌面软件的可扩展性框架
1.2. 介绍
本文是 Palm OS 5 版本的开发概述。本文旨在向你介绍 Palm OS 5 的新的体系结构、演示如何保证你的应用程序和新的硬件平台的兼容性以及介绍一些可用于你的应用程序的新功能。
在硬件设备上市之前, Palm OS 5仿真器 是主要的测试工具,可以到 仿真器 页面去下载仿真器的发行版本。测试你的应用程序以及快速地修改应用程序中的错误是非常重要的,这样做让你就能够确信你的应用程序是和 Palm OS 许可商推出的 Palm OS 5 设备是兼容的。这里有一些 Palm OS 5测试范例 ,可用于你的测试过程。
注意:本文不是整个 Palm OS 的概述,仅仅是指那些在 Palm OS 5 版本中新增的和经过明显改动的功能。如果你正在找关于 Palm OS 编程的介绍的话,请访问 开始 页面。此外,这也是一个概述。正式的文档里会详细阐述这里的每一个主题,访问 http://www.palmos.com/dev/support/docs/ 可以找到最新发布的文档,或者访问 资源馆 页面的开发者种子版块找到更新的、预发布的文档。
Palm OS 5 中最大的一个变化是它运行于 新的硬件平台 ,采用来自产业领导厂家 (例如英特尔、摩托罗拉以及德州仪器)生产的 ARM 系列处理器。这样能够保证在维持低费用、低功耗、易于使用和外观因素等已经让 Palm OS 设备风靡世界的特色的前提下,让 Palm OS 平台的速度和性能以及开发者开发的软件得到非常巨大的改进。
甚至在全新的硬件上,现有的 Palm OS 4.0 的应用程序可以不需要任何改动就能够运行,并且能够在老的和新的设备间共享数据。这是由 PACE 来实现的。 “Palm应用程序兼容性环境” ( PACE )能够保护开发者和用户的软件投资,并且为新的硬件提供非常强大的兼容性和转换途径。因为操作系统和 PACE 都是用 ARM 原码编写的,而且应用程序调用的每一个操作系统 API 都是以原码的方式全速运行的,所以运行于 PACE 之上的应用程序的速度能够得到很好的提升,并且可以使用高密度屏幕 (如果存在的话)。
新的开发工具 A HREF="#PalmSim">Palm OS 仿真器可用于测试和调试基于 Palm OS 5 的应用程序。 Palm OS 仿真器和 Palm OS 模拟器由很多相似的地方,比如都是运行在桌面系统之上、都有一个运行 Palm OS 的设备的窗口。但是 Palm OS 仿真器也有一些不同的、新的调试功能。仿真器是 Palm OS 5 作为一个 Windows 应用程序在本地运行的一种实现,和现有的模拟器一起将会成为一种主要的开发工具。模拟器和仿真器使用相同的调试协议,所以应用程序可以在两者上使用现有的开发工具(比如 Metrowerks CodeWarrior 版本 7 和 8 以及 PalmDebugger )来测试。
Palm OS 5 包含功能强大且和标准的 A HREF="#Security"> 安全 API ,包括 128 位 RC4 、 SHA1 和 RSA 校验密钥算法以及 SSL 3.0/TLS 1.0 服务。
Palm OS 平台现在也支持 高密度屏幕 (使用现有窗口管理器函数的扩展)。这些 API 可以用于多种屏幕分辨率, Palm OS 仿真器可以用来在 320×320 像素模式下测试应用程序,提供 4 倍于以前操作系统 API 支持的屏幕大小的屏幕。使用窗体、字体等标准 API 的应用程序能够在不需要任何代码修改的情况下,自动适应于高密度字体和图像操作。
运行于 PACE 下的现有应用程序的 性能 一般来说会得到显著的提高,提高的程度取决于包括运行 Palm OS 5 的设备的硬件性能和应用程序执行的详细情况在内的很多因素。在某些情况下,如果某些应用程序中时间很关键部分处于 “ 最坏情形 ” 的情况和存在性能问题时,这些应用程序可以考虑利用运行 ARM 原码提供的优良的性能。
假设所使用的设备具备合适的硬件的话,那么应用程序可以使用新的声音管理器 API 来播放和记录采样的声音。
Palm OS 5 的管道技术并没有明显的改动,但 Mac CDK 和 Windows COM Sync Suite 更新了,其技术已和现有的 CDK 技术一致了。 Mac CDK 支持兼容 Mac OS 9 和 Mac OS X 的管道开发。另外,同步管理器 API 已经被扩展了,用户管理器 API 已经移植到 Mac OS 中, Mac OS X 的 HotSync 用户界面也美化了。 Windows 管道开发工具( CDK )也为 Visual Studio.NET 添加了新的向导。 COM Sync Suite 支持大家熟悉的用户数据、 HotSync API 和管道管理器等的 API 。
现在 Palm 桌面软件提供一种允许开发者集成、扩展和访问 Palm 桌面软件的 可扩展性框架 。开发者可以使用 COM 接口把 Palm OS 解决方案的桌面软件部分直接集成到 Palm 桌面软件中。
1.3. Palm OS 5 发布时间表
Palm OS 5 已经完成并且全部软件都已经交付给了许可商。 Palm OS 许可商已经使用 Palm OS 5 早期版本进行了几个月的研发,并且正在生产基于 Palm OS 5 的硬件设备。但是 PalmSource 公司不能够公布新设备的上市时间和新设备的功能,请联系 Palm OS 许可商来获得他们将来的设备计划的信息。
现在开发者可以下载 Palm OS 仿真器和最终版本的 Palm OS 5 SDK 。仿真器是一个 Palm OS 5 基于 Windows 本地编译的独立的应用程序,它是非常理想的用于测试应用程序从而保证兼容性的工具。
PalmSource 公司总是会在操作系统发布之前和软件以及硬件开发者进行长时间合作,从而保证对于用户和开发者来说是一个平滑的过渡。 2000 年 12 月第一次公开展示了运行于 ARM 处理器的 Palm OS ,数百名开发者参加了于 2001 年 12 月举办的详细的研讨会( “Syncups” )。在这次研讨会上,开发者获得了关于 Palm OS 5 更加深入的信息,并且开始使用仿真器进行开发。在 2002 年 2 月举办的 PalmSource 开发商大会上,仿真器得到了广泛的推广,提供了很多的 ARM 平台可以供开发者使用。
1.4. 基于 ARM 处理器的 Palm OS
Palm OS 5 运行于新的硬件之上的、完全基于 ARM 的 32 位的操作系统。因为处理器速度的提高、 PalmOS 效率的提高以及软件性能的增强(比如高密度窗口管理器),现有的适合 Palm OS 5 的数千种软件将会比以前运行得更好。
选择 ARM 芯片有几个原因(其中最主要的原因是 ARM 芯片具有非常广泛的速度、惊人的每瓦特 MIPS 率),很好的成本效益和能够与许可商想要在设备中添加的硬件很好地集成。有几家供应商可以提供 ARM 芯片, 这样许可商、开发者和用户可有多种选择并可鼓励他们进行创新。
所有支持的 ARM 芯片都属于 4T 结构体系的范畴。开发者的应用程序不必知道运行于何种 ARM 芯片,因为操作系统把开发者和具体的硬件隔离开了,所以应用程序不需要进行重新编译。 ARM 芯片和 Palm OS 最初采用的摩托罗拉龙珠系列芯片(通常称为 68K )完全不一样:使用完全不同的指令集,在其它方面也有很大的不同,比如结构封装和整型数字节的排列。 PACE 可以让已经开发好的 68K 应用程序在 Palm OS 5 和将来的版本上运行就像在 Palm OS 3.x 和 4.x 设备上运行一样,不需要根据新的硬件进行任何改动。
在 Palm OS 5 中,除了 PACE 下的应用程序之外,任何程序都是以 ARM 原码的方式运行的。这就意味着,因为大多数应用程序的运行时间都是在调用操作系统的函数,所以在任何情况下都能够获得高性能。
运行于 Palm OS 5 上的应用程序的数据和参数格式和以前一样,所以在新旧设备进行交互时,不会存在兼容性和数据交换问题。 PACE 下应用程序中所有可见的保存的数据和内存中所有的对象都是 big-endian 模式的,和在 68k 设备上一样。 在调用操作系统程序时, PACE 会根据需要处理字节顺序的转换。所以,不必改动应用程序来处理 ARM 芯片中新的字节顺序和结构封装。
除非开发者需要把加强性能的代码转换成 ARM 原码模块(后面会阐述),否则开发者都可以使用现有的软件开发工具和集成开发环境( IDE )来创建运行于 Palm OS 5 之上的应用程序。 PalmSource 公司将会在 2002 年推出很多新的开发工具,并且支持完全 ARM 原码的应用程序开发,但是大多数开发者将会发现,在中短期时间内,使用现有的工具和运行于 PACE 之上是正确的选择。
1.5. Palm OS 应用程序兼容性环境 ( PACE )
那些现有的采用 Palm OS 4.0 正式发布的 API 、没有假设硬件、没有使用不支持的操作系统结构、运行于调试版本 ROM 的模拟器之上的应用程序通常都可以在 Palm OS 5 设备上正常运行。这是因为 PACE 解释了现有应用程序的 68k 指令,让它们能够在 ARM 处理器上运行。
PACE 没有模拟 68k 芯片和其它硬件,它也不运行以前的操作系统。 PACE 解释 68k 指令,并且通过调用 Palm OS 5 系统程序来处理 68k 指令(应用程序用来调用操作系统 API )。所以 PACE 对于内存和处理功耗都是非常有效率的,大多数开发者将会发现他们的应用程序和调试器能够像以前一样正常运行,除了速度上有区别之外。
但是,那些 “ 切入( hacked ) ”68k 操作系统、访问不支持的结构以及对硬件进行假设的应用程序的代码很可能不再像所想要的那样正常运行了。 PACE 会处理那些运行于 Palm OS 5 之上的、支持的函数和结构,而且将来不管操作系统如何发展, PACE 仍然会这么做。但是 PACE 不能正确处理那些含有不被支持的函数和结构的程序。 PalmSource 公司多年来一直建议开发者不要访问不被支持的结构,这样做的话能够保证他们的应用程序在 PACE 上正常运行。有的时候一个应用程序的错误会导致无意之中访问了一个操作系统的结构;由于 C 编程语言的工作原理,所以很难预先发现这样的错误,但是一旦在仿真器上发现了这样的错误的话,就可以很快地更正它。
建议测试访问不支持的结构的非常好的方法是在 .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 解决方案。