不多说废话了,直接上代码
[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]
希望有高手可以给我解答下,这到底是什么原因造成的
先谢谢你了,不过还有些问题。
在程序里加入了判断后,发现添加进消息队列前输出的字符串是正确的,在另一个任务中取出后发现strlen字符串的长度都变成了最长包的长度了
还有我做的主要就是粘包测试,发送的数据本来就是模拟粘包的,目前断包的情况并没有出现,粘包的拆分也没问题,不过从消息队列取出后字符串的长度获取会出现问题,测试过程中觉得ucosii的消息队列并没什么问题,应该就是在强制转换取数据类型或者读取长度时出了问题,并且之后我再单条发送的话长度获取一直存在问题,一直都是最长的数据长度,怀疑是RAM内某些地方乱了,但是实力有限,没办法再进一步去做问题的分析了,能给我解答下吗?
一周热门 更多>