请大家谈谈串口通信的软件架构问题,请进!
我的单片机要与一个GPS模块通信,单片机发命令后,gps模块接收命令,命令正确则gps返回ok,错误则返回error,然后单片机才能继续发送数据,现在我有一个问题,就是当单片机发送了命令后是查询gps的返回好呢呢还是在中断服务中接收返回好? 不太明确你的问题:1.你是采用查询还是中断方式收发呢?
2.是单片机主动查询?还是指GPS主动汇报? 是这样的,单片机主动发起通信,一问一答,
单片机发送命令后查询回应的时候屏蔽中断,用查询接收gprs命令返回。
单片机发送数据的时候,用中断发送,中断接收。
楼上有何高见? 为什么要用查询接收呢?你依旧可以用中断接收.
我理解的过程是这样的
1.MCU中断发送查询命令;
2.中断接收方式等待(基实时间很短,可能就几十ms;
3.一旦GPS有回答,立即会引起接收中断,
4.本帧接收完,再做数据分析;
继续下一轮. 标题好大,问题却很愚昧,同学,请仔细看手册,我路过飘过 1)用中断方式比较现实,程序傻等会无谓地消耗资源,不可取,实在要用查询方式,也要有超时判别,否则程序死等和死机没差别了;
2)主循环里用超时判别,如果发出命令后,在约定的时间内,GPS模块没有任何信息反馈回来,可以运行相应的错误处理,比如重发,复位GPS模块等操作,可以自由发挥。 不清楚gps,如果gsm或gprs,程序处理不好,结构会很乱,因为一种情况是mcu主动发送,模块应答,此时采用查询可能程序连贯性更好,另一种情况模块主动发数据,mcu被动接受就只能用中断了,这种模块一般两种情况都会出现,如何处理,结构最好应该值得探讨吧 中断接收 几天前才被挤出一段类似的代码,找找吧 到底是gps还是gprs?楼主在两个回复都说的不同——粗心,搞清楚了再来问 标题好大,问题却很愚昧, 对于这类实时性要求不高的场合,查询跟中断的处理有差别么? 我的mcu是Atmega64,是GPRS模块,mcu通过发送AT指令来与GPRS模块通信,6楼的话最深入. 如果你的MCU是以处理AT命令为主的功能的,建议用查询方式吧
完全没必要用中断方式 用查询方式就可以,
我做过, 查询方式,正常运行 !!! 楼上留个qq号码,方便请教下。
mcu发AT指令给GPRS模块,根据GPRS模块的回应来决定是否可以传输数据,感觉是查询方式好点,
因为如果用中断接收返回的话,比好处理,毕竟GPRS模块可能返回“OK”,也可能返回“ERROR”,也可能返回“Conect to server”等这种没有明显的同步头,帧头的数据,此时MCU利用中断的状态机接收的话,就不好处理。
中断状态机适合有确定的帧头,帧位的串行通信。
我初步的打算是mcu发指令后查询2个字节,如果不是“OK”,那么就间隔一定时间重发3次,如果三次都失败则将GPRS模块复位。
热烈欢迎14楼的,留给脚印。鄙人QQ: 308777087 呵呵,我的qq 66303352
晚上有时候会在
互相学习。。。
不过查询方式的话,前提是MCU比较空闲,没有其他复杂的工作要做,我的就符合这种情况。
太忙了 就耽误MCU其他的工作了。。。 我初步的打算是mcu发指令后查询2个字节,如果不是“OK”,那么就间隔一定时间重发3次,如果三次都失败则将GPRS模块复位。
这样做也是可以的,只是接收不到OK就复位,不太好吧,那个GPRS模块这么烂么?检测时序对不对吧
页:
[1]