[古董级问题寻解]DOS下用C如何解决多个中断源的问题?

lyzj321   2008-4-28 02:45 楼主
main()
{
    while(1)
    {
        有串口中断,则将此字节填到缓冲区;
         if(缓冲区中已经是完整一帧)
             处理(显示);
         if(有键盘中断)
            处理键盘;
     }
}

一位朋友贴的,我有个问题,完了我有这个问题,

有串口中断,则将此字节填到缓冲区;   
         if(缓冲区中已经是完整一帧)  这里可以是中断处理接收存储到数组,L[0]标识是数据头开始,L[1]存储的是数据,L[2]标识是数据尾
然后缓冲区是完整的一帧,就通过判断L[2],是不是这样?
问题1:while(inportb(comba+5)&0x60!=0x60);
      delay(10);      
/*串口数据发送结束前,查询D6,D5,分别防止数据丢失及表示发送操作就绪,准备好接收CPU下一个要发送的数据*/
这样判断数据发完和上面有什么区别??? (这里好像只要判断数据头就行)

问题2:两个中断一起用?那有时候正在收数据,而键盘又被按下啦,这样有什么影响?系统又是如何处理这类情况的?

回复评论 (7)

建议这样

main()  
{  
    while(1)  
    {  
        有串口中断
         {
            收数放在串口缓冲区中
            continue
        }
         if(有键盘中断)  
        {
            处理键盘;
            continue
         }
         if(缓冲区中已经是完整一帧)  
        {
             //执行到这里肯定没有串口中断也没有键盘中断
             处理(显示);  
          }
     }  
}
点赞  2008-4-28 14:00
中断不是在主循环里处理的。有单独的中断处理子程序,子程序入口地址在内存的最低1K字节里,一查DOS资料就知道。一产生中断,主程序就暂停下来,执行中断处理子程序,执行完毕后返回主程序,恢复现场(也叫上下文)继续运行。也就是说主程序并不需要考虑中断的顺序问题,顺序是由中断源确定的。
点赞  2008-4-29 22:55
dos是有中断优先级的,多个中断同时来哪个优先级高处理哪个
点赞  2008-6-5 07:44
问题2:两个中断一起用?那有时候正在收数据,而键盘又被按下啦,这样有什么影响?系统又是如何处理这类情况的?

这个由优先级来控制

先响应谁,后响应谁

肯定是有这个先后顺序的。

但是,由于机器运行的速度足够快,一般来说都能在事件允许的时间内响应,这就不会出问题

如果,响应不过来,系统就会把有冲突的中断-事件-丢弃,因为超过了响应时间,中断也就不具备价值了

回到现实来,如果用户的按键不是那么严格的话,让用户多按两次,这个是没有问题的。

当然一个友好的系统,还是尽可能让用户高兴,反正我是不喜欢多按几次键的人

呵呵

这也是我们为什么常说中断响应程序要尽可能短
点赞  2008-6-5 12:08
按一下键盘的中断时间是相当小的,键盘上的中断是硬件中断,优先级是很高的。
如果你两个的优先级都设为一样的话,就看谁先执行了。
时间很短,一般都不应该有太多影响。即使有影响,程序写得号的话估计你的眼睛是看不过来的,也感受不到。
点赞  2008-6-5 17:33
***************************************************************************

思想决定行动,行动决定习惯,习惯决定命运.
程序员在深圳QQ群,交流产生思想碰撞.

部份专业群:
程序员在深圳c++群15195967
程序员在深圳英语学习群:23864353
程序员在深圳c++Ⅱ17409451
程序员在深圳嵌入式开发群37489763
程序员在深圳移动开发群31501597
程序员在深圳创业群33653422

部份高级程序员群:
高级群I:17538442
高级群II:7120862

部份初、中级程序员群:
第三群:2650485
第五群:29537639
第四群:28702746
第六群:10590618
第七群:10543585
第八群:12006492
第九群:19063074
第十群:2883885
第十一群:25460595
第十二群:9663807

深圳程序员QQ群联盟成立三年多,拥有三十个以上的QQ群,人数超二千多人,大量经验丰富的老手,成员从业于大公司(如微软、IBM,SUN,华为

)、来自国内著名高校和研究院成员,和有丰富实践经验的高级程序员、系统分析员(包括参加过上亿元的项目的架构师),有很热爱技术的成员

(包括自己写操作系统),还有少数女程序员。推荐:深程高级群I:17538442 深程高级群II:7120862 (深程高级群不欢迎新手,如果在深圳,月薪

6K以下的别加入) c++:15195967  mobile:31501597嵌入式:37489763  
——————————————————————————————————————————
如果你不是第一次看到此广告,说明我们最近T了一些人,因为我们要不断提升群的质量,保证名副其实.
-------------------------------------------------------------------------------------
在通过电邮、新闻组或者聊天室提出技术问题前,检查你有没有做到:
      1. 通读手册,试着自己找答案。
      2. 在FAQ里找答案(一份维护得好的FAQ可以包罗万象:)。
      3. 在网上搜索(个人推荐google~)。
      4. 向你身边精于此道的朋友打听。
我想我们首先应该靠自己解决问题,然后才是问!

*****************************************************************************
点赞  2008-6-12 08:14
中断优先级
中断向量
点赞  2008-6-13 16:47
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复