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); // 设置数据接收时的回调函数
}
相关文章推荐
- 浅谈IT路的职业规划
- UI 01 UIView
- [C++11]新特性试用
- 窗口创建贴图
- 全球架构师峰会北京站2014
- 多线程访问共享数据(2)
- 文件的哈希值不在指定的目录文件中。此文件可能已损坏或被篡(Windows10 /Windows8.1)
- MySQL索引与Index Condition Pushdown
- 在Eclipse中配置NDK自动编译环境builders
- MySQL索引背后的数据结构及算法原理
- 2013 蟠桃记
- 2015.07.31
- Git设置:
- 006--struts2标签库
- 快捷键
- 字符串和可变字符串
- Android 5.0内核和源代码学习(2)——源码下载和系统启动过程分析
- 简析HTTPS和HTTP的区别
- 南阳 oj D的小L 题目366
- 新时代动画电影的互联网宣传