2013-07-30 55 views
0

我正在为嵌入式设备编写代码(没有操作系统,所以没有系统调用或任何东西),我需要有一个延迟,但编译器不提供time.h。我还有什么其他选择?实现延迟()没有时间()

+0

许多嵌入式设备包括一个定时器或时钟硬件设备,它可以被编程为在一段时间后发送中断。 – caf

+0

你使用什么编译器? – chux

+0

你可以使用'select'吗?它有一个超时参数。 – ugoren

回答

0

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

1

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

void delay(int ms) 
{ 
    int i; 
    for (i = 0; i < ms*1000; i++) 
    { 
     asm(NOP); 
    } 
} 
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 */ 
    } 
}