如何在C中创建自己的延迟函数

时间:2016-09-25 22:28:22

标签: c assembly timedelay

我正在开发操作系统,无法访问标准库。因此,我无法访问time.h

我使用以下功能创建时间延迟。

void delay() {
    int c = 1 , d = 1 ;

    for ( c = 1; c <= 100000; c++) {
        for ( d = 1; d <= 100000; d ++) {
            asm("nop");
        }
    }
}

这等了大约二十秒;但是,我喜欢这个函数接受一个整数并等待那么多秒。为了实现这一目标,我需要做些什么?

1 个答案:

答案 0 :(得分:1)

即使整整一秒也要等很多数量级才能忙碌等待。您肯定希望HLT CPU以节省电量,并检测计时器何时在中断处理程序中过期。

但如果真的想要忙等待,便携式(最近的x86 CPU)使用方式可能是使用CPUID来找出RDTSC滴答的速度,然后循环PAUSE / RDTSC直到你已达到终点时间戳。

但是,这真的太可怕了。不要忙 - 等。 x86 CPU需要休眠,以便在有事情发生时可以全速运行,而不仅仅是在持续的最大时钟速度下运行。