|
发表于 2012-4-3 14:01:53
|
显示全部楼层
1.书上这段开始的程序源于CVAVR系统自动产生代码,主要是用于介绍一种方法和思路:采用中断+缓冲来实现高效率的串行通信过程。CVAVR产生的这段代码,只是给出了基本的框架和思路,具体实现上给出了简单过程,对于接收部分处理的不够细致,楼上几位能够体会到非常不错。
2.在实际的应用中,不应该是照搬代码,而是吸收好的部分,改进不足的部分。我书中后面的实际应用例子中,都是采用的这种方式,但USART的接收部分采用更加合适的处理方法,请参考本书后面的实际应用例子。
通信是双方的合作的过程,对于接收方来讲,由于是被动一方,所以处理起来比较困难,也容易出问题。因为,你不知道发送方什么时间发送的,发送了几个,发送过程中是否出错,等等。因此接收方必须根据实际情况,采用符合实际需要的接收和判断方式的。
楼上两位提出的关于rx_counter的问题,并不是非常重要的。rx_count为7,或8表示队列已满都可以(当然实际上=8为满),更关键的是,你的上层是否能及时读走队列中的数据。实际上超过5就危险了,说明你的上层处理数据速度跟不上。
rx_counter = 0,此时不管什么情况下,只能认为数据为空,需要接收缓存区再增加一个数据,getchar()才能停止死循环,读走一个数据。但此时的数据是否可靠还是问题的。CVAVR的原代码,并没有考虑如此的细致。所以实际使用中需要改进。
|
|