Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
AT指令
AT接收数据时malloc的buffer和接收线程地址冲突??
发布于 2021-09-15 15:54:50 浏览:516
订阅该版
[tocm] 项目中使用多通道连接服务器(需要使用多个socket),原来方式是透传模式,测试无误。现改用AT+MIPSEND方式发送数据,模块用的是U9330C。 1.发送接收正常 (at_socket_u9300.c) ```c static void urc_tcp_recv_func(struct at_client *client, const char *data, rt_size_t size) { int device_socket = 0, idx = 0; rt_int32_t timeout; rt_size_t bfsz = 0, temp_size = 0; char *recv_buf = RT_NULL, temp[8] = {0}; struct at_socket *socket = RT_NULL; struct at_device *device = RT_NULL; char *client_name = client->device->parent.name; RT_ASSERT(data && size); device = at_device_get_by_name(AT_DEVICE_NAMETYPE_CLIENT, client_name); if (device == RT_NULL) { LOG_E("get device(%s) failed.", client_name); return; } /* get the current socket and receive buffer size by receive data */ sscanf(data, "+MIPRTCP=%d,%d", &device_socket, (int *) &bfsz); //LOG_I("## recv bfsz = %d\n",bfsz); /* set receive timeout by receive buffer length, not less than 10 ms */ timeout = bfsz > 10 ? bfsz : 10; if (device_socket < 0 || bfsz == 0) { return; } _**recv_buf = (char *) rt_calloc(1, bfsz);**_ if (recv_buf == RT_NULL) { LOG_E("no memory for URC receive buffer(%d).", bfsz); /* read and clean the coming data */ while (temp_size < bfsz) { if (bfsz - temp_size > sizeof(temp)) { at_client_obj_recv(client, temp, sizeof(temp), timeout); } else { at_client_obj_recv(client, temp, bfsz - temp_size, timeout); } temp_size += sizeof(temp); } return; } rt_memset(recv_buf, 0, bfsz); sscanf(data, "+MIPRTCP=%d,%d,%s", &device_socket, (int *) &bfsz, recv_buf); //LOG_I("#### miprtcp = %d\n",device_socket); /*数据解析判断*/ for(idx = 12; idx < bfsz+12; idx++) { if(data[idx] == 0x2c) { break; } } if(idx >= bfsz + 12) { LOG_E("at recv data is error."); rt_free(recv_buf); return; } rt_memcpy(recv_buf, data+idx+1, bfsz); /* get at socket object by device socket descriptor */ if((device_socket > 0) && (device_socket <= AT_DEVICE_U9300C_SOCKETS_NUM)) { socket = &(device->sockets[device_socket - 1]); /* notice the receive buffer and buffer size */ if (at_evt_cb_set[AT_SOCKET_EVT_RECV]) { **_at_evt_cb_set[AT_SOCKET_EVT_RECV](socket, AT_SOCKET_EVT_RECV, recv_buf, bfsz);_** } } return; } ``` 2.at_socket.c中接收回调的中rt_sem_release唤醒接收任务时出错 ```c static void at_recv_notice_cb(struct at_socket *sock, at_socket_evt_t event, const char *buff, size_t bfsz) { RT_ASSERT(buff); RT_ASSERT(event == AT_SOCKET_EVT_RECV); /* check the socket object status */ if (sock->magic != AT_SOCKET_MAGIC) { return; } //LOG_I("at recv notice cb..."); /* put receive buffer to receiver packet list */ rt_mutex_take(sock->recv_lock, RT_WAITING_FOREVER); at_recvpkt_put(&(sock->recvpkt_list), buff, bfsz); rt_mutex_release(sock->recv_lock); _**rt_sem_release(sock->recv_notice); **_//!! at_do_event_changes(sock, AT_EVENT_RECV, RT_TRUE); } ``` 3.debug的错误信息   被唤醒的任务的地址好像被覆盖或改写了。 导致断言时出错。路过的大佬能否给个指点提示,谢谢!!(第一次来无积分)
查看更多
2
个回答
默认排序
按发布时间排序
Trojans
2021-09-15
这家伙很懒,什么也没写!
 接收任务函数。
aozima
2021-09-15
调网络不抓包,调I2C等时序不上逻辑分析仪,就像电工不用万用表!多用整理的好的文字,比截图更省流量,还能在整理过程中思考。
使用仿真器连接,然后对name这个地址下一个写断点,有人篡改此处数据,就会停下来。
撰写答案
登录
注册新账号
关注者
0
被浏览
516
关于作者
Trojans
这家伙很懒,什么也没写!
提问
1
回答
1
被采纳
0
关注TA
发私信
相关问题
1
ESP8266通过smartconfig配网?
2
AT组件遇到\r\n后是怎么处理数据的?
3
使用at_exec_cmd发送AT+QISEND指令收不到那个大于号
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
机器人操作系统 (ROS2) 和 RT-Thread 通信
4
五分钟玩转RT-Thread新社区
5
国产MCU移植系列教程汇总,欢迎查看!
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
最新文章
1
github高阶加速,速度可达带宽峰值,测试到146Mbit/s
2
英飞凌携手RT-Thread举办嵌入式网络应用开发沙龙,带你从0到1搭建智能数据网关
3
BL808 RT-Thread Wi-Fi 驱动适配
4
rt-thread 系统运行期改变网卡配置
5
简单的步进电机驱动调试
热门标签
RT-Thread Studio
串口
LWIP
Env
AT
SPI
Bootloader
FinSH
ART-Pi
CAN总线
Hardfault
USB
文件系统
RT-Thread
DMA
SCons
线程
MQTT
RT-Thread Nano
STM32
RTC
ESP8266
rt-smart
flash
ota在线升级
WIZnet_W5500
FAL
I2C
packages_软件包
UART
cubemx
freemodbus
潘多拉开发板_Pandora
定时器
BSP
PWM
ADC
socket
中断
rt_mq_消息队列_msg_queue
keil_MDK
SDIO
Debug
AB32VG1
MicroPython
C++_cpp
编译报错
msh
QEMU
ulog
本月问答贡献
出出啊
1500
个答案
338
次被采纳
小小李sunny
1389
个答案
276
次被采纳
张世争
714
个答案
157
次被采纳
crystal266
522
个答案
153
次被采纳
whj467467222
1216
个答案
146
次被采纳
本月文章贡献
出出啊
1
篇文章
12
次点赞
小小李sunny
1
篇文章
1
次点赞
张世争
2
篇文章
1
次点赞
crystal266
2
篇文章
5
次点赞
whj467467222
2
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部