初级会员

- 积分
- 53
- 金钱
- 53
- 注册时间
- 2014-3-26
- 在线时间
- 4 小时
|
STM32F107,移植LWIP1.4.1 , DM9161, UDP TCP能正常通信,这个程序知识开启一个UDP通信,每五秒发送一次心跳(时间包),同时接收PC端的指令,做相应的处理后,回复应答。
问题:
我在连续发送指令后,(即不管有没有接收到应答,都在发送命令,PC上位机有超时重传设置,就是连续发送几次。)出现死机的情况,代码进入HardFault_Handler函数。
(1)我用了他们讲的办法放回BX LR,但是返回不了。无法定位具体地方。
(2)不知道是不是堆栈溢出,所以在发送的函数里把去全部的比较大局部变量全部改成全局变量。还是会出现问题。
会不会是发送和接收函数有问题,请高手看看:(基本参考原子的代码)
//接收回调函数
void udp_Data_callback(void *arg, struct udp_pcb *upcb, struct pbuf *p, struct ip_addr *addr, u16_t port)
{
// printf("UDP_Send_Data:0 \r\n");
uint8 *dat;
uint32 DataLen;
DataLen = 0;
printf("udp_Data_callback:1 \r\n");
dat = p->payload;
UDP_DataFlag = 0x01;
if((p->len) > sizeof(UDPDataRecBuf))
DataLen = sizeof(UDPDataRecBuf);
else
DataLen = p->len;
printf("udp_Data_callback:2 \r\n");
memcpy((uint8*)&UDPDataRecBuf[0],dat,DataLen);
UDP_DataRecLen = DataLen;
upcb->remote_ip = *addr;
upcb->remote_port = port;
//UDPDatapcb = upcb;
pUDP_Data = upcb;
dat = NULL;
pbuf_free(p);
printf("udp_Data_callback:5 \r\n");
} //UDP 发送数据
void UDP_Send_Data(uint8* str, uint32 datalen)
{
// printf("UDP_Send_Data:0 \r\n");
struct pbuf* Pstr;
printf("UDP_Send_Data:1 \r\n");
// if( (NULL==pUDP_Data)||(ETH_Mark != ETH_OK) )
if( (NULL==pUDP_Data) )
{
return;
}
printf("UDP_Send_Data:2 \r\n");
Pstr = pbuf_alloc( PBUF_TRANSPORT , datalen , PBUF_RAM );
memcpy(Pstr->payload, str, datalen);
udp_send(pUDP_Data, Pstr);
pbuf_free(Pstr);
printf("UDP_Send_Data:5 \r\n");
|
|