wince中测试驱动应用程序的实现
这里建的工程是MFC的smart device,选择ARMV4I的指令集,不同的设备可能会有轻微的不同,不过大体实现是一样滴。还有,这里选的应用类型是dialog base。
1.应用监测内核动向
内核通过postmessage广播给所有的窗口,比如发送的数据是“hello ce”,即PostMessage(HWND_BROADCAST, RegisterWindowMessage(L"hello ce"), 0, 0);然后就是应用部分监测消息,先在对话框类里面声明一个消息处理PreTranslateMessage,手动添加或者在vs的资源视图的dialog里面添加消息也是可以的,我这里用手动添加,另一种好像找不着这个消息。然后在PreTranslateMessage这个函数里面添加一个判断if(pMsg->message == ::RegisterWindowMessage(L"hello ce"))
{
应用处理内容
}
2.应用和内核流式驱动的双向通信
首先,假设流式驱动如果注册的名字为LED,index是0。(数值零不是字母O)
然后,应用和驱动中共同分别都要定义一个宏,名为IOCTL_WRITE_LED,即#define IOCTL_WRITE_LED 10086 。
接着就是几个关键的函数,CreateFile和DeviceIoControl。先用HANDLE hread = CreateFile(L"LED0:", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL, NULL);创建一个句柄hread定义 BYTE bTemp[128]用来存放数据,然后DeviceIoControl(hread, IOCTL_WRITE_LED, NULL, 0, bTemp, 128, 0, (LPOVERLAPPED) NULL);就能够把数据写入到bTemp里面,这样就能读取驱动中的数据。同样,要写数据进驱动,DeviceIoControl(hread, IOCTL_READ_LED, (char *)(LPCTSTR)c_str, sizeof(c_str), NULL, 0, 0, (LPOVERLAPPED) NULL);IOCTL_READ_LED这个宏自行定义,这里面的格式转换花费了我一点时间,现在就能完成应用层主动读取和写数据进内核了。
3.扩展
如果应用要读写内核的所有数据,可以通过读写一个流式驱动,然后这个流式驱动用共享内存或者全局变量的方式传值。可能还有更好的办法,目前我就只能用这种比较挫的方式。
界面比较简单,加几个按钮,控制led开关。
wince中测试驱动应用程序的实现的更多相关文章
- 简单练习题2编写Java应用程序。首先定义一个描述银行账户的Account类,包括成员变 量“账号”和“存款余额”,成员方法有“存款”、“取款”和“余额查询”。其次, 编写一个主类,在主类中测试Account类的功能
编写Java应用程序.首先定义一个描述银行账户的Account类,包括成员变 量“账号”和“存款余额”,成员方法有“存款”.“取款”和“余额查询”.其次, 编写一个主类,在主类中测试Account类的 ...
- 测试驱动 ASP.NET MVC 和构建可测试 ASP.NET MVC 应用程序
[测试驱动 ASP.NET MVC] http://t.cn/8kdi4Wl [构建可测试 ASP.NET MVC 应用程序]http://t.cn/8kdi4Wj
- 关于WinCE流接口驱动支持10以上的端口号(COM10)
一般情况下,WinCE流驱动的索引为0~9.应用程序中,通过CreateFile(_T("XXXN:"),…)打开对应的驱动,N也为0~9.这样看来,似乎在WinCE下同名流驱动个 ...
- Scrum敏捷软件开发之技术实践——测试驱动开发TDD
重复无聊的定义 测试驱动开发,英文全称Test-Driven Development,简称TDD,是一种不同于传统软件开发流程的新型的开发方法.它要求在编写某个功能的代码之前先编写测试代码,然后只编写 ...
- SD card技术了解并WINCE下SDHC驱动开发(updated)
Suumary: 简单介绍了一下SD卡的历史和发展,同时结合MX31 ADS上的WINCE 下SDHC驱动更深入的了解该硬件的一些行为特点. 了解SD card SD是Secure Digital C ...
- 测试驱动 ASP.NET MVC Type Aliase
Type Aliase 去掉Scala的糖衣(4) -- Type Aliase 我的新博客地址:http://cuipengfei.me/blog/2013/12/23/desugar-scala- ...
- Laravel 中缓存驱动的速度比较
缓存是web开发中重要的一部分,我相信很多人和我一样,经常忽略这个问题. 随着工作经验的累积,我已经意识到缓存是多么的重要,这里我通过 Scotch 来解释一下它的重要性. 通过观察发现,Scotch ...
- <转>七种测试驱动模式
本文转载自微信公众号:中国软件测试联盟 在进行软件测试时,我们都需要一个出发点,从哪里开始分析?测试设计是基于什么?简单说,就是什么驱动测试工作的进行? 基于对软件工程.产品质量和测试的理解,归纳出以 ...
- 使用模拟对象(Mock Object)技术进行测试驱动开发
敏捷开发 敏捷软件开发又称敏捷开发,是一种从上世纪 90 年代开始引起开发人员注意的新型软件开发方法.和传统瀑布式开发方法对比,敏捷开发强调的是在几周或者几个月很短的时间周期,完成相对较小功能,并交付 ...
随机推荐
- Ptex源码学习笔记-2
写入纹理数据: 主要分为五种写入方式:新建纹理.编辑已有纹理.编辑ExtHeader中的指定项.写入元数据和写入指定面的纹理数据.写入过程中数据存在一个临时文件中,在close时才会把临时文件的内容拷 ...
- C# basic
1. output Console.WriteLine("hello world"); 2. naming convention variable: start with lowe ...
- 尝试一下代码高亮。。成功的话明天写一篇blog
using System; using System.Collections; using UnityEngine; public class Time : MonoBehaviour { // Us ...
- Git学习(二)——创建版本库、查看与回退版本
一.创建版本库 版本库,又名仓库(Repository),可以简单理解为一个目录,这个目录里的所有文件可以被Git管理起来,每个文件的修改.删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者将来某 ...
- Java(String)
1>String类型判等 (1)请运行以下示例代码StringPool.java,查看其输出结果.如何解释这样的输出结果?从中你能总结出什么? package StringPool; publi ...
- WinForm用户自定义控件,在主窗体加载时出现闪烁;调用用户控件出现闪烁,需要鼠标才能够显示
转载自:http://www.dotblogs.com.tw/rainmaker/archive/2012/02/22/69811.aspx 解决方案: 在调用用户控件的窗体里面添加一下代码: pro ...
- 激活神器 KMSAuto Net 2015 v1.3.8
KMSAuto Net – Windows 操作系统 KMS 自动激活工具!支持 Windows Vista,7,8,8.1,10, Server 2008,2008 R2,2012,2012 R2, ...
- svn安装与其服务器搭建
1.概述:SVN为程序开发团队常用的代码管理,版本控制软件. 2.工具: 1) TortoiseSVN-1.8.4.24972-win32-svn-1.8.5.msi SVN安装包. 2)setup ...
- Mac打开关闭隐藏文件功能
在终端输入: 打开:defaults write com.apple.finder AppleShowAllFiles -bool true 关闭:defaults write com.apple.f ...
- 关于CSS中text-decoration值没有替换而是累积的疑问
做了个实验: <!DOCTYPE html> <html> <head> <title>BaiDuTest.html</title> < ...