1. <tt id="5hhch"><source id="5hhch"></source></tt>
    1. <xmp id="5hhch"></xmp>

  2. <xmp id="5hhch"><rt id="5hhch"></rt></xmp>

    <rp id="5hhch"></rp>
        <dfn id="5hhch"></dfn>

      1. 用Borland C 3.1實現(xiàn)外設與Windows應用程序實時通信

        時間:2023-03-21 11:37:23 計算機畢業(yè)論文 我要投稿
        • 相關推薦

        用Borland C 3.1實現(xiàn)外設與Windows應用程序實時通信

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

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

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

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

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

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

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

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

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

        }

        四、程序實例
        本示例先安裝在DLL中的外中斷服務代碼,通過386/AT總線上的中斷申請線(IRQ12)外觸發(fā),由中斷服務代碼發(fā)送一條消息WM-RUPT通知Windows應用程序外設有實時通信請求,應用程序收到這條消息后,在窗口用戶區(qū)顯示一條信息,表明已和外設聯(lián)絡上,并同時鳴叫一聲喇叭。
        程序分為兩部分: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實現(xiàn)外設與Windows應用程序實時通信】相關文章:

        用Verilog HDL實現(xiàn)I2C總線功能06-01

        嵌入式實時網(wǎng)絡通信技術淺析論文(精選7篇)07-26

        Windows05-28

        當當欲將B2C與C2C融合 打造綜合網(wǎng)上商城05-09

        濕熱對維C銀翹片中維生素C含量的影響08-02

        適應實時多任務的微控制器高效指令支持05-29

        探究濕熱對維C銀翹片中維生素C含量的影響03-06

        基于J2EE的遠動系統(tǒng)Web實時曲線的研究05-11

        都市頻道制作網(wǎng)的設計與實現(xiàn)05-29

        C語言程序設計 (一)05-11

        国产高潮无套免费视频_久久九九兔免费精品6_99精品热6080YY久久_国产91久久久久久无码

        1. <tt id="5hhch"><source id="5hhch"></source></tt>
          1. <xmp id="5hhch"></xmp>

        2. <xmp id="5hhch"><rt id="5hhch"></rt></xmp>

          <rp id="5hhch"></rp>
              <dfn id="5hhch"></dfn>