Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
RT-Thread Studio
RTT-Studio编译问题--sscanf函数
发布于 2019-12-31 10:48:37 浏览:1421
订阅该版
* 本帖最后由 .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
GD32F450 片内 flash驱动适配
2
STM32H7R7运行CherryUSB
3
RT-Smart首次线下培训,锁定2024 RT-Thread开发者大会!
4
使用RC522软件包驱动FM1722
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
UART
WIZnet_W5500
ota在线升级
freemodbus
PWM
flash
cubemx
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
flashDB
GD32
socket
中断
编译报错
Debug
SFUD
rt_mq_消息队列_msg_queue
msh
keil_MDK
ulog
C++_cpp
MicroPython
本月问答贡献
a1012112796
10
个答案
1
次被采纳
踩姑娘的小蘑菇
4
个答案
1
次被采纳
红枫
4
个答案
1
次被采纳
张世争
4
个答案
1
次被采纳
Ryan_CW
4
个答案
1
次被采纳
本月文章贡献
catcatbing
3
篇文章
5
次点赞
YZRD
2
篇文章
5
次点赞
qq1078249029
2
篇文章
2
次点赞
xnosky
2
篇文章
1
次点赞
Woshizhapuren
1
篇文章
5
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部