Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
BSP
AT组件 TCP SEND OK
发布于 2019-08-01 14:56:14 浏览:1913
订阅该版
Dear all: 目前在BSP K210上用esp8266 串口wifi ,测试AT组件,用的uart2,配的收发是poll发送,中断接收。 发现TCP发送数据后,等待SEND OK需要花费70~200ms的等待时间,发送数据完毕的时间经tick时间log确定没有问题! 见下面代码: static int esp8266_socket_send(struct at_socket *socket, const char *buff, size_t bfsz, enum at_socket_type type) { int result = RT_EOK; int event_result = 0; size_t cur_pkt_size = 0, sent_size = 0; at_response_t resp = RT_NULL; int device_socket = (int) socket->user_data; struct at_device *device = (struct at_device *) socket->device; struct at_device_esp8266 *esp8266 = (struct at_device_esp8266 *) device->user_data; rt_mutex_t lock = device->client->lock; RT_ASSERT(buff); RT_ASSERT(bfsz > 0); resp = at_create_resp(128, 2, 5 * RT_TICK_PER_SECOND); if (resp == RT_NULL) { LOG_E("no memory for esp8266 device(%s) response structure.", device->name); return -RT_ENOMEM; } rt_mutex_take(lock, RT_WAITING_FOREVER); /* set current socket for send URC event */ esp8266->user_data = (void *) device_socket; /* set AT client end sign to deal with '>' sign */ at_obj_set_end_sign(device->client, '>'); rt_tick_t timer_cnt = rt_tick_get( ); rt_kprintf( "start send %d byte at tick-time %d
", bfsz, timer_cnt); // 数据发送开始,打印tick时间 while (sent_size < bfsz) { if (bfsz - sent_size < ESP8266_MODULE_SEND_MAX_SIZE) { cur_pkt_size = bfsz - sent_size; } else { cur_pkt_size = ESP8266_MODULE_SEND_MAX_SIZE; } /* send the "AT+CIPSEND" commands to AT server than receive the '>' response on the first line */ if (at_obj_exec_cmd(device->client, resp, "AT+CIPSEND=%d,%d", device_socket, cur_pkt_size) < 0) { result = -RT_ERROR; goto __exit; } /* send the real data to server or client */ result = (int) at_client_obj_send(device->client, buff + sent_size, cur_pkt_size); if (result == 0) { result = -RT_ERROR; goto __exit; } //// 数据发送完毕后,打印tick时间, 开始时间和此处时间差与实际波特率换算发送的字节时间基本一致 //而下面的代码就是等待send ok的时间就比较长了,大概范围在40ms~200ms不等 /* waiting result event from AT URC */ if (esp8266_socket_event_recv(device, SET_EVENT(device_socket, 0), 10 * RT_TICK_PER_SECOND, RT_EVENT_FLAG_OR) < 0) { LOG_E("esp8266 device(%s) socket(%d) send failed, wait connect result timeout.", device->name, device_socket); result = -RT_ETIMEOUT; goto __exit; } rt_kprintf( "end send at tick-time %d, sent %d
", rt_tick_get( ) - timer_cnt, result ); /* waiting OK or failed result */ event_result = esp8266_socket_event_recv(device, ESP8266_EVENT_SEND_OK | ESP8266_EVENT_SEND_FAIL, 5 * RT_TICK_PER_SECOND, RT_EVENT_FLAG_OR); if (event_result < 0) { LOG_E("esp8266 device(%s) socket(%d) send failed, wait connect OK|FAIL timeout.", device->name, device_socket); result = -RT_ETIMEOUT; goto __exit; } // rt_kprintf( "end send at tick-time %d, sent %d
", rt_tick_get( ) - timer_cnt, result ); /* check result */ if (event_result & ESP8266_EVENT_SEND_FAIL) { LOG_E("esp8266 device(%s) socket(%d) send failed.", device->name, device_socket); result = -RT_ERROR; goto __exit; } sent_size += cur_pkt_size; } rt_kprintf( "end2 at tick-time %d
", rt_tick_get( ) ); __exit: /* reset the end sign for data */ at_obj_set_end_sign(device->client, 0); rt_mutex_release(lock); if (resp) { at_delete_resp(resp); } return result; } 一开始怀疑模组在发送tcp有时延send ok回复,为此直接串口工具+pc测试,发现模块并没有像与rtt k210串口连接出现的send ok等待的那么长,基本在3ms内(见串口工具数据下图数据) [2019-08-01 02:07:18.233]【210个字节】 TX:12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890120 [2019-08-01 02:07:18.236] RX: busy s... Recv 210 bytes busy s... busy s... SEND OK [2019-08-01 02:07:27.923] TX:AT+CIPSEND=210 [2019-08-01 02:07:27.928] RX: OK 请问这个情况问题会出现什么地方?
查看更多
5
个回答
默认排序
按发布时间排序
flyboy
2019-08-01
Do my self();
看完之后,没看出来你要问的问题是什么?:L
aichip-sai
2019-08-02
这家伙很懒,什么也没写!
>看完之后,没看出来你要问的问题是什么? --- 呵呵,是AT socket 调用send tcp发送等待时间很长,时间达到了80ms以上
zhangjun
2019-08-03
这家伙很懒,什么也没写!
poll方式间隔默认是那么长吧,没分析代码,就楼主的问题猜的。
Cheney_Chen
2019-08-05
这家伙很懒,什么也没写!
根据楼主的现象和日志可以知道,一般 AT 模块在数据接收时都需要一定时间处理,在此数据接收时间中的一些命令操作会提示 "busy send...",只有等到接收完毕收到 "send ok" 命令之后才会进行下一次的命令发送。 我想等待时间长的问题还是在模块 send ok 命令发送上,楼主你可以在 PC 上试着发送这么长的数据确定接收 send ok 的时间,数据越长可能等待时间越长。
aichip-sai
2019-08-06
这家伙很懒,什么也没写!
>根据楼主的现象和日志可以知道,一般 AT 模块在数据接收时都需要一定时间处理,在此数据接收时间中的一些命 ... --- 嗯,已经过此步骤测试,模组确实存在延时回复
撰写答案
登录
注册新账号
关注者
0
被浏览
1.9k
关于作者
aichip-sai
这家伙很懒,什么也没写!
提问
14
回答
16
被采纳
0
关注TA
发私信
相关问题
1
STM32 407 串口接收数据 系统卡死
2
RTT nrf24l01 设备驱动程序
3
stm32f10x串口只能发送数据,无法接收
4
第一次尝试移植rt-thread 到stm32F103系列问题
5
有人把stm32L07xx的bsp移到rtt上来了吗?求一个
6
rt-thread线程调度异常在stm32f103芯片上
7
RTT是否支持STM32F429
8
请问谁有 STM32F40x HAL + RT-THREAD 模板
9
rt-thread在stm32f411下的移植问题
10
针对STM32F7系列平台的MPU,Cache特性,需要注意哪些问题?
推荐文章
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
恩智浦[FRDM-MCXN947]初探 之 ADC与DAC
2
LVGL使用字库IC芯片显示中文
3
基于STM32H750和Rt-Thread的CANFD通信实现的记录(一)
4
freemodbus主机在freertos的适配,参考rtthread例程
5
开源共生 商业共赢 | RT-Thread 2024开发者大会议程正式发布!
热门标签
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
编译报错
SFUD
msh
rt_mq_消息队列_msg_queue
keil_MDK
ulog
MicroPython
C++_cpp
本月问答贡献
出出啊
1517
个答案
342
次被采纳
小小李sunny
1443
个答案
289
次被采纳
张世争
805
个答案
174
次被采纳
crystal266
547
个答案
161
次被采纳
whj467467222
1222
个答案
148
次被采纳
本月文章贡献
出出啊
1
篇文章
4
次点赞
小小李sunny
1
篇文章
1
次点赞
张世争
1
篇文章
1
次点赞
crystal266
2
篇文章
2
次点赞
whj467467222
2
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部