如何在c中创建自己的睡眠或延迟功能

时间:2016-09-25 05:27:12

标签: c operating-system timedelay

我在C中创建一个小内核,我需要一个函数来获取一个参数,该参数包含它应该等待的秒数。

我尝试过使用for循环,但它们没有用。

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

循环:

int c = 1, d = 1;

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

1 个答案:

答案 0 :(得分:2)

使用循环有效,但所花费的时间将高度依赖于CPU的速度和任何编译器优化。当您了解目标硬件(例如,为特定微控制器写入)时,它非常有用。

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

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

的宏

您可以使用以下方式定义自己的:

#define Nop() {_asm nop _endasm}

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