文学艺术|民间故事|神话故事|历代名妓|历代名女|现代故事|诗联趣话|爱情故事|校园故事|传奇故事|帝王将相|荤故事|文化前沿|笑话|图库
论文大全|常用资料|经济金融|会计审计|工商管理|艺术学|社会文化|学科论文|计算机|文学论文|哲学论文|政治论文|法律学|医学|财务税收 
幼教频道|怀孕前|怀孕早期|怀孕中期|怀孕晚期|胎教知识|幼儿期|学前期|儿科健康|个性培养|身高体重|生活起居|育儿策略|玩具游戏|睡眠
两性健康|两性生活|性爱心理|性爱技巧|情感实录|两性生理|两性问答|性疾病|性教育|孕育常识|婚烟物语|健康生活|妊娠病|产后病|不孕症

您现在的位置: 冀鲁信息网 >> 综合信息 >> 论文大全 >> 计算机 >> 计算机理论 >> 综合信息正文

用Borland C++3.1实现外设与Windows应用程序实时通信

 
  • 上一篇综合信息:

  • 下一篇综合信息:

  • 摘 要 该文提出了一种在Windows3.1保护模式下,通过动态连接库(DLL)生成中断服务程序代码,实现外设与Windows应用程序实时通信的有效方法。

    一、前 言
    计算机的日益普及和计算机技术日益成熟,使得计算机在工业控制监测中的应用渐渐深入。但工业应用不同于其它方面,它要求有较强的实时性。现在有很多的DOS软件在运行过程中通过挂接外部中断方式实现DOS应用软件与外设的实时通信,这种方法实现起来十分简单。而在Windows中应用程序能否也能够利用外部硬中断实现外设与Windows应用程序的实时通信呢?答案是肯定的。这里的关键是要解决好中断代码与Windows应用程序相互之间交换信息的问题。
    从外设发送异步的硬中断,通过中断处理程序传递一条信息给Windows应用程序。这时可以初始化相关端口,准备好数据,然后进行数据传送,从而做到实时通信。
    实现Windows应用程序响应外部中断的方法有很多,如Microsoft公司自己开发的SDK、DDK软件包,使用嵌入式汇编等等。本文将介绍一种在BC++3.1的基础上利用Windows 3.1拥有的一些功能实现Windows实时通信的实例。

    二、中断代码的位置
    在Windows中,几乎所有的异步事件都是由中断处理程序来管理的。中断处理程序包含在设备驱动程序中,由Windows在环境初始化中安装。例如,KEYBOARD.DRV、MOUSE.DRV和COMM.DRV均含有中断处理程序,以处理相应的键盘、鼠标和串行口的异步中断。可以仿照标准设备驱动程序,编写中断处理代码,以响应外设的通信请求,从而完成一次实时通信。
    中断代码既可以包含在应用程序的可执行代码中,也可以包含在动态连接库(DLL)中。包含在应用程序中的代码只能在一个程序中使用,而在动态连接库中的代码则可以在Windows系统中所有的应用程序所共享。这样不仅在整个Windows系统中只有一个中断代码的副本,提高了内存的使用效率,更重要的是可以防止由于同时存在多个中断代码的副本而发生冲突。本文将在DLL中编制中断处理程序。
    当动态连接库被装入时,要调用DLL库的入口点LibMain(),利用这一点可以执行一些初始化工作,可以分配一些内存块,可以初始化一些全局变量或者静态变量,可以安装中断服务程序的代码等等。例如:
    void interrupt (oldIsr)(--CPPARGS)
    /* 旧的中断服务程序地址 */
    LibMain(HANDLE hInstance,WORD wDataSeg,WORD cbHeapSize,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函数向应用程序的消息队列中加入一条消息

    [1] [2] 下一页  

     
  • 上一篇综合信息:

  • 下一篇综合信息:
  • 新闻中心|农业新闻|蓄产行情|饲料行情|水产行情|
    粮油行情|蔬菜行情|农资行情|市场分析|致富经验|
    农业科技|植物保护|施肥技术|农作栽培|政策法规|
    农业词典|农用物资|加工保鲜|病虫防治|植物验疫|
    科技推广|实用技术|新优品种|动物养殖|科技动态|
    中药栽培|加工技术|专家观点|电脑技术|网络技术|

    | | 设为首页 | 加入收藏 | 联系我们 | 友情链接 | 版权申明 | 网站地图 |
    2005-2008 © www.n318.com 冀鲁信息网 冀ICP备05022225号
    声明:本站为免费个人网站,无力支付稿酬,如果您不想让您的文章出现在本站请联系我们。我们会在第一时间删除。