C 在没有时间的情况下实现delay()

C 在没有时间的情况下实现delay(),c,time,delay,C,Time,Delay,我正在为嵌入式设备编写代码(没有操作系统,因此没有系统调用或任何东西),我需要延迟,但编译器没有提供time.h。我还有哪些其他选项?取决于设备。你能启用一个稳定的定时器中断吗?您可能只能忙着等待并等待计时器中断。这可能有多精确(以及它需要有多精确)尚不清楚。根据系统的时钟,您可以使用NOP(无操作)汇编程序指令实现延迟。您可以根据系统的MIPS计算一个NOP的时间,因此,例如,如果1NOP是1[us],则您可以实现如下操作: void delay(int ms) { int i;

我正在为嵌入式设备编写代码(没有操作系统,因此没有系统调用或任何东西),我需要延迟,但编译器没有提供
time.h
。我还有哪些其他选项?

取决于设备。你能启用一个稳定的定时器中断吗?您可能只能忙着等待并等待计时器中断。这可能有多精确(以及它需要有多精确)尚不清楚。

根据系统的时钟,您可以使用NOP(无操作)汇编程序指令实现延迟。您可以根据系统的MIPS计算一个NOP的时间,因此,例如,如果1
NOP
1[us]
,则您可以实现如下操作:

void delay(int ms)
{
    int i;
    for (i = 0; i < ms*1000; i++)
    {
        asm(NOP);
    }
}
无效延迟(整数毫秒)
{
int i;
对于(i=0;i
对于短的固定时间延迟,什么也不做的循环可以满足需要,但当然需要校准

void Delay_ms(unsigned d /* ms */) {
  while (d-- > 0) {
    unsigned i;
    i = 2800;  // Calibrate this value
    // Recommend that the flowing while loop's asm code is check for tightness.
    while (--i);
    /* add multiple _nop_() here should you want precise calibration */
  }
}

许多嵌入式设备包括一个定时器或时钟硬件设备,可以通过编程在一段时间后发送中断。您使用的是什么编译器?您可以使用
选择
?它有一个超时参数。@ugoren
select
是一个系统调用:(@chux)C51编译器。