不多说废话了,直接上代码
[mw_shl_code=c,true]
u8 tcp_send(void)
{
u8 err;
u8 *msg = OSQPend(q_msg,0,&err);
if (msg!=NULL){
u32 len = strlen((char *) msg);
printf("%d
",len);
err = netconn_write(tcp_clientconn, msg, len, NETCONN_COPY);
if(err != ERR_OK){
myfree(SRAMIN,msg);
printf("发送失败
");
return 0;
}
} else {
printf("%s
","等待数据");
}
myfree(SRAMIN,msg);
return 1;
}
[/mw_shl_code]
其中len的获取在1毫秒的发送状况下无法准确的获取长度,并且在出现该情况以后单条发送依然存在该问题,
下面是我发送的数据(每行数据以0D 0A结尾)
通信数据
得出来的len都是30,即全是第一组数据的长度
若我使用自己编写的以0D为结尾获取长度的函数,则能够准确获取其长度如下:
[mw_shl_code=c,true]
u8 getSize(u8 *msg){
u8 len=0;
while (*msg++!='
') len++;
return len;
}
[/mw_shl_code]
希望有高手可以给我解答下,这到底是什么原因造成的
{
const char *sc;
for (sc = s; *sc != ' '; ++sc)
/* nothing */;
return sc - s;
}
strlen的源码,你试试这个!
RAM没清掉,试着用lwip里面的内存管理,然后成功了,而且lwip的netbuf也存在类似的问题,不过每次只会出现一次,再把这一次给处理了就ok了
一周热门 更多>