实现延迟()没有时间()

时间:2013-07-30 01:52:57

标签: c time delay

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

3 个答案:

答案 0 :(得分:1)

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

void delay(int ms)
{
    int i;
    for (i = 0; i < ms*1000; i++)
    {
        asm(NOP);
    }
}

答案 1 :(得分:0)

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

答案 2 :(得分:0)

对于短的固定时间延迟,无操作循环将满足需要,但当然需要校准。

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 */
  }
}