对GSM模块而言,设置设置AT+CNMI=2,2,0,0,0;即有新消息来主动提示,而且是在串口数据线处于空闲的状态中。
系统用一个串口来实现。发送和接收全部为中断方式处理数据。
在串口通信中做了超时处理,等于发送完AT指令后,启动100ms的超时应答,如果在100ms内没有得到正确的应答消息。则把串口接收数据长度变量recv_count清0。
现在矛盾出现了,如果我发送消息,有了应答,但应答不是OK的,也不一定是ERROR,特别是信息发送成功或者错误。如果GSM模块在100ms内已经回了应答,但不是OK应答——我认为GSM处理还没有完成,我还一直在等100ms超时应答,这时候串口数据线空闲了,GSM有新消息来提示我——在这100ms内。我因为在等上一个AT命令的ACK,导致在100ms应答超时内,把接收缓存里的数据区全部清除掉。新消息提示我被清除了。 |