如何在 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")
。
我正在用 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")
。