<form id="itnzz"><noscript id="itnzz"></noscript></form>

          1. <menuitem id="itnzz"></menuitem>
          2. 成人午夜激情在线观看,国产精品一线天粉嫩av,99精品国产综合久久久久五月天 ,一卡2卡三卡4卡免费网站,国产高清在线男人的天堂,五月天国产成人AV免费观看,67194熟妇在线观看线路,成人无码潮喷在线观看
            現(xiàn)在位置:范文先生網(wǎng)>理工論文>計算機論文>用Borland C++3.1實現(xiàn)外設(shè)與Windows應(yīng)用程序?qū)崟r通信

            用Borland C++3.1實現(xiàn)外設(shè)與Windows應(yīng)用程序?qū)崟r通信

            時間:2023-02-20 22:50:56 計算機論文 我要投稿
            • 相關(guān)推薦

            用Borland C++3.1實現(xiàn)外設(shè)與Windows應(yīng)用程序?qū)崟r通信

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

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

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

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

            1.CODE語句為固定代碼段,即FIXED;

            2.EXPORTS語句要引出被應(yīng)用程序和其它DLL用作入口點的函數(shù)。

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

            SetIsrWin(hwnd); /* hwnd指應(yīng)用程序窗口句柄 */
            定義一個在應(yīng)用程序中使用的消息:
            #define ISRM-RUPT WM-USER+255最后在DLL中的中斷服務(wù)程序代碼中,調(diào)用PostMessage即可完成Windows應(yīng)用程序和中斷服務(wù)程序代碼相互的信息交流:
            void interrupt newIsr(--CPPARGS)
            {

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

            }

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

            1.DLL庫代碼
            /*----------*
            * interrupt include file,named handle.h*
            *----------*/
            void FAR PASCAL SetIsrWin(HWND hwnd);
            void FAR PASCAL SetIRQNum(unsigned char IRQ);
            /*----------*
            * module defination file, named handle.def *
            *----------*/
            LIBRARY HANDLE
            EXETYPES WINDOWS
            STUB 'WINSTUB.EXE'
            CODE PRELOAD FIXED
            DATA PRELOAD SINGLE
            HEAPSIZE 1024
            EXPORTS
            WEP
            @1 RESIDENTNAME
            SetIRQNum @3
            /*----------*
            * interrupt service program in dll,named handle.dll *


            【用Borland C++3.1實現(xiàn)外設(shè)與Windows應(yīng)用程序?qū)崟r通信】相關(guān)文章:

            Windows CE下串行通信的實現(xiàn)08-06

            實時混音的實現(xiàn)?08-06

            在Windows2000下用多線程實現(xiàn)1394串行總線通信08-06

            基于Vxworks實時操作系統(tǒng)的串口通信程序設(shè)計與實現(xiàn)08-19

            用CPLD實現(xiàn)嵌入式平臺上的實時圖像增強08-06

            用CPLD實現(xiàn)嵌入式平臺上的實時圖像增強08-06

            用EP7211實現(xiàn)傳呼信息實時語音合成和播放08-06

            用高速DSP在頻域上實現(xiàn)LFM信號的實時脈沖壓縮08-06

            用Windows終端仿真程序?qū)崿F(xiàn)微機遠(yuǎn)程文件傳送08-06

            主站蜘蛛池模板: 国产AV老师黑色丝袜美腿| 九九综合va免费看| 强奷漂亮人妻系列老师| 亚洲男人第一无码av网站| 国产成a人亚洲精v品无码| 久久精品一区二区三区综合| 国产成人a在线观看视频| 亚洲精品亚洲人成人网| 欧美成人性色一区欧美成人性色区| a级黄色毛片免费播放视频| 国产目拍亚洲精品二区| 亚洲午夜片| a级国产乱理伦片在线观看al| 国产二区三区不卡免费| 国产精品毛片一区二区三| 欧洲精品色在线观看| 日本a在线播放| 欧美白妞大战非洲大炮| 国产精品国产三级在线专区| 午夜高清福利在线观看| 中文字幕网伦射乱中文| 男女性杂交内射女bbwxz| 三年片大全| 亚洲区一区二区三区亚洲| 久久伊人精品影院一本到综合| 粉嫩国产一区二区三区在线| 五月综合激情婷婷六月| 午夜福利你懂的在线观看| 亚洲av无码成人影院一区| 亚洲AⅤ精品一区二区三区| 亚欧美闷骚院| 好男人官网资源在线观看| 亚洲一区二区三区| 俺也去俺也去电影网| 性XXXX视频播放免费直播| 亚洲国产片一区二区三区| 六十熟妇乱子伦视频| 亚洲天堂在线观看完整版| 丰满少妇棚拍无码视频| 日韩国产精品无码一区二区三区| 97视频精品全国在线观看|