驱动多线程中频繁使用mdelay会对系统造成问题吗?

donny0923 2012-01-14 07:59:57
驱动中开一个线程一直在运转,然后每隔100us(使用udelay延时),就操作一次硬件,那么这个100us会受到应用层阻塞线程或者 其他阻塞的影响么?
...全文
212 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
coding码场 2012-01-16
  • 打赏
  • 举报
回复
楼上两位都说得很不错!顶一下!
dongjiawei316 2012-01-15
  • 打赏
  • 举报
回复
udelay是忙等待,会一直占着你的CPU的,如果你循环每操作一次硬件就udelay一下,那么你其他应用程序几乎都不能跑了。。。。
建议msleep,虽然是ms级的。但是他不会一直占着你的CPU
deep_pro 2012-01-14
  • 打赏
  • 举报
回复
驱动开的是内核线程 跟普通进程一样是可以调度的
udelay是靠死循环实现的延迟,当你的内核线程没有占用cpu时,很可能超过1ms都不会执行你的程序
100us是小于进程可能的最小时间片的 (HZ=1000时,1ms才产生一个时钟中断,假设时间片为1个jiffes,1ms才可能发生进程切换,轮到你的内核线程)
所以这是靠不住的,会受到其他阻塞进程的影响


你需要使用内核高精度定时器 ,一般的内核定时器都不能达到us级
这种时间级别的操作,应该都有装用的硬件控制器来做

4,436

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
  • 内核源代码研究区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧