使用中断方式进行串口接收时,读取串口缓冲区的语句应尽可能靠近串口接收完成中断服务函数的入口处。当数据被连续接收时,函数的总执行时间不能大于一个帧的接收时间,考虑中断返回后主程序的运行等因素,这个时间还应留有充分的余量!
串口的第一级缓冲,用于组装逐位传输的帧数据。数据从RXD端逐位输入。串口第二级缓冲,用于程序访问。当接收到完整的帧结构后,数据被搬移到第二级缓冲等待程序取出。与此同时,串口接收完成中断被申请。
串口模块的缓冲区只用1Byte,如果接收到的数据没有被及时取出,就可能被后面的数据冲掉。然而,繁忙的主控程序在此时可能刚好“无暇顾及”接收到的数据包,这就必须在串口模块和主控程序之间建立一个缓冲。