完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
pahomqtt +wiz+W5500 发布数据较大,rtt就重启了
在下面这个函数发送一次失败后,数据就重启了。 int wiz_sendto(int socket, const void *data, size_t size, int flags, const struct sockaddr *to, socklen_t tolen) { struct wiz_socket *sock = RT_NULL; uint8_t socket_state = 0; int32_t send_len = 0; int32_t send_pos=0; /* check WIZnet initialize status */ WIZ_INIT_STATUS_CHECK; if (data == RT_NULL || size == 0) { LOG_E("WIZnet sendto input data or size error!"); return -1; } sock = wiz_get_socket(socket); if (sock == RT_NULL) { return -1; } socket_state = getSn_SR(socket); switch (sock->type) { case Sn_MR_TCP: { if (socket_state == SOCK_CLOSED) { return 0; } else if (socket_state != SOCK_ESTABLISHED) { LOG_E("WIZnet send failed, get socket(%d) register state(%d) error.", socket, socket_state); return -1; } //ball 20200916 修改 如果超过sock单次发送最大数量2048则再接着发送 do{ send_len = wizchip_send(socket, (uint8_t *)data+send_pos, size-send_pos); send_pos+=send_len; if (send_len < 0) { LOG_E("WIZnet socket(%d) send data failed(%d).", socket, send_len); return -1; } else if(send_pos!=size) { rt_kprintf("n ball send_len=%d size=%d send_pos=%dn",send_len,size,send_pos); } else { send_len=send_pos; break; } } while(1); break; } case Sn_MR_UDP: case Sn_MR_IPRAW: { ip_addr_t remote_addr; uint16_t remote_port = 0; uint8_t ipstr[4] = {0}; if (socket_state != SOCK_UDP && socket_state != SOCK_IPRAW) { LOG_E("WIZnet sendto failed, get socket(%d) register state(%d) error.", socket, socket_state); return -1; } if (to) { socketaddr_to_ipaddr_port(to, &remote_addr, &remote_port); ipaddr_to_ipstr(to, ipstr); } else if (sock->remote_addr) { socketaddr_to_ipaddr_port(sock->remote_addr, &remote_addr, &remote_port); ipaddr_to_ipstr(sock->remote_addr, ipstr); } if ((send_len = wizchip_sendto(socket, (uint8_t *)data, size, ipstr, remote_port)) < 0) { LOG_E("WIZnet socket(%d) send data failed(%d).", socket, send_len); return -1; } break; } default: LOG_E("WIZnet socket (%d) type %d is not support.", socket, sock->type); return -1; } return send_len; } |
|
相关推荐
1个回答
|
|
rtt 重启是什么意思?日志信息是什么?
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
794 浏览 0 评论
4650 浏览 0 评论
如何使用python调起UDE STK5.2进行下载自动化下载呢?
2588 浏览 0 评论
开启全新AI时代 智能嵌入式系统快速发展——“第六届国产嵌入式操作系统技术与产业发展论坛”圆满结束
2945 浏览 0 评论
获奖公布!2024 RT-Thread全球巡回线下培训火热来袭!报名提问有奖!
31650 浏览 11 评论
73033 浏览 21 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-24 15:56 , Processed in 0.439791 second(s), Total 40, Slave 34 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号