c - 如何用 C 创建我自己的延迟函数

标签 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 整秒,对于忙等待来说也太长了许多数量级。您肯定希望 HLT CPU 以节省电量,并在中断处理程序中检测计时器何时到期。

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

不过这确实太可怕了。别忙着等。 x86 CPU 需要 sleep ,以便在有事情要做时可以全速运行,而不仅仅是以其持续的最大时钟速度运行。

关于c - 如何用 C 创建我自己的延迟函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39692418/

相关文章:

c - 如何在 C 中按下按键退出 time_delay 循环?

android - 如何制作Android程序 'wait'

javascript - 执行后延迟 JavaScript

c - Assembly 中的外部函数声明产生警告

c - 无法链接到 BFD

c - 为什么 itoa 被宣布为不安全?

c - 本地指针存储在内存中的什么位置?

C: GTK+ 3.0 (3.20) - 从 GNU/Linux (Arch Linux) 到 Windows 的交叉编译

linux - 通过用执行相同工作的另一条指令替换一条指令而导致的段错误。为什么?

unit-testing - 哪些单元测试框架可用于 x86 汇编器?