eCos 网卡数据的发送、接受过程
2010-04-20 15:35
274 查看
网卡数据的发送过程是当网卡准备好并启动后,由上层应用程序首先发出发送数据的命令。然后调用can_send()函数判断网卡是否空闲可以发送数据。如果网卡正忙,请求上层数据等待;如果网卡空闲,即调用send()函数发送数据到网卡的硬件发送口中。由于发送中断已开放,当网卡发送完成后,程序会进入发送中断ISR函数(立即中断函数)。ISR中断函数主要功能是判断此次发送过程是否成功。如果不成功往上层程序报告错误信息;如果发送成功,只对硬件设备进行中断响应,清除中断信号,返回等待下一次中断信号。
网卡数据的接收过程是当网卡准备好并启动后,网卡的接收中断已开放,等待网卡硬件接收中断信号。当有数据被接收后,程序会进入网卡接收ISR中断服务程序。ISR接收中断函数主要负责判断接收过程是否成功以及对硬件设备中断信号的响应和清除。如果接收过程不成功,程序则立刻返回不作任何处理;如果接收成功,程序则调用DSR中断服务函数(滞后中断服务函数)。在DSR中断服务函数中,程序已不占操作系统中的核调度资源,因而DSR函数与deliver()函数执行了比较花费时间的数据搬移工作,此时数据将被搬到sg_list的上层链表中,并通知上层有数据已被接收。
另外,poll()函数主要是应用于中断不允许使用时以查询的状态去接收和发送网卡数据。
网卡数据的接收过程是当网卡准备好并启动后,网卡的接收中断已开放,等待网卡硬件接收中断信号。当有数据被接收后,程序会进入网卡接收ISR中断服务程序。ISR接收中断函数主要负责判断接收过程是否成功以及对硬件设备中断信号的响应和清除。如果接收过程不成功,程序则立刻返回不作任何处理;如果接收成功,程序则调用DSR中断服务函数(滞后中断服务函数)。在DSR中断服务函数中,程序已不占操作系统中的核调度资源,因而DSR函数与deliver()函数执行了比较花费时间的数据搬移工作,此时数据将被搬到sg_list的上层链表中,并通知上层有数据已被接收。
另外,poll()函数主要是应用于中断不允许使用时以查询的状态去接收和发送网卡数据。
相关文章推荐
- 网卡如何接受和发送数据
- 数据发送和接受的过程
- qt写的一个简单的tcp服务器程序,可以接受消息发送数据
- 串口透传(SerialApp)的数据发送过程
- JAVA编码转换的详细过程理解—>浏览器和服务器的接收和发送数据的编码
- 网卡接收和发送数据包的过程
- socket数据发送过程
- java TCP/IP Socket编程-----发送和接受数据-----笔记7
- 【Python】udp网络程序-发送、接受数据
- 网卡只发送不接收数据的快捷处理
- STM32使用串口中断发送和接受数据
- 网卡接收和发送数据包的过程
- Java 组播发送数据和接受数据实例
- 网卡MAC地址异常会导致无接受数据包,表现为只有发送没有接收
- SpringMVC,接受、处理Json,fastjson解析json,用Postman4发送json数据
- 论UDX并发,单台服务器1.5w联接,每条联接发送1KB数据,10秒内没处理,断开联接--之改进过程
- JAVA编码转换的详细过程理解—>浏览器和服务器的接收和发送数据的编码
- C#使用socket发送和接受数据
- iOS客户端发送json数据,java(servlet)服务器接受json数据
- Android 通过Socket实现手机端向PC发送数据,并接受PC端返回的数据