- 论坛徽章:
- 0
|
原帖由 sherf 于 2009-11-11 16:11 发表 ![]()
我还想问一下,对于 demo 的程序应该怎样进行测试?
我的测试是这样的:就是调用demo里面的send函数,但发送了4个包之后(也就是TSD0 ~ 4 都各发了一个包之后),程序停了下来,原因txfreedesc为0。而要使txfreedesc不为0,那只能启动中断处理程序,让发送队列里的数据发出去。但现在就是不能驱动中断处理程序。按照文档上说,只要发送一个完整的包到发送队列或发送的数据大小超过TSD阀值就会自动触发发送中断并由网卡将数据发送出去.......是否我的测试方法不对?
"而要使txfreedesc不为0,那只能启动中断处理程序,让发送队列里的数据发出去。"
这句有问题. 要使得txfreedesc不为0, 是要用到中断处理程序. 但是ISR的目的是检测数据发送出去了没有. 正常情况下,你只要写了包的大小,网卡就会自动启动DMA, 发数据. 网卡发完后,根据你的中断屏蔽寄存器的设置来看是否产生中断. 如果设置了产生TX相关的中断, 网卡就会用一个中断来通知驱动.驱动接到中断后,读一下中断状态寄存器.如果发现是 TX_OK. 那么就把相应的 TX DESCRIPTOR 标记为空闲.
我没有测试过DEMO程序,只是跟踪过LINUX上的 8139TOO.C |
|