取消
显示结果 
搜索替代 
您的意思是: 
Highlighted
Observer
Observer
248 次查看
注册日期: ‎05-14-2019

现在我们想基于LWIP进行开发,分为数据通道和控制通道传输数据。数据通道需要一直发送,控制通道则是先接收报文 再发送响应。现在的问题是,使用udp_recv回调函数接收,和我数据通道传输数据似乎变成了两个进程,因为udp_recv的运行不受我控制。我们又是裸板开发,没有多线程,这个怎么处理? 

0 项奖励
1 解答

已接受的解答
Highlighted
Participant
Participant
160 次查看
注册日期: ‎09-13-2018

回复: lwip问题

�����������

udp_rev在初始化配置,

udp_recv(pcb, udp_recv_callback, NULL); //设置接收回调函数

其中udp_recv_callback是接收回调函数,如果有数据过来会跳转到该函数,

void udp_recv_callback(void *arg, struct udp_pcb *tpcb,struct pbuf *p, struct ip_addr *addr, u16_t port)
{
    xil_printf("Received from %d.%d.%d.%d port %d\r\n", (addr->addr) & 0xFF,
    (addr->addr>>8) & 0xFF, (addr->addr>>16) & 0xFF, (addr->addr>>24) & 0xFF, port);
    udp_printf(p, tpcb, addr, port); //echo
    pbuf_free(p); //释放pbuf
    return;
}
类似中断形式的触发

你可以试一下。

 

在原帖中查看解决方案

0 项奖励
3 回复数
Highlighted
Participant
Participant
195 次查看
注册日期: ‎09-13-2018

回复: lwip问题

�����������

建议用双网口,才能保证实时性,否则就得阻塞形式收发

0 项奖励
Highlighted
Observer
Observer
185 次查看
注册日期: ‎05-14-2019

回复: lwip问题

�����������

阻塞形式收发对我也可以接受。关键我怎么知道我接收到包了,从而控制发送呢?udp_rev这个回调函数似乎不受我控制啊

0 项奖励
Highlighted
Participant
Participant
161 次查看
注册日期: ‎09-13-2018

回复: lwip问题

�����������

udp_rev在初始化配置,

udp_recv(pcb, udp_recv_callback, NULL); //设置接收回调函数

其中udp_recv_callback是接收回调函数,如果有数据过来会跳转到该函数,

void udp_recv_callback(void *arg, struct udp_pcb *tpcb,struct pbuf *p, struct ip_addr *addr, u16_t port)
{
    xil_printf("Received from %d.%d.%d.%d port %d\r\n", (addr->addr) & 0xFF,
    (addr->addr>>8) & 0xFF, (addr->addr>>16) & 0xFF, (addr->addr>>24) & 0xFF, port);
    udp_printf(p, tpcb, addr, port); //echo
    pbuf_free(p); //释放pbuf
    return;
}
类似中断形式的触发

你可以试一下。

 

在原帖中查看解决方案

0 项奖励