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

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

 

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

 

另外,poll()函数主要是应用于中断不允许使用时以查询的状态去接收和发送网卡数据。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值