中级会员
- 积分
- 279
- 金钱
- 279
- 注册时间
- 2021-2-5
- 在线时间
- 133 小时
|
现象:在我们的一个项目里面,使用sscanf函数解析一个字符串,大概反复解析100次会遇到一次解析失败
疑惑:其实之前从来没有想过这个解析函数会解析失败,因为这里等于就是1+1一定会等于2一样不会出错,我在解析之前打印了字符串,确实不是空字符串
分析:一开始我以为是因为我们加了freertos,pendsv的快速中断会影响这里的解析,所以我在解析的前后加上了临界区,但还是出错,于是就排除了中断带来的问题,不是空字符串,也不是中断的影响,那就再去怀疑内存的问题,这里解析失败之后,代码还是正常运行所以我又不好再去怀疑内存的问题,最后再去怀疑解析格式的问题,代码如下:
void execEquipCmd(char *btBuff)
{
uint32_t cmdCode = 0;
uint32_t i = 0;
char *p = btBuff;
/* 定位到第三个引号后面(指令值) */
for (i = 0; i < 3; i++)
p = strchr(p, '\"') + 1;
/* BDE协议 */
p = strchr(p,';') + 1;
/* 解析指令码 */
sscanf(p, "%d;", &cmdCode);
.................................................
这里就是把字符串中的一个数值解析到cmdcode中,格式用%u或%d都会遇到,实在想不到到底哪里的问题了
|
|