lwip可以用于发udp_stm32f107调用lwip的udp程序接收发送数据出问题。

论坛 期权论坛 编程之家     
选择匿名的用户   2021-5-17 08:11   11   0

当把udp接收到的数据立刻发送回PC,正常。程序如下:

void recv_callback_tftp(void *arg, struct udp_pcb *upcb, struct pbuf *pkt_buf,

struct ip_addr *addr, u16_t port)

{

struct ip_addr devaddr;

struct ip_addr destAddr = *addr; /* 获取远程主机 IP 地址 */

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

{

udp_sendto(upcb,pkt_buf,&destAddr,port);

}

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

}

但是把接收到的数据稍微处理一下,放到其他一个buf中进行发送,每次都直接进入void HardFault_Handler(void){}里了呢。 程序如下:

void recv_callback_tftp(void *arg, struct udp_pcb *upcb, struct pbuf *pkt_buf,

struct ip_addr *addr, u16_t port)

{

unsigned char n;

unsigned char tmp8[20];

struct ip_addr devaddr;

struct ip_addr destAddr = *addr; /* 获取远程主机 IP 地址 */

struct pbuf *buf;

buf = pbuf_alloc(PBUF_RAW,sizeof(tmp8),PBUF_POOL);

buf->payload=(void *)tmp8;

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

{

for(n=0;n<20;n++){

tmp8[n] = *(((char*)(pkt_buf->payload))+n);

}

switch(tmp8[0]){

case 0xC0:

tmp8[0] = 0xC0;

tmp8[1] = 0x02;

tmp8[2] = 72;

tmp8[3] = 4;

tmp8[4] = 0;

tmp8[5] = 0x13;

tmp8[6] = 0x05;

udp_sendto(upcb,(void *)(tmp8),&destAddr,port);

break;

}

}

pbuf_free(pkt_buf);

}

为什么。。。。

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP