在用Mc75模块,写数据的话根据datasheet已经比较完美了,因为mc75的urc会有^sisw=0,1来提示,而对读数据,现在不好把握,^sisr=0,1这个urc它是有条件的自动跳出来,我目前的方法是,不管这个urc,而是每次去读数据时用at^sisr=0,0去查询有多少个字节的数据,再进行读取,在整个读的过程中,将其分为几个状态, enum data_state
{
QUERY_APPLYED,//查询读缓冲区有多少字节,发送了at^sisr=0,0后
QUERYED_NUM,//查询到缓冲区有多少个字节,发送了at^sisr=0,0后收到sisr:0,num
CAN_READ_APPLY,//可以读数据,表示发送at^sisr=0,0后收到了OK
READ_APPLYED,//发送了读命令,at^sisr=0,10(数目根据刚才查询到的数目)
CAN_READ,//可以进行读数据了,发送读请求后收到 ^sisr:0,5收到此就可以了
READ_DONE //读取数据完成
};
这样根据这种状态机思想发送读后不必让cpu在那死等着模块返回,但是问题又出现了,这个^sisr=0,1它是不自觉的跳出来,而查询有多少个字节没读的返回也是^sisr=0,num,假如这个num=1,照样两者容易弄混,而且这个^sisr=0,1是不自觉的跳出来,假如我在发送at^sisr=0,0,首先收到的是^sisr=0,1,这时由于状态是QUERY_APPLYED,我则将这个当成是返回值,而不是urc,这样整个数据就乱了,
请高手指点一下 |