//新建tftp通信线程
void tftp_thread_entry (void parameter)
{
……
int data_size;
struct tftp_data data;
//为data做malloc内存分配,建立socket,bind到69端口等
while(1)
{
ret = get_packet (data->sockfd, &data->client, 5, &data_size, data->data_buffer);
switch(ret)
{
……
}
}
}
// 收包函数
void get_packet(int sock, struct sockaddr_in sa, int timeout, int size, char data)
{
FD_ZERO (&rfds);
FD_SET (sock, &rfds);
result = lwip_select (sock + 1, &rfds, NULL, NULL, 0);
result = lwip_recvfrom (sock, data, DATA_BUF_SIZE, MSG_DONTWAIT, (struct sockaddr) &sa, &len);
switch(ntohs(data前两字节))//判断操作码
{
}
}
//问题出现了,,在get_packet里ntohs函数单步调试的时候发现却进入了lwip的tcpip_thread线程的ntohs函数,,,全速运行的时候ntohs转化的操作码是正确的,但是退出get_packet函数后,返回tftp_thread_entry函数,data指针指飞,,,,finsh里出现overflow提示,hard fault on thread: tftpd。。。data指针使用R5寄存器