您的位置:首页 > 其它

LWIP接收例程

2015-07-31 08:36 295 查看


以太网是TI公司9b96这款芯片特色外设,或者说之所以选择9b96这款芯片,就是要用它的以太网。但是开发板给的光盘中有关以太网的例子,如enet_lwip,初学者搞不清楚这个目录中的这些文件是干什么的,这些文件都需要吗?

大家可以看出enet_lwip例子文件结构比较混乱,不知道哪些是我们要用到的源文件,不知道哪些是该工程必须用到的库文件,有些学生可能自己新建一个工程,但是编译时会出现错误,提示找不到包含的头文件,但又不知道这些头文件到哪去找?

下面是以太网最简单的例子,用网络助手发送数据,可以进入到以太网中断处理函数中。

/******* 这是一个回调函数,当有UDP数据收到时会被调用********/

// addr:笔记本的IP地址(存放向开发板发送数据的PC的IP地址)

// port:笔记本的端口号(远端端口号)

void UDP_Receive(void *arg, struct udp_pcb *upcb, struct pbuf *p_rx,

struct ip_addr *addr, u16_t port)

{

memset(UDPData, 0, 1020);

if (p_rx != NULL) // 如果收到的数据不为空

{

memcpy(UDPData, (char *)p_rx->payload, p_rx->len);

p_tx->len = p_tx->tot_len = p_rx->len;

IP_Addr_Tmp = UdpPcb->remote_ip;

UdpPcb->remote_ip = *addr; // 获取笔记本的IP地址(远端IP地址)

udp_send(UdpPcb, p_tx);

}

UdpPcb->remote_ip = IP_Addr_Tmp;

pbuf_free(p_rx); // 释放缓冲区数据

}

// 如果在回调函数中发送数据,不用connect; 在回调函数外发送数据必须要connect,否则接收不到数据

void UDP_Test_Init(void)

{

p_tx = pbuf_alloc(PBUF_RAW, sizeof(UDPData), PBUF_RAM); // 按照指定类型分配一个pbuf结构体 // struct pbuf *p_tx;

p_tx->payload = (void *)UDPData; // DI16实际发送数据内存区

local_addr.addr = 0x0A01A8C0; // 本地IP地址:192.168.1.10

UdpPcb = udp_new(); // 创建udp协议控制块

udp_bind(UdpPcb, &local_addr, 1025); // 在协议控制块中绑定本地ip地址和本地端口号,本地:开发板(程序下到开发板中)

udp_connect(UdpPcb, IP_ADDR_ANY, 1025); // 与远端udp主机建立连接,远端:笔记本

udp_recv(UdpPcb, UDP_Receive, NULL); // 设置数据接收时的回调函数

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: