A angelsoft Unregistered / Unconfirmed GUEST, unregistred user! 2001-05-16 #1 我用SPCOM实现PC->单片机通信,请问在单片机里的超时和延时是什么概念? 编程时要注意什么问题如何实现? 恳请PC和单片机通信的高手赐教!
W wys205 Unregistered / Unconfirmed GUEST, unregistred user! 2001-05-16 #2 超时,一般为TIMEOUT,表示该操作超时,将放弃 延时,一般为DELAY,表示该操作未完成,将等待一段时间后再执行
A angelsoft Unregistered / Unconfirmed GUEST, unregistred user! 2001-05-17 #3 那么超时的时间是多少,怎么设,也就是超过多少时间认为超时?延时的时间又是多少?
I iie Unregistered / Unconfirmed GUEST, unregistred user! 2001-05-18 #4 假如您定义了一个通信协议,比如问:您吃了吗?答:吃了。 考虑通信通道的故障,应答一方可能只听到:您吃,后面的话没听到, 而接下去问方又可能还问其他问题,为避免前后混淆,应答一方设定一个超时时间, 即规定时间内收不到完整问题的时候,就放弃所有接收,重新监听。 另一方面,问方也要采取相应办法协调,如一个问题不能按时得到回复时, 就等一个延时时间继续提问……
假如您定义了一个通信协议,比如问:您吃了吗?答:吃了。 考虑通信通道的故障,应答一方可能只听到:您吃,后面的话没听到, 而接下去问方又可能还问其他问题,为避免前后混淆,应答一方设定一个超时时间, 即规定时间内收不到完整问题的时候,就放弃所有接收,重新监听。 另一方面,问方也要采取相应办法协调,如一个问题不能按时得到回复时, 就等一个延时时间继续提问……
A angelsoft Unregistered / Unconfirmed GUEST, unregistred user! 2001-05-21 #5 to iie: 你这个比喻很恰当,不过具体到程序里应该怎么做呢,我指用SPCOM如何做?
I iie Unregistered / Unconfirmed GUEST, unregistred user! 2001-05-21 #6 spcom我没用过,其实应该很好做呵,简单的 const delay1=1000; delay2=4000; t0 := gettickcount; send(request); while not rece(answer) and (gettickcount < t0 + delay2) do; if not received then begin t0 := gettickcount; while gettickcount < t0 + delay2 do resend; end;
spcom我没用过,其实应该很好做呵,简单的 const delay1=1000; delay2=4000; t0 := gettickcount; send(request); while not rece(answer) and (gettickcount < t0 + delay2) do; if not received then begin t0 := gettickcount; while gettickcount < t0 + delay2 do resend; end;
A angelsoft Unregistered / Unconfirmed GUEST, unregistred user! 2001-06-05 #10 To iie: 非常感谢你的回答,我现在想知道的是在SPCOM中应如何做到你所说的
I iie Unregistered / Unconfirmed GUEST, unregistred user! 2001-06-05 #11 spcomm我从来没用过,所以不能解答你的问题,推荐你用async 这个控件可以自己控制超时,延时的编程很简单,自己解决就行
W wabb Unregistered / Unconfirmed GUEST, unregistred user! 2001-06-18 #12 超时就是延时过了头或者是干脆没有应答 延时就是一方已经执行过了互通数据的指令(可能是PC或单片机)而一方却还在 执行互通数据的指令 一般解决的方法是:(指的是我的笨办法) 让单片机连续执行互通数据的指令(中间可以隔一些时间),PC同步接收, 查看收到的数据是否每次都收齐了, if 齐了 then ... else .... end; 个人意见 仅供参考
超时就是延时过了头或者是干脆没有应答 延时就是一方已经执行过了互通数据的指令(可能是PC或单片机)而一方却还在 执行互通数据的指令 一般解决的方法是:(指的是我的笨办法) 让单片机连续执行互通数据的指令(中间可以隔一些时间),PC同步接收, 查看收到的数据是否每次都收齐了, if 齐了 then ... else .... end; 个人意见 仅供参考