完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
参考发烧友F4开发板例程移植LWIP 裸跑,配置为TCP Server模式,向网络调试助手连续发送数据,速率大概在400KB/s左右,能实现通信,但是运行不了多长时间就会出现卡死的现象,通过串口调试助手打印出如下提示信息:
经常出现的错误提示为:Assertion "pbuf_take: invalid buf" failed at line 973 in ..LWIPlwip-1.4.1srccorepbuf.c 偶尔出现的提示为:Assertion "mem_free: legal memory" failed at line 323 in ..LWIPlwip-1.4.1srccoremem.c Assertion "pbuf_free: p->ref > 0" failed at line 650 in ..LWIPlwip-1.4.1srccorepbuf.c Assertion "tcp_write: arg == NULL (programmer violates API)" failed at line 382 in ..LWIPlwip-1.4.1srccoretcp_out.c 找了好久,不知道什么原因导致的,而且卡死的时间不规律,请教论坛大神,是有经验的,请给出指导意见! 问题更新:传输数据卡死后,ping命令还是可以通的,也就是能ping通,但是数据传不了了! |
|
相关推荐
10个回答
|
|
移植有问题,底层驱动或者配置参数的原因。目测很大可能性是底层驱动的原因
|
|
|
|
请问,如果这样应该从哪些方面进行排查呢!我用的LAN8720!
|
|
|
|
内存申请和释放,加保护!
[AppleScript] 纯文本查看 复制代码 //释放内存(外部调用) //memx:所属内存块//ptr:内存首地址 void myfree(u8 memx,void *ptr) { OS_CPU_SR cpu_sr=0;u32 offset; if(ptr==NULL)return;//地址为0. OS_ENTER_CRITICAL();//添加保护 offset=(u32)ptr-(u32)mallco_dev.membase[memx]; my_mem_free(memx,offset);//释放内存 OS_EXIT_CRITICAL(); } //分配内存(外部调用)//memx:所属内存块//size:内存大小(字节)//返回值:分配到的内存首地址.void *mymalloc(u8 memx,u32 size) { OS_CPU_SR cpu_sr=0; u32 offset; OS_ENTER_CRITICAL();//添加保护offset=my_mem_malloc(memx,size); OS_EXIT_CRITICAL(); if(offset==0XFFFFFFFF)return NULL; else return (void*)((u32)mallco_dev.membase[memx]+offset); } |
|
|
|
添加了中断保护,定义了四个函数如下:
#define NVIC_Shut 0x00000001 OS_CPU_SR OS_CPU_SR_Save(void) { register uint32_t __regPriMask __ASM("primask"); return(__regPriMask); } void OS_CPU_SR_Restore(OS_CPU_SR cpu_sr) { register uint32_t __regPriMask __ASM("primask"); __regPriMask = (cpu_sr); } //#define OS_ENTER_CRITICAL() {cpu_sr = OS_CPU_SR_Save();} //#define OS_EXIT_CRITICAL() {OS_CPU_SR_Restore(cpu_sr);} OS_CPU_SR OS_ENTER_CRITICAL(void) { OS_CPU_SR cpu_sr; cpu_sr = OS_CPU_SR_Save(); OS_CPU_SR_Restore(NVIC_Shut); return cpu_sr; } void OS_EXIT_CRITICAL(OS_CPU_SR cpu_sr) { OS_CPU_SR_Restore(cpu_sr); } 在myfree和mymalloc中保护程序添加如下: //释放内存(外部调用) //memx:所属内存块 //ptr:内存首地址 void myfree(u8 memx,void *ptr) { OS_CPU_SR cpu_sr = 0; u32 offset; if(ptr==NULL)return;//地址为0. cpu_sr = OS_ENTER_CRITICAL(); //添加保护 offset=(u32)ptr-(u32)mallco_dev.membase[memx]; my_mem_free(memx,offset); //释放内存 OS_EXIT_CRITICAL(cpu_sr); } //分配内存(外部调用) //memx:所属内存块 //size:内存大小(字节) //返回值:分配到的内存首地址. void *mymalloc(u8 memx,u32 size) { OS_CPU_SR cpu_sr = 0; u32 offset; cpu_sr = OS_ENTER_CRITICAL(); //添加保护 offset=my_mem_malloc(memx,size); OS_EXIT_CRITICAL(cpu_sr); if(offset==0XFFFFFFFF)return NULL; else return (void*)((u32)mallco_dev.membase[memx]+offset); } 运行后还是会出现卡死的问题,串口打出的信息为: Assertion "pbuf_take: invalid buf" failed at line 973 in ..LWIPlwip-1.4.1srccorepbuf.c 请问是添加的方法不对吗? |
|
|
|
楼主 你好 请问你的问题解决了吗?我跟你出现了同样的问题
|
|
|
|
原子哥,添加了好是好了点,但时间长了数据量大了还是会出现这个问题啊
|
|
|
|
朋友啊 我也在历程上做了修改,在循环中连续调用TCP_WRITE函数,速度跑着跑着就死了 能指点下不
|
|
|
|
现在主要就是Assertion "pbuf_take: invalid buf" failed at line 974 in ..LWIPlwip-1.4.1srccorepbuf.c这个错误,然后就卡死了
|
|
|
|
我现在也遇到这个问题,请问你有解决这个问题吗,能给我讲讲怎么解决的吗
|
|
|
|
还没呢,后来只能降低发送速率了
|
|
|
|
只有小组成员才能发言,加入小组>>
如何使用STM32+nrf24l01架构把有线USB设备无线化?
2551 浏览 7 评论
请问能利用51单片机和nRF24L01模块实现实时语音无线传输吗?
2336 浏览 5 评论
3167 浏览 3 评论
2809 浏览 8 评论
为什么ucosii上移植lwip后系统进入了HardFault_Handler?
2769 浏览 4 评论
请教各位大咖:有没有接收频率32M左右的芯片推荐的?先感谢啦!
622浏览 1评论
863浏览 0评论
981浏览 0评论
633浏览 0评论
458浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-30 10:27 , Processed in 1.290375 second(s), Total 66, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号