中文字幕在线一区二区在线,久久久精品免费观看国产,无码日日模日日碰夜夜爽,天堂av在线最新版在线,日韩美精品无码一本二本三本,麻豆精品三级国产国语,精品无码AⅤ片,国产区在线观看视频

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

      時間:2024-09-03 14:07:50 計算機畢業論文 我要投稿
      • 相關推薦

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

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

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

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

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

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

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

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

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

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

      }

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

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

      實時混音的實現03-18

      在Windows2000下用多線程實現1394串行總線通信03-20

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

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

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

      用EP7211實現傳呼信息實時語音合成和播放03-19

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

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

      主站蜘蛛池模板: 久久精品国产亚洲AV高清y w| 精品国产乱来一区二区三区| 久久精品中文字幕第一页| 亚洲www视频| 翁牛特旗| 在线观看av片永久免费| 水野优香中文字幕亚洲一区| 亚洲综合久久1区2区3区| 永州市| 国产精品国产三级国产在线观| 盐津县| 毛片在线啊啊| 永久免费中文字幕av| av在线观看亚洲天堂| 黎平县| 91久久国产综合精品| 色中文字幕视频在线观看| 亚洲变态另类色图天堂网| 精品人妻丰满久久久a| 亚洲欧美另类日本久久影院| 国产精品一区二区久久毛片| 镇原县| av资源在线看免费观看| 成人日韩av不卡在线观看| 国产aⅴ丝袜旗袍无码麻豆| 性无码国产一区在线观看| 国产av普通话对白国语| 男人的av天堂狠狠操| 亚洲精彩视频一区二区| 兰溪市| 邯郸县| 日韩av一区二区毛片| 时尚| 在线观看亚洲视频一区二区三区 | 超清无码AV丝袜片在线观看| 一区二区三区自拍偷拍亚洲| 人妻少妇被猛烈进入中文字| 国产成人夜色在线视频观看| 久久久久久久国产精品电影| 国产欧美日韩专区毛茸茸| 精品国产高清一区二区广区|