激情欧美日韩一区二区,浪货撅高贱屁股求主人调教视频,精品无码成人片一区二区98,国产高清av在线播放,色翁荡息又大又硬又粗视频

用Borland C 3.1實(shí)現外設與Windows應用程序實(shí)時(shí)通信

時(shí)間:2024-09-03 14:07:50 計算機畢業(yè)論文 我要投稿
  • 相關(guān)推薦

用Borland C 3.1實(shí)現外設與Windows應用程序實(shí)時(shí)通信

摘要該文提出了一種在Windows3.1保護模式下,通過(guò)動(dòng)態(tài)連接庫(DLL)生成中斷服務(wù)程序代碼,實(shí)現外設與Windows應用程序實(shí)時(shí)通信的有效方法。

一、前言
計算機的日益普及和計算機技術(shù)日益成熟,使得計算機在工業(yè)控制監測中的應用漸漸深入。但工業(yè)應用不同于其它方面,它要求有較強的實(shí)時(shí)性,F在有很多的DOS軟件在運行過(guò)程中通過(guò)掛接外部中斷方式實(shí)現DOS應用軟件與外設的實(shí)時(shí)通信,這種方法實(shí)現起來(lái)十分簡(jiǎn)單。而在Windows中應用程序能否也能夠利用外部硬中斷實(shí)現外設與Windows應用程序的實(shí)時(shí)通信呢?答案是肯定的。這里的關(guān)鍵是要解決好中斷代碼與Windows應用程序相互之間交換信息的問(wèn)題。
從外設發(fā)送異步的硬中斷,通過(guò)中斷處理程序傳遞一條信息給Windows應用程序。這時(shí)可以初始化相關(guān)端口,準備好數據,然后進(jìn)行數據傳送,從而做到實(shí)時(shí)通信。
實(shí)現Windows應用程序響應外部中斷的方法有很多,如Microsoft公司自己開(kāi)發(fā)的SDK、DDK軟件包,使用嵌入式匯編等等。本文將介紹一種在BC 3.1的基礎上利用Windows3.1擁有的一些功能實(shí)現Windows實(shí)時(shí)通信的實(shí)例。

二、中斷代碼的位置
在Windows中,幾乎所有的異步事件都是由中斷處理程序來(lái)管理的。中斷處理程序包含在設備驅動(dòng)程序中,由Windows在環(huán)境初始化中安裝。例如,KEYBOARD.DRV、MOUSE.DRV和COMM.DRV均含有中斷處理程序,以處理相應的鍵盤(pán)、鼠標和串行口的異步中斷?梢苑抡諛藴试O備驅動(dòng)程序,編寫(xiě)中斷處理代碼,以響應外設的通信請求,從而完成一次實(shí)時(shí)通信。
中斷代碼既可以包含在應用程序的可執行代碼中,也可以包含在動(dòng)態(tài)連接庫(DLL)中。包含在應用程序中的代碼只能在一個(gè)程序中使用,而在動(dòng)態(tài)連接庫中的代碼則可以在Windows系統中所有的應用程序所共享。這樣不僅在整個(gè)Windows系統中只有一個(gè)中斷代碼的副本,提高了內存的使用效率,更重要的是可以防止由于同時(shí)存在多個(gè)中斷代碼的副本而發(fā)生沖突。本文將在DLL中編制中斷處理程序。
當動(dòng)態(tài)連接庫被裝入時(shí),要調用DLL庫的入口點(diǎn)LibMain(),利用這一點(diǎn)可以執行一些初始化工作,可以分配一些內存塊,可以初始化一些全局變量或者靜態(tài)變量,可以安裝中斷服務(wù)程序的代碼等等。例如:
voidinterrupt(oldIsr)(--CPPARGS)
/*舊的中斷服務(wù)程序地址*/
LibMain(HANDLEhInstance,WORDwDataSeg,WORDcbHeapSize,L
PSTR
lpszCmdLine)
{

oldIsr=getvect(IRQNum);
/*IRQNum指中斷號*/
setvect(IRQNum,newIsr);
/*newIsr指新中斷服務(wù)程序代碼*/
return(1);
}
函數setvect()既可在實(shí)模式下,也可在保護模式下設置中斷處理向量。
上述代碼也可以放在一個(gè)由用戶(hù)設置的引出(export)函數中,在應用程序中用戶(hù)可以調用此引出函數來(lái)安裝中斷服務(wù)程序代碼。
由于中斷可以在任何時(shí)刻發(fā)生,中斷代碼必須駐留在內存中,并且在應用程序運行的過(guò)程中一直處于某一固定內存中。這一點(diǎn)無(wú)論是在實(shí)模式還是在保護模式下都是一致的。
在DLL的模塊定義文件中應注意:

1.CODE語(yǔ)句為固定代碼段,即FIXED;

2.EXPORTS語(yǔ)句要引出被應用程序和其它DLL用作入口點(diǎn)的函數。

三、通信機制
編寫(xiě)實(shí)時(shí)通信例程關(guān)鍵在于必須認識到,異步事件對應用程序的觸發(fā)是異步發(fā)生的,不在Windows的消息處理機制和多任務(wù)范圍內。為了使通信例程能夠正確地工作,通信例程必須通知Windows有異步事件發(fā)生,且不能打斷應用程序的任務(wù)管理或消息流。要作到這一點(diǎn),通信例程必須通過(guò)調用PostMessage或PostAppMessage函數向應用程序的消息隊列中加入一條消息。
需要注意的是,在DLL中調用PostMessage(HWNDhwnd,…)時(shí),必須先確定hwnd的實(shí)際值,可以通過(guò)使用引出函數的辦法來(lái)實(shí)現,如下所示:
staticHWNDhWndApp;
voidFARPASCALSetIsrWin(HWNDhwnd)
{
hWndApp=hwnd;
}
然后在應用程序的窗口函數中,對WM-CREATE消息進(jìn)行處理時(shí)調用此函數來(lái)初始化DLL中的靜態(tài)變量hWndApp:
CASEWM-CREATE:

SetIsrWin(hwnd);/*hwnd指應用程序窗口句柄*/
定義一個(gè)在應用程序中使用的消息:
#defineISRM-RUPTWM-USER 255最后在DLL中的中斷服務(wù)程序代碼中,調用PostMessage即可完成Windows應用程序和中斷服務(wù)程序代碼相互的信息交流:
voidinterruptnewIsr(--CPPARGS)
{

PostMessage(hWndApp,WM-RUPT,wParam,lParam);

}

四、程序實(shí)例
本示例先安裝在DLL中的外中斷服務(wù)代碼,通過(guò)386/AT總線(xiàn)上的中斷申請線(xiàn)(IRQ12)外觸發(fā),由中斷服務(wù)代碼發(fā)送一條消息WM-RUPT通知Windows應用程序外設有實(shí)時(shí)通信請求,應用程序收到這條消息后,在窗口用戶(hù)區顯示一條信息,表明已和外設聯(lián)絡(luò )上,并同時(shí)鳴叫一聲喇叭。
程序分為兩部分:DLL庫代碼和Windows應用程序代碼。

1.DLL庫代碼
/*----------*
*interruptincludefile,namedhandle.h*
*----------*/
voidFARPASCALSetIsrWin(HWNDhwnd);
voidFARPASCALSetIRQNum(unsignedcharIRQ);
/*----------*
*moduledefinationfile,namedhandle.def*
*----------*/
LIBRARYHANDLE
EXETYPESWINDOWS
STUB'WINSTUB.EXE'
CODEPRELOADFIXED
DATAPRELOADSINGLE
HEAPSIZE1024
EXPORTS
WEP
@1RESIDENTNAME
SetIRQNum@3
/*----------*
*interruptserviceprogramindll,namedhandle.dll*

作者:薛立宏史鐵林余佳兵

【用Borland C 3.1實(shí)現外設與Windows應用程序實(shí)時(shí)通信】相關(guān)文章:

VC++實(shí)現串口通信的應用程序設計03-07

實(shí)時(shí)混音的實(shí)現03-18

在Windows2000下用多線(xiàn)程實(shí)現1394串行總線(xiàn)通信03-20

基于Vxworks實(shí)時(shí)操作系統的串口通信程序設計與實(shí)現03-18

用Windows終端仿真程序實(shí)現微機遠程文件傳送03-18

在Windows系統中用VC 實(shí)現鉤子機制03-18

用EP7211實(shí)現傳呼信息實(shí)時(shí)語(yǔ)音合成和播放03-19

TMS320C54XX系列DSP與PC機間串行通信的實(shí)現03-18

ADμC812的串行外設接口(SPI)及其應用03-18

激情欧美日韩一区二区,浪货撅高贱屁股求主人调教视频,精品无码成人片一区二区98,国产高清av在线播放,色翁荡息又大又硬又粗视频