当前位置:  技术问答>linux和unix

tty_insert_flip_string以及read BUG

    来源: 互联网  发布时间:2016-05-18

    本文导语:  9260的板子,从串口DMA读取80个字节,然后通过tty驱动的tty_insert_flip_string,把数据插入到tty_buffer。 然后在用户层通过read操作读取数据。大多时候能成功读取80个字节。 但是有的时候出现read读出的数据少了2个字节,而...

9260的板子,从串口DMA读取80个字节,然后通过tty驱动的tty_insert_flip_string,把数据插入到tty_buffer。
然后在用户层通过read操作读取数据。大多时候能成功读取80个字节。
但是有的时候出现read读出的数据少了2个字节,而且位置固定。假如把80个字节分成前后相等的2段,那么丢失的字节一般是在第15个字节处

read应该是读出tty_buffer这个环形缓冲区,但是怎么丢失的数据呢?
请问这是否是个BUG?什么地方干扰了正常的读入?
int tty_insert_flip_string(struct tty_struct *tty, const unsigned char *chars,
size_t size)
{
int copied = 0;
do {
int space = tty_buffer_request_room(tty, size - copied);
struct tty_buffer *tb = tty->buf.tail;
/* If there is no space then tb may be NULL */
if(unlikely(space == 0))
break;
memcpy(tb->char_buf_ptr + tb->used, chars, space);
memset(tb->flag_buf_ptr + tb->used, TTY_NORMAL, space);
tb->used += space;
copied += space;
chars += space;
/* There is a small chance that we need to split the data over
   several buffers. If this is the case we must loop */
} while (unlikely(size > copied));
return copied;

|
有可能是你的高层设置的时候的问题,比如是否回显,是否规范模式,是否软件流控

    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3