Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
AT
使用AT组件发送socket数据时出错
发布于 2020-01-10 19:42:00 浏览:1571
订阅该版
* 本帖最后由 .R0ger 于 2020-1-10 19:51 编辑 * 关联贴 [https://club.rt-thread.org/ask/question/422535.html](https://club.rt-thread.org/ask/question/422535.html) **问题描述:** 工作流程是:板子上电初始化连接wifi开服务模式分配端口 -> TCP调试软件通过wifi连接到板子 -> 每隔100ms发送一次查询指令:A0 02 D1 0D 0A -> 正常解析数据后返回指令:A0 0B D1 00 00 01 0D 0A。 问题点:在出现一次 [44598] D/at.clnt: execute command (AT+CIPSEND=0,8) timeout (5000 ticks)! 之后队列里所有待发送的数据都是隔一条才能正常发送一条。 **可能出现问题的代码段:** 在上次提问之后参考ESP8266的例程更改了发送函数 [https://github.com/RT-Thread-packages/at_device/blob/master/class/esp8266/at_socket_esp8266.c#L229-L256](https://github.com/RT-Thread-packages/at_device/blob/master/class/esp8266/at_socket_esp8266.c#L229-L256) 代码如下: ```rt_err_t send_data_to_client(uint8_t client_num, const char *buff, rt_size_t bfsz) { size_t cur_pkt_size = 0, sent_size = 0; at_response_t resp = RT_NULL; rt_err_t result = RT_EOK; rt_mutex_t lock = at_client_get_first()->lock; /* 创建响应结构体,设置最大支持响应数据长度为 512 字节,响应数据行数无限制,超时时间为 5 秒 */ resp = at_create_resp(512, 0, 5 * RT_TICK_PER_SECOND); if (!resp) { LOG_E("No memory for response structure!"); return -RT_ENOMEM; } rt_mutex_take(lock, RT_WAITING_FOREVER); /* set AT client end sign to deal with '>' sign */ at_set_end_sign('>'); while (sent_size < bfsz) { if (bfsz - sent_size < 8) { cur_pkt_size = bfsz - sent_size; } else { cur_pkt_size = 8; } /* send the "AT+CIPSEND" commands to AT server than receive the '>' response on the first line */ if (at_exec_cmd(resp, "AT+CIPSEND=%d,%d", client_num, cur_pkt_size) < 0) { // at_client_send(buff + sent_size, cur_pkt_size); result = -RT_ERROR; goto __exit; } /* send the real data to server or client */ result = (int)at_client_send(buff + sent_size, cur_pkt_size); if (result == 0) { result = -RT_ERROR; goto __exit; } sent_size += cur_pkt_size; } result = RT_EOK; __exit: at_set_end_sign(0); rt_mutex_release(lock); if (resp) { at_delete_resp(resp); } return result > 0 ? sent_size : result; }``` 分析来看是在执行at_exec_cmd(resp, "AT+CIPSEND=%d,%d", client_num, cur_pkt_size) 即 (AT+CIPSEND=0,8) 未正常接收到返回的">"。 在出现该问题后我使用 at client 指令进入调试模式,发送AT+CIPSEND=0,8指令后返回非常迅速。 请教如何调试解决该问题。 附上串口打印信息和源文件: [attach]13240[/attach][attach]13240[/attach] ![111.png](https://oss-club.rt-thread.org/uploads/202001/10/193833hcc5yg3vg33gpzye.png) ![222.png](https://oss-club.rt-thread.org/uploads/202001/10/193838wflgn9f2m6og6oi9.png) 下载附件 [wifi_esp8266.c](https://oss-club.rt-thread.org/uploads/202001/10/194137szbkkzapbvlazo1e.attach) 下载附件 [wifi_esp8266.h](https://oss-club.rt-thread.org/uploads/202001/10/194137ymqf5m5t88ho8qqt.attach)
查看更多
2
个回答
默认排序
按发布时间排序
zx595
2020-01-15
这家伙很懒,什么也没写!
问题已解决,主要问题就是使用ESP8266模块的时候发送频率不能太快,最好等待SEND OK之后再进行下次发送,我的调试结果来看比较合适的时间是50~100ms发送一帧数据。 总结下经验:在使用AT组件开发时添加 #define AT_PRINT_RAW_CMD 打印出来每次发送/接收的数据能比较方便的找到问题所在。
zx595
2020-01-15
这家伙很懒,什么也没写!
调试时发现未执行成功时的AT返回如下: ``` [D/AT] sendline: 0000-0020: 41 54 2B 43 49 50 53 45 4E 44 3D 30 2C 38 AT+CIPSEND=0,8 [D/AT] recvline: 0000-0020: 0D 0A .. [D/AT] recvline: 0000-0020: 62 75 73 79 20 73 2E 2E 2E 0D 0A busy s..... [D/AT] recvline: 0000-0020: 0D 0A .. [D/AT] recvline: 0000-0020: 53 45 4E 44 20 4F 4B 0D 0A ```
撰写答案
登录
注册新账号
关注者
0
被浏览
1.6k
关于作者
zx595
这家伙很懒,什么也没写!
提问
9
回答
12
被采纳
0
关注TA
发私信
相关问题
1
rt-thread 2g/3g/4g通信模块的教程有吗?
2
基于AT指令,用esp8266如何连接mqtt?
3
AT组件使用问题
4
官方AT客户端应用笔记的几个小tip
5
RTT的SAL能够判断使用LWIP或者AT?
6
rt_therad AT组件移植不成功(结贴)
7
AT组件在哪个版本的?
8
AT组件 连接 Onenet 连接失败
9
esp8266 AT指令 MQTT连接问题
10
AT组件使用问题之模块主动上报【已解决】
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
最新文章
1
使用百度AI助手辅助编写一个rt-thread下的ONVIF设备发现功能的功能代码
2
RT-Thread 发布 EtherKit开源以太网硬件!
3
rt-thread使用cherryusb实现虚拟串口
4
《C++20 图形界面程序:速度与渲染效率的双重优化秘籍》
5
《原子操作:程序世界里的“最小魔法单位”解析》
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
WIZnet_W5500
UART
ota在线升级
PWM
cubemx
freemodbus
flash
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
Debug
编译报错
msh
SFUD
keil_MDK
rt_mq_消息队列_msg_queue
ulog
C++_cpp
at_device
本月问答贡献
踩姑娘的小蘑菇
7
个答案
3
次被采纳
a1012112796
13
个答案
2
次被采纳
张世争
9
个答案
2
次被采纳
rv666
5
个答案
2
次被采纳
用户名由3_15位
11
个答案
1
次被采纳
本月文章贡献
程序员阿伟
8
篇文章
2
次点赞
hhart
3
篇文章
4
次点赞
大龄码农
1
篇文章
5
次点赞
ThinkCode
1
篇文章
1
次点赞
Betrayer
1
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部