linux 内核 纳秒延时ndelay


1、内核的ndelay是由udelay实现的,精度是1us

    无法实现纳秒级延时,要想实现有2个方法

2、第一种调用系统的底层延时函数,计算延时的clock

cpu_relax();  是cpu忙等待
static void __timer_delay(unsigned long cycles)
{
	cycles_t start = get_cycles();

	while ((get_cycles() - start) < cycles)
		cpu_relax();
}

static void __timer_const_udelay(unsigned long xloops)
{
	unsigned long long loops = xloops;
	loops *= arm_delay_ops.ticks_per_jiffy;
	__timer_delay(loops >> UDELAY_SHIFT);
}

3、time和jiffs比较

可以用下面的方法实现忙等待:
while(time_before(jiffies, j1))
    cpu_relax()
其中,j1是要延迟中止时的jiffies值
cpu_relax()不推荐使用
让出处理器
while(time_before(jiffies, j2))
    schedule()
但是如果当前cpu只有一个进程,那么swapper也就是idle进程运行的机会也是0.

  

  

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM