2024年5月4日发(作者:)
霹i稍嘶s_20∞下使用浮誊+|誊承瞧蝴
中断处理和壬/o读写
|。簟i
万岁
一、引胃
众所周知,windows2000是目前主流操作系统。它提供
j
,=j
j。劈孝
本实例的硬件部分由一块IsA接n的B码板,一块lsA接
口的编码板组成。B码板解调出同步脉冲,接至控制计算机
IsA总线的中断IRQ7;编码板在同步脉冲触发中断到来后,
编码并且从I/o端口发送数据。要求在windows
2000操作系的多线程和多任务的工作机制,为测控系统中的实时系统测控
软件提供了良好的开发平台。但是wmdows2000采用特有的
系统保护模式,所有涉及物理内存、磁盘、巾断以及端口读写
的操作,都必须通过一个内核wDM(win32
D订ver
统中,应用程序能够进行中断处理和直接f/o端日读写。
首先.使用WinD而ver的Ddver
wizard,对B码板进行中断
设置和I/O地址设置.对编码板进行I/O地址设置、D^ver
wjzard有很好的向导功能,可以根据硬件没备的特点.生成库
M0dem)
驱动程序完成,禁止用户态的应用程序直接操纵硬件。
以前,windows系统下设备驱动程序的开发采用DDK工
具,这种方法对开发人员要求比较高,并且对大多数非专门驱
动程序的研发人员来说,为实现应用程序中中断处理和I/0
文件。库文件中包括上面设置的中断号、I/o地址等资源情
况。接下来,就可以编写自己的应用程序。利用wind矾姻
2000支持多线程的特点,将应用程序设计为单进程多线程,
线程定义为中断监视线程和端口读写线程。
2.设计实现
(1)winD^vcr库文件的使用
使用Vc十+6O的向导创建MFC形式的应用程序.将
winDdver根目录下的include目录中的windⅣr
h文件复制到
应用程序中。Ⅵndrvr.h是winDriver提供的一个资源库文件.
端口读写,f面去花费大量时间和精力学习驱动程序的编写,是
很不实际叉不经济的。现在有许多第三方公司提供的驱动程序
开发工具.如winD五ver、Ddverwork、vT00ls等。它们提供友
好的编泽界面,并且提供了一些功能函数,来支持用户完成访
问硬件的工作。
下面结合实例,详细介绍在Vc++6.0中借助winDnver
实现中断处理和直接I/O端口读写。里面有一些功能函数,在应用程序中使用这些函数,可直接操
控硬件。
二、软件编程与设计
1设计思想
(2)中断监视线程的设计
中断监视线程是优先级最高的线程。在线程主体中完成:
—Zdh㈧瞰钿舡■址■址d山蛐■蟛d苎.姒h蟛.昱抽蟛.芏龇h蟛础山甥破鼬h垃k扯埘扫射蛐h虹“唯时扫蛳b缝d由牡・lmh驰触"—L酗h蛐■“时mh缝・驻
PrlvateSubF0rm
1
Loaa{BVVal
senderAs
Svstem
Ob
Ject.
BvVa
As
SvstemEventA呜s)HandIesMyBase
Dlm
rec
As
New
ADODB
Recofdset()
e
2Ⅵ一1058为Msserver服务器名,叼一1059为0mcle
Load
服务器名,“user”,“p踮s”分别为用户名及口令。
3.一次只能连接一种数据库。要连接多种数据库要重新
定义ADOAccess对象。以上程序在Vlsual
通过。
studio
DB
DB
DB
ConnAccessf。e:\testmdb)
test)
’DBConnSQLServer(“wl一1058“
Conn0口BC(。test0DBC”】
COnnorac
e
NET中凋试
l’w
1
059
7,
sVstem”manage
r
rec=DB00enTabe{“DEM0
rec=DB
DB刚MsGrId(MSG
EndSub
d1rec)
customer)
0pen丁ab旧f“doc』et)
r
五、结论
卜面方法介绍了刚面世不久的VisualBagic.HET中有关数
据库的开发,ADO在vi叫a1
Basic.NE
说明:
l你的机上要有灿cess数据库文件(e:、test
mdb),Ms
server数据库中有数据库ten,docjile为其test巾的表,Oracle
数据库中有表DEMO.cu810mer.
r中的应用,连接几种最
实用的数据库,且介绍r编写组件的方法,并且通过实例开绍
了怎样调用该组件。利用该知识擞大地方便了软件开发者访问
数据的能力,提高了开发效率:
(收稿日期:2003年2月27目)
辨涵淼
万方数据
调用winDdver提供的功能函数初始化B码板;调用封装的函
数In’e”uptThre“En出le(),诙封装函数调片i功能函数
wDJntw趾t()获取中断事件.一旦中断事件发生,立刻执行用
户定义的中断服务程序,在中断服务程序中设置同步事件有信
号。,
编程实例:
VOID
lSA-BIIhreaa
{HANDLEhwD
nof
8
A圾EndThreadlO)://结束线程
}
(3)端口读写线程的设计
本线程用来从编码板的端口凄取数据。在线程主体中完
成:初始化编码板;用API函数w撕tF0rsingleObject来等待同
步事件,一旦有I司步事件到来,则调用w-n嘶ver功能函数
used
wDJrans胁()来执}j凄端口操作。
编程实例:
V0lD
ISAjduthread【not+usedl
WD
VERSlONverBuf:
WD_CARD—REGlSTER
ca『dReq,
hTh
read.
(//‘///打开设备操作.获得版本信电操作司.卜买例////7
/////从T定义编码板中斫号及I/0地址/////
WD工ARD.旦EG【STER
cafdReq。
caraReqcara
WDJNTERRuPT….HANDLE
hwD=vvD』pen|}.//打开设备
jf{hwD==1NVALlDHANDLEVALUE)
{Af×MessageBo×(40pen
devIce
retum。
e
r
ror
7”).
dwlem=1:
cardReg
caraRea
ca
ca
rd
tem【0】item=lTEMJO,
fNotSharable=TRUE:
i0dwA0dr=ISAPDU
j0且DD只:
10
dwBvtes=lSAPDU_O_BYTES.
rd
Item【0l
///’//l—iT为琵得版本信息辟作/////
BZER0(verBuf),
caraReg
ca,a
ltem【0l
cardReg
ca
rdItem
ste
0】
WD』e
rslon《hwD,&verB
uf),/7返回版本后鼻
ffverBufdwve
r<WD_yER)
{Af×MessageBoxI
er
rorlncorrect
WD_cardReg
r{hwD,&ca,dReg).
_工(cardRe日hCard==0j
W1NDRVR
versIon’
),
(AfxMessageBox
C“Fa【Ied
loc㈦ngdevIce),
return
WD
clOse{hwD):
return
}
w圳e(mbEndThread==FALSE)
,,//,7/,牲T定义B码撅中断号夏I/0地址////
ca州Reg
cara
cardReg
ca
(swltch(Wa听o
rSIngIeoblect【h20Event.1NFINITE¨
(case
dw『fem=1.//硬件种类
ltem[O】fNotsha『abIe=TRUE://硬件设备不
WAlTDBJECT』:
trans.
rd
ResetEventf
h20EvenT),//h20Event
y
J同步事件信号
供其他d用
caraReg
ca,d
vvDJRANSFER
BZER0(tfans)。
trans
cardReg
RQ。
cardReg
lteml0]怕m=iTEMjNTERRu口T.//硬1上类型
ca刑ffemf0
J』…dwfnterrup扛BTfNUnte
r‘upcU—
cara恤m[O】
【…dw0鲫ons=BTNUnter
ruptU一
card
cmdTrans=RP_BY丁E,
dwP0
rl=dwl0Addr:
Data
Bvte=pdata,
trans
trans
0PTlONS:
cardReg
ca
w0Jransfer
ChwD.&trans),
itom【O】ltem=rrEMJO,
lO
break.
case
rdReg
cara{tem[O】l
dwAddr=IsABTjO_ADDR://端
dwByies=1SABTj0_BYTES.
}
vvArrTIMEOUT:
r】基地址
cardReg
card
break:
Jtem[O10
defau{t:
b
reak
/7端]地址范围
WD』araRegIste
r(hwD,&cardReg)
lf(cardReahCard==0)
(AfxMessageBo×(仁afIed10ckmg
dev}ce),
return
)
wD』a州Unreglster{hwD,&cafdRegl,
WD
C10se(hwD)。
J
w川e(m_bEndThread==FALSE
J
Af×EndTh
read(0):
Ⅲ(!|n
cerrup汀hreadEnabfe(&hThread,hwD.&1nt,BTlNT—
Inte
r
ruot0Hand
er
NULLl
b
reak:
三、结束语
按照上面的方法,町以很方便地实现板卡的中断处理和
/,//j////Pt下为线程;;止前的操作/////,/////,7///
vVDCardUn
reg
ster(hwD,&cardReg).//取消j王陟,群放
系玩资源
WD_Close{hwD).//关闭设备
I/O端厂1读写,从而不必编写复杂的驱动程序。实践证明是切
实有效的:
(收稿日期:2003年2月22日)
万方数据
Windows 2000下使用VC++6.0实现中断处理和I/O读写
作者:
作者单位:
刊名:
英文刊名:
年,卷(期):
被引用次数:
周杰
电脑编程技巧与维护
COMPUTER PROGRAMMING SKILLS & MAINTENANCE
2003,(4)
0次
本文链接:/Periodical_
授权使用:吉林大学(jldx),授权号:8b30a267-4fce-43ac-87ac-9ec400ebac68
下载时间:2011年4月13日
发布评论