标题: 怎么跳出这个C语言WHILE循环? [打印本页]

作者: 叶知叶    时间: 2022-3-28 14:36
标题: 怎么跳出这个C语言WHILE循环?
while(strx==NULL)
    {
        Clear_Buffer();
        printf("AT\r\n");
        delay_ms(300);
        strx=strstr((const char*)RxBuffer,(const char*)"OK");//返回OK
    }
这个一直接收不到正确信息,就一直在这里怎么判断是哪里出错了?

作者: Y_G_G    时间: 2022-3-28 15:04
可以用break跳出
也可以在判断条件那加条件,比如判断次数或者判断时间
作者: zhxiufan    时间: 2022-3-28 15:08
加一个计数变量,比如如果10次读不到正确数据就强退。
作者: 叶知叶    时间: 2022-3-28 15:31
Y_G_G 发表于 2022-3-28 15:04
可以用break跳出
也可以在判断条件那加条件,比如判断次数或者判断时间

大佬,我用的是STM32芯片bc26模块,关于用AT指令初始化设备while(strx==NULL)这种的都是这样,我想知道怎么判断是哪里出错了
作者: freecn    时间: 2022-3-28 16:17
一点拙见
1:strx是否定义char strx*
2:返回的"OK"是否区分大小写
3:调试监视RxBuffer是否有数据
4:能否确认连接是否正常已连接上


作者: Y_G_G    时间: 2022-3-28 16:18
叶知叶 发表于 2022-3-28 15:31
大佬,我用的是STM32芯片bc26模块,关于用AT指令初始化设备while(strx==NULL)这种的都是这样,我想知道怎 ...

循环里面不是有300mS的延时吗?
串口初始化10次或者其它次数,不成功就结束操作了,并作出错误的对应操作不就行了
要不然呢?总不能初始化不成功就一直卡在这吧
作者: datouyuan    时间: 2022-3-29 09:02
叶知叶 发表于 2022-3-28 15:31
大佬,我用的是STM32芯片bc26模块,关于用AT指令初始化设备while(strx==NULL)这种的都是这样,我想知道怎 ...

验证模块和电脑通讯功能:
      用串口助手发送"AT"给bc26模块,bc26模块应该应答"OK"字符串。
验证mcu和电脑通讯功能:
      RxBuffer[]中有字符串"OK"就能跳出。
      假如RxBuffer是串口的接收缓存,用串口助手发送"OK"来模拟bc26模块的应答指令。

作者: 搬运工2014    时间: 2022-3-29 09:22
break;
作者: qqqqaq12    时间: 2022-3-29 13:01
goto?可以试试
作者: freecn    时间: 2022-3-29 13:54
1.首先排除下连接是否没有问题 ,更换排线。
2.确认串口助手软件的兼容问题,是否可以正常通讯,不能的话使用其他串口助手或者其他版本。

作者: 叶知叶    时间: 2022-3-29 15:08
谢谢各位大佬,目前已解决,是因为串口2没设置好导致
作者: caowei123    时间: 2022-3-29 16:35
接收不到消息就对了呀,没有消息是一直在循环里面跳不出来
作者: Y_G_G    时间: 2022-3-29 22:36
叶知叶 发表于 2022-3-29 15:08
谢谢各位大佬,目前已解决,是因为串口2没设置好导致

这不是什么串口设置的问题
个人认为,除了主函数的while,程序中其它的都要一个跳出死循环的机制,要么是检测时间,要么是检测次数,或者是看门狗




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1