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:两个中断一起用?那有时候正在收数据,而键盘又被按下啦,这样有什么影响?系统又是如何处理这类情况的?
建议这样
main()
{
while(1)
{
有串口中断
{
收数放在串口缓冲区中
continue
}
if(有键盘中断)
{
处理键盘;
continue
}
if(缓冲区中已经是完整一帧)
{
//执行到这里肯定没有串口中断也没有键盘中断
处理(显示);
}
}
}
中断不是在主循环里处理的。有单独的中断处理子程序,子程序入口地址在内存的最低1K字节里,一查DOS资料就知道。一产生中断,主程序就暂停下来,执行中断处理子程序,执行完毕后返回主程序,恢复现场(也叫上下文)继续运行。也就是说主程序并不需要考虑中断的顺序问题,顺序是由中断源确定的。
dos是有中断优先级的,多个中断同时来哪个优先级高处理哪个
问题2:两个中断一起用?那有时候正在收数据,而键盘又被按下啦,这样有什么影响?系统又是如何处理这类情况的?
这个由优先级来控制
先响应谁,后响应谁
肯定是有这个先后顺序的。
但是,由于机器运行的速度足够快,一般来说都能在事件允许的时间内响应,这就不会出问题
如果,响应不过来,系统就会把有冲突的中断-事件-丢弃,因为超过了响应时间,中断也就不具备价值了
回到现实来,如果用户的按键不是那么严格的话,让用户多按两次,这个是没有问题的。
当然一个友好的系统,还是尽可能让用户高兴,反正我是不喜欢多按几次键的人
呵呵
这也是我们为什么常说中断响应程序要尽可能短
按一下键盘的中断时间是相当小的,键盘上的中断是硬件中断,优先级是很高的。
如果你两个的优先级都设为一样的话,就看谁先执行了。
时间很短,一般都不应该有太多影响。即使有影响,程序写得号的话估计你的眼睛是看不过来的,也感受不到。
***************************************************************************
思想决定行动,行动决定习惯,习惯决定命运.
程序员在深圳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. 向你身边精于此道的朋友打听。
我想我们首先应该靠自己解决问题,然后才是问!
*****************************************************************************