2013-07-30 91 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 */ 
    } 
}