完善资料让更多小伙伴认识你,还能领取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 |
|
|
|
|
只有小组成员才能发言,加入小组>>
925 浏览 0 评论
如何使用STM32+nrf24l01架构把有线USB设备无线化?
3087 浏览 7 评论
请问能利用51单片机和nRF24L01模块实现实时语音无线传输吗?
2986 浏览 5 评论
3845 浏览 3 评论
3310 浏览 8 评论
请教各位大咖:有没有接收频率32M左右的芯片推荐的?先感谢啦!
1266浏览 1评论
1212浏览 0评论
882浏览 0评论
973浏览 0评论
925浏览 0评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-2 01:18 , Processed in 0.860568 second(s), Total 74, Slave 57 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
1666