void udp_recv(struct udp_pcb *pcb,void (* recv)(void *arg, struct udp_pcb *upcb, struct pbuf *p,struct ip_addr *addr, u16_t port),void *recv_arg)
{
pcb->recv = recv; //recv为函数指针
pcb->recv_arg = recv_arg;
}
static void udpapp_recv_callback(void *arg, struct udp_pcb *upcb, struct pbuf *pkt_buf, struct ip_addr *addr, u16_t port) //回调函数
{
。。。。自己代码
}
void main(void)
{
udp_recv(udpapp_pcb, udpapp_recv_callback, NULL); //初始化将回调函数赋值给一个函数指针
while(1)
{
if(收到UDP包)
{
........ //系统代码
pcb->recv(pcb->recv_arg, pcb, p, &iphdr->src, src); //函数指针被系统自己调用
.........//系统代码
}
}
}
|