+ -
当前位置:首页 → 问答吧 → 紧急求助各路大仙:关于linux下语音编码丢数据的问题. 一直在等待: (

紧急求助各路大仙:关于linux下语音编码丢数据的问题. 一直在等待: (

时间:2010-09-26

来源:互联网

在下新手,先说下我遇到的问题:

      我现在用ARM的串口和GSM模块通讯,还有一个编码芯片, 程序里是这样做的,  串口通讯为一个线程,电话处理为一个线程。当检测到有电话时,接通并要求用户用手机输入密码,然后再电话线程里不停的检测用户输入的按键。
      编码芯片对GSM模块传过来的按键信号进行编码,并传给ARM。

      遇到的问题是:比如我用手机输个12345,可检测出来的是1235,或者1345,或者135不等,老是要丢数据,以前用UCOS这种情况非常少,应该属于正常现象,现在用LINUX基本每次都出现,网上查了下资料,我猜测是因为LINUX时间片的问题,他们说时间片为10ms,而,编码数据在IO口上的存在时间也很短,很可能我按某个按键的时候,电话线程没有得到CPU,不能运行,所以丢了数据,不知道是不是这个问题,读取编码芯片传来的数据的那个驱动是自己查资料写的,就是直接返回几个I/O口的状态,其中有个IO是数据准备好信号,用它来判断有没有按键,驱动没有用中断,也不会等待,是立马返回。
      
      我想问的是:
      1:产生这样的原因诗什么?是不是因为上面所说的时间片的问题?还是驱动程序不合理?
      2:有什么办法能解决上面的问题??(最好可以不改驱动,因为不会写


      第一次写LINUX的程序,所以问出这种SB问题,各路大仙大侠不要笑我啊,急切希望得到大家的帮助,小弟在此先谢过了

作者: pxfslcf   发布时间: 2010-09-26



QUOTE:
编码数据在IO口上的存在时间也很短,很可能我按某个按键的时候,电话线程没有得到CPU,不能运行,所以丢了数据,不知道是不是这个问题,读取编码芯片传来的数据的那个驱动是自己查资料写的,就是直接返回几个I/O口的状态,其中有个IO是数据准备好信号,用它来判断有没有按键,驱动没有用中断,也不会等待,是立马返回。


驱动是你写的吗?
内核态读取你的输入数据采用什么方式,中断 or 轮询?

作者: Godbach   发布时间: 2010-09-26

没有中断也没有轮询
就像这样的:
read()
{
    return gpg8|gpg9|gpg10;
}

作者: pxfslcf   发布时间: 2010-09-26

应用中这样用的   
   if(read() &0x1)//认为有按键

   else//没有按键

作者: pxfslcf   发布时间: 2010-09-26

按键最好实时响应。

写一个键盘的中断驱动程式。可以解决这个问题。

作者: linyunxian   发布时间: 2010-09-26

哦,哎,就知道得在驱动上捣腾,不会啊,大侠们,怎么写这个驱动啊,晕死了

作者: pxfslcf   发布时间: 2010-09-26