- 论坛徽章:
- 7
|
回复 109# ljwilliam
在硬中断hander中读FIFO到内存的可能性比较大.
所以可以认为延时或打断只与硬中断hander有关.所以只考虑硬中断
在注册硬中断有个标志位可以标志这个hander执行时时候是开中断的.前面帖子里已经给出.
如果是开的则这个中断hander能被别的中断打断,前面已经提到提高UART优先处理的 办法:别的尽量允许打断.而UART不允许打断.
>>何况去掉的模块是必须使用的,也就是说除非找到这和被去掉的模块和串口驱动的冲突原因,否则即使加了流控也是出现类似overrun的丢失数据的问题。
1.我的意思是即使找到这个冲突原因也无法解决.所以这个不是最终办法.只能减小概率. 因为你linux不是实时系统,就无法保证uart中断及时运行.
2.加了流控是否会overrun,取决于:流控是否正常工作,以及上面帖子提到的,"可能存在的"数据保留超时.
>>就是8250的寄存器提示有overrun的时候,我也同时去查看了FIFO寄存的状态,发现FIFO未必是满的
上面提到的数据保留超时是一个"可能的"原因.即发送中断-FIFO满-等待读-超时丢弃所有的字节-重新接受数据.
如此一来overrun和FIFO半满同时发生了.
>>我发现,这里FIFO一直处在一个超过门限(8字节)的状态,也经常会使得FIFO满(但是未必会导致overrun)。
这个就应该是以前帖子里提到的.你8字节门限,中断中去读状态自然FIFO有大于8的可能. 满而不overrun很正常事情-在有流控的情况下 |
|