当把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);
}
为什么。。。。
|