迅维网

标题: 关于串口中断实时接收和发送问题 [打印本页]

作者: バ幸福De右岸    时间: 2016-10-30 13:38
标题: 关于串口中断实时接收和发送问题

串口中断实时接收:我的理解是设置一个缓存,但是这个缓存一定要大于你发送字节的最大长度,只要SBUF中有数据就往缓存里面装,因为中断的进入是不确定的,只要有数据就进中断,如果缓存中的数据满了就从头再装,(这里可以取余),那么会不会从头再装的数据会不会把前面的数据给覆盖掉呢,有这个想法很好,至少你考虑了接收的过程。再看看我们设的缓存的长度比发送字符串的最大长度还要大,即使接收的是最长的数据串,那么缓存中还有一部分内存可以装数据,这样下一包数据过来就可以装到剩下的内存里面了,如果这一组数据还没有装完呢,接着从头装把前面的数据覆盖掉,此时前面的数据我们已经提取到了或者是已经是处理完了,所以不必担心前面被覆盖的数据。那么话又说回来,怎么提取接收到的数据呢,这个嘛就是缓存里面只要有数据接收就去提取,事先最好判断一下有没有需要提取的数据,这里大概说一下思路,设置一个提取结束指针和中断中的接收指针进行对比,如果这个提取结束指针小于中断接收指针则说明接收缓存里面有数据,就去提取。那么怎么把数据拿出来呢,根据发送结束指针和中断接收指针计算缓存中接收数据的长度,最大长度就是缓存长度。长度计算出来了即开始取数据啦,取出来就可用啦。。。。
串口中断发送:
了解了串口接收的话,那么相信你很容易了解发送,其实发送和接收正好是互逆的过程。接收是把SBUF中的数据取出来,发送数把SBUF中的数发出去,但是首先要把数据写进去才能发送啊!!这个写的过程就是接收的逆过程。。。有错误的地方希望大家积极指出错误,自己在学过程中推敲难免有错,还需要和大家共同学习,共同成长。


作者: 814043451    时间: 2016-12-8 19:10
厉害 。但是我想问下:  1.“因为中断的进入是不确定的,只要有数据就进中断”,这就相当于一个框,只要有错误,就扔进框中是吗?                                      2.“如果缓存中的数据满了就从头再装”,那不是以前的数据就没用了??
                                      3.“那么话又说回来,怎么提取接收到的数据呢,这个嘛就是缓存里面只要有数据接收就去提取 ”  如果已经装满了呢  ??

                                     4.“那么怎么把数据拿出来呢,根据发送结束指针和中断接收指针计算缓存中接收数据的长度,最大长度就是缓存长度。长度计算出来了即开始取数据啦,取出来就可用啦。” 拿出来的数据为什么不是:总数据    减去  开始数据到中断前的那个模块





欢迎光临 迅维网 (https://www.chinafix.com/) Powered by Discuz! X3.4