如何在 c 中创建我自己的睡眠或延迟函数

How to create my own sleep or delay function in c

我正在用 C 语言创建一个小内核,我需要一个函数,该函数将采用包含它应该等待的秒数的参数。

我试过使用 for 循环,但没用。

我不能使用 C 标准库,需要一种方法告诉内核等待(在 C 中)。我该怎么做?

循环:

int c = 1, d = 1;

for ( c = 1 ; c <= 32767 ; c++ )
    for ( d = 1 ; d <= 32767 ; d++ ){}

使用循环可行,但它所花费的时间将在很大程度上取决于您的 CPU 速度和任何编译器优化。当您知道目标硬件时(例如,为特定的微控制器编写),它很有用。

您应该在循环体中包含一个 NOP。还要检查您的编译器是否支持 #pragma 或特殊注释以禁用对特定代码块的优化。

检查您的编译器文档以了解 NOP 的定义。大多数编译器定义一个名为 _nop()_nop_()

的宏

您可以定义自己的使用:

#define Nop() {_asm nop _endasm}

或者如果您的编译器支持内联汇编,则写 asm("nop")