初中生
最后登录1970-1-1
在线时间 小时
注册时间2016-9-19
|
在STM32F429自带的光盘中的LWIP+UCOS3基础上实现一个TCP Client向主机每秒发送一次数据。现存在的问题是:
开发板上的程序在发送几次数据后,通过串口输出得知出现如下错误:
Assertion "pbuf_free: sane type" failed at line 635 in ..\..\USER\lwip-1.4.1\src\core\pbuf.c
以上错误报告反复几次后,最后出现 hardfault!开发板停机。
为什么会出现这个问题?应该怎样解决?
在网上看到说LWIP网络协议栈的坑很多,这个是不是就是坑之一呢?
如果是,在STM32上还有没有其他靠谱的开源网络协议栈?
网络发送数据代码如下:
#include "lwip/opt.h"
#if LWIP_NETCONN
#include "lwip/sys.h"
#include "lwip/api.h"
#include "tcpip.h"
#include "includes.h"
#include "SendQ.h"
#define TCPCLIENT_THREAD_PRIO ( 5 )
/*-----------------------------------------------------------------------------------*/
static void tcpclient_thread(void *arg)
{
struct netconn *conn;
err_t bind_err,connect_err;
err_t lwip_err;
struct ip_addr addr;
struct ip_addr local_addr;
LWIP_UNUSED_ARG(arg);
OS_ERR err;
CPU_TS ts;
struct SendQBlock* blk;
while(1)
{
conn = netconn_new(NETCONN_TCP);
if (conn!=NULL)
{
IP4_ADDR(&local_addr,192,168,3,68);
bind_err = netconn_bind ( conn, &local_addr, 0 );
if(bind_err==ERR_OK)
{
IP4_ADDR(&addr,192,168,3,29);
connect_err = netconn_connect(conn,&addr,6868);
/* Process the new connection. */
if (connect_err == ERR_OK)
{ blk=SendQ_GetBlock(&ts);
printf("Connenct Success! send data\r\n");
netconn_write(conn, blk->data, sizeof(struct SendQBlock), NETCONN_NOCOPY);
err=SendQ_PutMem(blk);
if(err!=OS_ERR_NONE)
{
printf("SendQ_PutMem Err!!!\r\n");
}
lwip_err=netconn_close(conn);
if(lwip_err!=ERR_OK)
{
printf("netconn_close error! %s\r\n",lwip_strerr(lwip_err));
}
lwip_err=netconn_delete(conn);
if(lwip_err!=ERR_OK)
{
printf("netconn_delete error! %s\r\n",lwip_strerr(lwip_err));
}
}else{
netconn_delete(conn);
}
}
}
else
{
printf("can not create TCP netconn\r\n");
}
}
}
/*-----------------------------------------------------------------------------------*/
void tcpclient_init(void)
{
sys_thread_new("tcpclient_thread", tcpclient_thread, NULL, DEFAULT_THREAD_STACKSIZE, TCPCLIENT_THREAD_PRIO);
}
|
|