我在内核中启用了两个线程; 然后两个线程都采用无限循环如下: while(1) { udelay(100); printk("...........\n"); } 发现CUP一直被占用,从来没有机会执行其它东西. 我想问一下,是不是在内核中延时,都不会释放CPU,如用udelay,mdelay,msleep等
by zlinux123456 - 内核源码 - 2007-09-04 22:57:42 阅读(6585) 回复(1)
用三个函数实现了比较精确的udelay()功能: 1 calibrate_delay(x)函数,该函数位于base/timer.c中,采用的是和arch无关的通用算法。不同的plat在执行time_init时调用该函数,用来计算每个tick udelay函数所需循环次数loops_perjiffies和每微妙的所需的循环次数loops_perusec,这两个变量是base/timer.c的全局静态变量。 2 udelay(x)函数,该函数位于base/timer.c中,也和arch无关,只是封装了不同的arch下实际执行循环的__udel...
内核代码(尤其是驱动程序)除了使用定时器或下半部机制以外还需要其他方法来推迟执行任务。这种推迟通常发生在等待硬件完成某些工作时,而且等待的时间往往非常短。有许多延迟方法(所有的延迟方法都应该在进城上下文中使用): o. 忙等待:仅仅在想要延迟的时间是节拍的整数倍或者精确率要求不高时才可以使用。 o. 短延迟:比时钟节拍还短的延迟,并且要求延迟时间很精确。 void udelay(unsigned long usecs); //利用...
我想用udelay 函数,但include
环境:Arm CoreA9, Exynos 4412,FriendlyArm Tiny4412板子 需求:用软件模拟硬件发送电平信号。板子bps为115200,要模拟9600的bps。 问题:1.用for循环模拟delay_104us,有时是延迟103us,有时延迟20us(或10多us)。每次调用发送,延时稳定,比如一直是103us;但隔次调用时,时间就变成20us。2.用udelay(104),也不准确,程序一改,延迟就变了。3.发送和接收,用for循环延迟,循环次数也不同。接收时 for的次数 是 接收时 for的...
怎么才能在程序中调用mdelay/udelay/ndelay函数? 还应该include哪些head文件?
// main.c
#include
kernel hd(0,5)/solaris/multiboot kernel/unix -B install_media=dsk module hd(0,5)/solaris/x86.miniroot boot 应该是这样 kernel (hd0,5)/solaris/multiboot kernel/unix -B install_media=dsk module (hd0,5)/solaris/x86.miniroot boot 如果用的是grub for dos的只支持8.3的文件名变成这样的 kernel (hd0,5)/solaris/multib~1 kernel/unix -B install_media=dsk module (hd0,5)/solaris/x86~1.min boot 本文来自ChinaUnix博...