您的位置:首页 > 运维架构 > Linux

linux多线程驱动中调用udelay()对系统的影响

2012-07-16 17:20 176 查看
以前没考虑过这个问题,而且之前可能运气比较好,虽然用了udelay但也没出什么奇怪的问题,今天在
CSDN上看到了liukun321咕唧咕唧的帖子,觉得很受用,再此做简要的记录和分析:

驱动建立线程的是内核线程 跟普通进程一样都是可以调度的,然而udelay是靠死循环来实现的延迟,当你的内核线程没有占用cpu时,很可能超过1ms都不会执行你的程序,100us是小于进程可能的最小时间片的 (HZ=

1000时,1ms才产生一个时钟中断,假设时间片为1个jiffes,1ms才可能发生进程切换,轮到你的内核线程),所以这是靠不住的,会受到其他阻塞进程的影响。对于时序要求比较严格的硬件,产生的问题就是硬件无法工作。

所以我们需要使用内核高精度定时器 ,一般的内核定时器都不能达到us级,这种时间级别的操作,应该都有装用的硬件控制器来做。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: