Do everything if needed

Only to note everything I meet.

2011年8月28日 #

关于GPS使用上的一个怪异问题

摘要: 我的系统GPS最低层提供的端口是COM5,GPS Provider提供的端口是COM6。这几天发一个问题:当开着某一个程序反复待机,就会出现死机。最后定位到是该程序启动了GPS引起的,它打开的COM5,如果使用COM6则没有问题。虽然死机问题已经解决,然不大清楚到底是什么原因引起的。不知其它人有没有遇到过类似的情况? 阅读全文

posted @ 2011-08-28 20:58 microsun 阅读(292) 评论(1) 推荐(0) 编辑

2011年8月10日 #

CE不能开机的可能情况

摘要: 一般来说CE的BOOT问题可以从如下方面入手:1,如果能调到调到调试串口的初始化函数,说明内存的配置是正确的(可以在该函数中写个死循环来验证),当然也能说明一个最基本的问题,kernel的入口 startup的实现是对的,nk.exe的加载地址也是对的。2,如果OEMInit函数能调到,基本的初始化也能调到,一般来说sp=fffffc(具体数记不到了)都能调到。3,初次做WINCE,ADS用的又比较熟的人需要注意一个问题:WINCE成功启动以后会不停的产生软中断,所以不时进入SWI是正确的,千万不要认为有问题。4,sp地址能正确打印但仍不能启动时,需要查一下RAM与NK是否有重合。5,gwes 阅读全文

posted @ 2011-08-10 07:20 microsun 阅读(575) 评论(1) 推荐(0) 编辑

直接编辑DLL文件,去掉某个链接函数

摘要: 近日,在做一款产品时,因为对开机速度的要求很高,我们将系统剪裁到最小,只剩下kernel,filesys,device和需要的驱动等。但我们使用的一个DLL链接了PostMessage,这个函数应该在GWES存在时才会有。所以该DLL不能被加载。因为该DLL是第三方提供的,没有源码,我们无法去掉对PostMessage的调用。厂家也不愿意修改。所以尝试直接编辑DLL。 首先,用IDA分析,找到使用PostMessage(编号865)的内存位置。但这段内存在IDA中不可读取,更别说编辑了。所以用uledit打开该DLL文件。找到对应的地址后,发现DLL用一段内存在存放import,整个impo. 阅读全文

posted @ 2011-08-10 07:07 microsun 阅读(2766) 评论(0) 推荐(0) 编辑

2011年8月1日 #

CAB包的自动化编译及注意事项

摘要: 因之前的自动编译脚本不能实现CAB包的编译,所以系统中使用的CAB包都是工程师自己编译好再上传的。最终系统中使用不是自动编译过程生成的CAB包,CAB包的质量及正确性无法保证,主要是源代码,因CAB包不参加编译,发生过不至一次源代码与CAB包不一致,甚至源代码根本无法编译的情况。所以才痛下决心要将CAB包加入到自动代码编译过程中。以下是遇到的一些问题及注意事项。 1, 生成CAB包的工具以WINCE Cab manger最好用,但它不支持命令行模式。我这里采用WINCE自带的工具cabwizz。在public目录下搜索即可找到。它包含一个EXE和一个DDF文件。cabwizz的使用方法比较简. 阅读全文

posted @ 2011-08-01 21:28 microsun 阅读(1573) 评论(0) 推荐(0) 编辑

2011年7月30日 #

蓝牙打印机的连接方法

摘要: 一般的手持蓝牙打印机都使用串口协议与主机通信,实现打印。WINCE提供了查找,配对及与蓝牙设备建立串口连接的界面。但那个界面不是很友好,优其对非专业人士来说太过复杂。下文讲述自行开发这样一个程序的方法。1,准备工作。蓝牙相关的功能需要使用到socket函数库,所以程序先要调用WSAStartup来初始化socket库。2,查找蓝牙设备。调用 WSALookupServiceBegin来启动一次搜索。然后反复调用WSALookupServiceNext,直到找到想要的设备,或者此函数失败。最后调用 WSALookupServiceEnd结束本次搜索过程。示意代码如下。WSADATA wsd;HA 阅读全文

posted @ 2011-07-30 13:45 microsun 阅读(13786) 评论(0) 推荐(0) 编辑

2011年7月29日 #

WM系统有用的注册表(研发人员使用)

摘要: 1,修改默认区域:[HKEY_LOCAL_MACHINE\nls\overrides]"LCID"=dword:00000804 (设置为语言代码即可)2,控制面板中电源管理的设置:如果我们自己了控制面板中的电源设置功能,而去掉系统默认的功能,直接将[HKEY_LOCAL_MACHINE\ControlPanel\Power]下的Redirect设置成空就行,但如果将它设置成空,点击任务栏的电源设置按钮将无法调用到我们自己开发的电源设置程序。所以需要将Redirect设置成我们自己的程序。 阅读全文

posted @ 2011-07-29 22:10 microsun 阅读(443) 评论(0) 推荐(0) 编辑

2011年7月26日 #

SetCurrentIME的问题

摘要: 近日收到一个需求:需要在系统开机时自动将输入法切换成全屏手写输入。但如果直接修改注册表,将系统默认输入法设置成全屏手写后,就不能开机。所以写了一机自动加载的程序,在该程序中调用SetCurrentIME将输入法切换成全屏手写。但发现需要点击一下屏幕才能切换成功,而且使用软件模拟点击不是行的。不知道有没有人遇到过,如何解决的?代码如下:#include <windows.h>#include <sipapi.h>GUID csidInput={ 0x5AAFAF99, 0x8D99, 0x4466, 0xA6, 0x6D, 0x95, 0xC4, 0x4B, 0x60, 阅读全文

posted @ 2011-07-26 22:19 microsun 阅读(399) 评论(0) 推荐(0) 编辑

2011年7月13日 #

活用SVN

摘要: 最近在改进daily build脚本时发现,老的脚本会先将代码checkout到一个空目录,再拷贝到需要使用的目录去,这样多一次拷贝过程,加长了编译的时间。所以想省掉这个拷贝过程,直接将代码checkout到目标目录。基本方法是:先将目标目录清空,但其中有一个目录是编译脚本,CHECKOUT代码的脚本就在其中,如果删除这个文件会引起编译过程中断,所以存放编译脚本的目录不能删除。作为自动编译的过程如果不清空之前的文件又不太稳妥善。经过试验发现一个办法: 将此不能删除的目录中的所有.svn文件夹删除。 checkout时使用--force选项,这样此目录在checkout时会被打上版本信息,整个. 阅读全文

posted @ 2011-07-13 23:03 microsun 阅读(1296) 评论(1) 推荐(0) 编辑

2011年6月10日 #

使用DOS命令实现选择菜单

摘要: 为了方便大家使用一个脚本,决定将用户输入变成一个命令行式的菜单,这样用户直接选择即可。原理比较简单,将指定目录下的所有子目录都列举出来,并编号。指示用户输入,如果用户输入为N,就跳过前面N行,读取一行数据。就得到了我们想要的子目录名。代码摘录如下:PRODUCT_LIST为事先指定的需要列举的目录名。在for循环中不停变化的变量在FOR循环中输出时需要做特殊处理,此段代码中为:@ cmd /V:ON/C echo !COUNT!: %%x即cmd /V:ON /C,打开延缓环境变量扩展。同时取变量值时需要用!将变量括起来,而不是%dirlist.txt是存放子目录列表的文件,也可以用一条指令: 阅读全文

posted @ 2011-06-10 07:13 microsun 阅读(3761) 评论(0) 推荐(0) 编辑

2011年6月7日 #

【实用技巧】Windows Mobile 手机连接电脑时,如何使用GPRS上网,同时跟电脑保持连接。(USB和GPRS共存问题)

摘要: 【实用技巧】Windows Mobile 手机连接电脑时,如何使用GPRS上网,同时跟电脑保持连接。(USB和GPRS共存问题) 最近移动项目接近尾声,以及很多相关的新项目又接踵而至,所以经常需要带着手机到处去演示。现在有个问题就是,我们连接的是移动专网,而且带了手机卡验证,没有办法通过互联网去连接,这就需要我们一边连着电脑一边去连接GPRS上网,之前公司的D600搭配ActiveSync 4.5是可以的,就是把高级网络功能关闭,这样既可以连接电脑,又可以上GPRS,后来不知怎么的,不能用了。只好另想他法,在国外论坛上面,我发现了一个方法就是使用Pocket Controller。步骤是:1、 阅读全文

posted @ 2011-06-07 21:17 microsun 阅读(465) 评论(0) 推荐(0) 编辑

2011年6月5日 #

重新加载驱动的方法

摘要: 因一产品的串口上同时接着IRDA和外接串口,默认功能为IRDA。启动之后如果测试外接串口,就不能打开设备端口,所以写了一段代码先Deinit此设备再加载,这样IRDA使用的设备句柄已经无效,IRDA功能不再有效。但外接串口可以使用 阅读全文

posted @ 2011-06-05 20:55 microsun 阅读(1654) 评论(0) 推荐(0) 编辑

WINCE中使用键盘钩子的注意事项

摘要: 这几天因为一个项目需要处理多按键,驱动程序需要在多个产品上使用,所以觉得在驱动中修改不合理,遂使用一个键盘钩子程序来处理。网上关于键盘钩子的帖子还真不少,大家都提到了WINCE下的coredll没有export钩子相关的函数,但通过动态加载的方法可以使用,按这种方法还真可以注册成功,但试来试去就是不得不到按键消息。后来查询相关文档,与同事讨论发现,原因在于我是在一个没有窗口的程序中做的这些事情。而键盘钩子必须在一个有消息队列的程序中去做。至于有人说的回调函数必须在一个DLL中实现倒是不必要的。 阅读全文

posted @ 2011-06-05 08:42 microsun 阅读(579) 评论(0) 推荐(0) 编辑

2010年11月12日 #

不能待机问题之跟踪

摘要: 前些天接到一个BUG:系统有时不能待机,即发出待机命令之后很常时间都不能进入Suspend状态,如果再让其进入ON状态也能成功。测试发现如果使用一个程序再释放一下unattended状态系统还能进入Suspend状态。初步判断是某个程序使用了unattended状态之后没有释放,所以在使用了unattended状态的程序中都加了调试信息,结果发现所有的程序进出unattended状态都是成对的,也... 阅读全文

posted @ 2010-11-12 22:29 microsun 阅读(419) 评论(0) 推荐(0) 编辑

2010年10月17日 #

如何写出优秀的代码

摘要: 从业十年,看到过许多优秀的程序员,也见过不少平庸之辈,更有不少只能转做其它。原因我想也许他们一开始对自己的要求就不高,更重要的也可能是他们没有抓住程序的本质,没有搞清楚如何才能把事情做好。首先想把每个程序都做到最好这种信念是先决条件,人首先要有志向,只要想做好才有可能做好,下文所有的内容都是给这类人写的,如果只想混口饭吃,或者以后想做市场等其它方面的人就不用想这些事了。以下是我认为比较重要的几个原... 阅读全文

posted @ 2010-10-17 21:44 microsun 阅读(5728) 评论(13) 推荐(4) 编辑

待机唤醒速度慢的跟踪及解决历程

摘要: 这两天又接到一个Bug:大家都抱怨待机唤醒的速度太慢。首先我们假定应用程序没有这么大的功力来影响系统,主要从驱动方面入手。当然主要是要找出是哪个模块在待机和唤醒时比较慢,有以前编译PM模块的经验这个问题变得很简单:在PM调用SetDevicePower设置各驱动的电源状态时计算一下实际花了多少时间。经统计发现NLED和AUDIO驱动都比较慢,花费300ms以上,而且AUDIO驱动在进D3和D4状态... 阅读全文

posted @ 2010-10-17 19:01 microsun 阅读(2658) 评论(0) 推荐(0) 编辑

2010年10月13日 #

解决唤醒屏不亮的问题之总结

摘要: 前几天报来一个BUG:有时唤醒后屏不亮,USB连接已经在起作用,但连不上ActiveSync。初步判断是哪个驱动在进入D0状态时死掉了,从而引起PM无法继续进行下面的动作。所以写了一个程序去查是哪些驱动还在D4状态,果然有一些驱动依然是D4状态。但无法确定是哪个驱动的问题。所以在PM.dll中打印调试信息。  首选将PM的代码都拿过来加上信息,将其链接成动态链接库。搜索WPC下的PM.dll文件,... 阅读全文

posted @ 2010-10-13 07:13 microsun 阅读(1627) 评论(1) 推荐(0) 编辑

2010年10月4日 #

Mobile 6.5的音频问题

摘要: Windows Mobile从5.0开始就有一个问题:打电话时cprog.exe会有内存泄露。以前系统内存小,很快就发现可用已经内存消耗完,最近做的系统内存变大了,没有注意到这个问题。但会把cprog.exe全身的内存空间用完,以致引起一些奇怪的现象,最后使用一些内存分析工具才会现是这个程序的内存使用完了。 最后通过试验发现cprog.exe在打电话时会播放MID文件,文件名在如下注册表中: [HKEY_CURRENT_USER\ControlPanel\Sounds\Dialing] [HKEY_CURRENT_USER\ControlPanel\Sounds\Ending]通过将声音文件. 阅读全文

posted @ 2010-10-04 09:40 microsun 阅读(399) 评论(0) 推荐(0) 编辑

2010年9月19日 #

Wave接口开发注意事项

摘要: 今天为了验证AUDIO驱动的稳定性,特开发一个AUDIO的测试程序。该程序打开一个文件之后,用很多线程同时向AUDIO驱动发数据包。从而了解了WAVE接口函数的使用方法。在WM6的public\common\oak\samples目录下有一个waveplay的例子程序,Wave函数的基本用法可以从那里得到。基本流程为:WaveOutOpen,WaveOutPrepare,WaveOutWrite.WaveOutUnprepare,WaveOutClose.这里需要注意的是如果只使用一个BUFFER,则使用例子程序完全可以搞定。如果要使用多个BUFFER,则需要注意:对于一HDR结构体,如果还没 阅读全文

posted @ 2010-09-19 21:16 microsun 阅读(681) 评论(3) 推荐(1) 编辑

三星平台开发笔记

摘要: 近日开始三星平台的开发,了解到一些6410特有的现象,予以记录。 1,6410芯片内分很多电源域,可以分别开关,但需要注意关掉某个模块的电源之后将不能访问其上的寄存器,如果访问会引起ARM死锁,且不可恢复。关掉时钟后是可以访问的。 2,6410的Camera interface似乎有BUG(只是一种猜测,不敢确定):它没有中断状态寄存器,即表示Capture或者Preview中断是否有效的寄存器,只有对应的一级中断,当一级中断来时即表示有这两种中断之一,这里没有问题。但程序如果在中断还没来时就去清除就会引起Camera interface混乱。 3,6410的MARB总线似乎有缺陷。... 阅读全文

posted @ 2010-09-19 21:09 microsun 阅读(429) 评论(1) 推荐(1) 编辑

2010年8月24日 #

手机性能指标的建议

摘要: 最近在对比各品牌手机时发现一个有趣的现象:某些品牌宣称自己使用了很大容量的电池,所以其通话时间及待机时间都很长。但仔细对比时发现,相对大品牌的手机而言,它多出的电池容量并没有带来相应该的通话时间及待机时间,所以我提议,手机性能参数中引入一个单位电池容量(如1000mAh)的通话时间及待机时间,加上它本身标称的时间就可以很好的反应手机的真实质量。下面举几个例子:            Nokia 8... 阅读全文

posted @ 2010-08-24 06:19 microsun 阅读(2878) 评论(0) 推荐(0) 编辑

导航