WinCE下流驱动开发流程
2025-02-21 来源:elecfans
硬件平台:S5PV210
软件平台:WinCE6.0
已IICBUS为例,实现流驱动框架,供以后参考使用
1、创建文件
IICBUS.cpp
IICBUS.DEF
makefile
sources
2、IICBUS.DEF文件导出函数接口
EXPORTS IBS_Init
IBS_Deinit
IBS_Open
IBS_Close
IBS_Read
IBS_Write
IBS_Seek
IBS_IOControl
IBS_PowerDown
IBS_PowerUp
3、source文件
TARGETNAME=IICBUS
TARGETTYPE=DYNLINK
RELEASETYPE=PLATFORM
DLLENTRY = DllEntry
DEFFILE = IICBUS.DEF
TARGETLIBS=$(_COMMONSDKROOT)lib$(_CPUINDPATH)coredll.lib
INCLUDES=$(INCLUDES);
SOURCES=
iicbus.cpp
4、 IICBUS.cpp文件
BOOL WINAPI DllEntry(HANDLE hInstDll, DWORD dwReason, LPVOID lpvReserved)
{
switch ( dwReason )
{
case DLL_PROCESS_ATTACH:
RETAILMSG(TRUE,(TEXT('******************[+IICBUS DLL_PROCESS_ATTACH]**************rn')));
break;
case DLL_PROCESS_DETACH:
RETAILMSG(TRUE,(TEXT('******************[-IICBUS DLL_PROCESS_DETACH]**************rn')));
break;
}
return TRUE;
}
DWORD IBS_Init(DWORD dwContext)
{
RETAILMSG(TRUE,(TEXT('[+IICBUS_Init: %s]rn'), (LPCTSTR)dwContext));
RETAILMSG(TRUE,(TEXT('[-IICBUS_Init]rn')));
return TRUE;
}
BOOL IBS_Deinit(DWORD dwContext)
{
RETAILMSG(TRUE, (TEXT('[+IICBUS_Deinit]rn')));
RETAILMSG(TRUE,(TEXT('[-VSP_Deinit]rn')));
return TRUE;
}
BOOL IBS_Open( DWORD dwData, DWORD dwAccess, DWORD dwShareMode)
{
RETAILMSG(TRUE,(TEXT('[+IICBUS_Open]rn')));
RETAILMSG(TRUE,(TEXT('[-IICBUS_Open]rn')));
return TRUE;
}
BOOL IBS_Close(DWORD dwHandle)
{
RETAILMSG(TRUE,(TEXT('[+IICBUS_Close]rn')));
RETAILMSG(TRUE,(TEXT('[-IICBUS_Close]rn')));
return TRUE;
}
BOOL IBS_IOControl(
DWORD dwHandle,
DWORD dwIoControlCode,
PBYTE pBufIn,
DWORD dwBufInSize,
PBYTE pBufOut,
DWORD dwBufOutSize,
PDWORD pBytesReturned
)
{
switch(dwIoControlCode)
{
。。。。。
。。。。。
}
return TRUE;
}
DWORD IBS_Read(DWORD dwHandle, LPVOID pBuffer, DWORD dwNumBytes)
{
RETAILMSG(TRUE,(TEXT('[+IICBUS_Read]rn')));
RETAILMSG(TRUE,(TEXT('[-IICBUS_Read]rn')));
return 0;
}
DWORD IBS_Write(DWORD dwHandle, LPCVOID pBuffer, DWORD dwNumBytes)
{
RETAILMSG(TRUE,(TEXT('[+IICBUS_Write]rn')));
RETAILMSG(TRUE,(TEXT('[-IICBUS_Write]rn')));
return 0;
}
DWORD IBS_Seek(DWORD dwHandle, long lDistance, DWORD dwMoveMethod)
{
return FALSE;
}
void IBS_PowerUp(void)
{
return;
}
void IBS_PowerDown(void)
{
return;
}
4、修改platform.bib文件
IF BSP_NOIICBUS !
IICBUS.dll $(_FLATRELEASEDIR)IICBUS.dll NK SHK
ENDIF BSP_NOIICBUS !
5、修改platform.reg文件
IF BSP_NOIICBUS !
[HKEY_LOCAL_MACHINEDriversBuiltInIICBUS]
'DLL' = 'IICBUS.DLL'
'Prefix' = 'IBS'
'Index' = dword:1
'Order' = dword:0
ENDIF BSP_NOIICBUS !
注意:Prefix不能超过3个字符!而且必须跟驱动文件里的前缀一致!
以上完成流驱动的架构,具体的实现功能可以根据需求来做。
6、应用程序调用
HANDLE hIICBUS;
hIICBUS = CreateFile(_T('IBS1:'),
GENERIC_READ|GENERIC_WRITE,
FILE_SHARE_READ|FILE_SHARE_WRITE,
NULL,
OPEN_EXISTING,
0,
0);
if (INVALID_HANDLE_VALUE == hIICBUS)
{
MessageBox(_T('打开IICBUS:失败!'));
return;
}
if(!DeviceIoControl(hIICBUS,
CHANGE_CH1,
NULL, 0,
NULL, 0,
NULL, NULL))
{
MessageBox(_T('CH1切换失败!'));
return;
}
CloseHandle(hIICBUS);
- 关于wince驱动中CDEFINES的一些认识
- 关于wince 版本的支持——用_WIN32_WCE来做判断?
- wince 5.0/wince6.0 2440/6410/S5PV210 触摸屏驱动 滤波函数的介绍
- 分析S5PV210 wince的bootimage.nb0 是如何生成的
- wince下sources\sources.cmn\Makefile.def的相关作用
- 基于WINCE6.0+S3C2443的camera驱动
- WINCE6.0+S3C2451环境搭建过程遇到的一些问题
- WINCE 开机自动弹USB连接窗口问题(已解决)
- 在wince6中用硬解码替换IIMAGING中的解码器
- C语言高级第一节杂谈
- 六大全新产品系列推出,MCX A微控制器家族迎来创新
- 意法半导体全新STM32C5系列,重新定义入门级微控制器性能与价值,赋能万千智能设备
- 模组复用与整机重测在SRRC、CCC、CTA/NAL认证中的实践操作指南
- 有源晶振与无源晶振的六大区别详解
- 英飞凌持续巩固全球微控制器市场领导地位
- 使用 Keil Studio for Visual Studio Code开发 STM32 设备
- 从控制到系统:TI利用边缘AI重塑嵌入式MCU的边界
- 蓝牙信道探测技术原理与开发套件实践
- Microchip 推出生产就绪型全栈边缘 AI 解决方案,赋能MCU和MPU实现 智能实时决策
- LoRa、LoRaWAN、NB-IoT与4G DTU技术对比及工业无线方案选型分析




