出于各种原因,90年代初期的笔式计算装置(pen computing device)还没有很好的发展就趋向了没落,正当人们想最后放弃由笔式计算装置带来的巨大商业效益时,Palm Computing推出了Pilot, 开创了一个新的历史。Pilot的市场增长速度比以往任何计算装置都快,甚至超过了从前电视和录像机的增长速度。那么,在以前的手持设备纷纷被淘汰出局的情况下,P alm Computing为何却能异军突起,创造一个又一个辉煌呢? 有丰富想象力的你,一定会对此做出各种推测吧。但我的观点是这样的:Palm Computing的成功很大程度上依赖于Jeff Hawkins(Pilot和Palm OS的发明者)所说的“用户经验”。见到Jeff Hawkins时, 我不由得联想起了过去时代的北方匠人(Yankee craftsman)。他是一个善于思考,精确缜密,重视设计简单化的人。他能设身处地的为用户着想,他能把自己当作一个新用户来把玩产品,这实在是难能可贵的一项技能。我曾听过一些传闻说在他开发G raffiti那段时期,当开会时,他老是拿东西在纸片上戳来戳去。人们认为他有些古怪,可实际上他是在想象着以一个真实用户的体验来测试G raffiti:“我能否用这玩意在会议上作纪录?”
另一个关于他的故事,是传说他有一段时间总是随身带着块木头,在上面按着些并不存在的按钮,对着它说话等等。人们又一次认为他有点疯了,而那一段木头在他眼里是P ilot。
我认为 Palm的成功就在于Jeff Hawkins完全根据“用户经验”来设计它。他在不影响用户使用的情况下尽可能使界面简单,从而让任何人都能快速而有效地学会使用,同时他也努力降低它的价格。
Jeff 过去和现在在Handspring做的第二件大事就是继续从开发者的角度从事开发。我曾在很多平台上开发过,我能肯定地说Palm OS是个人计算机发明以来最有趣并且最容易在上面从事开发的操作系统。这种容易和有趣也来自于设计,并带来无数免费和富有创新的Pa lm应用软件。
Palm Computing的历史
Palm的概念并非一夜而成。它的成就和成功道路不仅对Palm开发者,而且对从事任何新技术设计的人员有启发意义。
Jeff Hawkins和Donna Dubinsky创建了Palm Computing。Jeff过去在Grid工作。Grid以那从二楼摔下而不坏的laptop而出名。也许大家还记得,那时大多数PC是非常容易坏的。如果你的P C稍被碰撞,它上面的数据就会被损坏,因为在当时硬盘是很娇气的东西。因此我们对Grid的印象非常深刻。
Palm Computing从一个软件公司开始。最初他们开发Graffiti, 一种在所有的Palm OS设备上都找得到的速记方式的数据输入器。这种输入器被作为Newton和其它一些早期掌上机的附加产品出售。
除了Graffiti自身的成功之外,整个pen computing市场一度也很兴旺。Palm Computing在Casio Zoomer的开发上花了很大力气,但这个很有前景的设备不久也走了其它无数掌上机的老路。
但Jeff认定拯救pen computing市场的唯一出路是设计对路的硬件。为了成功的做到这一点,需要两个前提条件:Palm开发者必须设计出对路的硬件,同时还必须有人能提供P alm持续生产和销售设备所需的资金。
为了解决这些问题,Jeff带着他的木头四处奔走。早期的Palm OS的外观和感觉在HyperCard的基础上被开发出来了。一些重要的设计也先后产生了。更令人侧目的是,在基于输入笔的计算机市场剧烈崩溃的那段时间里,J eff却说服投资者投资了第一个Pilot。
在1996年3月,Pilot 1000开始在零售店出售。由在Pilot开发过程中与Palm computing熟悉起来的美国Robotics公司出资,无比精简又在基本功能上几乎没有缺漏的第一个模型问世了,当时售价是299美元。
在1997年,美国Robotic公司被3Com公司买下,于是Palm computing并入了3Com公司并搬到了3Com的大本营Santa Clara。在1998年春天,非常成功的Palm III登台亮相。在1999下半年,Palm computing又重新独立出来,又称为Palm computing 公司 。
Palm computing公司的整体结构
Palm computing已不再是3Com的一部分了。作为一个开发者你有必要知道它的整体结构。Palm computing由几个机构组成,其中有两个机构开发者是有必要知道,它们在历史上曾被叫做平台组和硬件组。
平台组,给你带来了Palm OS系统。他们要干的事就是开发Palm OS并颁发许可证。他们不关心硬件组在做什么。如果你想知道有关Palm OS的软件或工具的信息,就去问平台组吧。
硬件组,也是发放Palm OS的许可证的机构,但他们发放的是硬件许可证,他们直接与其它硬件许可证的领取者竞争。如果你对Palm computing公司特定的硬 件有疑问,就去问硬件组。
Palm 操作系统
在这部分里,将简单介绍Palm OS 的各个版本以及他们在使用过程中各自支持哪些特性。
版本1.0
1996年,支持版本1.0的Pilot 1000面市,接下来的是Pilot 5000。1.0版本后的其它版本在大部分功能上没有大的改变,这说明版本1.0在其最初设计上是很成功的。这一点就很了不起。
版本2.0
1997年二月,支持版本2.0的个人Palm Pilot和专业Palm Pilot面市。不久IBM的OEM产品也随即面市。专业Palm Pilot有一个TCP/IP内嵌堆栈,如果能正确的连接,它就能使Palm Pilot在TCP/IP网络上通信。
版本2.0在版本1.0基础上的改进十分保守,主要改进如下:
l 增加了TCP/IP支持
2 增加了滚动条
3 更容易对数据库进行分类和查找
4 更容易对文本框(fields)操作
5 更容易对类(categories)操作
6 更容易对事件操作
7 增加了许多标准字段操作功能
版本3.0
1998年3月,作为加盟3COM后的第一个Palm产品,支持版本3.0的Palm III 问世。推出此版本的主要动机是为了扩展Palm的是红外线发送(Infrared beaming)功能,由此添加了一组有关红外线的指令集。Symbol SPT1500 的3.0.2和版本3.0功能基本相同,其主要改进如下:
l 增加了红外线接口(Infrared beaming)及其完全帮助文件
2 灰度增加到四种:黑色、深灰、淡灰和白色
3 可调用的动态内存堆(dynamic memory heap)(用于程序运行)增加到了96K
4 增加了更先进的声音功能
5 更容易产生和使用自定义字体
6 为那些喜欢使用文件系统的人增加了文件系统
7 更容易的产生动态的窗体和控件
8 增加了进度条显示对话框(progress dialogs)
9 每个装置都有其唯一的序列号,只有在3.x装置中才支持此项功能。
l0 应用程序加载器(launcher)日渐成熟
版本3.1
1999年3月,支持版本3.1的Palm IIIx和Palm V问世。不久IBM把这些产品冠以自己的商标,但仍由Palm Computing生产。版本3.1有以下改进:
l1 对应用于0x88上的ASCII有一些微小的改变。
12 支持Dragon Ball EZ处理器
版本3.2
1999年5月,支持版本3.2的Palm VII问世。最初,Palm VII只在纽约出售,在年末被逐渐推广。Symbol公司的最新元件也是基于版本3.2的。
版本3.2主要是支持无线和网络功能。同时也增加了改进的串行通信软件。你应该检查配有3.2的产品是否具有这些功能,因为这些功能不一定是有效的,例如不支持无线接入。
版本3.3
1999年秋,支持版本3.3的一种新的Palm OS面市,其中包括Visor和TRG Pro。3.3版本的Palm OS对操作系统内部做了很大的删减,以便于更好的为第三方所使用。
版本3.5
2000年2月,支持版本3.5的第一个彩色Palm 问世。版本3.5的最大特点就是支持彩色。其主要改进如下:
l 支持256色
2 增加了图形按钮,可用位图显示其被选中或是没有
3 增加了滑动控件
4 增加了动态菜单
5 更容易编制配件(Gadgets)和用户自定义控件
语言的选择
Palm OS是由C++ API开发的,所以最有效和灵活的工具就应该是C了。C++用于开发Palm应用软件还存在一个普遍问题就是C++需要一块不被重新分配的内存。由于P alm的内存使用受到动态堆(dynamic heap)的很大限制,而C++应用软件又必需足够的内存才更有效的工作,所以使用C++开发Palm应用程序是不适宜的。
使用680x0汇编语言是开发Palm应用程序的另一个选择。即便是你花很长的时间也不一定能够打造出一个较好的编译器,尤其像是运行Motorola 68K系列之上的GCC编译器。当你十分渴望程序运行的飞快的时候,我建议你先用C编好代码,然后用一个好的性能评测工具(profiling tool)来找出程序中出效率最低的函数。再用汇编重写这个函数的代码,直至达到要求的性能指标。
一些工具例如Puma Satellite Forms可使你快速编写出复杂的应用程序。但它不如C灵活和性能好。在历史上,用这种方法开发程序的不足之处是程序许可受到限制。
另外,还有一种截然不同的方法,就是从网络上下载有关Palm VII的应用程序。Palm Computing会免费的提供各种工具使编程更加容易。
Palm设备的硬件
我们将更深入的探讨Palm OS硬件的一些细节问题。在编写程序时你或许并不一定用到,但是,知道了这些会让你更有效的使用Palm。
RAM和ROM
理论上讲,Palm OS能支持有很大的内存。今天Palm OS的最大内存为8M。TRGpro设备的Compact Flash卡可支持40M的扩展闪存。Palm内存具有快速且非易失的特点。它的非易失性是因为当Palm关闭后也有微小电流支持。这就是为什么不论你的P alm使用与否电池最后还是被消耗完的原因。这一点使得你不得不经常的更换电池。
Palm OS定义了一小块内存区域作为动态内存堆(dynamic heap)使用。程序中的栈(stack)、堆(heap)及其它动态部分都会用到这部分内存。在表1-1中列出了不同设备的动态堆的大小。对于支持T CP/IP的设备,TCP/IP将占用32K的动态堆栈。
Compact Flash卡或其它扩展卡上的闪存(flash memory),要比一般的内存(memory)慢的多。 到现在为止,只有Visor和TRGpro支持这种闪存。记住,闪存一定是在卡1而不是卡0上。在Palm OS的函数调用上你必须知道所用的是哪一号卡。
大多数的Palm OS使用flash ROM。这就意味着它们的操作系统在理论上是可以升级到较新版本的。而在Palm III、Palm IIIe、Visor和pdQ前的Palm不能升级它们的ROM。
Motorola 68328 “Dragon Ball”
Motorola 68328 “Dragon Ball”以及后来的68EZ328“Dragon Ball EZ”是Palm设备的处理器。和早期的Macintosh和Amiga计算机一样,它们是由68K处理器组成。但除了一般的基本元件外,它们还有定时器、并行口、可发出声音的脉宽调制电路(p ulse width modulation circuit)和LCD控制器等等。你完全不必要去直接的接触这些元件,否则,你就会陷入想知道操作系统到底怎样工作的困境,甚至会使你写的代码和P alm OS新版本或新的Palm硬件不相兼容的。
状态
Palm有三种操作状态:休眠状态、半休眠状态和工作状态。
当Palm处于休眠状态时,看起来就像被关闭了,如表现为黑屏等现象。实际上,此时的Palm确实和关闭差不多,它只使用很少的电量。一般情况下,可以按下绿色按钮或等着定时器将其转换为这种状态。
当Palm已经上电但没有事件发生时(如没有按钮事件或用笔触发事件),Palm就处在半休眠状态。你可以编写程序使Palm不能处于此状态,例如你可以不停调用E vtGetEvent()使之没有休息时间。但这样会用去你更多的电量。有时你必须编制这样的程序等待不确定的事件,但为节省电源,应尽量少用这种方法。
接口
所有的Palm 设备在底部都有一个串行口。当插入同步电缆后可使Palm与电缆另一端的设备同步。你也可插入Modem或其它硬件。
另外,新式的Palm都有一个红外线接口。大部分设备的红外线接口都在顶部。但是有一些Palm(如Visor)的红外线接口在机身的一侧。接口支持I rDA标准,因此在你进行适当的编程后,就可以同打印机、电视机、录像机或其它东西进行红外线通信。
Palm VII有一个连接Internet的无线接口,可以连接适当的无线设备。我极力推荐你使用Internet库和Socket服务。这样,你的代码就能和将来的无线方案及现在的诸如N ovatel的无线硬件设备兼容。
Symbol设备有一个集成的条码扫描仪。这对你开发使用条形码的商务应用程序很有用。Symbol有一个免费并且组织得很好的开发工具使你在需要时能容易地使用扫描仪。虽然我听说欧洲的一个超市连锁店在使用Symbol 设备使售货更简单, 但该设备到零售阶段还有一定距离。如今条形码到处都是。谁知道Symbol的前景如何呢?
SPT1740,一种Symbol设备,连接到了Symbol的无线局域网中。依靠这种连接,
你能通过socket服务让Palm设备上网。我想将来你会看到更多的使用Palm设备的解决方案。
Visor和TRGpro拥有可连接任何设备的扩展槽。Visor扩展槽是一个名叫Springboard的特殊设计。它是一个设计得很好的扩展槽,可惜目前还未形成标准。TRGpro是一个Compact Flash扩展槽。这个体系结构也存在一些局限之处,大多数使用Compact Flash扩展槽的其它设备都需要较大内存。Handspring和TRGpro都为它们的扩展槽提供免费的开发工具。
时钟和定时器
在Dragon Ball的内部有一个实时的时钟,它在设备为睡眠模式时仍能维持当前时钟。有一种时钟能每百分之一秒跳一次。它被操作系统用来完成询问屏幕,看时钟是否在走或记下输入笔的轨迹等各种任务。当你调用E vtGetEvent()时,系统需要等待一段时间之后再把控制交还给你。系统完成等待任务所用的时钟就是这个时钟。
屏幕
Palm设备的屏幕是160x160象素。所有的设备都能显示黑白两色(或用某些阴影对来表示黑色和白色)。带有Palm OS 3.0或更高版本的所有设备都能运行4种灰色的阴影。带有基于热度等等的对比度变化之后,除了图像和游戏之外,中间的两种过渡色变得难以区分。
Palm IIIc带有一个支持256色、具有革命性突破的火星矩阵TFT屏幕。这些颜色明亮而细腻。
声音
Palm设备使用置于Dragon Ball之内的脉宽调制(PWM)电路来发出声音。PWM电路本质上是一个相当快速的开关。使用这种电路非常快地开、关扬声器的电源能从扬声器中发出某种模糊的声波。
这种扬声器本身非常小,高音符的声音比低音符的声音大。从一个Palm设备得不到太多的低音效果。
置位
Palm设备上有三种置位:软置位、中置位、硬置位。
你可以按下位于设备背后的小孔内的小按钮实现软置位。如果你使用Palm III之类设备随机附带的输入笔,只要你旋下输入笔顶端的塑料部分,你将发现其上有一个小塑料棒正好可以插入置位孔。当然使用回形针也是可以的。软置位将清除动态堆。在调试本书的示例中我们将大量用到软置位。
同时按下Reset和上箭头按钮将使Palm中置位。在Palm文档中这类置位被称为“轮班置位”(shift reset)。如果应用程序对软置位的应答崩溃了,设备无法通过软置位真正实现置位。这时就使用中置位试试。由于中置位不通知应用程序置位正在进行,所以当一个应用程序占有了P alm操作系统并且在置位时崩溃了,你就可以提交一个中置位来删除这个讨厌的应用程序。
通过按下reset 按钮并保持按下状态,同时按下 o-n/off按钮并保持按下状态,然后放开reset按钮,再放开on/off按钮,这几步来实现一个硬置位操作。硬置位通常在产品被第一次使用的时候做,这样可以清除所有的客户数据。作为开发者,你也许会被问及“置位操作是否可以删除所有的数据”这样的问题。如果你的回答是:不能。那么你的所指的一定是一个软置位。如果你的回答是:可以。那么你的P alms设备一定是完全的不正常,需要做一次彻底清除数据的硬置位了。
如果你的Palm设备在硬置位后依然不正常的话,那么就去掉所有的电池,让Palm保持至少5分钟的掉电状态,然后再把电池放回去。这样做的效果同一次硬置位的操作一样。顺便说一句,掉电对Palm是无害的。
