完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
PC端与开发板网络连接正常。
采用tftp32.exe软件进行tftp get 测试时,出现了hardfault,串口打印 Assertion "pbuf_free: p->ref > 0" failed at line 651 in ..LWIPlwip-1.4.1srccorepbuf.c Assertion "pbuf_free: sane type" failed at line 636 in ..LWIPlwip-1.4.1srccorepbuf.c 搜索论坛发现之前有类似现象,原子建议关中断解决,尝试后无效。 之后采用抓包软件发现tftp请求能够正常收到,并且从sd卡已经读取文件并且发送了block1 - block3 在发送block4时,死机。 结合打印提示应该是内存相关的问题。 然后单步仿真跟踪,发现pbuf链表中,有一个链表元素的next指针指向了FFFFFFF,并且FFFFFFFF中所有成员的值均为FFFF。 因此在low_level_output中memcpy((u8_t*)&buffer[l], q->payload, q->len);调用了非法的指针导致程序死机。 目前还没找到这个FFFFFFF成员从哪里来的,继续debug。 |
|
相关推荐
1个回答
|
|
进一步跟踪,发现
err_t tftp_send_message(struct udp_pcb *upcb, struct ip_addr *to_ip, unsigned short to_port, char *buf, unsigned short buflen) { err_t err; struct pbuf *pkt_buf; /* Chain of pbuf's to be sent */ /* PBUF_TRANSPORT - specifies the transport layer */ pkt_buf = pbuf_alloc(PBUF_TRANSPORT, buflen, PBUF_POOL); if (!pkt_buf) /*if the packet pbuf == NULL exit and end transmission */ return ERR_MEM; /* Copy the original data buffer over to the packet buffer's payload */ memcpy(pkt_buf->payload, buf, buflen); /* Sending packet by UDP protocol */ err = udp_sendto(upcb, pkt_buf, to_ip, to_port); /* free the buffer pbuf */ pbuf_free(pkt_buf); return err; } 执行memcpy(pkt_buf->payload, buf, buflen);的时候pkt_buf中next中的next指向地址从000000变为FFFFFF |
|
|
|
只有小组成员才能发言,加入小组>>
如何使用STM32+nrf24l01架构把有线USB设备无线化?
2335 浏览 7 评论
请问能利用51单片机和nRF24L01模块实现实时语音无线传输吗?
2081 浏览 5 评论
2779 浏览 3 评论
2531 浏览 8 评论
为什么ucosii上移植lwip后系统进入了HardFault_Handler?
2474 浏览 4 评论
546浏览 0评论
560浏览 0评论
326浏览 0评论
145浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-4-24 02:41 , Processed in 1.031294 second(s), Total 75, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号