Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
RT-Thread Studio
RTT-Studio编译问题--sscanf函数
发布于 2019-12-31 10:48:37 浏览:1396
订阅该版
* 本帖最后由 .R0ger 于 2019-12-31 11:05 编辑 * RTT-Studio版本:Version: 1.0.0 Build id: 201912201745 RT-Thread版本:V4.02 测试用芯片:STM32F103RCT6 问题描述:在运行如下代码时sscanf函数没有如预期返回正确结果。```static void urc_func_ipd_data(struct at_client *client, const char *data, rt_size_t size) { int device_socket = 0; rt_int32_t timeout = 0; rt_uint16_t bfsz = 0, temp_size = 0; char *recv_buf = RT_NULL, temp[8] = {0}; RT_ASSERT(data && size); rt_kprintf("%s
", data); // 发送控制指令 /* get the at deveice socket and receive buffer size by receive data */ sscanf(data, "%*[^IPD]IPD,%d,%d%*[^:]", &device_socket, (int *) &bfsz); // sscanf(data, "+IPD,%d,%d:", (int *) &bfsz, &device_socket); rt_kprintf("+IPD,[%d][%d]:
", device_socket,bfsz); // 发送控制指令 // rt_kprintf("+IPD,[%d][%d]:
",bfsz, device_socket); // 发送控制指令 /*****************下面的应该没影响*******************/ /* set receive timeout by receive buffer length, not less than 10ms */ timeout = bfsz > 3 ? bfsz : 3; if (device_socket < 0 || bfsz == 0) return; recv_buf = (char *) rt_calloc(1, bfsz); if (recv_buf == RT_NULL) { LOG_E("no memory 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; } /* sync receive data */ if (at_client_obj_recv(client, recv_buf, bfsz, timeout) != bfsz) { LOG_E("device receive size(%d) data failed.", bfsz); rt_free(recv_buf); return; } // rt_kprintf("WiFi RECV Command[%d][%d]:", device_socket,bfsz); // 发送控制指令 // for (int i = 0; i < bfsz; i++) { // rt_kprintf("%02X ", *(recv_buf + i)); // 发送控制指令 // } // rt_kprintf("
"); // 发送控制指令 dealServerMessage((rt_uint8_t*)recv_buf, device_socket, bfsz); rt_free(recv_buf); }``` 下图是是同RTT-Studio工具自带的调试工具调试的结果: ![QQ图片20191231104432.png](/uploads/201912/31/104533qm7e3i9zq1q9s6sl.png) 我这段函数是解析AT指令的,使用sscanf函数提取数据 可以在途中看到调试信息:+IPD,0,16: 无法提取第一个数据 ,第二个数据是正常的。 我开始是怀疑程序有问题, 就找了个在线工具调试如下: ![QQ图片20191231104626.png](/uploads/201912/31/104636r2jeux1fku16pi6r.png) 可以看到数据是正常的。 这段解析的代码在以前的应用中(MDK编译)也是没问题的,请问是RTT-Studio编译的问题吗?
查看更多
2
个回答
默认排序
按发布时间排序
Cheney_Chen
2019-12-31
这家伙很懒,什么也没写!
把上面你 URC 处理函数中 bfsz 参数类型定义成 int 或者 uint32_t 类型试试。 sscanf 函数中对入参类型的判断还是挺严格的,你这里解析用了 %d,后面带的参数就需要使用 4 个字节类型,否则会出现参数覆盖等问题。
zx595
2019-12-31
这家伙很懒,什么也没写!
>把上面你 URC 处理函数中 bfsz 参数类型定义成 int 或者 uint32_t 类型试试。 >sscanf 函数中对入参类型的判 ... --- 解决了,多谢!
撰写答案
登录
注册新账号
关注者
0
被浏览
1.4k
关于作者
zx595
这家伙很懒,什么也没写!
提问
9
回答
12
被采纳
0
关注TA
发私信
相关问题
1
rt_thread studio 啥时候能用呢
2
RT_Thread使用反馈帖子
3
RTT studio 下的 AT指令问题。
4
什么时候RTT Sdudio支持Ubuntu,Deepin和UOS操作系统
5
rt thread Studio 关于J-LINK下载问题
6
RT-Thread studio 调试设置问题
7
RTT-Studio 如何设置调试配置参数?
8
rt_thread studio 软件包配置
9
RT-Studio目前只能开发STM32的项目吗?
10
rtt studio 生成hex名字修改
推荐文章
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
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部