WinCE驱动开发问题精华集锦(转)

修改了WINCE自带的驱动程序后如何编译?如果是自己开发的驱动程序如何编译?
1、分为IDE方式和命令行方式。
IDE 方式的编译很简单,以PB5.0为例,打开定制内核的工程,在左边的“workspace”—“FileView”中找到你已经修改了的目录,然后单击右 键弹出菜单,在菜单中选择“Build and Sysgen Current Project”,这样PB就会编译指定的目录中的项目源码文件,然后执行sysgen命令根据source文件中的内容生成目标文件并复制到当前内核工 程目录下。
命令行方式的编译需要打开“Build OS” —“Open Release Directory”,以cd命令进入你已经修改的驱动程序目录中,然后键入“build –cfs”,然后键入 “sysgen –p 项目名称”,一般项目名称为source文件中的“TARGETNAME”。
2、如果想完全自己开发驱动程序,建议直接采用EVC或者PB来编写编译。
开发PCI设备驱动时,InterruptInitialize函数的第一参数是否是PCI卡配置空间信息中的InterruptLine 参数?是否需要在HKLM/Drivers/BuiltIn/PCI/Template 加一個自己的 subkey,并填写相应内容?如何填?
1、InterruptInitialize的第一参数是IRQ,也就是逻辑中断号,而不是物理中断号,InterruptLine是指物理中断号
2、需要在template下加自己的PCI设备的信息,例如:
[HKEY_LOCAL_MACHINE/Drivers/PCI/Template/Serial]
"Dll"="Com16550.Dll"
"Class"=dword:07
"SubClass"=dword:00
"ProgIF"=dword:02
"VendorID"=multi_sz:"0AF0""B320""B320"
"DeviceID"=multi_sz:"0020""0300""0302"
"Prefix"="COM"
而这些信息就来自于你执行pcienum.exe的结果。
编译器报错:error C2065: 'CFileFind' : undeclared identifier,如何解决?
MFC for WINCE版本没有CFileFind类,所以要查找文件只能调用API FindFirstFile 和FindNextFile。
如何设置WINCE系统字体、字号?如何设置自己开发的软件的字体、字号?
1、系统字体通过注册表设置。如下:
[HKEY_LOCAL_MACHINE/System/GDI/SysFnt] ///系统字体
Wt=420
Ht=18
Nm=Arial
[HKEY_LOCAL_MACHINE/System/GWE/Menu/BarFnt] ///菜单栏字体
[HKEY_LOCAL_MACHINE/System/GWE/Menu/PopFnt] ///弹出窗口字体
[HKEY_LOCAL_MACHINE/System/GWE/Menu] ///菜单字体
HKEY_LOCAL_MACHINE/System/GWE/Button ///按钮字体
2、创建字体时把字体高度参数设置大点就可以了。如CFont::CreateFont(nHeight...),也可以在LOGFONT结构中设置字体 高度或者字体种类。如果是控件,调用控件的SetFont成员函数。如果是直接画,在OnPaint响应函数中调用Selectobject选字体到 DC。
nk.bin和nk.nb0有什么区别?
这里提到的bin是一种二进制镜像格式,以片断(section)为单位组织数据,每个片断都包括一个头,头里指定了起始地址,长度,校验值。 Platform Builder调用工具将WINCE内核所有文件以bin格式合并成一个文件,默认文件名为nk.bin。BootLoader又以同样的格 式将nk.bin分解成多个文件放到RAM中。可以在命令行中键入 “viewbin nk.bin”来查看bin文件中具体包括了哪些内容。键入Cvrtbin命令转换.bin格式文件为.sre格式或者.abx格式。
nb0格式是原始的二进制镜像,它不包括头,一般情况下将内核下载到设备的RAM中运行都采用nb0格式。要生成nbx格式的文件,需要在相关.bib文 件中确定如下值:ROMSTART、ROMWIDTH、ROMSIZE。
在不采用硬件计时器的情况下如何创建更精确的计时器?最精确周期能否达到1毫秒?
对于精确值的要求不同,所采用的办法不同。以下阐述几种办法。
1、在单线程中循环调用API Sleep函数,Sleep函数精确程度为如果Sleep(N),那么实际睡眠时间在N到N+1毫秒之间。而且还要注意调用Sleep的线程优先级的问 题。如果任务过多并且此线程优先级低,那误差就更大些。
2、调用API QueryPerformanceCounter函数,举例如下:
LARGE_INTEGER liFrequency;
if (QueryPerformanceFrequency(&liFrequency)) // 查询系统时钟的频率,这里将返回1000
{
liFrequency.QuadPart /= 1000;
LARGE_INTEGER liTimeOut;
if (QueryPerformanceCounter(&liTimeOut)) //得到截至到当前累计发生的系统时钟中断次数
{
liTimeOut.QuadPart += liFrequency.QuadPart; ///计算下一秒到来时总的中断次数是多少
LARGE_INTEGER liCurrent;
do
{
QueryPerformanceCounter(&liCurrent); // 循环查询累计的的中断次数
} while (liCurrent.QuadPart

以上摘自 http://blog.sina.com.cn/s/blog_5f8c3bda0100cpee.html

这次主要是在编写“读取某个文件夹下全部文件信息”的时候遇到的一个困难,

由于WINCE中没有CFILEFIND类,需要直接用FINDFIRSTFILE与FINDNEXTFILE这两个函数。

这两个函数如何使用具体见“ http://pegasus827.bokee.com/6312983.html ”

你可能感兴趣的:(WinCE驱动开发问题精华集锦(转))