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