Chinaunix首页 | 论坛 | 博客
  • 博客访问: 584814
  • 博文数量: 61
  • 博客积分: 4112
  • 博客等级: 上校
  • 技术积分: 749
  • 用 户 组: 普通用户
  • 注册时间: 2006-06-27 16:20
文章分类

全部博文(61)

文章存档

2016年(1)

2013年(1)

2012年(2)

2010年(1)

2008年(2)

2007年(25)

2006年(29)

分类: C/C++

2007-03-18 03:25:25

 

嵌入式移动开发----基于Palm平台的MapSearch开发心得

 

Palm以其低能耗,稳定,简洁高效等优良的性能,曾经一度雄居手持设备的霸主地位,但后期由于管理层经营不善,没能继续保持其绝对的优势,逐渐开始没落。虽然如此,Palm依旧以其霸气的外表和优良的性能得到了许多消费者的青睐。

很幸运我们选择了Palm

MapSearchPalm手机上使用的集地图浏览,标记,查找等功能于一身的一款小软件。虽然该软件的功能不是很复杂,技术含量也不是很高,但对于我们,作为在移动设备开发的处女座,还是很重要的。

在开发过程中,我们遇到了很多困难,同时也学到了很多,也总结了很多经验。

首先是开发语言,我们有两种选择,一个是Java,还有一个就是C,考虑到Java需要运行在虚拟机上,而该软件需要大量的图像操作,运算量比较大,如果用Java,最后的成品速度肯定会受到很大的限制。所以我们选择了C,因为它更接近操作系统,速度肯定是最快的,还有一个更主要的原因是我们更熟悉C,更熟悉面向过程的程序设计。

       选择好了开发语言,之后就进入了实质的开发阶段。

       首先,对Palm操作系统的工作原理有了大体的了解。大概用了一周的时间,初步理解了基于Palm平台的程序设计,不得不赞叹Palm的工程师们,整个系统架构都离不开低能耗和高效这两个手持设备中最重要两个原则。

       整个开发过程中,遇到的最大问题就是图像处理。

对于图片的格式,有两种选择,一个是bmp格式,还有一个是jpeg格式,经过试验,发现虽然jpeg格式的图片占的空间很小,但打开它需要花费时间和打开bmp图片的时间根本不在一个数量级上,而对于移动设备上的软件,特别是地图预览功能,速度是用户体验的关键,所以我们不得不考虑牺牲一些存储空间。其实空间也不是个大问题,因为我们可以把图片先存储到扩展卡上,用到哪部分,就把哪部分调出来就可以了,况且扩展卡有2G那么大,拿出几M也没多大影响。

       图片的格式已经确定。下一个问题是图片的显示,图片在显示的时候需要调入到动态内存中,而动态内存是相当有限的,只有65535k,看起来比较大,但不能把这些空间都用在存储图片上,况且Palm OS 5还没有突破64K的限制,也就是单个资源文件的大小不能超过64k,所以需要把地图进行合理的切割,编号,以便正确快速地调用。图片的切割是在PC机上预先做好的,对图片进行编号是个难点,具体技术实现过程可以参见开发文档。

       整个地图进行切割之后,开始考虑图片的显示问题。其中用到了图像显示的双缓冲技术,这样图片的显示速度有了很大的提高。除了双缓冲技术以外,还需要考虑如何合理的调用动态内存,以及释放问题,经过多次试验,发现一次调入9张图,采用9图矩阵的方法效果最佳。详细的算法说明可以参考开发文档。

       开发图像显示以及地图坐标系统部分大概用了2个星期左右的时间,之后就是处理地图上的标记问题,需要采用Palm上的数据库,该数据库采用的是链表存储结构,因为有了数据结构这门课程的基础,开发数据库部分还是比较轻松的。相对复杂的是用列表来动态地显示数据库内容部分,以及对其操作修改部分,花费了比较长的时间。在开发文档以及源代码中也作了比较详细的说明和注释。

       最后是标志搜索功能,这个功能可以找到最近的5处需要查找的标志,并且可以滚动精确定位。其中采用了快速排序算法和自创的“画圈搜索”算法。具体的技术细节在源代码和开发文挡中有体现。

       整个开发过程用了大概6个星期的时间,学到了很多,也吸取了很多宝贵的教训。比如,在开发初期,没有准确地把握好时间以及分工问题,导致后期的开发时间比较紧,有些功能还没能实现,这就涉及到软件工程方面的问题了,应该用工程学的角度来设计整个过程。

       在开发过程中,明显地发觉面向过程程序设计的局限性,特别是在对代码进行改进时,由于很多模块是相互关联的,导致如果要修改某个模块,其他模块也需要相应更改的麻烦,为了查找模块的关联性,需要不断地调试,浪费了很多时间。最后,代码的可重用性也没能得到很好的体现,主要原因还是在于开发初期没能全面分析软件的各个功能模块和相互的关联。

       虽然软件最终没能实现预期的最佳效果,但从这次项目开发过程中吸取了很多教训,为以后的开发积累了许多宝贵的经验。

阅读(2331) | 评论(4) | 转发(0) |
给主人留下些什么吧!~~