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 ”

在IT领域,尤其是地理信息系统(GIS)中,坐标换是一项关键技术。本文将深入探讨百度坐标系、火星坐标系和WGS84坐标系之间的相互换,并介绍如何使用相关工具进行批量换。 首先,我们需要了解这三种坐标系的基本概念。WGS84坐标系,即“World Geodetic System 1984”,是一种全球通用的地球坐标系统,广泛应用于GPS定位和地图服务。它以地球椭球模型为基础,以地球质心为原点,是国际航空和航海的主要参考坐标系。百度坐标系(BD-09)是百度地图使用的坐标系。为了保护隐私和安全,百度对WGS84坐标进行了偏移处理,导致其与WGS84坐标存在差异。火星坐标系(GCJ-02)是中国国家测绘局采用的坐标系,同样对WGS84坐标进行了加密处理,以防止未经授权的精确位置获取。 坐标换的目的是确保不同坐标系下的地理位置数据能够准确对应。在GIS应用中,通常通过特定的算法实现换,如双线性内插法或四参数换法。一些“坐标换小工具”可以批量换百度坐标、火星坐标与WGS84坐标。这些工具可能包含样本文件(如org_xy_格式参考.csv),用于提供原始坐标数据,其中包含需要换的经纬度信息。此外,工具通常会附带使用指南(如重要说明用前必读.txt和readme.txt),说明输入数据格式、换步骤及可能的精度问题等。x86和x64目录则可能包含适用于32位和64位操作系统的软件或库文件。 在使用这些工具时,用户需要注意以下几点:确保输入的坐标数据准确无误,包括经纬度顺序和浮点数精度;按照工具要求正确组织数据,遵循读写规则;注意换精度,不同的换方法可能会产生微小误差;在批量换时,检查每个坐标是否成功换,避免个别错误数据影响整体结果。 坐标换是GIS领域的基础操作,对于地图服务、导航系统和地理数据分析等至关重要。理解不同坐标系的特点和换方法,有助于我们更好地处
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值