ALSA driver--pcm_read和pcm_write的阻塞问题

一张图先看下pcm_write的调用流程

做的工作一是将数据送到dma 中,另外就是更新alsa的缓冲区指针

在snd_pcm_lib_write1接口中看到这样一个函数wait_for_avail

wait_for_avail函数将会将当前写或读数据的任务通过add_wait_queue加入一个队列中,等待被唤醒,如果有没有收到唤醒,schedule_timeout将会挂起直到设置的timeout时间后继续执行

而每次读、写在会又platform驱动主动调用snd_pcm_period_elapsed去唤醒

而这个调用通常是在一个中断处理中调用的,某些情况下中断不在工作,指针得不到更新,snd_pcm_lib_write1或snd_pcm_lib_read1将会被挂起,直到设置的10s timeout之后才会得到执行

  • 2
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值