急死了,xtang和computer能帮助我吗?

共用中断的问题

若要共享中段,这种问题在所难免.最好的办法是不共享.换一下PCI插槽应该办得到.
一种办法是修改网卡驱动,但似乎有点复杂.或许在数据采集驱动里加个timer是最简单
的?实在想不出什么好招数.

插槽我已经试过了,可是每个net controller 要占一个中断,4个就要占4个中断(但是我们的客户就要求4个网口),所以实在是躲不开,你说的用TIMER怎么实现,说来听听。

比如说你的卡需要每10ms来一次中断,你可以作一个10ms(5ms)的timer来监视你的
采集卡.或者干脆不用中断,只用timer polling得了.当然timer的间隔需要认真考虑才
行.

用timer是不是很浪费资源呢?顺便问一下,中断号到底是如何分配的呢?我理解这应该与QNX没有关系,而和主板有关系,如果我要求主板的厂商修改BIOS是否可以让我自己的板卡独占某个中断呢?对不起我对PCI的硬件知识了解的不多。

费资源呀是肯定的,但不会"很"浪费.再说共享中断同样浪费资源呀.
中毒是由BIOS来分配的,一般来说硬件设计时已经定好了.进BIOS看看,应该
会告诉你哪个槽与哪个槽共享中断.
其实让网卡之间共享中断,让数据采集卡单独使用一个应该没有问题.

xtang,computer,现在的焦点问题是当我的app和网卡共用中断时就有问题,不知您们是否了解io-net这个程序的内部机理(主要是与中断有关的),如果能够知道可能会对问题的解决有帮助。

对啊。你的问题是你的采集卡和别人(网卡)共享中断造成的。所以,

1)如果你能够使你的采集卡单独用一个中断,别的几个网卡之间共不共享中断都无关,那样你的采集卡的中断就可以保证了。

2)如果你没有办法做到上面这一点的,那么用时钟轮询的办法也可以。轮询是不是更费资源(CPU)也不是一定的。如果你的采集卡上的数据是持续不断地每10ms就来的话,轮询方式同中断方式的耗费是一样的(甚至更小)。轮询的缺点是,如果你的数据是一阵一阵的,来得快的时候每10ms一个,慢的时候几秒都没有,那么在那几秒内的轮询就多耗费CPU了(相比中断方式的话)。

3)如果你一定要中断方式,又做不到1)的话,那你需要对所有共享中断的设备都自行控制。换言之,你要设法得到你用的网卡的驱动源码,然后自已修改。不过,如果你有很多设备共享一个中断的话,也可能再怎么改也达不到你的要求的。

试了用TIMER轮询的方式,发现有问题,机器会死机,我猜想是和硬件配合的问题,因为我的A/D采集卡发来中断后需要我马上清中断寄存器的标志,可是好象不能及时清掉。

唐先生,还有一个问题比较迷惑,用定时器时我看例程中是启动一个线程,这个线程用Msgreceive()阻塞直到timer定时发来一个event,在设置event时需要设置其优先级,这个优先级的设置和线程的优先级有什么关系呢?它的设置原则是什么呢?

如果这样的话用共享中断也同样会死机,因为中断寄存器的标志也不会被马上清掉.
还有,这"马上"有多快?

如果决定用Timer轮询,就可以想法把A/D卡的中断关掉啊。有没有数据,你都会去查的,还要中干什么?

更确切的说,应该是pulse event会有一个优先级。timer定时发这个pulse。收到pulse的MsgReceive()线程,会被调整到pulse里的优先级,并在这个优先级上运行。

pulse是用来"通知"某一事件发生了的。设定pulse优先级的原则就是,处理这个事件(pulse) 需要什么样的优先级。

可是系统就是反应很慢呀,我把原来中断中做的事情原封不动的放到了定时器的线程中了,记得“中断的优先级是最高的”,是不是这个原因呢?难道定时器的优先级不够

系统反应慢是指什么?不能在Console输入?仍然会丢失数据?

如果定时器的优先级不够,那么可能会丢失数据,但系统反应不会变慢。提高定时器的优先级(保证它每10ms都会运行),那就不会丢失数据,当然系统可能因为没有时间处理console输入而变慢。

系统反应很慢指的是很长时间鼠标键盘都没有反应,以为系统死掉了,但是过一会通过pterm还能打印出一行信息。

也就是说,有进程在更高的优先级上运行,比鼠标键盘更高。你需要找也是那个进程。(用一个高优先级的pidin -l)

如果是你的定时器线程,你就要问自已为什么这个线程会使用很长时间?