WINCE应用程序和驱动间通信

WinCE 6.0截屏程序开发全攻略 WinCE图形子系统作为嵌入式系统中负责图形用户界面(GUI)显示与交互的重要组成部分,它不仅为用户提供直观的操作环境,同时也是实现丰富视觉效果和高效图形处理的基础。了解WinCE图形子系统的构成与工作原理,对于开发高效的截屏程序至关重要。在开发Windows CE(WinCE)图形用户界面(GUI)应用程序时,使用合适的API函数对于实现功能的丰富性、性能的优化以及代码的可维护性至关重要。 阅读详情

 WinCE上驱动程序的模型相对比较简单,实现一个驱动程序不是什么难事。尽管如此,本文还是实现了一个比较通用一点的通讯接口。

应用程序发给信息驱动程序有两种方式,同步调用和异步调用。
同步调用能够让驱动程序立即处理应用程序的请求,并返回驱动程序处理后的结果。
如:

#define MSG_TYPE_TEST_1            0x00000000
#define MSG_TYPE_ICMP_PACKET    0x00000001

#pragma pack(push, 1)
typedef struct __IO_MESSAGE
{
    ULONG    Type;
    ULONG    Length;

    union
    {
        struct
        {
            double x;
            double y;
        }Test_1;

        struct
        {
            UCHAR MiniPacket[128];
        }Icmp_Packet;

        // All other messages add here

    }value;
}IO_MESSAGE, *PIO_MESSAGE;
#pragma pack(pop)

#include <windows.h>
#include "ioexample.h"
#include "ioapp.h"

VOID SendMessageWithResult()
{
    //
    // First of all, open the device
    //
    if(!IO_Open())
        return;


    //
    // Build message
    //
    IO_MESSAGE Msg;

    Msg.Type    = MSG_TYPE_TEST_1;
    Msg.Length    = sizeof(Msg.value.Test_1);
    Msg.value.Test_1.x = 3.0;
    Msg.value.Test_1.y = 4.0;

    //
    // Call API to send, IO_SendEx run sync and then return a result.
    //
    UCHAR lpOutBuf[8];
    DWORD BytesReturned;
    BOOL bRet = IO_SendEx((PTLV)&Msg, TLV_LENGTH(&Msg), lpOutBuf, 8, &BytesReturned);
    if(!bRet) // If return FALSE, BytesReturned is error code.
    {
        switch(BytesReturned)
        {
        case IO_ERROR_INVALID_LENGTH:
            break;
        case IO_ERROR_UNKNOWN:
            break;
        }
    }

    //
    // Then we get the result
    //
    double z = *(double*)lpOutBuf;

    //
    // When we quit application, don't forget close device.
    //
    IO_Close();
}

异步调用不需要结果返回,调用立即返回。对驱动程序的请求会随后执行。
如:

VOID SendMsg()
{
    //
    // First of all, open the device
    //
    if(!IO_Open())
        return;


    //
    // Build message
    //
    IO_MESSAGE Msg;

    Msg.Type    = MSG_TYPE_TEST_1;
    Msg.Length    = sizeof(Msg.value.Test_1);
    Msg.value.Test_1.x = 3.0;
    Msg.value.Test_1.y = 4.0;

    //
    // Call API to send, IO_SendEx run async.
    //
    BOOL bRet = IO_Send((PTLV)&Msg, TLV_LENGTH(&Msg)); // if we give sizeof(Msg) is also OK.
    if(!bRet) // If return FALSE, something error.
    {
    }

    //
    // When we quit application, don't forget close device.
    //
    IO_Close();
}

驱动程序也可以通知应用程序,应用程序检测到通知事件后,可以取回驱动程序发送给应用程序的请求。

如:

VOID ThreadForReceive()
{
    //
    // First of all, open the device
    //
    if(!IO_Open())
        return;

    //
    // setup a receive event for driver
    //
    HANDLE hEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
    if(hEvent == NULL)
        return;

    IO_InitializeReceiveEvent(hEvent);

    //
    // We can wait for this event and then receive one or more times
    //
    while(1)
    {
        DWORD dRet = WaitForSingleObject(hEvent, INFINITE);
        if(dRet == WAIT_OBJECT_0)
        {
            DWORD NumbersRemained;
            IO_MESSAGE OutMessage;
            BOOL bRet = IO_Receive((PTLV)&OutMessage, sizeof(IO_MESSAGE), &NumbersRemained);
            if(bRet == FALSE) // if return false, numbersremained is error code
            {
            }
            else
            {
               
            }
           
            for(int i=0; i<NumbersRemained; i++)
            {
                DWORD temp;
                bRet = IO_Receive((PTLV)&OutMessage, sizeof(IO_MESSAGE), &temp);
            }
        }

        // We can test here whether main process let us quit
        //if(WAIT_OBJECT_0 == WaitForSingalObject(hQuitEvent, 0))
        //   break;

        // As a test, any way we should break here
        break;
    }


    // Free them
    IO_RemoveReceiveEvent();
    CloseHandle(hEvent);

    //
    // When we quit application, don't forget close device.
    //
    IO_Close();
}


本文来自优快云博客,转载请标明出处:http://blog.youkuaiyun.com/itqiangren/archive/2008/12/25/3600822.aspx

WinCE平台蓝牙应用开发源代码大全 在本章中,我们将了解WinCE操作系统环境下的蓝牙应用开发的基础知识。我们将介绍WinCE平台上进行蓝牙应用开发的关键要素,以及它与现代操作系统如Android和iOS的开发环境有何不同。蓝牙技术是一种短距离无线通信技术,它使用2.4GHzISM(工业、科学和医疗)频段的无线电波进行通信。蓝牙协议栈是一系列规范和协议的集合,它定义了设备间无线通信的规则。 阅读详情

相关推荐

exe程序之间传递参数(wince)

独立exe程序之间传值的方法传递com口 传递参数 调用的方法(Wince程序)

Wince程序间通讯

最近在做文件关联,有一个问题可能比较棘手,就是选中多个文件打开的时候,Windows在关联的时候不是把这个所有的文件的路径传作为参数传给一个程序,而是每个路径关联一个程序,也就是会打开N个程序。显然,这个有些不是我们需要的。例如Mp3播放器,应该是选中N个音频文件后,只打开一个文件,并且这N个文件会建立成一个播放列表。那么简单的记录下,我们这里碰见的问题:1 程序只能被打开一次,或者说只会

dadahacker的笔记 816

wince与Windows通过USB进行通讯,也支持WIFI

wince与Windows通过USB进行通讯, 也支持WIFI

winCE的体系结构和功能

wince的层次体系结构 应用程序层 操作系统层 OEM层 硬件层 应用层: 包括Internet客户端服务,第三方应用程序,winCE应用程序,用户界面 操作系统层: 包括应用和服务、CoreDLL、对象存储、对媒体技术、GWES、设备管

liguosheng的专栏 5365

手把手教 - VSCode 开发 GD32F450 单片机

系统版本:rt-thread v5.2.2单片机型号:GD32F450ZK基于文章进行开发。

weixin_46158019的博客 841

HC32F460 SPI DMA 实现高效TFT屏幕刷新的实战解析

本文针对HC32F460 MCU驱动TFT屏幕时刷新卡顿的问题,深入解析了SPI DMA技术的实战应用。通过对比传统查询模式与DMA模式的性能数据,详细阐述了如何配置SPI与DMA资源、构建核心驱动框架,并提供了避坑指南与进阶优化思路,最终实现高效、流畅的屏幕刷新,显著降低CPU占用率。

weixin_29163797的博客 151

WinCE驱动开发问题 集锦

如何让系统加载自己写的驱动程序?    两种办法:   1、在[HKEY_LOCAL_MACHINE/Drivers/BuiltIn]下添加注册键。   2、在应用程序中调用ActivateDeviceEx。       在一些文件中用分号来表示注释,例如下面的内容    ; @CESYSGEN IF SERVERS_MODULES_HTTPD   ; @CESYSGEN 

xingyuan1hao的专栏 1110

软件工程导论考试通关秘籍:太原理工大学历年真题解析(附答案)

本文为太原理工大学《软件工程导论》考试提供高效备考指南,通过解析近六年真题,揭示高频考点如软件生命周期、UML建模和结构化设计等核心模块的命题规律。文章提供真题拆解、实战策略和避坑指南,帮助考生掌握图形转换题和简答题的应答技巧,助力考试通关。

weixin_29233333的博客 227

WinCE驱动开发基础

WinCE中的进程(process)是程序的一次动态执行实例(instance)。进程不参与系统调度,没有优先级和上下文。每个进程在创建时都会创建一个主线程作为其默认的执行体。 真正参加系统调度的是线程。 WinCE提供了互斥Mutex,事件Event,信号量Semaphore 3种内核机制来实现多线程间的同步。 WinCE还为用户态线程提供了两种同步方法:临界区段(Critical section)和互锁函数(interlocked function),这两种方法不能跨进程使用,但效率很高。 Wi

霹雳游侠 997

Concentration Inequality(集中不等式)更新版

欢迎来我博客 https://wyue.name/2020/04/17/1/阅读这一篇博文 转载前请联系我,联系方式请见我博客 https://wyue.name/ Concentration inequality 刻画了一组随机变量的和(或者样本平均数)与其期望值的偏离程度,在算法收敛性分析过程中是非常有用的一类不等式。 这次主要总结一下最近一段时间遇到的集中不等式,不仅是不等式形式,...

Yue的博客 4554

国赛数学建模高教社杯历届优秀论文全集

包含了2004到2023年高教社的赛题及优秀论文。

BanDeng001的博客 3286

WinCE虚拟串口驱动 一

WinCE虚拟串口驱动 一

ytfgff的博客 233

上下相机对位,上下贴合,上下相机映射对位场景案例

上下相机对位,上下贴合,上下相机映射对位场景案例

视觉人机器视觉的博客 1万+

wince与linux的比较(摘录)

1) WinCE与Linux有何区别?(商业模式,学习和开发难度,对硬件的支持,稳定性,对工程师未来发展的帮助,对研发中心未来发展的帮助)  嵌入式Linux OS与Windows CE相比的优点:  第一:Linux是开放源代码,遍布全球的众多Linux爱好者都是Linux开发者的强大技术支持者;Windows CE目前6.0内核全部开放,GUI不开放。第二:Linux的内核小、效率高;Wi

WHJ的嵌入式生活 7747

从 ABAP 视角看 JSON :7.40 版本带来的那些改变

摘要:ABAP 对 JSON 的原生支持 随着企业系统与外部 API 的交互增多,ABAP 从 NetWeaver 7.40 开始原生支持 JSON 格式。通过复用现有 XML 基础设施,ABAP 团队引入 JSON-XML 概念,使用 sXML Library 和 IF_SXML=>CO_XT_JSON 常量处理 JSON 数据。开发人员可通过 CALL TRANSFORMATION 语句实现 ABAP 数据与 JSON 的双向转换,大幅简化了与外部系统的数据交互。这种标准化的 JSON 处理方式提

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 180

R语言缺失值填补|插值法、均值法、邻近法

本文主要介绍如何利用R语言进行数值型缺失值的填补。主要使用zoo包中的na.aggregate() 、na.approx()、na.locf() 函数进行缺失值的均值填补、线性插值填补以及邻近值填补。

Mrrunsen的博客 3841

WINCE虚串口驱动

由于工作的需要,需要用到多个串口...早在去年的时候就犹豫是否要写一个..但是有朋友说。自己写的都效率不行.于是转投他法..使用了另外一个第3方库.做的效果也不错..仅发现一两个小问题..如果有朋友需要..后续找点时间把完整实现过程写下来..不过.这几天决定再写个支持多用户同时打开的串口....在网上发现有人已经有人贴了..大家可以参考一下。...转载一下..  //===============

WINC开发的专栏 2331

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

winCE嵌入式开发学习(二)续--wince体系结构涉及操作系统部分

线程一个进程拥有的线程理论上是没有限制的,只与当前可用的内存有关,也就是说只要内存够用,就可以创建线程。进程中的线程共享进程所占有的资源,包括地址空间和代开的文件等内核对象。线程出了占有内存外,还占有其他资源,如处理器的寄存器和栈,每个线程都有自己独立的栈,这些资源构成了线程的上

zhang20072844的专栏 1325

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

wince5 0 2440 BSP之摄像头驱动分析

wince5 0 2440 BSP之摄像头驱动分析

qq_44884287的博客 170

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

WinCE6.0体系结构

       WinCE6.0中的程序有两个级别,分为内核级和用户级。有些程序可以同时运行在内核及和用户级。例如:Coredll会分别运行在内核级和用户级上,这两个级别的Coredll功能是一样的,目的是增加系统的稳定性。        GWES:WinCE通过这模块提供的图形接口提供了几个功能:基本的绘图引擎、窗口管理、接口的事件机制等,是用户、应用程序和操作系统间的接口。 

lovelynn的专栏 1037

WindowsCE 应用程序开发常用功能的api(基于EVC)

 1、得到当前进程的HINSTANCE   HMODULE hModule = ::GetModuleHandle(NULL);   HINSTANCE hInst = hModule;   2、得到当前进程的绝对路径   GetModuleFileName()函数,该函数的第一个参数如果为NULL,则返回最后一个发出WM_CREAT 消息的文件的绝对路径。   3、手工创建状态栏上应用程序的图标

Carlward 的专栏 1233

wince映像创建过程

<br /> <br />wince映像创建分为四个阶段:<br />编译、系统产生、Release复制、映像创建阶段。<br /> <br />pb将wince提供的大量组件和第三方组件按照组件特性组织成一个树状结构放置到这个窗口,catalog中的每个组件或特征都代表了开发者可以添加到自己定制的操作系统设计中的一个操作系统功能。catalog将这些组件归纳为5类:BSP、核心操作系统、设备驱动程序、平台管理器和第三方解决方案。<br /> <br /> <br />BSP(板支持包),是一个支持特定标准

霹雳游侠 648

WinCE 5.0开发

  写这篇文章,目的是:对自己近段时间总结的东西,做一个记录,以免忘记。  工作中做项目,大部分时间是在PC上开发,然后将开发好的东西DownLoad到实机上,进行Debugging。因此在项目忙的时候就一直没有多少时间去关注WinCE相关的开发。  其实WinCE设计的到的东西还是蛮多的。  先大致列一下,在嵌入式开发中需要注意的大概的几个比较大的方面: 1. 内存的管理; 2. 资

meteor2520的专栏 762
上一篇: Hacking Windows CE: 如何从线程ID获取线程名称
下一篇: wince内存分配及管理
alien75
博客等级 码龄25年 195粉丝 116原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值