单片机
返回首页

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);


进入单片机查看更多内容>>
相关视频
  • 【TI MSPM0 应用实战】智能小车+工业角度编码器+血氧仪+烟雾探测器!硬核参考设计详解!

  • 2022 Digi-Key KOL 系列: 你见过1GHz主频的单片机吗?Teensy 4.1开发板介绍

  • TI 新一代 C2000™ 微控制器:全方位助力伺服及马达驱动应用

  • MSP430电容触摸技术 - 防水Demo演示

  • 直播回放: Microchip Timberwolf™ 音频处理器在线研讨会

  • 基于灵动MM32W0系列MCU的指夹血氧仪控制及OTA升级应用方案分享

精选电路图
  • 1瓦线性调频增强器

  • 家用电器遥控器

  • 12V 转 28V DC-DC 变换器(基于 LM2585)

  • 红外开关

  • DS1669数字电位器

  • HA1377 桥式放大器 BCL 电容 17W(汽车音频)

    相关电子头条文章