最近开发一网络设备的驱动,该设备在收到数据时会产生中断,进入中断处理函数,我现在
的做法是:在中断处理函数中先判断中断类型,如果是接收数据中断来了,再去调用数据接收
函数,接收完后再返回中断处理函数,这方法在数据量小,发送慢时还可以,但数据量一大,中断
队列立即就满了,来不及处理数据就死机了!
请教大家:有什么好的方法可以提高效率?请多提建议!!
是否可以使用内核线程??
谢谢!!
---------------------------------------------------------------
为什么不用DMA呢?
在内核态已经是全速运行了,又没东西和你抢CPU时间,不可能更高速了,只有DMA可以稍微好点
对了,如果事情都在内核做,尽量隔一段时间释放一下CPU,不然感觉机器就是死了
---------------------------------------------------------------
兄弟,要是我说的对你有帮助,而别人又不怎么说,那么请你把分给我 ^^
在中断程序里处理大量数据是不合理的,因为中断程序应该马上返回,在中断期间,中断程序是不接受任务调度的,也就是说,在那个时候,系统不是多任务的,所以你死机了.....
在linux中,中断处理被分成两个部分,就是上半部和底半部,上半部用来处理中断,之后马上启动底半部,把大量任务交给底半部,就可以避免长时间不能任务调度.
底半部程序的做法你自己去查好了.一句两句也说不清.<
1<linux内核驱动程序>>,魏永明先生译的那个很不错,你可以看看.
2
3或者你吧读取的任务放到用户空间来也行,在你的设备驱动中实现poll,然后在用户空间用while(0){
4select()
5}
6的形式,就象socket一样,驱动并不读取数据,只是唤醒select,然后应用程序去读,应该也可以.</linux内核驱动程序>