




已阅读5页,还剩21页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
在mediaplayer全屏播放的时候,我可以用键盘上的某一个键调节声音大小,现在我想在屏幕上显示调节的结果就跟我们看电视一样能出来一些标记。当声音变大在屏幕上就增多,当声音变小的时候就减少得到播放窗口的DC,然后在上面显示一个不同颜色的矩形或者其它形状。在ce自制平台中如何添加自己的驱动?cec文件和reg,bib文件有何区别?看混了,不知道如何才能让驱动注册到平台中。另外,reg和bib是我在编写驱动必须要自己写的么CE的驱动分为本机驱动和流驱动,本机驱动你可以修改源码(在%_WINCEROOT%PUBLICCOMMONOAKDRIVERS),然后build驱动源码,之后用PB编译内核。流驱动是以DLL的形式被系统程序加载的。加载流驱动要在注册表中添加信息,这和cec文件没关。如果你想把此驱动DLL和注册信息作为一个整体给别人使用,那么就要做一个cec文件,PB能够读取cec文件内容并加载到内核工程中。cec文件相当于安装程序。我安装的是evc4.0,我开发的系统要显示中文比如姓名什么的。在编辑的时候是中文显示,但是到了输出时,显示的都是乱码。不知道应该怎么去解决EVC的模拟器不支持中文。所以显示出来的都是乱码。1、你可以只显示英文,调试结束后在改界面为中文。2、安装PB,PB的模拟器支持中文。CStatic及其控件的文字无法垂直居中显示,虽然在evc的资源编辑器中可设置,但是一旦运行,却无法垂直居中显示这种情况正常,而且除此之外还不能右对齐。获取设备ID的种类有哪些除了手机模块外,还有CF卡有序列号、硬盘有ID号、网卡有MAC号等。这几种方法数获取手机模块ID最简单。在应用程序中,如何向修改本机的ip地址等网络参数,并使之立即生效?网络设置保存在注册表中,位置HKEY_LOCAL_MACHINEComm网卡名称ParmsTcpIp,例如常见的CS8900网卡设置:HKEY_LOCAL_MACHINECommCS89001ParmsTcpIpEnableDHCP=dword:0DefaultGateway=DNS=11UseZeroBroadcast=dword:0IpAddress=Subnetmask=设置之后要生效有两种办法:一种热启动,调用KernelIoControl(IOCTL_HAL_REBOOT,NULL,0,NULL,0, NULL),热启动时间很短暂;另外一种调用DevieceIoControlAPI,传递IOCTLIOCTL_NDIS_REBIND_ADAPTER。如何向控制面板中那样,修改系统声音的音量调用APIwaveOutSetVolume(HWAVEOUT,dwVolume),一般参数1为0。在HKEY_CURRENT_USERControlPanelVolume下是系统声音的注册表设置。在应用程序中如何实现jpg、gif图片的显示有几种办法:1、在MSDN中搜索标题为“WindowsCE.NETTechnicalFrequentlyAskedQuestions”的文档,其中有一个问题“HowcanIdisplayJPEG,GIF,andothergraphicsfiles?”,下面就是答案。2、如果安装了WindowsCE5.0,一个例子源码位于WINCE500PUBLICGDIEXSDKSAMPLESSIMPLE。3、用IWebBrowser组件实现。在应用程序中如何实现系统待机voidGwesPowerOffSystem(void);在WINCE下如何实现键盘钩子我写了一个简单的例子,把其中主要部分截取出来放到了我的FTP里。用户名以及密码均为winceuser,地址是6//SourceCode/用钩子禁止系统键.rar。在WINCE中如何得到网卡MAC地址事实证明,获得物理网卡的MAC地址并没有被统一成一个API或者IOCTL,如果网卡驱动程序没有提供接口的话只能直接访问寄存器获得。读者可以参考目录WINCE500PUBLICCOMMONOAKDRIVERSNETCARD里的一些驱动源码。WindowsXPEmbedded和WindowsCE有何区别简单地说WindowsXPEmbedded采用WindowsXP内核,只能运行在x86处理器上,优点是能够运行PC上现有的应用软件,缺点是授权费太高,标价¥900元;WindowsCE采用WindowsCE内核,能够运行在多种处理器上,如x86、ARM、SHX、MIPS等,优点是授权费低,最低Core版标价¥30元。缺点是需要单独开发应用软件、定制内核,甚至开发BSP、Driver。wince下只是把调制解调器的驱动挂接在了com1,如何将器驱动挂接在com2上?1、在HLMdriversbuildincom2unimodem下复制和com1一样的数据2、在HLMExtModems HayesCompat下改写Port为COM2:,再改写FriendlyName为HayesCompatible在COM2:。如何定制自己的外壳1、先开发一个外壳软件,假设名称为MyShell.exe2、删除注册表HKEY_LOCAL_MACHINEinit下如下一行:Launch50=explorer.exe3、在注册表HKEY_LOCAL_MACHINEinit下添加如下一行:Launch50MyShell.exe上述的“LaunchXX”中的XX为序列数,内核依据这个序列数按由小到大的顺序来分别执行所有子键列出的应用程序,具体数值应该为多少请参考帮助文档的说明。如果原来的内核中添加了标准外壳(standardshell)组件,或者添加了其它组件而这些组件需要依赖标准外壳,那么在PB中是无法删除标准外壳组件的,解决办法一是保留explorer.exe在内核中,二是删除依赖标准外壳的组件。我原来的工程是x86版本的,编译选项只有x86,我如何能够编译ARM版本的两种办法:1、用EVC新建一个工程的时候,建议复选“CPUs”列表,这样发生了这种事情也能够轻易通过选择“WCEConfiguration”工具栏中的CPU列表来编译不同CPU版本的软件2、如果打开工程后CPU列表中只有x86,而此时已经安装了ARM版本的SDK,那么单击EVC菜单“build”“configurations”,然后单击“add”按钮来添加CPU。通常情况下WINCE采用串口1作为调试时输出信息用途,要正式出产品前如何去掉串口1的调试功能正常情况下串口1只有在编译debug版本的内核时才在BootLoader中初始化串口1用于输出信息,而编译release版本会跳过此代码。而有些BSP设计成没有宏定义,也就是说无论什么版本都会在BootLoader中初始化串口1,这样造成WINCE启动后串口1无法被应用程序使用。对于这种情况只能在BootLoader源码中删除初始化代码,如OEMInitDebugSerial。基于wince的应用程序能建成consoleproject么?不能ARM系统外扩一片512KRAM,驱动程序经过映射可以使用这一段RAM。1、应用系统如何使用这一段RAM?要加一层驱动吗?2、如果要将这一段RAM当作RAM盘存储系统,该如何作呢?应该要加文件系统吧,如何加呢?解答这个问题前,先要说一下WINCE的地址映射机制。对于包含MMU(存储器管理单元)的处理器来说,如ARM和x86,WINCE要求OEM在定制内核的时候填写一个虚拟地址与物理地址映射关系的表,称为OEMAddressTable,在这个表中定义了所有物理设备的起始物理地址,对应的起始虚拟地址,地址空间大小,RAM就包括在其中(如果是x86平台还要求RAM起始虚拟地址从0x80000000开始)。如果有多片RAM,应该在OEMAddressTable中将它们定义在一起,使之地址连续。对于非OEM的开发者来说,他们拿到的是定制好的内核,不能做任何修改,如果在产品中外扩一片RAM,只能通过API函数通知操作系统增加一条虚拟地址与物理地址映射关系表项。相关API函数有两个,分别是CreateStaticMapping和VirtualCopy。它们的相同之处是都用于建立物理地址和虚拟地址的映射关系。它们的不同之处是CreateStaticMapping映射的虚拟地址范围在0xC4000000到0xE0000000之间,这个范围只能由内核访问,一般用于ISR访问,因为ISR只能访问静态映射的虚拟地址空间,不能用VirtualCopy。VirtualCopy通常和VirtualAlloc配合使用,映射的虚拟地址空间在0x80000000以下,一般用于驱动程序和应用程序访问。1、应用程序要访问这片RAM,和驱动程序访问方法一样,调用VirtualAlloc和VirtualCopy。2、可以做一个流驱动程序专门用于读写这片RAM,这样所有应用程序就可以通过调用流驱动接口函数来访问,非要加文件系统也是可行的,通过修改注册表就可以做到,但是麻烦一些。我怎么能在PB左边的定制平台加进我的驱动呢?两种办法:1、在platform.bib或者project.bib的MODULES部分添加一条语句,例如:MyDriver.dllC:DriverMyDriver.dllNKSH这样编译内核的时候就会把你的驱动DLL文件添加到内核中,如果有注册表需要设置,在platform.reg或者project.reg中添加注册表内容。2、通过制作.cec文件来添加驱动,制作.cec文件的优点是只需制作一次,以后就可以通过将.cec文件导入到PB的Catalog中,象PB自带的feature一样通过菜单“AddtoOSDesign”添加到左边的内核工程中。WINCE有没有相对路径概念?如果没有如何得到当前模块的路径?1、WINCE没有相对路径概念,只有绝对路径,所以凡是涉及到路径均为绝对路径。2、调用APIGetModuleFileName,传递一个模块的实例句柄就能够得到模块的绝对路径。怎样让POCKETWORD打开*.dat格式(里面都是数据)的文件?两种办法:1、调用APIShellExecuteEx,在结构体SHELLEXECUTEINFO中添加.dat文件的路径。2、调用APICreateProcess,在第二个参数中设置.dat文件的路径。x86RomBootLoader真的可以实现吗?它确实能代替BIOS启动计算机?RomBoot被设计存放在Flash/EEPROM中,也就是原来BIOS的位置,这样当上电后CPU到固定地址执行代码,也就是执行了RomBoot的代码,它对整个硬件系统进行初始化和检测,并且支持通过网卡从远程机器上下载nk.bin或者从本地IDE/ATA硬盘的活动分区中寻找nk.bin文件加载。RomBoot的优点就是引导并且加载速度快,而且它自身完成了所有的操作,这样就不用BIOS、MSDOS,更不用Loadcepc了。对于x86RomBootLoader,如何Build得到Romboot.rom?1、在PB中打开一个内核工程(x86的)2、单击PB菜单“Build”“OpenBuildReleaseDirectory”3、用cd命令进入%_WINCEROOT%PlatformGeodeRomboot4、build如何设置、更改显示分辨率能否设置、更改显示分辨率由显示驱动程序决定,而没有统一的标准。例如CEPC,在启动的时候可以通过设置loadcepc.exe的参数/L来决定WINCE启动后的显示分辨率,这是由于显示驱动“VGALinearFramebuffer”支持,而Geode可以通过在定制内核时修改注册表项来决定WINCE启动后的显示分辨率。几个硬件使用同一个IRQ,那么发生中断的时候系统怎么判断到底是哪一个硬件发生的中断呢?ISR里面又应该怎么控制呢?WindowsCE支持多个设备中断共享一个IRQ,当一个共享IRQ发生时,CE内核的异常处理程序检测设备特定的寄存器,因为大多数设备都有一个单独的寄存器用于表示设备的活动状态,所以通过遍历共享这个IRQ的所有设备的寄存器就可以判断哪个设备发生中断。nk.exe加载一个giisr.dll,这个.dll是微软提供的,它其实是第一个可安装ISR。默认CE内核就是调用这个dll来检测寄存器状态的,当然OEM可以编写自己的.dll。CE内部有一个ISR链,也就是可安装ISR。因为CE允许OEM添加自己的ISR处理程序,所以ISR被设计成一个链表。排在前面的ISR比后面的ISR优先处理中断,如果当前ISR能够处理当前中断,那就返回中断ID由IST处理或者返回SYSINTR_NOP,如果当前ISR不能够处理当前中断,那就返回SYSINTR_CHAIN让下一个ISR处理。请问在wince中如何在内核中增加一个与windows同级的目录?在platform.dat或者project.dat中添加语句。例如要创建根目录下子目录ProgramFiles,语句如下:root:-Directory(ProgramFiles)文件格式如下所示,我想把每行的4个值读到4个变量中,用EVC如何编程?第一行:460.000,3384672.357342,521268.972763第二行:475.117,3384663.772419,521281.415271伪代码如下:FILE*stream;stream=_wfopen(La.txt,Lr+);if(stream=NULL)return;fseek(stream,0L,SEEK_SET);while(!feof(stream)fwscanf(stream,L%s,WCHAR1);fwscanf(stream,L%f,float1);fwscanf(stream,L%f,float2);fwscanf(stream,L%f,float3);fclose(stream);GWES组件的功能有哪些?GWES不仅负责GDI、窗口、消息,还负责管理本机设备驱动程序,负责加载显示、键盘鼠标、触摸屏驱动程序,而且GWES本身包含电源、LED驱动程序。如何在PB中预先设定好存储内存和程序内存的大小,我想多划分一些空间给程序内存?两种办法:1、在定制内核时在config.bib文件中设置FSRAMPERCENT=number,具体number可参考标题为“FSRAMPERCENT”的帮助文档。这种办法是修改内核的设置,所有一直有效。2、在应用程序中调用APISetSystemMemoryDivision,如果函数返回SYSMEM_CHANGED表示成功,如果返回SYSMEM_MUSTREBOOT表示需要热启动才能有效。这种办法需要每次启动后调用API才有效。如何取消鼠标光标?通过取消SYS变量来实现此目的,在PB命令行下键入“setSYSGEN_CURSOR=”,然后回车确认。EVC下调用TextOut如何编译会出错?类似这样的问题很多,这是因为EVC的帮助文档内容有错误。可能EVC的帮助文档内容是从桌面Windows帮助文档复制过来的,所以很多API函数还有例子代码都有错误,例如帮助文档中包含一个API函数的说明,但是实际编译的时候提示没有这个API,有的例子代码采用ANSI字符串,而WINCE的API都是宽字符版本,造成直接复制过来编译失败。因为MFCforWINCE的CDC类中没有TextOut成员函数,所以编译会出错,可以用其它类成员函数ExtTextOut或者DrawText替换。我如何将我的dll软件让现有的ce系统认可?尽管我也知道应该使用signfile.exe程序进行签名,但是我并不知道那个ce系统认可的签名应该是啥如果你说的WINCE系统内核已经加入了签名认证机制,那么没有私钥对你的DLL文件签名肯定是无法运行在此内核中的,一般签名密钥的密钥长度都是1024位,很难破解。如果查看WINCE注册表中的内容?两种办法:1、建立同步后,用EVC自带的工具“RemoteRegistryEditor”打开查看。2、从网上下载注册表查看工具,放到WINCE设备中。调用directshow出现链接错误,如何解决?player.obj:errorLNK2001:unresolvedexternalsymbol_IID_IVideoWindowplayer.obj:errorLNK2001:unresolvedexternalsymbol_IID_IMediaControl这是因为链接器没有找到合适的.lib文件。两种办法:1、在EVC菜单Toolsoptionsdirectories里把libraryfiles的路径重新调整一下。如果你只安装了EVC自带的StandardSDK而没有其它SDK,可以指定WINCE目录中的.lib文件路径,例如D:WINCE500PUBLICDIRECTX OAKLIBX86RETAIL。注意CPU的类型。2、安装SDK,前提是导出SDK的PB内核工程必须包括DirectShow或者其它组件。在PB的config.bib文件中,“IMGFLASH”表示什么意思呢?表示能够刷NK到ROM中,具体请查看标题为“IMGEnvironmentVariables”的帮助文档。x86平台如何映射各种地址空间?如何编写中断服务例程?如果是x86平台,可以调用HalTranslateBusAddress转换物理总线地址到物理系统地址,调用HalTranslateSystemAddress转换物理系统地址到逻辑总线地址,也可以不调用这两个函数,因为x86平台除32位物理地址外还有16位的IO地址空间,对于16位的IO地址空间,可以直接调用WRITE_PORT_UCHAR或者READ_PORT_UCHAR等函数直接读写端口。对于32位物理地址可以调用VirtualAlloc和VirtualCopy来映射。这样做思路清晰,简单明了。在x86平台要实现ISR,有如下几个步骤(以GeodeBSP为例):1、用SETUP_INTERRUPT_MAP宏关联SYSINTR和IRQ。以“SYSINTR_”为前缀的常量由内核使用,用于唯一标识发生中断的硬件,又称为中断ID。在Nkintr.h文件中预定义了一些SYSINTR,OEM可以在Oalintr.h文件中自定义SYSINTR。2、用HookInterrupt函数关联硬件中断号和ISR。这里提到的硬件中断号为物理中断号,IRQ为逻辑中断号。在InitPICs函数的最后调用了HookInterrupt函数,如下:for(i=64;i80;i+)HookInterrupt(i,(void*)PeRPISR);/用ISR关联16个中断号3、调用InterruptInitialize函数关联SYSINTR和IST创建的事件对象,也是IST等待的事件对象。详细内容请参考GeodeBSP源码。在x86平台要实现可安装ISR,先调用LoadIntChainHandler函数注册在注册表中指定的ISRDLL,然后填充GIISR_INFO结构体并调用KernelLibIoControl函数将此结构体传递给可安装ISR。详细内容请参考WINCE帮助文档或者我著的WindowsCE下驱动开发基础。修改了WINCE自带的驱动程序后如何编译?如果是自己开发的驱动程序如何编译?1、分为IDE方式和命令行方式。IDE方式的编译很简单,以PB5.0为例,打开定制内核的工程,在左边的“workspace”“FileView”中找到你已经修改了的目录,然后单击右键弹出菜单,在菜单中选择“BuildandSysgenCurrentProject”,这样PB就会编译指定的目录中的项目源码文件,然后执行sysgen命令根据source文件中的内容生成目标文件并复制到当前内核工程目录下。命令行方式的编译需要打开“BuildOS” “OpenReleaseDirectory”,以cd命令进入你已经修改的驱动程序目录中,然后键入“buildcfs”,然后键入“sysgenp项目名称”,一般项目名称为source文件中的“TARGETNAME”。2、如果想完全自己开发驱动程序,建议直接采用EVC或者PB来编写编译。开发PCI设备驱动时,InterruptInitialize函数的第一参数是否是PCI卡配置空间信息中的InterruptLine参数?是否需要在HKLMDriversBuiltInPCITemplate加一個自己的subkey,并填写相应内容?如何填?1、InterruptInitialize的第一参数是IRQ,也就是逻辑中断号,而不是物理中断号,InterruptLine是指物理中断号2、需要在template下加自己的PCI设备的信息,例如:HKEY_LOCAL_MACHINEDriversPCITemplateSerialDll=Com16550.DllClass=dword:07SubClass=dword:00ProgIF=dword:02VendorID=multi_sz:0AF0,B320,B320DeviceID=multi_sz:0020,0300,0302Prefix=COM而这些信息就来自于你执行pcienum.exe的结果。编译器报错:errorC2065:CFileFind:undeclaredidentifier,如何解决?MFCforWINCE版本没有CFileFind类,所以要查找文件只能调用APIFindFirstFile和FindNextFile。如何设置WINCE系统字体、字号?如何设置自己开发的软件的字体、字号?1、系统字体通过注册表设置。如下:HKEY_LOCAL_MACHINESystemGDISysFnt/系统字体Wt=420Ht=18Nm=ArialHKEY_LOCAL_MACHINESystemGWEMenuBarFnt/菜单栏字体HKEY_LOCAL_MACHINESystemGWEMenuPopFnt/弹出窗口字体HKEY_LOCAL_MACHINESystemGWEMenu/菜单字体HKEY_LOCAL_MACHINESystemGWEButton/按钮字体2、创建字体时把字体高度参数设置大点就可以了。如CFont:CreateFont(nHeight,.),也可以在LOGFONT结构中设置字体高度或者字体种类。如果是控件,调用控件的SetFont成员函数。如果是直接画,在OnPaint响应函数中调用SelectObject选字体到DC。nk.bin和nk.nb0有什么区别?这里提到的bin是一种二进制镜像格式,以片断(section)为单位组织数据,每个片断都包括一个头,头里指定了起始地址,长度,校验值。PlatformBuilder调用工具将WINCE内核所有文件以bin格式合并成一个文件,默认文件名为nk.bin。BootLoader又以同样的格式将nk.bin分解成多个文件放到RAM中。可以在命令行中键入“viewbinnk.bin”来查看bin文件中具体包括了哪些内容。键入Cvrtbin命令转换.bin格式文件为.sre格式或者.abx格式。nb0格式是原始的二进制镜像,它不包括头,一般情况下将内核下载到设备的RAM中运行都采用nb0格式。要生成nbx格式的文件,需要在相关.bib文件中确定如下值:ROMSTART、ROMWIDTH、ROMSIZE。在不采用硬件计时器的情况下如何创建更精确的计时器?最精确周期能否达到1毫秒?对于精确值的要求不同,所采用的办法不同。以下阐述几种办法。1、在单线程中循环调用APISleep函数,Sleep函数精确程度为如果Sleep(N),那么实际睡眠时间在N到N+1毫秒之间。而且还要注意调用Sleep的线程优先级的问题。如果任务过多并且此线程优先级低,那误差就更大些。2、调用APIQueryPerformanceCounter函数,举例如下:LARGE_INTEGERliFrequency;if(QueryPerformanceFrequency(&liFrequency)/查询系统时钟的频率,这里将返回1000liFrequency.QuadPart/=1000;LARGE_INTEGERliTimeOut;if(QueryPerformanceCounter(&liTimeOut)/得到截至到当前累计发生的系统时钟中断次数liTimeOut.QuadPart+=liFrequency.QuadPart;/计算下一秒到来时总的中断次数是多少LARGE_INTEGERliCurrent;doQueryPerformanceCounter(&liCurrent);/循环查询累计的的中断次数while(liCurrent.QuadPartliTimeOut.QuadPart);/到达下一秒调用QueryPerformanceCounter同调用Sleep在本质上都是一样的,都是在单线程中无限循环等到周期一到执行任务,相比较QueryPerformanceCounter要比Sleep更精确些,越精确就越要求线程的优先级,保障线程能够正常得到处理器。3、以上办法难以保证周期精确到1毫秒并且WINCE系统稳定地运行,所以要从中断入手。以x86平台为例,先在Timer.c中将默认的SetTimer0 (TIMER_COUNT)中的TIMER_COUNT/2,SetTimer0函数负责设置系统时钟的频率,默认1毫秒发生一次中断,如果除以2就是0.5毫秒发生一次中断。然后在fwpc.c文件中修改ISR函数PeRPISR,因为原来默认是1毫秒发生一次中断,在处理INTR_TIMER0时系统负责累计计数、管理线程的调度,返回相应的SYSINTR值,而我们没有办法再添加代码返回自己定义的SYSINTR值,所以现在要修改原来的处理代码,例如设置一个BOOL型变量,TRUE就执行原来默认的代码,而FALSE就返回我们自己定义的SYSINTR值,这样即不影响原来的ISR处理,又加入了我们的中断响应代码。ISR返回我们定义的SYSINTR后WINCE内核激活相对应的EVENT事件,我们就可以在我们编写的IST里处理任务了。flash中存放了BootLoader和内核镜像,如何把剩余flash部分划分为一个存储区域供应用程序读写?以WINCE提供的驱动(FAT文件系统和MSFLASH驱动)来举例说明。如果采用默认common.reg中的注册表设置,那么MSFLASH驱动默认把整个flash作为存储区域来读写,这不符合问题的要求,所以必须告诉MSFLASH驱动程序可供读写的区域的起始地址和长度。以下是一个注册表例子:HKEY_LOCAL_MACHINEDriversBuiltInFASLDDll=fasld.dll/实际Flash存储器的驱动程序Order=dword:2/该驱动程序相对于其它驱动程序的加载顺序Prefix=DSK/前缀Ioctl=dword:4/IOCTL码,设备管理器加载驱动的时候调用IOControl函数,传递这个IOCTL码。Profile=MSFlash/Profile名称,也就是HLMSystemStorageManagerProfilesMSFlash/当设备管理器加载此驱动程序的同时发送通知给系统,IClass(GUID)的值表明这是一个存储设备的驱动程序。IClass=A4E7EDDA-E575-4252-9D6B-4195D48BB865MemBase=dword:00000000/Flash中可供读写区域的起始物理地址,也就是Flash的首地址+偏移量MemLen=dword:00000000/Flash中可供读写区域的长度HKEY_LOCAL_MACHINESystemStorageManagerProfilesMSFlashDefaultFileSystem=FATFS/MSFlash驱动默认采用的文件系统PartitionDriver=mspart.dll/采用的分区驱动程序MountAsRoot=dword:1/此目录作为文件系统的根目录Folder=NORFlash/目录名称Name=FLASHDiskBlockDevice/Flash驱动名称PartitionDriverName=MSPART/分区驱动名称AutoMount=dword:1/自动装载检测到的分区AutoPart=dword:1/自动分区AutoFormat=dword:1/自动格式化分区HKEY_LOCAL_MACHINESystemStorageManagerAutoLoadMSFlashDriverPath=DriversBuiltInFASLD/Flash驱动在注册表中的位置LoadFlags=dword:1/这个值可以被设置为0、1、2。1表示同步加载,其它表示异步加载Order=dword:0HKEY_LOCAL_MACHINESystemStorageManagerFATFSFriendlyName=FATFileSystem/文件系统名称Dll=fatfsd.dll/文件系统驱动程序Flags=dword:00000064/标志,详见帮助文档Paging=dword:1/是否分页EnableCache=dword:1/是否允许缓存数据CacheSize=dword:0/指定缓存大小,0表示默认驱动程序如何发通知给应用程序?这里介绍一下常见的两种办法。1、驱动程序调用APISendNotifyMessage,发送特定的消息给应用程序,这就要求应用程序要有消息循环机制并且要事先做好消息的处理。参数1为窗口句柄,可以设置HWND_BROADCAST表示广播消息。要注意的是不要在参数中传递指针(虚拟地址),因为执行驱动程序的线程和应用程序并不在同一个进程空间中。解决办法可以利用内存映射文件技术,比如在驱动程序中创建一个内存映射文件对象,申请一块物理内存,然后把对象名称和内存长度传递给应用程序,应用程序打开同名的内存映射文件对象,读取里面的数据。对象名称可以事先协定好,也可以通过注册表来传递,内存长度是32位值,通过消息参数就可以传递,也可以通过注册表来传递。另外一种解决办法是在定制内核时候预留一块物理内存,这样驱动程序和应用程序都可以通过VirtualAlloc和VirtualCopy来映射到同一块物理内存,其原理同内存映射文件技术一样,但是这块物理内存不具备通用性。最后一个办法是应用程序事先将一个缓冲区地址传递给驱动程序,驱动程序调用MapPtrToProcess映射应用程序传递过来的地址,当驱动程序调用SendNotifyMessage后应用程序可以直接到该地址中读取数据。设备管理器就是调用此函数广播WM_DEVICECHANGE消息的。另外WINCE的一个例子程序RNAApp在拨号连接建立的时候也是调用这个函数广播WM_NETCONNECT消息的。2、驱动程序调用APICeEventHasOccurred指明一个事件A发生,在此之前应用程序调用APICeRunAppAtEvent将驱动程序指明的A事件和一个应用程序名称相关联,或者和一个事件B相关联。这样当A事件发生时,如果指明和一个应用程序名称关联,那这个应用程序就会被启动。如果指明了和一个事件B相关联,那么等待事件B的线程将被激活。如果想了解当前系统内部所有驱动程序支持哪些类似事件A的事件,调用APICeNotifyPublic_FilterEvent,在该API的帮助文档里也列举了常见的事件,例如NOTIFICATION_EVENT_NET_CONNECT和NOTIFICATION_EVENT_NET_DISCONNECT。EVC创建的工程名称如果用中文就出错,该怎么办?用EVC创建的工程名称如果为中文将导致资源文件打不开和编译出错,可以改资源文件名称为英文,再编辑.rc文件中的资源文件名称。但建议尽量不要用中文为工程名称。作为习惯,应该在EVC创建一个工程后,立刻在“project”“settings”中设置资源的语言属性,然后在“resourceview”中设置每个资源的语言属性,这些工作做完后再修改资源就没有问题了。有人询问对话框的标题为乱码,其原因就是在没有修改语言属性的情况下设置标题为中文。WinCE下如何读写几百兆的大文件呢?使用内存映射文件吗?一般嵌入式设备配备128MB物理内存就算顶级的了,所以要读写几百MB的文件用内存映射文件技术是最好的选择了。映射文件之后读数据是非常容易的,要注意的是写数据,内存映射方面的API没有提供改变文件长度的功能,所以要在关闭映射文件对象后用文件API改变文件长度。请问如何改系统调度的默认时间片值?更改schedule.c文件中的dwDefaultThreadQuantum变量,然后重新编译该文件并SYSGEN。调用APICeGetThreadQuantum就知道更改是否生效。如何让系统加载自己写的驱动程序?两种办法:1、在HKEY_LOCAL_MACHINEDriversBuiltIn下添加注册键。2、在应用程序中调用ActivateDeviceEx。在一些文件中用分号来表示注释,例如下面的内容;CESYSGENIFSERVERS_MODULES_HTTPD;CESYSGENENDIF在“CESYSGEN.”前加了“”,有没有什么特别的含义?在WINCE的一些文件中,用“;”作为注释并在注释文字中用CESYSGEN作为标记,后面接条件语句。Cefilter.exe工具负责按照条件来筛选文件内容,所以不要轻易地删除包含CESYSGEN的注释语句。通过串口建立ActiveSync联接,串口线用三线的可以吗?不可以,因为用串口同步时要用到其余口的状态。WINCE是否支持MAPI?不支持。WINCE自带的pmail.exe软件也不是很好用。建议自开发邮件收发软件。如果需要购买WINCE下邮件收发软件可以联系我。如何旋转屏幕显示的内容?例子代码如下(前提是显示驱动程序支持旋转):DEVMODEdevmode=0;devmode.dmSize=sizeof(DEVMODE);devmode.dmDisplayOrientation=DMDO_90;/垂直模式devmode.dmFields=DM_DISPLAYORIENTATION;ChangeDisplaySettingsEx(NULL,&devmode,NULL,0,NULL);/改变显示的设置CRectrcWorkArea(0,0,320,240);/整个屏幕尺寸/设置客户区大小并广播消息,这样所有软件也就随之更改显示SystemParametersInfo(SPI_SETWORKAREA,0,(void*)&rcWorkArea,SPIF_SENDCHANGE);请问如何修改字形缓存的容量?HKEY_LOCAL_MACHINESystemGDIGLYPHCACHElimit=dword:0400如何得到从WINCE启动开始到现在的时间?调用APIGetTickCount,得到的值为32位整数,单位为毫秒。如何调用WINCE的软键盘?调用APISipShowIM(SIPF_ON),前提是内核加入了软键盘组件。基于HIVE的注册表,如何在系统关闭前保存注册表的数据到文件system.hv?调用APIRegFlushKey函数。使用VirtualAlloc和VirtualCopy的时候需要注意哪些事项?1、VirtualAlloc的作用是申请虚拟地址空间,这肯定不是最终的目的,最终目的可能是申请物理内存、映射寄存器、提交文件等。没有一个目的会在意虚拟地址空间的位置,所以尽量传递参数1为0,也就是让WINCE自动分配虚拟地址空间。VirtualAlloc分配地址空间实际上是以64KB为单位,所以要指定申请的虚拟空间的首地址的话,参数1应该为64KB的整数倍,申请的长度也应该为64KB的整数倍,即使你不需要那么大。2、VirtualCopy的主要作用是映射物理地址空间,如果参数2为物理地址,那么最后一个参数要添加PAGE_PHYSICAL,参数2必须是256的整数倍。如果参数2为虚拟地址(0x80000000以上),那么最后一个参数就不要添加PAGE_PHYSICAL,WINCE内核会根据这个虚拟地址找到对应的物理地址。驱动程序和应用程序之间传递数据时何时调用MapPtrToProcess?因为设备管理器负责加载驱动程序DLL,这意味着当应用程序调用驱动程序接口函数的时候,WINCE内核会将调用驱动程序接口函数的线程转移到设备管理器的进程空间然后执行具体的驱动程序代码,应用程序和设备管理器处于两个进程空间,这就造成设备管理器无法访问应用程序传递的指针(虚拟地址),所以当我们在应用程序中传递指针给流驱动程序接口函数时,WINCE内核从中作了一个地址映射,例如Read
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025贵州台江县民族中医院第二次招聘备案制专业技术人员考前自测高频考点模拟试题及答案详解(名师系列)
- 2025年应急管理部所属单位第二批次招聘185人考前自测高频考点模拟试题有答案详解
- 2025江西赣州市市直医疗卫生单位及赣州市立医院招聘专业技术人员389人模拟试卷(含答案详解)
- 2025江苏盐城市急救医疗中心招录政府购买服务用工1人模拟试卷及答案详解(各地真题)
- 2025江苏泰州学院招聘专职辅导员和专任教师17人考前自测高频考点模拟试题附答案详解(黄金题型)
- 2025年商洛丹源电力(集团)有限责任公司招聘(2人)考前自测高频考点模拟试题完整参考答案详解
- 2025年中国滑雪双肩包行业市场分析及投资价值评估前景预测报告
- 2025年中国户外遮阳窗行业市场分析及投资价值评估前景预测报告
- 2025黑龙江东北林业大学土木与交通学院派遣人才招聘1人模拟试卷附答案详解(黄金题型)
- 2025湖北鄂州华容区城市建设投资有限公司面向社会招聘4人模拟试卷及答案详解(全优)
- 可爱卡通风人教部编版一年级语文上册课件比尾巴PPT模板
- 温湿度点检记录表-曲线图
- 北师大版六年级数学上册 (生活中的比)比的认识课件教学
- 大班健康《贪吃的大嘴鱼》
- 高考英语读后续写高分讲义:万能语料之心理描写
- 伟大的改革开放 全市获奖
- 人教版小学三年级数学上册几分之一课件16888
- 【孤独症学生心理特点与教育对策(论文)】
- 普通昆虫学形态学部分
- 人文关怀与人文护理
- 湿疮中医护理查房严重湿疹
评论
0/150
提交评论