Do everything if needed

Only to note everything I meet.

2010年7月21日 #

FindWindows的局限

摘要: 大家都习惯于使用FindWindow函数来找出之前创建的窗口句柄,从而判断某个程序是否已经加载,如果已经加载,就将其设置成前景窗口,而不是重新创建一个窗口。这样就达到了一个程序只能被执行一次的目的。 但日前调试时发现,这个用法是要有一些前提条件的。窗口的创建过程有时侯特别慢(有时可能需要在窗口初始化时做一些复杂的操作,从而使窗口的创建过程变长),而FindWindow总是在窗口创建完成之后才能找到该窗口。这样当用户连续点击两次按钮试图启动该程序时,问题就来了。第一次启动的程序正在创建它的窗口,而第二次启动的程序使用FindWindow在查询时没有查到窗口,所以它就继续加载一次该程序,造成程序. 阅读全文

posted @ 2010-07-21 07:10 microsun 阅读(1256) 评论(2) 推荐(1) 编辑

2010年7月19日 #

选择合适的数据类型

摘要: WINCE6中SDBus驱动中有如下代码,用来从一段给定的内存中的指定位置取出指定的几位数据。就这样一个功能,使用了如此多的代码,我个人认为是由于使用了错误的数据类型从而使其变得很复杂// Shifts pbInput down by dwBitOffset.staticVOIDShiftBytes(PBYTE pbInput, ULONG cbInput, DWORD dwBitOffset, ... 阅读全文

posted @ 2010-07-19 06:58 microsun 阅读(492) 评论(0) 推荐(0) 编辑

2010年7月13日 #

终于解决了一个让大家头痛的问题

摘要: 几个月以来,WM6.5在320x480分辨率的系统上不能启动的问题一直困扰着两个Team,直到这两天,FAE那边反映他们实在没有任何线索,而客户量产迫在眉睫。正所谓箭在弦上不得不发,累死牛也要拉动车。所以由我跟踪此问题。  已知的现象是在已有的几个240X400分辨率的平台上都可以正常启动。但在一个320X480的平台上启动之后不时的报gwes exception,task bar也不能显示。主界... 阅读全文

posted @ 2010-07-13 21:44 microsun 阅读(672) 评论(1) 推荐(1) 编辑

2010年7月12日 #

为WINCE鼓劲加油

摘要: 刚入道时很辛苦找了N久工作,也很幸运被老板选中,遂入WINCE之列。从最初的一无所知,到后来的略知一二但初生牛犊不怕虎,狂妄不已,至现在略有墨水但总觉水深而不能测,遂知天外有天,学无至境。然今年以来Android愈来愈火,Windows Mobile日渐势微。虽成为WINCE人全然是师傅之选择,但也忠爱有加,目前之形势实在让人心酸不已,不知Microsoft对此已黔驴技穷还是蓄势待发。祝愿WINC... 阅读全文

posted @ 2010-07-12 21:36 microsun 阅读(246) 评论(0) 推荐(0) 编辑

2010年7月9日 #

多个设备共享同一个硬件中断

摘要: 硬件中断线总是有限的,我们可能需要在已有的系统上做一些扩展,比如将串口扩展成好几个,有些硬件本身就设计成多个设备共享一条中断线,比如我的系统中两个串口就共享同一个CPU中断,任何一个串口发生中断以后都会触发CPU的同一条中断线,需要判断别的寄存器来确定是哪个串口发生了什么中断。 我们可以在OAL中分析各个中断源,然后返回不同的SYSINTR值,但这种做法扩展性不好。例如,OAL中设值某个中断源最多... 阅读全文

posted @ 2010-07-09 21:58 microsun 阅读(1566) 评论(0) 推荐(0) 编辑

WINCE驱动程序快速入门

摘要: 有人也许和我一样比较心急,想尽快知道如何去写一个具体的驱动程序,这里,假设您对驱动程序已经有比较好的了解,告诉大家一个快速上路的方法。当然,如果您有足够的时间我建议在动手之前还是深入了解一下CE整个系统架构。在CE中,最简单的一个驱动程序莫过于一个内置(Built-in)设备的流接口驱动。对于一个不支持热拔插的设备,最快捷的方法就是为其实现一个内置的流接口的驱动。对于这样一类驱动程序,我们只需要按... 阅读全文

posted @ 2010-07-09 21:57 microsun 阅读(558) 评论(0) 推荐(0) 编辑

2010年7月6日 #

Blog转移

摘要: 原来在 wincelblog.blogspot.com 中维护了一个Blog,但突然有一天发现Blogspot访问不了了,直到今年Google要撤出中国,才知道其中原由。后来转至csdn http://blog.csdn.net/Vichard,但CSDN BLOG太多,最近又将她安置与此处,感谢关注她的每一位朋友。 阅读全文

posted @ 2010-07-06 18:59 microsun 阅读(149) 评论(0) 推荐(0) 编辑

command lines for some WINCE CETK test case

摘要: 1 .command line OAL Timer test cases-backwardsRunTime-driftRunTime-wcRunTime-reentranceRunTime-idleRunTimeOf couse, those lines should be in -c "***"2. to set the buffer size in OAL CACHE tests.-c "ar... 阅读全文

posted @ 2010-07-06 18:52 microsun 阅读(271) 评论(0) 推荐(0) 编辑

Some bugs in CE6

摘要: There're bugs in almost all big system, I only hope that Microsoft could made more testing before relesing a product.1.Bugs in STDIO. Phenomena:Console over serial can't be used.Reason: There's a erro... 阅读全文

posted @ 2010-07-06 18:51 microsun 阅读(268) 评论(0) 推荐(0) 编辑

关于WINCE的几个疑惑

摘要: 做为一各WINCE程序员,经历了WINCE从2.12直至今天6.0的变化,感觉WINCE版本起来越高,功能越来越强,可是不知为什么有些地方越来越烂,现列举以下几个例子,大家伙评论评论.1.WINCE6.0中,竟然不支持老些的CD/DVD机,微软给了四款他们声称支持的DVD型号,可是我们在CEPC上测试时,一台也用不了,相反在我们的ARM平台上倒有两台能用.不知道WINCE为什么会不兼容老的硬件,而... 阅读全文

posted @ 2010-07-06 18:50 microsun 阅读(435) 评论(0) 推荐(0) 编辑

ARM开发过程中最最需要注意的问题

摘要: 平时大家接触最多的可能是X86平台,在这种系统上写程序几乎不需要考虑太多问题,但ARM上就不一样了,最常见也最容易被忽略的问题可能就是字节的对齐,即使像我这样有六七年程序开发经验的才手也时常难于提防,最近就有一个BUG,花了一天时间最终发现是对齐引发的,在此与大家分享,但愿大家能够注意到。  我在EBOOT中读取存在HARD DISK上的nk.bin文件,从而从HARD DISK上LOAD WIN... 阅读全文

posted @ 2010-07-06 18:49 microsun 阅读(345) 评论(0) 推荐(0) 编辑

磁盘分区详解

摘要: 众所周知,磁盘的分区分为两种:主分区与逻辑分区,其中逻辑分区是在扩展分区中创建的。主分区信息存放在MBR(Main Boot Record) 中,按其字面上的理解即为主引导记录区,位于整个磁盘的0磁道0柱面1扇区,即LBA 0。在总共512字节的主引导扇区中,MBR只占用了其中的446个字节(偏移0—偏移1BD),另外的64个字节(1BE---1FD)交给了DPT(Disk Parti... 阅读全文

posted @ 2010-07-06 18:48 microsun 阅读(1237) 评论(0) 推荐(1) 编辑

WINCE知识点滴

摘要: 1.CE下同名设备不能大于10CE5.0中已经没有这个问题了,以前的版本可以这样做:只给上层输出一个设备,然后用一个IOCTL去打开一个个的物理设备这样就可以做到不受任何限制了2.MDD与PDD一个驱动程序通常会被分成硬件相关(PDD)与硬件无关(MDD)层两部分。当然,这种分层不是必须的,只是采用这种分层以后可以少写很多代码,因为微软提供了很多驱动程序的MDD。即使CE中没有我们所写的驱动程序的... 阅读全文

posted @ 2010-07-06 18:48 microsun 阅读(211) 评论(0) 推荐(0) 编辑

WINCE的内存配置

摘要: WINCE的内存(包括SDRAM及FLASH)的配置包含两个方面:源代码(包括C和汇编)中的定义,及系统配置文件CONFIG.BIB中的定义。源代码中需要定义内存的物理及虚拟地址,大小,并初始化名为OEMAddressTable的结构数组,以告知系统物理地址与虚拟地址的对应关系,系统根据其设置生成MMU页表。而CONFIG.BIB中一般会将内存定义成不同的段,各段用作不同的用途。CONFIG.BI... 阅读全文

posted @ 2010-07-06 18:47 microsun 阅读(439) 评论(0) 推荐(0) 编辑

CE驱动开发入门之中断处理

摘要: 驱动程序开发过程中对中断的处理是很重要的一部分,直接关系程序的运行结果与效率,所以需要对其给予足够的重视. 中断处理包含两个方面,与CE系统相关的部分及与硬件相关的部分. CE系统特定的处理流程(与其它系统有所区别的,或者说这部分代码在其它系统上是无法运行的)一般为: 1.用CreateEvent创建一个自动事件(即不需要使用ResetEvent去重置事件. 2.用InterruptInitial... 阅读全文

posted @ 2010-07-06 18:45 microsun 阅读(255) 评论(0) 推荐(0) 编辑

CE BSP开发入门之重要的配置文件

摘要: BSP中有一些很重要的文件,我们在开发过程中必须要给予足够的重视。 1 mybsp.bat,位于BSP的根目录中,用于定义一些全局的环境变量,比如定义某个驱动的环境变量,从而使生成的系统支持此驱动。 2 source.cmn,位于BSP的根目录中,主要用于定义一些BSP及DRIVER中会用到的预定义及环境变量。 一般这个文件有以下作用: 1)定义INCLUDES,这样,BSP中的其它目录中就不用特... 阅读全文

posted @ 2010-07-06 18:45 microsun 阅读(379) 评论(0) 推荐(0) 编辑

书写高效的C代码

摘要: 驱动程序是系统很重要的部件,代码效率直接影响着系统的效率,因而书写高效的代码至关重要.1.代码中量不要使用位操作的结构体,而直接使用位操作,我写了如下的测试代码:typedef union Test_Reg{UINT32 value;struct {unsigned a : 5;unsigned reserved1 : 3;unsigned b : 4;unsigned reserved2 : 4... 阅读全文

posted @ 2010-07-06 18:44 microsun 阅读(270) 评论(0) 推荐(0) 编辑

开发DMA驱动

摘要: 使用DMA的好处就是它不需要CPU的干预而直接服务外设,这样CPU就可以去处理别的事务,从而提高系统的效率,对于慢速设备,如UART,其作用只是降低CPU的使用率,但对于高速设备,如硬盘,它不只是降低CPU的使用率,而且能大大提高硬件设备的吞吐量。因为对于这种设备,CPU直接供应数据的速度太低。 因CPU只能一个总线周期最多存取一次总线,而且对于ARM,它不能把内存中A地址的值直接搬到B地址。它只... 阅读全文

posted @ 2010-07-06 18:44 microsun 阅读(1635) 评论(0) 推荐(0) 编辑

WINCE下USBFN驱动程序的一些概念

摘要: USBFN,即USB客户端驱动,用来将一个WINCE设备模拟成一定的USB设备,让主机端(如PC)访问。目前WINCE提供的USB客户端有存储设备,串口设备,及RNDIS网络接口设备。存储设备用来将WINCE设备上的存储空间,例如FLASH,当作一块存储介质给主机访问,即将WINCE设备模拟成一个U盘。串口设备将设备与主机的USB连线模拟成串口,WINCE和主机端都认为它们之前连接上了一根串口线,... 阅读全文

posted @ 2010-07-06 18:42 microsun 阅读(667) 评论(0) 推荐(0) 编辑

SOURES文件详解

摘要: SOURCES文件是WINCE底层开发中最重要的文件之一,主要的配置项如下:TARGETNAME,定义模块名称.TARGETTYPE,模块的种类,可以是DYNLINK, LIBRARY,EXE.如果TARGETTYPE是DLL,则可以定义DLLENTRY,将Dll入口定义成别的不是DLLMain的函数,如果DLL的入口是DllMain,则不需要别的定义。如果TARGETTYPE是EXE,则可以定义... 阅读全文

posted @ 2010-07-06 18:42 microsun 阅读(310) 评论(0) 推荐(0) 编辑

导航