|
移远bc28模块,对接电信NB平台;
arm向模块发送AT指令,对于接收到的模块应答,每条应答都不大一样,而且接收到的应答条数也不同,造成接收的时候不大好处理。
具体举例如下:
正常通讯情况下:
arm->模块 : AT+NMGS=5,0102030405;(某数据上报指令)
模块->arm : ①: AT+NMGS=5,0102030405; (模块应答的指令回显)
②:OK; (模块的应答)
//应答②、③间会有1~3秒的延迟(电信服务器延迟)
③:+NNMI:4,AAAA0000 (服务器应答)
异常通讯情况下:
arm->模块 : AT+NMGS=5,010203040506;(某数据上报指令,指令错误)
模块->arm : ①: AT+NMGS=5,010203040506; (模块应答的指令回显)
②:ERROR; (模块的应答)
针对以上情况:接收方式如下:
1、采用read()+串口超时的方式;
设置该条指令应答的超时时间为5s(>3s);一次性接收到(①②③)所有的应答指令,然后统一处理;
但是这种方式指令接收时间太长,效率低;而且对于错误指令,同样需要等待5s。
2、采用getline()/fgets()函数一行一行接收;
每接收一行则写到buffer中,所有的接收完成之后,对buffer统一进行处理;
但是这种方式接收的时候并不知道需要接收多少行,即不知道需要调用多少次getline();
两种方式都存在问题,不知道有没有其他更好的办法? |
|