您的位置:首页 > 其它

eCos 网卡数据的发送、接受过程

2010-04-20 15:35 274 查看
网卡数据的发送过程是当网卡准备好并启动后,由上层应用程序首先发出发送数据的命令。然后调用can_send()函数判断网卡是否空闲可以发送数据。如果网卡正忙,请求上层数据等待;如果网卡空闲,即调用send()函数发送数据到网卡的硬件发送口中。由于发送中断已开放,当网卡发送完成后,程序会进入发送中断ISR函数(立即中断函数)。ISR中断函数主要功能是判断此次发送过程是否成功。如果不成功往上层程序报告错误信息;如果发送成功,只对硬件设备进行中断响应,清除中断信号,返回等待下一次中断信号。

网卡数据的接收过程是当网卡准备好并启动后,网卡的接收中断已开放,等待网卡硬件接收中断信号。当有数据被接收后,程序会进入网卡接收ISR中断服务程序。ISR接收中断函数主要负责判断接收过程是否成功以及对硬件设备中断信号的响应和清除。如果接收过程不成功,程序则立刻返回不作任何处理;如果接收成功,程序则调用DSR中断服务函数(滞后中断服务函数)。在DSR中断服务函数中,程序已不占操作系统中的核调度资源,因而DSR函数与deliver()函数执行了比较花费时间的数据搬移工作,此时数据将被搬到sg_list的上层链表中,并通知上层有数据已被接收。

另外,poll()函数主要是应用于中断不允许使用时以查询的状态去接收和发送网卡数据。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: