• 嵌入式
  • 软件

有网友反映,好久没有看到我在写关于嵌入式的技术贴了。是不是技术已经荒废了?

呵呵,最近事情的确比较多,只是抽空写一些比较短的blog,今天么,下午睡觉睡多了,晚上睡不着了。就写一些跟技术相关的东西吧。有些东西暂时处于保密阶段,就无法写的很详细了。

最近我在干什么呢?现在山寨举国横行肆虐,在“农业学大寨,工业学山寨”的号召下,俺也开始了山寨之旅。俺现在在做一个山寨版的软件,山寨的是某hu公司的某引擎。目标是把在这个引擎下能跑的小东东,都能够在Windows CE上跑起来。如果能够百分百支持的话,肯定还是有不小的市场的,至少能吸引不少眼球。

东西做了几个月了,无论自己写的,别人移植的,积攒了几十MB的代码了,完全编译一下也要5分钟了…虽然目前bug一大堆,但是还是比较有成就感的。有不少很酷的小玩意已经可以跑起来了,按套话说,填补了国内空白,达到了“国内一流,国际领先”水平。

具体coding了么,遇到的技术问题肯定不少。但是仔细想想,跟Windows CE相关的还真不多。因为几乎整个东西的架构,算法,数据结构都是自己的定义的,有问题很多时候都是自己的问题。跟OS接口的地方,只用了Windows CE一个窗口,没用任何control,API也没调几个…

就说一个跟窗口相关的问题吧,如何在Windows CE下建立异形窗体。异形窗体的建立,其实跟桌面Windows是一样的,SetWindowRegion API,基本没有别的办法。到了嵌入式设备上么,关键是效率,效率。如果跟桌面Windows上一样,GetPixel + CombinRegion来建立Region的话,创建一次就要1000ms以上,too slow,俺们的项目中要求,一定要降到100ms以下,否则就没得玩了。下面有一篇文章,某人提供了一个较好的算法,用预先建立好的bitmap建立异形窗体,他的方法是直接操纵bitmap的裸数据,然后按照点扫描bitmap两次,建立无数个高度为1的rect,拼成region。

http://www.codeproject.com/KB/mobile/cergn.aspx

我测试下来,比CombineRegion + GetPixel要快一些,大概400ms左右。还是不够好。经过绞尽脑汁,在该算法基础上,俺又做了一些优化,例如把创建单色bitmap的过程取消等等,最终结果10—20ms搞定!

你问咋做的?哎…貌似现在还不能公开,(跟没说一样)。