WinDbg来查找wince的bug
下面的地址是介绍如何使用WinDbg来查找wince的bug,即使用wince 生成的kdmp文件了解程序崩溃时的堆栈状况,以及源代码的那行出错了。http://www.windowsfordevices.com/c/a/Windows-For-Devices-Articles/Finding-Windows-CE-bugs-with-help-from-Dr-Watson/[@more@]
获取SD卡序列号和厂商ID
wince 存储设备有两个名称,一个设备名称CreateFile打开设备获取句柄的时候要用的,如DSK1:一个是存储名称,如Mircosoft Flash Disk见如下数据结构:typedef struct {DWORD cbSize;TCHAR szDeviceName[DEVICENAMESIZE];TCHAR szStoreName[STORENAMESIZE];DWORD dwDeviceClass;DWORD dwDeviceType;STORAGEDEVICEINFO sdi;DWORD dwDeviceFlags;SECTORNUM snNumSectors;DWORD dwBytesPerSector;SECTORNUM snFreeSectors;SECTORNUM snBiggestPartCreatable;FILETIME ftCreated;FILETIME ftLastModified;DWORD dwAttributes;DWORD dwPartitionCo
判断设备驱动有没有被加载的方法
设备就像文件,当设备驱动被加载后,表示该文件已经存在了。所以可以通过判断文件是否存在的方式,去判断设备的驱动有没有被加载。[@more@]每次去打开设备,就是打开已存在的文件,使用OPEN_EXISTING。1.GetFileAttributes if(GetFileAttributes(L"SDG1:") != 0xFFFFFFFF) 获取该设备的属性信息。若设备不存在(驱动没有被加载),就会返回0xFFFFFFFF2.EnumDevices 这个接口列举激活的设备文件名称。用于查询可用的设备。 wcsstr去查找下列表中是否存在所需要的设备。 不确定ActiveDevice加载的驱动,EnumDevices是否能查询出来3
DirectDraw小结
1.链接库动态装载typedef HRESULT (* DIRECTDRAWCREATE)( GUID FAR *lpGUID, LPDIRECTDRAW FAR *lplpDD, IUnknown FAR *pUnkOuter );m_hModule=::LoadLibrary(_T("ddraw.dll"));m_pDirectDrawCreate= (DIRECTDRAWCREATE)::GetProcAddress(m_hModule,L"DirectDrawCreate");静态链接#pragma comment(lib, "ddraw.lib") 调用DirectDrawCreate[@more@]2.GUID的使用直接定义const GUID g_IID_IDirectDraw ={0x9c59509a,0x39bd,0x11d1,0x8c,0x4a,0x00,0xc0,0x4f,0xd9,0x30,0xc5};链接#pragma comment(lib, "
EVC编译TCPMP的过程
EVC编译TCPMP的过程[@more@]1.tcpmp下载网址:http://picard.exceed.hu/tcpmp/test/ 下载的压缩包tcpmp.src.0.72RC1.tar.bz22.编译环境:Microsoft eMbedded C++ 4.0 (sp4) -- win32(wce armv4i) debug -- wince5.0 SDK只编译了debug版。Arm汇编器是EVC安装目录下Microsoft eMbedded C++ 4.0/EVC/wce500/bin中的。3.编译过程:1)编译common工程出现以下链接错误:error LNK2019: unresolved external symbol CPUSpeedClk referenced in function CPUSpeed在几个asm汇编文件上加上编译选项以告诉编译器编译规则:armasm -32 -cpu xscale &
wince6.0下的物理地址映射和共享
在wince6.0下,驱动都被放到内核空间下(用户模式驱动除外)。用户进程访问物理地址受到了限制,即用户进程再也不能通过vitrualalloc virtualcopy来完成物理地址的映射。所以用户进程访问物理地址控制外围寄存器只能通过内核驱动来完成。大体的思路如下:[@more@]wince6.0提供了两个升级版的内存分配和映射函数,VirtualAllocEx和VirtualCopyEx,就是在原版的基础之上增加了一个进程句柄函数,所以可以在内核驱动中先获取调用者进程的句柄,再用上述的两个Ex函数,为该进程保留空间和映射物理地址。保留好的空间地址,在内核驱动中和用户进
wince5.0下物理地址访问
在wince5.0下物理地址映射有以下两种方法:[@more@]1.静态映射通过OAL中OEMAddressTable来定义。OEMAddressTable定义了从4GB的物理地址空间到内核512MB未映射的虚拟地址空间的映射关系。内核将会从这个表中创建两个虚拟地址空间段。一个是有缓冲的,一个是没有缓冲的。静态映射的虚拟地址空间只能在内核模式下访问。作为OEMAddressTable的补充,还可以调用CreateStaticMapping来完成物理地址到虚拟地址的映射。函数返回一个未缓冲区域的虚拟地址,当然也只能由内核访问(an uncached memory region)。一个静态映射只能在启动时间(at boot